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
This commit is contained in:
Nick Mathewson 2006-10-13 05:27:59 +00:00
parent ff487020ab
commit 78043b8478
3 changed files with 16 additions and 3 deletions

View File

@ -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];

View File

@ -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);
}

View File

@ -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) {