Skip to content

Commit 02c92fd

Browse files
committed
randomize the peers that are given out
1 parent 9d8c5d6 commit 02c92fd

File tree

3 files changed

+10
-11
lines changed

3 files changed

+10
-11
lines changed

lib/swarm.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module.exports = Swarm
22

33
var debug = require('debug')('bittorrent-tracker')
4+
var randomIterate = require('random-iterate')
45

56
// Regard this as the default implementation of an interface that you
67
// need to support when overriding Server.getSwarm()
@@ -22,7 +23,7 @@ Swarm.prototype.announce = function (params, cb) {
2223
cb(null, {
2324
complete: self.complete,
2425
incomplete: self.incomplete,
25-
peers: self._getPeers(params.numwant, params.peer_id)
26+
peers: self._getPeers(params.numwant)
2627
})
2728
} else {
2829
cb(new Error('invalid event'))
@@ -92,16 +93,13 @@ Swarm.prototype._onAnnounce_update = function (params, peer) {
9293
}
9394
}
9495

95-
// TODO: randomize the peers that are given out
96-
Swarm.prototype._getPeers = function (numWant, fromPeerId) {
96+
Swarm.prototype._getPeers = function (numWant) {
9797
var peers = []
98-
for (var peerId in this.peers) {
99-
if (peers.length >= numWant) break
100-
if (peerId === fromPeerId) continue // skip self
101-
98+
var ite = randomIterate(Object.keys(this.peers))
99+
while (true) {
100+
var peerId = ite()
101+
if (peers.length >= numWant || peerId == null) return peers
102102
var peer = this.peers[peerId]
103-
if (!peer) continue // ignore null values
104-
peers.push(peer)
103+
if (peer) peers.push(peer)
105104
}
106-
return peers
107105
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"ip": "^0.3.0",
3131
"minimist": "^1.1.1",
3232
"once": "^1.3.0",
33+
"random-iterate": "^1.0.1",
3334
"run-series": "^1.0.2",
3435
"simple-get": "^1.3.0",
3536
"simple-peer": "^5.0.0",

test/server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ function serverTest (t, serverType, serverFamily) {
8989
})
9090

9191
client2.once('peer', function (addr) {
92-
t.equal(addr, clientAddr + ':6881')
92+
t.ok(addr === clientAddr + ':6881' || addr === clientAddr + ':6882')
9393

9494
client2.stop()
9595
client2.once('update', function (data) {

0 commit comments

Comments
 (0)