mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Add a circuit_purpose_to_string() function, and use it
We had a circuit_purpose_to_controller_string() function, but it was pretty coarse-grained and didn't try to be human-readable.
This commit is contained in:
parent
e03e90bf59
commit
8ee92f28e0
@ -2051,8 +2051,9 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
|
||||
*/
|
||||
if (timediff < 0 || timediff > 2*circ_times.close_ms+1000) {
|
||||
log_notice(LD_CIRC, "Strange value for circuit build time: %ldmsec. "
|
||||
"Assuming clock jump. Purpose %d", timediff,
|
||||
circ->_base.purpose);
|
||||
"Assuming clock jump. Purpose %d (%s)", timediff,
|
||||
circ->_base.purpose,
|
||||
circuit_purpose_to_string(circ->_base.purpose));
|
||||
} else if (!circuit_build_times_disabled()) {
|
||||
/* Only count circuit times if the network is live */
|
||||
if (circuit_build_times_network_check_live(&circ_times)) {
|
||||
@ -2890,8 +2891,9 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
|
||||
case CIRCUIT_PURPOSE_INTRO_POINT:
|
||||
case CIRCUIT_PURPOSE_REND_POINT_WAITING:
|
||||
case CIRCUIT_PURPOSE_REND_ESTABLISHED:
|
||||
log_warn(LD_BUG, "Called on non-origin circuit (purpose %d)",
|
||||
(int)purpose);
|
||||
log_warn(LD_BUG, "Called on non-origin circuit (purpose %d, %s)",
|
||||
(int)purpose,
|
||||
circuit_purpose_to_string(purpose));
|
||||
return;
|
||||
case CIRCUIT_PURPOSE_C_GENERAL:
|
||||
if (circ->build_state->is_internal)
|
||||
|
@ -378,6 +378,62 @@ circuit_purpose_to_controller_string(uint8_t purpose)
|
||||
}
|
||||
}
|
||||
|
||||
/** Return a human-readable string for the circuit purpose <b>purpose</b>. */
|
||||
const char *
|
||||
circuit_purpose_to_string(uint8_t purpose)
|
||||
{
|
||||
static char buf[32];
|
||||
|
||||
switch (purpose)
|
||||
{
|
||||
case CIRCUIT_PURPOSE_OR:
|
||||
return "Circuit at relay";
|
||||
case CIRCUIT_PURPOSE_INTRO_POINT:
|
||||
return "Acting as intro point";
|
||||
case CIRCUIT_PURPOSE_REND_POINT_WAITING:
|
||||
return "Acting as rendevous (pending)";
|
||||
case CIRCUIT_PURPOSE_REND_ESTABLISHED:
|
||||
return "Acting as rendevous (established)";
|
||||
case CIRCUIT_PURPOSE_C_GENERAL:
|
||||
return "General-purpose client";
|
||||
case CIRCUIT_PURPOSE_C_INTRODUCING:
|
||||
return "Hidden service client: Connecting to intro point";
|
||||
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
|
||||
return "Hidden service client: Waiting for ack from intro point";
|
||||
case CIRCUIT_PURPOSE_C_INTRODUCE_ACKED:
|
||||
return "Hidden service client: Received ack from intro point";
|
||||
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
|
||||
return "Hidden service client: Establishing rendezvous point";
|
||||
case CIRCUIT_PURPOSE_C_REND_READY:
|
||||
return "Hidden service client: Pending rendezvous point";
|
||||
case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
|
||||
return "Hidden service client: Pending rendezvous point (ack received)";
|
||||
case CIRCUIT_PURPOSE_C_REND_JOINED:
|
||||
return "Hidden service client: Active rendezvous point";
|
||||
case CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT:
|
||||
return "Measuring circuit timeout";
|
||||
|
||||
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
|
||||
return "Hidden service: Establishing introduction point";
|
||||
case CIRCUIT_PURPOSE_S_INTRO:
|
||||
return "Hidden service: Introduction point";
|
||||
case CIRCUIT_PURPOSE_S_CONNECT_REND:
|
||||
return "Hidden service: Connecting to rendezvous point";
|
||||
case CIRCUIT_PURPOSE_S_REND_JOINED:
|
||||
return "Hidden service: Active rendezvous point";
|
||||
|
||||
case CIRCUIT_PURPOSE_TESTING:
|
||||
return "Testing circuit";
|
||||
|
||||
case CIRCUIT_PURPOSE_CONTROLLER:
|
||||
return "Circuit made by controller";
|
||||
|
||||
default:
|
||||
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
|
||||
/** Pick a reasonable package_window to start out for our circuits.
|
||||
* Originally this was hard-coded at 1000, but now the consensus votes
|
||||
* on the answer. See proposal 168. */
|
||||
|
@ -15,6 +15,7 @@
|
||||
circuit_t * _circuit_get_global_list(void);
|
||||
const char *circuit_state_to_string(int state);
|
||||
const char *circuit_purpose_to_controller_string(uint8_t purpose);
|
||||
const char *circuit_purpose_to_string(uint8_t purpose);
|
||||
void circuit_dump_by_conn(connection_t *conn, int severity);
|
||||
void circuit_set_p_circid_orconn(or_circuit_t *circ, circid_t id,
|
||||
or_connection_t *conn);
|
||||
|
@ -392,10 +392,11 @@ circuit_expire_building(void)
|
||||
TO_ORIGIN_CIRCUIT(victim)->cpath->state == CPATH_STATE_OPEN;
|
||||
|
||||
if (TO_ORIGIN_CIRCUIT(victim)->p_streams != NULL) {
|
||||
log_warn(LD_BUG, "Circuit %d (purpose %d) has timed out, "
|
||||
log_warn(LD_BUG, "Circuit %d (purpose %d, %s) has timed out, "
|
||||
"yet has attached streams!",
|
||||
TO_ORIGIN_CIRCUIT(victim)->global_identifier,
|
||||
victim->purpose);
|
||||
victim->purpose,
|
||||
circuit_purpose_to_string(victim->purpose));
|
||||
tor_fragile_assert();
|
||||
continue;
|
||||
}
|
||||
@ -426,9 +427,10 @@ circuit_expire_building(void)
|
||||
if (timercmp(&victim->timestamp_created, &extremely_old_cutoff, <)) {
|
||||
log_notice(LD_CIRC,
|
||||
"Extremely large value for circuit build timeout: %lds. "
|
||||
"Assuming clock jump. Purpose %d",
|
||||
"Assuming clock jump. Purpose %d (%s)",
|
||||
(long)(now.tv_sec - victim->timestamp_created.tv_sec),
|
||||
victim->purpose);
|
||||
victim->purpose,
|
||||
circuit_purpose_to_string(victim->purpose));
|
||||
} else if (circuit_build_times_count_close(&circ_times,
|
||||
first_hop_succeeded,
|
||||
victim->timestamp_created.tv_sec)) {
|
||||
@ -794,12 +796,11 @@ circuit_expire_old_circuits_clientside(void)
|
||||
circ->purpose != CIRCUIT_PURPOSE_S_INTRO) {
|
||||
log_notice(LD_CIRC,
|
||||
"Ancient non-dirty circuit %d is still around after "
|
||||
"%ld milliseconds. Purpose: %d",
|
||||
"%ld milliseconds. Purpose: %d (%s)",
|
||||
TO_ORIGIN_CIRCUIT(circ)->global_identifier,
|
||||
tv_mdiff(&circ->timestamp_created, &now),
|
||||
circ->purpose);
|
||||
/* FFFF implement a new circuit_purpose_to_string() so we don't
|
||||
* just print out a number for circ->purpose */
|
||||
circ->purpose,
|
||||
circuit_purpose_to_string(circ->purpose));
|
||||
TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1;
|
||||
}
|
||||
}
|
||||
@ -1136,8 +1137,9 @@ circuit_launch_by_extend_info(uint8_t purpose,
|
||||
* internal circs rather than exit circs? -RD */
|
||||
circ = circuit_find_to_cannibalize(purpose, extend_info, flags);
|
||||
if (circ) {
|
||||
log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d",
|
||||
build_state_get_exit_nickname(circ->build_state), purpose);
|
||||
log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d (%s)",
|
||||
build_state_get_exit_nickname(circ->build_state), purpose,
|
||||
circuit_purpose_to_string(purpose));
|
||||
circ->_base.purpose = purpose;
|
||||
/* reset the birth date of this circ, else expire_building
|
||||
* will see it and think it's been trying to build since it
|
||||
|
Loading…
Reference in New Issue
Block a user