[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] implement weasel"s suggestion to fix the bug that newly boo...
Update of /home2/or/cvsroot/tor/src/or
In directory moria:/home/arma/work/onion/cvs/tor/src/or
Modified Files:
routerlist.c
Log Message:
implement weasel's suggestion to fix the bug that newly bootstrapped
tor networks couldn't do hidden services until they had nodes with high
uptime: if you're trying to pick a node for your circuit and you demand
uptime or capacity and nothing works, then abandon your need for uptime
and capacity.
Index: routerlist.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/routerlist.c,v
retrieving revision 1.392
retrieving revision 1.393
diff -u -d -r1.392 -r1.393
--- routerlist.c 14 Dec 2005 22:05:10 -0000 1.392
+++ routerlist.c 15 Dec 2005 09:53:00 -0000 1.393
@@ -794,8 +794,8 @@
* <b>excludedsmartlist</b>, even if they are the only nodes
* available. If <b>strict</b> is true, never pick any node besides
* those in <b>preferred</b>.
- * If <b>need_uptime</b> is non-zero, don't return a router with less
- * than a minimum uptime.
+ * If <b>need_uptime</b> is non-zero and any router has more than
+ * a minimum uptime, return one of those.
* If <b>need_capacity</b> is non-zero, weight your choice by the
* advertised capacity of each router.
*/
@@ -837,6 +837,15 @@
else
choice = smartlist_choose(sl);
smartlist_free(sl);
+ if (!choice && (need_uptime || need_capacity)) {
+ /* try once more -- recurse but with fewer restrictions. */
+ info(LD_CIRC, "We couldn't find any live%s%s routers; falling back "
+ "to list of all routers.",
+ need_capacity?", fast":"",
+ need_uptime?", stable":"");
+ choice = router_choose_random_node(
+ NULL, excluded, excludedsmartlist, 0, 0, allow_unverified, 0);
+ }
}
smartlist_free(excludednodes);
if (!choice)