@@ -15,9 +15,9 @@ const RECONNECT_MINIMUM = 10 * 1000
1515const RECONNECT_MAXIMUM = 60 * 60 * 1000
1616const RECONNECT_VARIANCE = 5 * 60 * 1000
1717const OFFER_TIMEOUT = 50 * 1000
18- const TRICKLE_TIMEOUT = 10 * 1000
1918
20- const SDP_TRICKLE_REGEX = / a = i c e - o p t i o n s : t r i c k l e \s \n /
19+ // const TRICKLE_TIMEOUT = 10 * 1000
20+ // const SDP_TRICKLE_REGEX = /a=ice-options:trickle\s\n/
2121
2222class WebSocketTracker extends Tracker {
2323 constructor ( client , announceUrl , opts ) {
@@ -52,9 +52,9 @@ class WebSocketTracker extends Tracker {
5252 } )
5353 }
5454 const baseParams = {
55- action : 'announce' ,
56- info_hash : this . client . _infoHashBinary ,
57- peer_id : this . client . _peerIdBinary ,
55+ action : 'announce' ,
56+ info_hash : this . client . _infoHashBinary ,
57+ peer_id : this . client . _peerIdBinary
5858 }
5959 const params = Object . assign ( { } , opts , baseParams )
6060 if ( this . _trackerId ) params . trackerid = this . _trackerId
@@ -76,14 +76,14 @@ class WebSocketTracker extends Tracker {
7676 this . _send ( trickleParams )
7777 } )
7878 } else {
79- // Limit the number of offers that are generated, since it can be slow
80- const numwant = Math . min ( opts . numwant , 10 )
81- this . _generateOffers ( numwant , offers => {
82- params . numwant = numwant
83- params . offers = offers
84- this . _send ( params )
85- } )
86- }
79+ // Limit the number of offers that are generated, since it can be slow
80+ const numwant = Math . min ( opts . numwant , 10 )
81+ this . _generateOffers ( numwant , offers => {
82+ params . numwant = numwant
83+ params . offers = offers
84+ this . _send ( params )
85+ } )
86+ }
8787 }
8888
8989 scrape ( opts ) {
@@ -306,21 +306,20 @@ class WebSocketTracker extends Tracker {
306306
307307 // Save reference to trickling peer to add candidates later
308308 if ( isTrickleSdp ) {
309- this . peers [ offerId ] = peer
309+ this . peers [ offerId ] = peer
310310 }
311311
312312 this . client . emit ( 'peer' , peer )
313313 } else {
314- peer = this . peers [ offerId ]
315- if ( peer ) {
316- this . _setPeerTrickleTimeout ( peer , offerId )
317- }
314+ peer = this . peers [ offerId ]
315+ if ( peer ) {
316+ this . _setPeerTrickleTimeout ( peer , offerId )
317+ }
318318 }
319319
320320 if ( ( sdp || candidate ) && peer && ! peer . destroyed ) {
321321 peer . signal ( data . offer )
322322 }
323-
324323 }
325324
326325 if ( data . answer && data . peer_id ) {
@@ -329,7 +328,7 @@ class WebSocketTracker extends Tracker {
329328 if ( peer ) {
330329 peer . id = common . binaryToHex ( data . peer_id )
331330 if ( ! peer . destroyed ) {
332- peer . signal ( data . answer )
331+ peer . signal ( data . answer )
333332 }
334333
335334 clearTimeout ( peer . trackerTimeout )
@@ -339,13 +338,13 @@ class WebSocketTracker extends Tracker {
339338 const isTrickleSdp = / a = i c e - o p t i o n s : t r i c k l e \s \n / g. test ( sdp )
340339
341340 if ( sdp ) {
342- this . client . emit ( 'peer' , peer )
341+ this . client . emit ( 'peer' , peer )
343342 }
344343
345344 if ( ( isTrickleSdp || candidate ) && peer ) {
346- this . _setPeerTrickleTimeout ( peer , offerId )
345+ this . _setPeerTrickleTimeout ( peer , offerId )
347346 } else {
348- delete this . peers [ offerId ]
347+ delete this . peers [ offerId ]
349348 }
350349 } else {
351350 debug ( `got unexpected answer: ${ JSON . stringify ( data . answer ) } ` )
@@ -404,9 +403,11 @@ class WebSocketTracker extends Tracker {
404403 _send ( params ) {
405404 if ( this . destroyed ) return
406405 if ( ! this . socket . connected ) {
407- this . pendingWrites . push ( params )
408- return
406+ this . pendingWrites . push ( params )
407+
408+ return
409409 }
410+
410411 this . expectingResponse = true
411412 const message = JSON . stringify ( params )
412413 debug ( 'send %s' , message )
@@ -416,31 +417,33 @@ class WebSocketTracker extends Tracker {
416417 _generateOffers ( numwant , cb ) {
417418 const self = this
418419 const offers = [ ]
420+
419421 debug ( 'generating %s offers' , numwant )
420422
421423 for ( let i = 0 ; i < numwant ; ++ i ) {
422424 generateOffer ( )
423425 }
426+
424427 checkDone ( )
425428
426429 function generateOffer ( ) {
427- const offerId = randombytes ( 20 ) . toString ( 'hex' )
428- debug ( 'creating peer (from _generateOffers)' )
429- const peer = self . peers [ offerId ] = self . _createPeer ( { initiator : true } )
430- peer . once ( 'signal' , offer => {
431- offers . push ( {
432- offer,
433- offer_id : common . hexToBinary ( offerId )
434- } )
435- checkDone ( )
430+ const offerId = randombytes ( 20 ) . toString ( 'hex' )
431+ debug ( 'creating peer (from _generateOffers)' )
432+ const peer = self . peers [ offerId ] = self . _createPeer ( { initiator : true } )
433+ peer . once ( 'signal' , offer => {
434+ offers . push ( {
435+ offer,
436+ offer_id : common . hexToBinary ( offerId )
436437 } )
437- peer . trackerTimeout = setTimeout ( ( ) => {
438- debug ( 'tracker timeout: destroying peer' )
439- peer . trackerTimeout = null
440- delete self . peers [ offerId ]
441- peer . destroy ( )
442- } , OFFER_TIMEOUT )
443- if ( peer . trackerTimeout . unref ) peer . trackerTimeout . unref ( )
438+ checkDone ( )
439+ } )
440+ peer . trackerTimeout = setTimeout ( ( ) => {
441+ debug ( 'tracker timeout: destroying peer' )
442+ peer . trackerTimeout = null
443+ delete self . peers [ offerId ]
444+ peer . destroy ( )
445+ } , OFFER_TIMEOUT )
446+ if ( peer . trackerTimeout . unref ) peer . trackerTimeout . unref ( )
444447 }
445448
446449 function checkDone ( ) {
@@ -456,57 +459,66 @@ class WebSocketTracker extends Tracker {
456459 const offers = [ ]
457460 const candidates = [ ]
458461 let hasSentOffers = false
462+
459463 debug ( 'generating %s trickle offers' , numwant )
460464
461465 for ( let i = 0 ; i < numwant ; ++ i ) {
462- generateTrickleOffer ( )
466+ generateTrickleOffer ( )
463467 }
468+
464469 checkOffersDone ( )
465470
466471 function generateTrickleOffer ( ) {
467- const offerId = randombytes ( 20 ) . toString ( 'hex' )
468- const binaryOfferId = common . hexToBinary ( offerId )
469- debug ( 'creating peer (from _generateTrickleOffers)' )
470- const opts = { initiator : true , trickle : true }
471- const peer = self . peers [ offerId ] = self . _createPeer ( opts )
472- peer . on ( 'signal' , offer => {
473- const offerObj = { offer, offer_id : binaryOfferId }
474- if ( offer . sdp ) {
475- offers . push ( offerObj )
476- checkOffersDone ( )
477- } else if ( ! hasSentOffers ) {
478- // Only send candidates after initial offers are sent
479- candidates . push ( offerObj )
480- } else {
481- candidateCb ( offerObj )
482- }
483- } )
484- peer . trackerTimeout = setTimeout ( ( ) => {
485- debug ( 'tracker timeout: destroying peer' )
486- peer . trackerTimeout = null
487- delete self . peers [ offerId ]
488- peer . destroy ( )
489- } , OFFER_TIMEOUT )
490- if ( peer . trackerTimeout . unref ) peer . trackerTimeout . unref ( )
472+ const offerId = randombytes ( 20 ) . toString ( 'hex' )
473+ const binaryOfferId = common . hexToBinary ( offerId )
474+ const opts = { initiator : true , trickle : true }
475+ const peer = self . peers [ offerId ] = self . _createPeer ( opts )
476+
477+ debug ( 'creating peer (from _generateTrickleOffers)' )
478+
479+ peer . on ( 'signal' , offer => {
480+ const offerObj = { offer, offer_id : binaryOfferId }
481+ if ( offer . sdp ) {
482+ offers . push ( offerObj )
483+ checkOffersDone ( )
484+ } else if ( ! hasSentOffers ) {
485+ // Only send candidates after initial offers are sent
486+ candidates . push ( offerObj )
487+ } else {
488+ candidateCb ( offerObj )
489+ }
490+ } )
491+
492+ peer . trackerTimeout = setTimeout ( ( ) => {
493+ debug ( 'tracker timeout: destroying peer' )
494+ peer . trackerTimeout = null
495+ delete self . peers [ offerId ]
496+ peer . destroy ( )
497+ } , OFFER_TIMEOUT )
498+
499+ if ( peer . trackerTimeout . unref ) peer . trackerTimeout . unref ( )
491500 }
492501
493502 function checkOffersDone ( ) {
494503 if ( offers . length === numwant ) {
495504 debug ( 'generated %s offers' , numwant )
505+
496506 hasSentOffers = true
497507 offersCb ( offers )
498508 candidates . forEach ( candidateCb )
499509 }
500510 }
501511 }
502512
503- // Allow time for trickle candidates to arrive before deleting the peer.
513+ // Allow time for trickle candidates to arrive before deleting the peer.
504514 _setPeerTrickleTimeout ( peer , offerId ) {
505515 clearTimeout ( peer . trickleTimeout )
516+
506517 peer . trickleTimeout = setTimeout ( ( ) => {
507- if ( this . destroyed ) { return }
508- delete this . peers [ offerId ]
509- } , 10000 ) ;
518+ if ( this . destroyed ) { return }
519+ delete this . peers [ offerId ]
520+ } , 10000 )
521+
510522 if ( peer . trickleTimeout . unref ) peer . trickleTimeout . unref ( )
511523 }
512524
0 commit comments