diff options
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/circuitbuild.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index d9d16d618..23bcf4e4a 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -116,20 +116,29 @@ circuit_list_path(origin_circuit_t *circ, int verbose) circ->build_state->desired_path_len, circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", exit ", circ->_base.state == CIRCUIT_STATE_OPEN ? "" : - (nickname?nickname:"*unnamed*")); + (nickname?nickname:"*unnamed*")); smartlist_add(elements, tor_strdup(buf)); } hop = circ->cpath; do { - const char *elt; + routerinfo_t *ri; + char *elt; if (!hop) break; if (!verbose && hop->state != CPATH_STATE_OPEN) break; if (!hop->extend_info) break; - elt = hop->extend_info->nickname; + if ((ri = router_get_by_digest(hop->extend_info->identity_digest)) && + ri->is_named) { + elt = tor_strdup(hop->extend_info->nickname); + } else { + elt = tor_malloc(HEX_DIGEST_LEN+2); + elt[0] = '$'; + base16_encode(elt+1, HEX_DIGEST_LEN+1, + hop->extend_info->identity_digest, DIGEST_LEN); + } tor_assert(elt); if (verbose) { size_t len = strlen(elt)+2+strlen(states[hop->state])+1; @@ -137,8 +146,9 @@ circuit_list_path(origin_circuit_t *circ, int verbose) tor_assert(hop->state <= 2); tor_snprintf(v,len,"%s(%s)",elt,states[hop->state]); smartlist_add(elements, v); + tor_free(elt); } else { - smartlist_add(elements, tor_strdup(elt)); + smartlist_add(elements, elt); } hop = hop->next; } while (hop != circ->cpath); |