Quellcode durchsuchen

We weren't cannibilizing circuits correctly for
CIRCUIT_PURPOSE_C_ESTABLISH_REND and CIRCUIT_PURPOSE_S_ESTABLISH_INTRO
so we were being forced to build those from scratch.
This should save us a bit of time. Also fixes bug 173.


svn:r4763

Roger Dingledine vor 19 Jahren
Ursprung
Commit
aab541c852
2 geänderte Dateien mit 5 neuen und 5 gelöschten Zeilen
  1. 3 5
      src/or/circuituse.c
  2. 2 0
      src/or/rendservice.c

+ 3 - 5
src/or/circuituse.c

@@ -751,13 +751,8 @@ circuit_launch_by_extend_info(uint8_t purpose, extend_info_t *info,
       circ->timestamp_created = time(NULL);
       switch (purpose) {
         case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
-          /* it's ready right now */
-          /* XXX should we call control_event_circuit_status() here? */
-          rend_client_rendcirc_has_opened(circ);
-          break;
         case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
           /* it's ready right now */
-          rend_service_intro_has_opened(circ);
           break;
         case CIRCUIT_PURPOSE_C_INTRODUCING:
         case CIRCUIT_PURPOSE_S_CONNECT_REND:
@@ -942,6 +937,9 @@ circuit_get_open_circ_or_launch(connection_t *conn,
       if (circ) {
         /* write the service_id into circ */
         strlcpy(circ->rend_query, conn->rend_query, sizeof(circ->rend_query));
+        if (circ->purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND &&
+            circ->state == CIRCUIT_STATE_OPEN)
+          rend_client_rendcirc_has_opened(circ);
       }
     }
   }

+ 2 - 0
src/or/rendservice.c

@@ -655,6 +655,8 @@ rend_service_launch_establish_intro(rend_service_t *service, const char *nicknam
           sizeof(launched->rend_query));
   memcpy(launched->rend_pk_digest, service->pk_digest, DIGEST_LEN);
 
+  if (launched->state == CIRCUIT_STATE_OPEN)
+    rend_service_intro_has_opened(launched);
   return 0;
 }