diff options
Diffstat (limited to 'src/or/circuitbuild.c')
-rw-r--r-- | src/or/circuitbuild.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index d35c08e203..70e35967e6 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -3339,7 +3339,7 @@ extend_info_from_router(const routerinfo_t *r, int for_direct_connect) } /** Allocate and return a new extend_info that can be used to build a - * ircuit to or through the node <b>node</b>. Use the primary address + * circuit to or through the node <b>node</b>. Use the primary address * of the node unless <b>for_direct_connect</b> is true, in which case * the preferred address is used instead. May return NULL if there is * not enough info about <b>node</b> to extend to it--for example, if @@ -5328,6 +5328,30 @@ 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 + * 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. */ +int +any_bridges_dont_support_microdescriptors(void) +{ + const node_t *node; + if (!get_options()->UseBridges || !entry_guards) + return 0; + SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) { + node = node_get_by_id(e->identity); + if (node && node->ri && + node_is_bridge(node) && node_is_a_configured_bridge(node) && + !tor_version_supports_microdescriptors(node->ri->platform)) { + /* 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. */ + return 1; + } + } SMARTLIST_FOREACH_END(e); + return 0; +} + /** Release all storage held by the list of entry guards and related * memory structs. */ void |