Skip to content

Commit 15fa30d

Browse files
committed
expose torrents on server
1 parent 31b82e0 commit 15fa30d

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

index.js

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,13 @@ function Server (opts) {
188188

189189
self._trustProxy = !!opts.trustProxy
190190

191-
self._swarms = {}
191+
self.torrents = {}
192192

193193
self._server = http.createServer()
194194
self._server.on('request', self._onRequest.bind(self))
195+
self._server.on('error', function (err) {
196+
self.emit('error', err)
197+
})
195198
}
196199

197200
Server.prototype.listen = function (port) {
@@ -208,7 +211,17 @@ Server.prototype.close = function (cb) {
208211

209212
Server.prototype._onRequest = function (req, res) {
210213
var self = this
214+
215+
function error (message) {
216+
res.end(bncode.encode({
217+
'failure reason': message
218+
}))
219+
self.emit('error', new Error(message))
220+
}
221+
222+
var warning
211223
var s = req.url.split('?')
224+
212225
if (s[0] === '/announce') {
213226
var params = querystring.parse(s[1])
214227

@@ -221,9 +234,9 @@ Server.prototype._onRequest = function (req, res) {
221234
var infoHash = bytewiseDecodeURIComponent(params.info_hash)
222235
var peerId = bytewiseDecodeURIComponent(params.peer_id)
223236

224-
var swarm = self._swarms[infoHash]
237+
var swarm = self.torrents[infoHash]
225238
if (!swarm) {
226-
swarm = self._swarms[infoHash] = {
239+
swarm = self.torrents[infoHash] = {
227240
complete: 0,
228241
incomplete: 0,
229242
peers: {}
@@ -233,7 +246,7 @@ Server.prototype._onRequest = function (req, res) {
233246
switch (params.event) {
234247
case 'started':
235248
if (peer) {
236-
return
249+
warning = 'unexpected `started` event from peer that is already in swarm'
237250
}
238251

239252
var left = Number(params.left)
@@ -254,7 +267,7 @@ Server.prototype._onRequest = function (req, res) {
254267

255268
case 'stopped':
256269
if (!peer) {
257-
return
270+
return error('unexpected `stopped` event from peer that is not in swarm')
258271
}
259272

260273
if (peer.complete) {
@@ -269,8 +282,11 @@ Server.prototype._onRequest = function (req, res) {
269282
break
270283

271284
case 'completed':
272-
if (!peer || peer.complete) {
273-
return
285+
if (!peer) {
286+
return error('unexpected `completed` event from peer that is not in swarm')
287+
}
288+
if (peer.complete) {
289+
warning = 'unexpected `completed` event from peer that is already marked as completed'
274290
}
275291
peer.complete = true
276292

@@ -283,7 +299,7 @@ Server.prototype._onRequest = function (req, res) {
283299
case '': // update
284300
case undefined:
285301
if (!peer) {
286-
return
302+
return error('unexpected `update` event from peer that is not in swarm')
287303
}
288304

289305
self.emit('update', addr, params)

0 commit comments

Comments
 (0)