From 4f3827f1d1365fa8da9f014463d8f3e6acce6b6c Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Sat, 7 Oct 2006 02:55:44 +0000 Subject: resolve the entryguard uptime/capacity question. and mark a new xxx that we'll want to address one day. svn:r8628 --- src/or/circuitbuild.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/or') diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 9b2fd5bc41..0edb53367c 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1842,6 +1842,8 @@ entry_is_time_to_retry(entry_guard_t *e, time_t now) * - Present in the routerlist; * - Listed as 'stable' or 'fast' by the current dirserver concensus, * if demanded by need_uptime or need_capacity; + * (This check is currently redundant with the Guard flag, but in + * the future that might change. Best to leave it in for now.) * - Allowed by our current ReachableAddresses config option; and * - Currently thought to be reachable by us (unless assume_reachable * is true). @@ -1859,7 +1861,6 @@ entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity, r = router_get_by_digest(e->identity); if (!r) return NULL; - /* Remove this check -- it seems redundant wrt the Guard flag? XXXX NM */ if (router_is_unreliable(r, need_uptime, need_capacity, 0)) return NULL; if (firewall_is_fascist_or() && @@ -2272,22 +2273,25 @@ choose_random_entry(cpath_build_state_t *state) * using him. * (We might get 2 live-but-crummy entry guards, but so be it.) */ if (smartlist_len(live_entry_guards) < 2) { - if (need_uptime) { - need_uptime = 0; /* try without that requirement */ - goto retry; - } if (!options->StrictEntryNodes) { /* still no? try adding a new entry then */ + /* XXX if guard doesn't imply fast and stable, then we need + * to tell add_an_entry_guard below what we want, or it might + * be a long time til we get it. -RD */ r = add_an_entry_guard(NULL); if (r) { smartlist_add(live_entry_guards, r); entry_guards_changed(); } } + if (!r && need_uptime) { + need_uptime = 0; /* try without that requirement */ + goto retry; + } if (!r && need_capacity) { - /* still no? last attempt, try without requiring capacity */ - need_capacity = 0; - goto retry; + /* still no? last attempt, try without requiring capacity */ + need_capacity = 0; + goto retry; } /* live_entry_guards will be empty below. Oh well, we tried. */ } -- cgit v1.2.3-54-g00ecf