mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Report HS circ states stored in circ purpose field in CIRC events
This commit is contained in:
parent
8d5200c6b5
commit
c7d01b0541
@ -4,4 +4,8 @@
|
||||
controllers in CIRC events and in replies to 'GETINFO
|
||||
circuit-status'. Implements part of ticket 2411.
|
||||
|
||||
- Report the current state of a hidden-service-related circuit to
|
||||
controllers in CIRC events and in replies to 'GETINFO
|
||||
circuit-status'. Implements part of ticket 2411.
|
||||
|
||||
|
||||
|
@ -378,6 +378,63 @@ circuit_purpose_to_controller_string(uint8_t purpose)
|
||||
}
|
||||
}
|
||||
|
||||
/** Return a string specifying the state of the hidden-service circuit
|
||||
* purpose <b>purpose</b>, or NULL if <b>purpose</b> is not a
|
||||
* hidden-service-related circuit purpose. */
|
||||
const char *
|
||||
circuit_purpose_to_controller_hs_state_string(uint8_t purpose)
|
||||
{
|
||||
switch (purpose)
|
||||
{
|
||||
default:
|
||||
log_fn(LOG_WARN, LD_BUG,
|
||||
"Unrecognized circuit purpose: %d",
|
||||
(int)purpose);
|
||||
tor_fragile_assert();
|
||||
/* fall through */
|
||||
|
||||
case CIRCUIT_PURPOSE_OR:
|
||||
case CIRCUIT_PURPOSE_C_GENERAL:
|
||||
case CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT:
|
||||
case CIRCUIT_PURPOSE_TESTING:
|
||||
case CIRCUIT_PURPOSE_CONTROLLER:
|
||||
return NULL;
|
||||
|
||||
case CIRCUIT_PURPOSE_INTRO_POINT:
|
||||
return "OR_HSSI_ESTABLISHED";
|
||||
case CIRCUIT_PURPOSE_REND_POINT_WAITING:
|
||||
return "OR_HSCR_ESTABLISHED";
|
||||
case CIRCUIT_PURPOSE_REND_ESTABLISHED:
|
||||
return "OR_HS_R_JOINED";
|
||||
|
||||
case CIRCUIT_PURPOSE_C_INTRODUCING:
|
||||
return "HSCI_CONNECTING";
|
||||
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
|
||||
return "HSCI_INTRO_SENT";
|
||||
case CIRCUIT_PURPOSE_C_INTRODUCE_ACKED:
|
||||
return "HSCI_DONE";
|
||||
|
||||
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
|
||||
return "HSCR_CONNECTING";
|
||||
case CIRCUIT_PURPOSE_C_REND_READY:
|
||||
return "HSCR_ESTABLISHED_IDLE";
|
||||
case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
|
||||
return "HSCR_ESTABLISHED_WAITING";
|
||||
case CIRCUIT_PURPOSE_C_REND_JOINED:
|
||||
return "HSCR_JOINED";
|
||||
|
||||
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
|
||||
return "HSSI_CONNECTING";
|
||||
case CIRCUIT_PURPOSE_S_INTRO:
|
||||
return "HSSI_ESTABLISHED";
|
||||
|
||||
case CIRCUIT_PURPOSE_S_CONNECT_REND:
|
||||
return "HSSR_CONNECTING";
|
||||
case CIRCUIT_PURPOSE_S_REND_JOINED:
|
||||
return "HSSR_JOINED";
|
||||
}
|
||||
}
|
||||
|
||||
/** Return a human-readable string for the circuit purpose <b>purpose</b>. */
|
||||
const char *
|
||||
circuit_purpose_to_string(uint8_t purpose)
|
||||
|
@ -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_controller_hs_state_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,
|
||||
|
@ -1829,6 +1829,19 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
|
||||
smartlist_add(descparts, purpose);
|
||||
}
|
||||
|
||||
{
|
||||
char *hs_state_arg = NULL;
|
||||
const char *hs_state =
|
||||
circuit_purpose_to_controller_hs_state_string(circ->_base.purpose);
|
||||
|
||||
if (hs_state != NULL) {
|
||||
tor_asprintf(&hs_state_arg, "HS_STATE=%s",
|
||||
hs_state);
|
||||
|
||||
smartlist_add(descparts, hs_state_arg);
|
||||
}
|
||||
}
|
||||
|
||||
rv = smartlist_join_strings(descparts, " ", 0, NULL);
|
||||
|
||||
SMARTLIST_FOREACH(descparts, char *, cp, tor_free(cp));
|
||||
|
Loading…
Reference in New Issue
Block a user