|
@@ -133,39 +133,41 @@ circuit_list_path_impl(origin_circuit_t *circ, int verbose, int verbose_names)
|
|
|
hop = circ->cpath;
|
|
|
do {
|
|
|
routerinfo_t *ri;
|
|
|
+ routerstatus_t *rs;
|
|
|
char *elt;
|
|
|
+ const char *id;
|
|
|
if (!hop)
|
|
|
break;
|
|
|
+ id = hop->extend_info->identity_digest;
|
|
|
if (!verbose && hop->state != CPATH_STATE_OPEN)
|
|
|
break;
|
|
|
if (!hop->extend_info)
|
|
|
break;
|
|
|
if (verbose_names) {
|
|
|
elt = tor_malloc(MAX_VERBOSE_NICKNAME_LEN+1);
|
|
|
- if ((ri = router_get_by_digest(hop->extend_info->identity_digest))) {
|
|
|
+ if ((ri = router_get_by_digest(id))) {
|
|
|
router_get_verbose_nickname(elt, ri);
|
|
|
+ } else if ((rs = router_get_consensus_status_by_id(id))) {
|
|
|
+ routerstatus_get_verbose_nickname(elt, rs);
|
|
|
} else if (hop->extend_info->nickname &&
|
|
|
is_legal_nickname(hop->extend_info->nickname)) {
|
|
|
elt[0] = '$';
|
|
|
- base16_encode(elt+1, HEX_DIGEST_LEN+1,
|
|
|
- hop->extend_info->identity_digest, DIGEST_LEN);
|
|
|
+ base16_encode(elt+1, HEX_DIGEST_LEN+1, id, DIGEST_LEN);
|
|
|
elt[HEX_DIGEST_LEN+1]= '~';
|
|
|
strlcpy(elt+HEX_DIGEST_LEN+2,
|
|
|
hop->extend_info->nickname, MAX_NICKNAME_LEN+1);
|
|
|
} else {
|
|
|
elt[0] = '$';
|
|
|
- base16_encode(elt+1, HEX_DIGEST_LEN+1,
|
|
|
- hop->extend_info->identity_digest, DIGEST_LEN);
|
|
|
+ base16_encode(elt+1, HEX_DIGEST_LEN+1, id, DIGEST_LEN);
|
|
|
}
|
|
|
} else { /* ! verbose_names */
|
|
|
- if ((ri = router_get_by_digest(hop->extend_info->identity_digest)) &&
|
|
|
+ if ((ri = router_get_by_digest(id)) &&
|
|
|
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);
|
|
|
+ base16_encode(elt+1, HEX_DIGEST_LEN+1, id, DIGEST_LEN);
|
|
|
}
|
|
|
}
|
|
|
tor_assert(elt);
|