commit 8869cf4f01341dd685508afb2b2a10b9b3ea0f26
Author: Isis Lovecruft <isis(a)torproject.org>
Date: Thu Jan 21 03:37:43 2016 +0000
Bug 18113: Randomly permutate available default bridges of chosen type.
* ADDS a new function to TorLauncherUtil, rearrangeBridges() which
takes an array of items and returns a random permutation of that
array.
* CHANGE defaultBridges() getter to call this.rearrangeBridges()
before returning the default bridges. This causing the ordering of
the default bridges in the torrc to vary among clients, resulting
in a more even distribution of clients to default bridges.
---
src/modules/tl-util.jsm | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/modules/tl-util.jsm b/src/modules/tl-util.jsm
index 812b32b..7f93f39 100644
--- a/src/modules/tl-util.jsm
+++ b/src/modules/tl-util.jsm
@@ -246,6 +246,19 @@ let TorLauncherUtil = // Public
} catch (e) {}
},
+ // Currently, this returns a random permutation of an array, bridgeArray.
+ // Later, we might want to change this function to weight based on the
+ // bridges' bandwidths.
+ rearrangeBridges: function(bridgeArray)
+ {
+ for (var j, x, i = bridgeArray.length; i;
+ j = parseInt(Math.random() * i),
+ x = bridgeArray[--i],
+ bridgeArray[i] = bridgeArray[j],
+ bridgeArray[j] = x);
+ return bridgeArray;
+ },
+
get shouldStartAndOwnTor()
{
const kPrefStartTor = "extensions.torlauncher.start_tor";
@@ -361,6 +374,7 @@ let TorLauncherUtil = // Public
bridgeArray.push(s);
}
}
+ this.rearrangeBridges(bridgeArray);
return bridgeArray;
} catch(e) {};