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
This commit is contained in:
Roger Dingledine 2012-01-27 17:22:31 -05:00
parent a0f0897795
commit b1ee1927b1

View File

@ -5328,7 +5328,7 @@ entries_retry_all(const or_options_t *options)
entries_retry_helper(options, 1); 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 * provide microdescriptors to us. In that case fall back to asking for
* full descriptors. Eventually all bridges will support microdescriptors * full descriptors. Eventually all bridges will support microdescriptors
* and we can take this check out; see bug 4013. */ * and we can take this check out; see bug 4013. */
@ -5336,8 +5336,11 @@ int
any_bridges_dont_support_microdescriptors(void) any_bridges_dont_support_microdescriptors(void)
{ {
const node_t *node; const node_t *node;
static int ever_answered_yes = 0;
if (!get_options()->UseBridges || !entry_guards) if (!get_options()->UseBridges || !entry_guards)
return 0; 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) { SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
node = node_get_by_id(e->identity); node = node_get_by_id(e->identity);
if (node && node->ri && 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 /* 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 * it to know that it won't be able to answer our microdescriptor
* questions. */ * questions. */
ever_answered_yes = 1;
return 1; return 1;
} }
} SMARTLIST_FOREACH_END(e); } SMARTLIST_FOREACH_END(e);