diff options
author | David Goulet <dgoulet@torproject.org> | 2019-08-29 08:55:27 -0400 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2019-08-29 08:55:27 -0400 |
commit | 337b733cfc06a30665e34521b72d33c9527eff55 (patch) | |
tree | ace093d7f84b13625009c6f1fec86e5ca797190a /src/feature/rend/rendservice.c | |
parent | 5a73f369dbd4d19ced536f4862b12ef98d6a2002 (diff) | |
parent | 231a74363fa9ccd1769b61229dc70a72e1e5807b (diff) | |
download | tor-337b733cfc06a30665e34521b72d33c9527eff55.tar.gz tor-337b733cfc06a30665e34521b72d33c9527eff55.zip |
Merge branch 'tor-github/pr/1255' into maint-0.4.1
Diffstat (limited to 'src/feature/rend/rendservice.c')
-rw-r--r-- | src/feature/rend/rendservice.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/feature/rend/rendservice.c b/src/feature/rend/rendservice.c index 98c7253bcc..119a6f9c89 100644 --- a/src/feature/rend/rendservice.c +++ b/src/feature/rend/rendservice.c @@ -2123,8 +2123,12 @@ rend_service_receive_introduction(origin_circuit_t *circuit, int flags = CIRCLAUNCH_NEED_CAPACITY | CIRCLAUNCH_IS_INTERNAL; if (circ_needs_uptime) flags |= CIRCLAUNCH_NEED_UPTIME; /* A Single Onion Service only uses a direct connection if its - * firewall rules permit direct connections to the address. */ - if (rend_service_use_direct_connection(options, rp)) { + * firewall rules permit direct connections to the address. + * + * We only use a one-hop path on the first attempt. If the first attempt + * fails, we use a 3-hop path for reachability / reliability. + * See the comment in rend_service_relauch_rendezvous() for details. */ + if (rend_service_use_direct_connection(options, rp) && i == 0) { flags = flags | CIRCLAUNCH_ONEHOP_TUNNEL; } launched = circuit_launch_by_extend_info( @@ -3086,8 +3090,15 @@ rend_service_launch_establish_intro(rend_service_t *service, extend_info_t *launch_ei = intro->extend_info; extend_info_t *direct_ei = NULL; - /* Are we in single onion mode? */ - if (rend_service_allow_non_anonymous_connection(options)) { + /* Are we in single onion mode? + * + * We only use a one-hop path on the first attempt. If the first attempt + * fails, we use a 3-hop path for reachability / reliability. + * (Unlike v3, retries is incremented by the caller after it calls this + * function.) + */ + if (rend_service_allow_non_anonymous_connection(options) && + intro->circuit_retries == 0) { /* Do we have a descriptor for the node? * We've either just chosen it from the consensus, or we've just reviewed * our intro points to see which ones are still valid, and deleted the ones |