diff options
author | Robert Ransom <rransom.8774@gmail.com> | 2011-06-23 17:28:59 -0700 |
---|---|---|
committer | Robert Ransom <rransom.8774@gmail.com> | 2011-11-24 06:32:55 -0800 |
commit | c7d01b0541a10a51b5e41f3e68eabb90fca3067a (patch) | |
tree | 4057cb5e359bb8ab0dc84cc97a233571ebeb371b /src/or | |
parent | 8d5200c6b527443040520786397d1ffd81b42e23 (diff) | |
download | tor-c7d01b0541a10a51b5e41f3e68eabb90fca3067a.tar tor-c7d01b0541a10a51b5e41f3e68eabb90fca3067a.tar.gz |
Report HS circ states stored in circ purpose field in CIRC events
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/circuitlist.c | 57 | ||||
-rw-r--r-- | src/or/circuitlist.h | 1 | ||||
-rw-r--r-- | src/or/control.c | 13 |
3 files changed, 71 insertions, 0 deletions
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 25b80f11f..daf2eeff7 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -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) diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h index 7b01ca3ae..8ed089c81 100644 --- a/src/or/circuitlist.h +++ b/src/or/circuitlist.h @@ -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, diff --git a/src/or/control.c b/src/or/control.c index 29573099a..6b7f9dc7a 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -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)); |