From a335b43a6719e02f135415a1c9ef860d80a4bdac Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 18 Mar 2009 19:30:30 +0000 Subject: [PATCH] If we have a routerstatus but no routerinfo to name a router, use the routerstatus instead when generating circuit events. Also refactor a little. svn:r19078 --- ChangeLog | 6 ++++++ src/or/circuitbuild.c | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7f6315020f..d003e273d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,12 @@ Changes in version 0.2.1.14-??? - 2009-03-?? - Avoid double-free on list of successfully uploaded hidden service discriptors. Fix for bug 948. Bugfix on 0.2.1.6-alpha. + o Minor features (controller): + - Try harder to look up nicknames for routers on a circuit when + generating circuit events with verbose nicknames. (Previously, we + would look in the router descriptors we had for nicknames, but not + in the consensus.) Partial fix for bug 941. + Changes in version 0.2.1.13-alpha - 2009-03-09 Tor 0.2.1.13-alpha includes another big pile of minor bugfixes and diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 1cda8e870d..9e2f826c42 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -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);