mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
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:
parent
ff487020ab
commit
78043b8478
@ -378,6 +378,19 @@ command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
|
|||||||
} else { /* the destroy came from ahead */
|
} else { /* the destroy came from ahead */
|
||||||
circuit_set_n_circid_orconn(circ, 0, NULL);
|
circuit_set_n_circid_orconn(circ, 0, NULL);
|
||||||
if (CIRCUIT_IS_ORIGIN(circ)) {
|
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);
|
circuit_mark_for_close(circ, reason);
|
||||||
} else {
|
} else {
|
||||||
char payload[1];
|
char payload[1];
|
||||||
|
@ -2370,7 +2370,7 @@ handle_control_closecircuit(control_connection_t *conn, uint32_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!safe || !circ->p_streams) {
|
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);
|
send_control_done(conn);
|
||||||
@ -2990,7 +2990,7 @@ orconn_target_get_name(int long_names,
|
|||||||
name[0] = '$';
|
name[0] = '$';
|
||||||
base16_encode(name+1, len-1, conn->identity_digest,
|
base16_encode(name+1, len-1, conn->identity_digest,
|
||||||
DIGEST_LEN);
|
DIGEST_LEN);
|
||||||
} else {
|
} else {
|
||||||
tor_snprintf(name, len, "%s:%d",
|
tor_snprintf(name, len, "%s:%d",
|
||||||
conn->_base.address, conn->_base.port);
|
conn->_base.address, conn->_base.port);
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
if (relay_crypt(circ, cell, cell_direction, &layer_hint, &recognized) < 0) {
|
||||||
log_warn(LD_BUG,"relay crypt failed. Dropping connection.");
|
log_warn(LD_BUG,"relay crypt failed. Dropping connection.");
|
||||||
return -1;
|
return -END_CIRC_REASON_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recognized) {
|
if (recognized) {
|
||||||
|
Loading…
Reference in New Issue
Block a user