Skip to content

Commit 94feea6

Browse files
committed
Support http tracker redirects, gzip/deflate
1 parent b3ea3f7 commit 94feea6

File tree

3 files changed

+39
-57
lines changed

3 files changed

+39
-57
lines changed

client.js

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ var bencode = require('bencode')
44
var BN = require('bn.js')
55
var common = require('./lib/common')
66
var compact2string = require('compact2string')
7-
var concat = require('concat-stream')
87
var debug = require('debug')('bittorrent-tracker')
98
var dgram = require('dgram')
109
var EventEmitter = require('events').EventEmitter
1110
var extend = require('extend.js')
11+
var get = require('simple-get')
1212
var hat = require('hat')
1313
var http = require('http')
1414
var https = require('https')
@@ -268,22 +268,10 @@ Tracker.prototype._requestHttp = function (requestUrl, opts) {
268268
}
269269
}
270270

271-
var protocol = url.parse(self._announceUrl).protocol
272-
var fullUrl = requestUrl + '?' + common.querystringStringify(opts)
273-
274-
var req = (protocol === 'https:' ? https : http).get(fullUrl, function (res) {
275-
if (res.statusCode !== 200) {
276-
res.resume() // consume the whole stream
277-
self.client.emit('warning', new Error('Invalid response code ' + res.statusCode + ' from tracker ' + requestUrl))
278-
return
279-
}
280-
res.pipe(concat(function (data) {
281-
if (data && data.length) self._handleResponse(requestUrl, data)
282-
}))
283-
})
284-
285-
req.on('error', function (err) {
286-
self.client.emit('warning', err)
271+
get.concat(requestUrl + '?' + common.querystringStringify(opts), function (err, data, res) {
272+
if (err) return self.client.emit('warning', err)
273+
if (res.statusCode !== 200) return self.client.emit('warning', new Error('Non-200 response code ' + res.statusCode + ' from ' + requestUrl))
274+
if (data && data.length) self._handleResponse(requestUrl, data)
287275
})
288276
}
289277

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
"bn.js": "^1.0.0",
1919
"buffer-equal": "0.0.1",
2020
"compact2string": "^1.2.0",
21-
"concat-stream": "^1.4.5",
2221
"debug": "^2.0.0",
2322
"extend.js": "0.0.2",
2423
"hat": "0.0.3",
@@ -27,6 +26,7 @@
2726
"once": "^1.3.0",
2827
"portfinder": "^0.3.0",
2928
"run-series": "^1.0.2",
29+
"simple-get": "^1.3.0",
3030
"string2compact": "^1.1.1"
3131
},
3232
"devDependencies": {

test/scrape.js

Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ var bencode = require('bencode')
22
var Client = require('../')
33
var commonLib = require('../lib/common')
44
var commonTest = require('./common')
5-
var concat = require('concat-stream')
65
var fs = require('fs')
7-
var http = require('http')
6+
var get = require('simple-get')
87
var parseTorrent = require('parse-torrent')
98
var portfinder = require('portfinder')
109
var Server = require('../').Server
@@ -95,29 +94,27 @@ test('server: multiple info_hash scrape', function (t) {
9594
var url = scrapeUrl + '?' + commonLib.querystringStringify({
9695
info_hash: [ binaryInfoHash1, binaryInfoHash2 ]
9796
})
98-
http.get(url, function (res) {
97+
get.concat(url, function (err, data, res) {
98+
if (err) throw err
9999
t.equal(res.statusCode, 200)
100-
res.pipe(concat(function (data) {
101-
data = bencode.decode(data)
102-
t.ok(data.files)
103-
t.equal(Object.keys(data.files).length, 2)
104100

105-
t.ok(data.files[binaryInfoHash1])
106-
t.equal(typeof data.files[binaryInfoHash1].complete, 'number')
107-
t.equal(typeof data.files[binaryInfoHash1].incomplete, 'number')
108-
t.equal(typeof data.files[binaryInfoHash1].downloaded, 'number')
101+
data = bencode.decode(data)
102+
t.ok(data.files)
103+
t.equal(Object.keys(data.files).length, 2)
109104

110-
t.ok(data.files[binaryInfoHash2])
111-
t.equal(typeof data.files[binaryInfoHash2].complete, 'number')
112-
t.equal(typeof data.files[binaryInfoHash2].incomplete, 'number')
113-
t.equal(typeof data.files[binaryInfoHash2].downloaded, 'number')
105+
t.ok(data.files[binaryInfoHash1])
106+
t.equal(typeof data.files[binaryInfoHash1].complete, 'number')
107+
t.equal(typeof data.files[binaryInfoHash1].incomplete, 'number')
108+
t.equal(typeof data.files[binaryInfoHash1].downloaded, 'number')
114109

115-
server.close(function () {
116-
t.end()
117-
})
118-
}))
119-
}).on('error', function (err) {
120-
t.error(err)
110+
t.ok(data.files[binaryInfoHash2])
111+
t.equal(typeof data.files[binaryInfoHash2].complete, 'number')
112+
t.equal(typeof data.files[binaryInfoHash2].incomplete, 'number')
113+
t.equal(typeof data.files[binaryInfoHash2].downloaded, 'number')
114+
115+
server.close(function () {
116+
t.end()
117+
})
121118
})
122119
})
123120
})
@@ -152,26 +149,23 @@ test('server: all info_hash scrape', function (t) {
152149
server.once('start', function () {
153150

154151
// now do a scrape of everything by omitting the info_hash param
155-
http.get(scrapeUrl, function (res) {
152+
get.concat(scrapeUrl, function (err, data, res) {
153+
if (err) throw err
156154

157155
t.equal(res.statusCode, 200)
158-
res.pipe(concat(function (data) {
159-
data = bencode.decode(data)
160-
t.ok(data.files)
161-
t.equal(Object.keys(data.files).length, 1)
162-
163-
t.ok(data.files[binaryBitlove])
164-
t.equal(typeof data.files[binaryBitlove].complete, 'number')
165-
t.equal(typeof data.files[binaryBitlove].incomplete, 'number')
166-
t.equal(typeof data.files[binaryBitlove].downloaded, 'number')
167-
168-
client.stop()
169-
server.close(function () {
170-
t.end()
171-
})
172-
}))
173-
}).on('error', function (err) {
174-
t.error(err)
156+
data = bencode.decode(data)
157+
t.ok(data.files)
158+
t.equal(Object.keys(data.files).length, 1)
159+
160+
t.ok(data.files[binaryBitlove])
161+
t.equal(typeof data.files[binaryBitlove].complete, 'number')
162+
t.equal(typeof data.files[binaryBitlove].incomplete, 'number')
163+
t.equal(typeof data.files[binaryBitlove].downloaded, 'number')
164+
165+
client.stop()
166+
server.close(function () {
167+
t.end()
168+
})
175169
})
176170
})
177171
})

0 commit comments

Comments
 (0)