Bladeren bron

r9017@totoro: nickm | 2006-10-13 01:27:33 -0400
Second patch to work on circuit close reasons from Mike Perry. Disabled partially; see comment. Whitespace cleaned up.


svn:r8699

Nick Mathewson 17 jaren geleden
bovenliggende
commit
78043b8478
3 gewijzigde bestanden met toevoegingen van 16 en 3 verwijderingen
  1. 13 0
      src/or/command.c
  2. 2 2
      src/or/control.c
  3. 1 1
      src/or/relay.c

+ 13 - 0
src/or/command.c

@@ -378,6 +378,19 @@ command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
   } else { /* the destroy came from ahead */
     circuit_set_n_circid_orconn(circ, 0, NULL);
     if (CIRCUIT_IS_ORIGIN(circ)) {
+      /* Prevent arbitrary destroys from going unnoticed by controller */
+      /* XXXX Not quite right; what we want is to tell the controller the
+       *      exact reason that we were asked to close, but tell it that we
+       *      closed because we were asked. Anything else is not accurate.
+       *      OR_CONN_CLOSED is certainly wrong, since a destroy doesn't mean
+       *      that the underlying OR connection got closed. -NM */
+#if 0
+      if (reason == END_CIRC_AT_ORIGIN ||
+          reason == END_CIRC_REASON_NONE ||
+          reason == END_CIRC_REASON_REQUESTED) {
+        reason = END_CIRC_REASON_OR_CONN_CLOSED;
+      }
+#endif
       circuit_mark_for_close(circ, reason);
     } else {
       char payload[1];

+ 2 - 2
src/or/control.c

@@ -2370,7 +2370,7 @@ handle_control_closecircuit(control_connection_t *conn, uint32_t len,
   }
 
   if (!safe || !circ->p_streams) {
-    circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_NONE);
+    circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_REQUESTED);
   }
 
   send_control_done(conn);
@@ -2990,7 +2990,7 @@ orconn_target_get_name(int long_names,
       name[0] = '$';
       base16_encode(name+1, len-1, conn->identity_digest,
                     DIGEST_LEN);
-    } else { 
+    } else {
      tor_snprintf(name, len, "%s:%d",
                    conn->_base.address, conn->_base.port);
     }

+ 1 - 1
src/or/relay.c

@@ -158,7 +158,7 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ, int cell_direction)
 
   if (relay_crypt(circ, cell, cell_direction, &layer_hint, &recognized) < 0) {
     log_warn(LD_BUG,"relay crypt failed. Dropping connection.");
-    return -1;
+    return -END_CIRC_REASON_INTERNAL;
   }
 
   if (recognized) {