diff options
author | Roger Dingledine <arma@torproject.org> | 2012-01-25 18:54:59 -0500 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2012-01-25 18:54:59 -0500 |
commit | a0f0897795c45d22ad2d2dde98c81195a9db24dc (patch) | |
tree | 715f4ce9819073bca879b40f01c7030a7b4bc603 /src/or/circuitbuild.h | |
parent | 247a21379af1cf90896d9818cf448d9687f6277c (diff) | |
download | tor-a0f0897795c45d22ad2d2dde98c81195a9db24dc.tar.gz tor-a0f0897795c45d22ad2d2dde98c81195a9db24dc.zip |
Allow 0.2.3.x clients to use 0.2.2.x bridges.
Previously the client would ask the bridge for microdescriptors, which are
only supported in 0.2.3.x and later, and then fail to bootstrap when it
didn't get the answers it wanted. Fixes bug 4013; bugfix on 0.2.3.2-alpha.
The fix here is to revert to using normal descriptors if any of our
bridges are known to not support microdescs. This is not ideal, a) because
we'll start downloading a microdesc consensus as soon as we get a bridge
descriptor, and that will waste time if we later get a bridge descriptor
that tells us we don't like microdescriptors; and b) by changing our mind
we're leaking to our other bridges that we have an old-version bridge.
The alternate fix would have been to change
we_use_microdescriptors_for_circuits() to ask if *any* of our bridges
can support microdescriptors, and then change the directory logic that
picks a bridge to only select from those that do. For people living in
the future, where 0.2.2.x is obsolete, there won't be a difference.
Note that in either of these potential fixes, we have risk of oscillation
if our one funny-looking bridges goes away / comes back.
Diffstat (limited to 'src/or/circuitbuild.h')
-rw-r--r-- | src/or/circuitbuild.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h index cded3993c4..a7fd208305 100644 --- a/src/or/circuitbuild.h +++ b/src/or/circuitbuild.h @@ -100,6 +100,8 @@ int any_pending_bridge_descriptor_fetches(void); int entries_known_but_down(const or_options_t *options); void entries_retry_all(const or_options_t *options); +int any_bridges_dont_support_microdescriptors(void); + void entry_guards_free_all(void); extern circuit_build_times_t circ_times; |