Browse Source

send truncates AP-ward in a circuit, not destroys

svn:r313
Roger Dingledine 22 years ago
parent
commit
030564e95d
1 changed files with 7 additions and 3 deletions
  1. 7 3
      src/or/command.c

+ 7 - 3
src/or/command.c

@@ -204,11 +204,15 @@ void command_process_destroy_cell(cell_t *cell, connection_t *conn) {
     onion_pending_remove(circ);
   }
 
-  if(cell->aci == circ->p_aci) /* the destroy came from behind */
+  if(cell->aci == circ->p_aci || circ->cpath) {
+    /* either the destroy came from behind, or we're the AP */
     circ->p_conn = NULL;
-  if(cell->aci == circ->n_aci) /* the destroy came from ahead */
+    circuit_close(circ);
+  } else { /* the destroy came from ahead */
     circ->n_conn = NULL;
-  circuit_close(circ);
+    log(LOG_DEBUG, "command_process_destroy_cell(): Delivering 'truncated' back.");
+    connection_edge_send_command(NULL, circ, RELAY_COMMAND_TRUNCATED);
+  }
 }
 
 /*