aboutsummaryrefslogtreecommitdiff
path: root/src/or/circuitbuild.h
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2012-01-25 18:54:59 -0500
committerRoger Dingledine <arma@torproject.org>2012-01-25 18:54:59 -0500
commita0f0897795c45d22ad2d2dde98c81195a9db24dc (patch)
tree715f4ce9819073bca879b40f01c7030a7b4bc603 /src/or/circuitbuild.h
parent247a21379af1cf90896d9818cf448d9687f6277c (diff)
downloadtor-a0f0897795c45d22ad2d2dde98c81195a9db24dc.tar
tor-a0f0897795c45d22ad2d2dde98c81195a9db24dc.tar.gz
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.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index cded3993c..a7fd20830 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;