Merge branch 'nrafter-filter-update'

This commit is contained in:
Feross Aboukhadijeh 2015-02-19 12:56:17 -08:00
commit 8f3ccc5735
3 changed files with 21 additions and 5 deletions

View File

@ -111,10 +111,14 @@ var Server = require('bittorrent-tracker').Server
var server = new Server({ var server = new Server({
udp: true, // enable udp server? [default=true] udp: true, // enable udp server? [default=true]
http: true, // enable http server? [default=true] http: true, // enable http server? [default=true]
filter: function (infoHash) { filter: function (infoHash, params) {
// black/whitelist for disallowing/allowing torrents [default=allow all] // black/whitelist for disallowing/allowing torrents [default=allow all]
// this example only allows this one torrent // this example only allows this one torrent
return infoHash === 'aaa67059ed6bd08362da625b3ae77f6f4a075aaa' return infoHash === 'aaa67059ed6bd08362da625b3ae77f6f4a075aaa'
// you can also block by peer id (whitelisting torrent clients) or by
// secret key, as you get full access to the original http GET
// request parameters in `params`
}) })
}) })

View File

@ -4,9 +4,20 @@ var Server = require('../..').Server
var express = require('express') var express = require('express')
var app = express() var app = express()
// https://wiki.theory.org/BitTorrentSpecification#peer_id
var whitelist = {
UT: true // uTorrent
}
var server = new Server({ var server = new Server({
http: false, // we do our own http: false, // we do our own
udp: false // not interested udp: false, // not interested
filter: function (params) {
// black/whitelist for disallowing/allowing specific clients [default=allow all]
// this example only allows the uTorrent client
var client = params.peer_id[1] + params.peer_id[2]
return whitelist[client]
}
}) })
var onHttpRequest = server.onHttpRequest.bind(server) var onHttpRequest = server.onHttpRequest.bind(server)

View File

@ -109,10 +109,11 @@ Server.prototype.close = function (cb) {
} }
} }
Server.prototype.getSwarm = function (infoHash) { Server.prototype.getSwarm = function (infoHash, params) {
var self = this var self = this
if (!params) params = {}
if (Buffer.isBuffer(infoHash)) infoHash = infoHash.toString('hex') if (Buffer.isBuffer(infoHash)) infoHash = infoHash.toString('hex')
if (self._filter && !self._filter(infoHash)) return null if (self._filter && !self._filter(infoHash, params)) return null
var swarm = self.torrents[infoHash] var swarm = self.torrents[infoHash]
if (!swarm) swarm = self.torrents[infoHash] = new Swarm(infoHash, this) if (!swarm) swarm = self.torrents[infoHash] = new Swarm(infoHash, this)
return swarm return swarm
@ -207,7 +208,7 @@ Server.prototype._onRequest = function (params, cb) {
Server.prototype._onAnnounce = function (params, cb) { Server.prototype._onAnnounce = function (params, cb) {
var self = this var self = this
var swarm = self.getSwarm(params.info_hash) var swarm = self.getSwarm(params.info_hash, params)
if (swarm === null) return cb(new Error('disallowed info_hash')) if (swarm === null) return cb(new Error('disallowed info_hash'))
if (!params.event || params.event === 'empty') params.event = 'update' if (!params.event || params.event === 'empty') params.event = 'update'
swarm.announce(params, function (err, response) { swarm.announce(params, function (err, response) {