Преглед изворни кода

if we ever have an old bridge, never again use microdescs

should reduce the risk of oscillation if our 0.2.2 bridge comes and goes
Roger Dingledine пре 13 година
родитељ
комит
b1ee1927b1
1 измењених фајлова са 5 додато и 1 уклоњено
  1. 5 1
      src/or/circuitbuild.c

+ 5 - 1
src/or/circuitbuild.c

@@ -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);