summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-07-26 19:31:15 -0400
committerNick Mathewson <nickm@torproject.org>2016-07-26 19:31:15 -0400
commitf0488551e7be4e2d21a104903a86be993a240398 (patch)
tree4f55f21fb5c390355fb6b46ffd749302d3082e56 /src
parent48d7dfb92fba64dc0b9c26306f509c09a9246187 (diff)
parent64bf6b70a889ee53978d70a2efc3c2a08a088826 (diff)
downloadtor-f0488551e7be4e2d21a104903a86be993a240398.tar.gz
tor-f0488551e7be4e2d21a104903a86be993a240398.zip
Merge branch 'bug19639_squashed'
Diffstat (limited to 'src')
-rw-r--r--src/or/router.c8
-rw-r--r--src/or/routerlist.c2
-rw-r--r--src/or/routerlist.h1
3 files changed, 7 insertions, 4 deletions
diff --git a/src/or/router.c b/src/or/router.c
index a671591ad7..f858fbef2d 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1284,15 +1284,17 @@ decide_to_advertise_begindir(const or_options_t *options,
}
/** Allocate and return a new extend_info_t that can be used to build
- * a circuit to or through the router <b>r</b>. Use the primary
- * address of the router unless <b>for_direct_connect</b> is true, in
- * which case the preferred address is used instead. */
+ * a circuit to or through the router <b>r</b>. Uses the primary
+ * address of the router, so should only be called on a server. */
static extend_info_t *
extend_info_from_router(const routerinfo_t *r)
{
tor_addr_port_t ap;
tor_assert(r);
+ /* Make sure we don't need to check address reachability */
+ tor_assert_nonfatal(!router_skip_or_reachability(get_options(), 0));
+
router_get_prim_orport(r, &ap);
return extend_info_new(r->nickname, r->cache_info.identity_digest,
r->onion_pkey, r->onion_curve25519_pkey,
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 6ea9d8b0d1..2fe8c3b629 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1870,7 +1870,7 @@ router_picked_poor_directory_log(const routerstatus_t *rs)
/* When iterating through the routerlist, can OR address/port preference
* and reachability checks be skipped?
*/
-static int
+int
router_skip_or_reachability(const or_options_t *options, int try_ip_pref)
{
/* Servers always have and prefer IPv4.
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index 01f7644535..9765ee7ff4 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -58,6 +58,7 @@ const routerstatus_t *router_pick_trusteddirserver(dirinfo_type_t type,
int flags);
const routerstatus_t *router_pick_fallback_dirserver(dirinfo_type_t type,
int flags);
+int router_skip_or_reachability(const or_options_t *options, int try_ip_pref);
int router_get_my_share_of_directory_requests(double *v3_share_out);
void router_reset_status_download_failures(void);
int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2);