@@ -18,6 +18,7 @@ var socketPool = {}
1818
1919var RECONNECT_VARIANCE = 30 * 1000
2020var RECONNECT_MINIMUM = 5 * 1000
21+ var OFFER_TIMEOUT = 60000
2122
2223inherits ( WebSocketTracker , Tracker )
2324
@@ -199,11 +200,15 @@ WebSocketTracker.prototype._onSocketData = function (data) {
199200 }
200201
201202 if ( data . answer && data . peer_id ) {
202- peer = self . peers [ common . binaryToHex ( data . offer_id ) ]
203+ var offerId = common . binaryToHex ( data . offer_id )
204+ peer = self . peers [ offerId ]
203205 if ( peer ) {
204206 peer . id = common . binaryToHex ( data . peer_id )
205207 peer . signal ( data . answer )
206208 self . client . emit ( 'peer' , peer )
209+
210+ clearTimeout ( peer . trackerTimeout )
211+ self . peers [ offerId ] = null
207212 } else {
208213 debug ( 'got unexpected answer: ' + JSON . stringify ( data . answer ) )
209214 }
@@ -253,7 +258,6 @@ WebSocketTracker.prototype._generateOffers = function (numwant, cb) {
253258 var offers = [ ]
254259 debug ( 'generating %s offers' , numwant )
255260
256- // TODO: cleanup dead peers and peers that never get a return offer, from self.peers
257261 for ( var i = 0 ; i < numwant ; ++ i ) {
258262 generateOffer ( )
259263 }
@@ -274,6 +278,10 @@ WebSocketTracker.prototype._generateOffers = function (numwant, cb) {
274278 } )
275279 checkDone ( )
276280 } )
281+ peer . trackerTimeout = setTimeout ( function ( ) {
282+ peer . destroy ( )
283+ self . peers [ offerId ] = null
284+ } , OFFER_TIMEOUT )
277285 }
278286
279287 function checkDone ( ) {
0 commit comments