summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2006-10-07 02:55:44 +0000
committerRoger Dingledine <arma@torproject.org>2006-10-07 02:55:44 +0000
commit4f3827f1d1365fa8da9f014463d8f3e6acce6b6c (patch)
tree7bad004d336b590fab22dc5cd176b3b49e0c8f0b
parente63211fad3274adf6b23388f70991bca1c2a49ff (diff)
downloadtor-4f3827f1d1365fa8da9f014463d8f3e6acce6b6c.tar.gz
tor-4f3827f1d1365fa8da9f014463d8f3e6acce6b6c.zip
resolve the entryguard uptime/capacity question. and mark a
new xxx that we'll want to address one day. svn:r8628
-rw-r--r--src/or/circuitbuild.c20
1 files changed, 12 insertions, 8 deletions
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 <b>need_uptime</b> or <b>need_capacity</b>;
+ * (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. */
}