]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
if we ever have an old bridge, never again use microdescs
authorRoger Dingledine <arma@torproject.org>
Fri, 27 Jan 2012 22:22:31 +0000 (17:22 -0500)
committerRoger Dingledine <arma@torproject.org>
Fri, 27 Jan 2012 22:22:31 +0000 (17:22 -0500)
should reduce the risk of oscillation if our 0.2.2 bridge comes and goes

src/or/circuitbuild.c

index 70e35967e6743cb81455bb3151293b9cf4537a4e..07598e242fb98934d9192b6443f903a304d5d2ae 100644 (file)
@@ -5328,7 +5328,7 @@ entries_retry_all(const or_options_t *options)
   entries_retry_helper(options, 1);
 }
 
-/** Return true if one of our bridges is running a Tor version that can't
+/** Return true if we've ever had a bridge running a Tor version that can't
  * provide microdescriptors to us. In that case fall back to asking for
  * full descriptors. Eventually all bridges will support microdescriptors
  * and we can take this check out; see bug 4013. */
@@ -5336,8 +5336,11 @@ int
 any_bridges_dont_support_microdescriptors(void)
 {
   const node_t *node;
+  static int ever_answered_yes = 0;
   if (!get_options()->UseBridges || !entry_guards)
     return 0;
+  if (ever_answered_yes)
+    return 1; /* if we ever answer 'yes', always answer 'yes' */
   SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
     node = node_get_by_id(e->identity);
     if (node && node->ri &&
@@ -5346,6 +5349,7 @@ any_bridges_dont_support_microdescriptors(void)
       /* This is one of our current bridges, and we know enough about
        * it to know that it won't be able to answer our microdescriptor
        * questions. */
+      ever_answered_yes = 1;
       return 1;
     }
   } SMARTLIST_FOREACH_END(e);