aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--doc/TODO1
-rw-r--r--src/or/circuitbuild.c11
-rw-r--r--src/or/routerlist.c1
4 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 762f03b5bc..fe8ce8d858 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
Changes in version 0.2.0.20-?? - 2008-02-??
+ o Major features:
+ - Start choosing which bridge to use proportional to its advertised
+ bandwidth, rather than uniformly at random. This should speed up Tor
+ for bridge users. Also do this for people who set StrictEntryNodes.
+
o Minor features (performance):
- Tune parameters for cell pool allocation to minimize amount of
RAM overhead used.
diff --git a/doc/TODO b/doc/TODO
index 463b83b8f4..301641cc6a 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -127,6 +127,7 @@ P - Figure out why dll's compiled in mingw don't work right in WinXP.
P - create a "make win32-bundle" for vidalia-privoxy-tor-torbutton bundle
Planned for 0.2.1.x:
+ - router_choose_random_node() has a big pile of args. make it "flags".
- anonymity concern: since our is-consensus-fresh-enough check is
sloppy so clients will actually work when a consensus wasn't formed,
does that mean that if users are idle for 5 hours and then click on
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index bd6f504c3b..c639b843ff 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -2501,7 +2501,16 @@ choose_random_entry(cpath_build_state_t *state)
}
choose_and_finish:
- r = smartlist_choose(live_entry_guards);
+ if (entry_list_can_grow(options)) {
+ /* We choose uniformly at random here, because choose_good_entry_server()
+ * already weights its choices by bandwidth, so we don't want to
+ * *double*-weight our guard selection. */
+ r = smartlist_choose(live_entry_guards);
+ } else {
+ /* We need to weight by bandwidth, because our bridges or entryguards
+ * were not already selected proportional to their bandwidth. */
+ r = routerlist_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD);
+ }
smartlist_free(live_entry_guards);
smartlist_free(exit_family);
return r;
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 46a372c1e7..d1b0e820ed 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1393,6 +1393,7 @@ get_max_believable_bandwidth(void)
* If <b>for_guard</b>, we're picking a guard node: consider all guard's
* bandwidth equally. Otherwise, weight guards proportionally less.
*
+ * XXX DOCDOC the above args aren't args anymore
*/
static void *
smartlist_choose_by_bandwidth(smartlist_t *sl, bandwidth_weight_rule_t rule,