[or-cvs] r19078: {tor} If we have a routerstatus but no routerinfo to name a router (in tor/trunk: . src/or)

nickm at seul.org nickm at seul.org
Wed Mar 18 19:30:31 UTC 2009


Author: nickm
Date: 2009-03-18 15:30:30 -0400 (Wed, 18 Mar 2009)
New Revision: 19078

Modified:
   tor/trunk/ChangeLog
   tor/trunk/src/or/circuitbuild.c
Log:
If we have a routerstatus but no routerinfo to name a router, use the routerstatus instead when generating circuit events.  Also refactor a little.

Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog	2009-03-18 19:30:26 UTC (rev 19077)
+++ tor/trunk/ChangeLog	2009-03-18 19:30:30 UTC (rev 19078)
@@ -13,7 +13,13 @@
     - 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
   cleanups. We're finally getting close to a release candidate.

Modified: tor/trunk/src/or/circuitbuild.c
===================================================================
--- tor/trunk/src/or/circuitbuild.c	2009-03-18 19:30:26 UTC (rev 19077)
+++ tor/trunk/src/or/circuitbuild.c	2009-03-18 19:30:30 UTC (rev 19078)
@@ -133,39 +133,41 @@
   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);



More information about the tor-commits mailing list