@@ -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
197200Server . prototype . listen = function ( port ) {
@@ -208,7 +211,17 @@ Server.prototype.close = function (cb) {
208211
209212Server . 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