1- const WebSocketServer = require ( "ws" ) . Server
1+ const WebSocketServer = require ( 'ws' ) . Server
22const debug = require ( 'debug' ) ( 'bittorrent-tracker:server' )
33
44const common = require ( '../../../lib/common' )
55
6- const parseWebSocketRequest = require ( " ./parseWebsocketRequest" )
7- const attachHttpServer = require ( " ../attachHttp" )
6+ const parseWebSocketRequest = require ( ' ./parseWebsocketRequest' )
7+ const attachHttpServer = require ( ' ../attachHttp' )
88
99const SDP_TRICKLE_REGEX = / a = i c e - o p t i o n s : t r i c k l e \s \n /
1010
11- function setupHttpService ( server , onListening ) {
11+ function setupHttpService ( server , onListening ) {
1212 if ( server . http ) return server . http
1313 else {
1414 attachHttpServer ( server , onListening )
@@ -18,19 +18,19 @@ function setupHttpService(server, onListening) {
1818 // Return 404 for all other request types
1919 const notFound = ( req , res ) => {
2020 res . statusCode = 404
21- res . end ( " 404 Not Found" )
21+ res . end ( ' 404 Not Found' )
2222 }
2323
24- server . http . on ( " request" , notFound )
24+ server . http . on ( ' request' , notFound )
2525 }
2626}
2727
28- function setupWebSocketServer ( server ) {
28+ function setupWebSocketServer ( server ) {
2929 const { onError } = server
3030 const options = {
3131 server : server . http ,
3232 perMessageDeflate : false ,
33- clientTracking : false ,
33+ clientTracking : false
3434 }
3535
3636 const ws = new WebSocketServer ( options )
@@ -40,24 +40,16 @@ function setupWebSocketServer(server) {
4040
4141 socket . peerId = null // as hex
4242 socket . infoHashes = [ ] // swarms that server socket is participating in
43- socket . onSend = ( err ) => {
44- onWebSocketSend ( socket , err )
45- }
43+ socket . onSend = ( err ) => onWebSocketSend ( socket , err )
4644
47- socket . onMessageBound = ( params ) => {
48- onWebSocketRequest ( socket , opts , params )
49- }
50- socket . on ( "message" , socket . onMessageBound )
45+ socket . onMessageBound = ( params ) => onWebSocketRequest ( socket , opts , params )
46+ socket . on ( 'message' , socket . onMessageBound )
5147
52- socket . onErrorBound = ( err ) => {
53- onWebSocketError ( socket , err )
54- }
55- socket . on ( "error" , socket . onErrorBound )
48+ socket . onErrorBound = ( err ) => onWebSocketError ( socket , err )
49+ socket . on ( 'error' , socket . onErrorBound )
5650
57- socket . onCloseBound = ( ) => {
58- onWebSocketClose ( socket )
59- }
60- socket . on ( "close" , socket . onCloseBound )
51+ socket . onCloseBound = ( ) => onWebSocketClose ( socket )
52+ socket . on ( 'close' , socket . onCloseBound )
6153 }
6254
6355 const onWebSocketRequest = ( socket , opts , params ) => {
@@ -66,14 +58,14 @@ function setupWebSocketServer(server) {
6658 } catch ( err ) {
6759 socket . send (
6860 JSON . stringify ( {
69- " failure reason" : err . message ,
61+ ' failure reason' : err . message
7062 } ) ,
7163 socket . onSend
7264 )
7365
7466 // even though it's an error for the client, it's just a warning for the server.
7567 // don't crash the server because a client sent bad data :)
76- server . emit ( " warning" , err )
68+ server . emit ( ' warning' , err )
7769 return
7870 }
7971
@@ -85,22 +77,22 @@ function setupWebSocketServer(server) {
8577 socket . send (
8678 JSON . stringify ( {
8779 action :
88- params . action === common . ACTIONS . ANNOUNCE ? " announce" : " scrape" ,
89- " failure reason" : err . message ,
90- info_hash : common . hexToBinary ( params . info_hash ) ,
80+ params . action === common . ACTIONS . ANNOUNCE ? ' announce' : ' scrape' ,
81+ ' failure reason' : err . message ,
82+ info_hash : common . hexToBinary ( params . info_hash )
9183 } ) ,
9284 socket . onSend
9385 )
9486
95- server . emit ( " warning" , err )
87+ server . emit ( ' warning' , err )
9688 return
9789 }
9890
9991 response . action =
100- params . action === common . ACTIONS . ANNOUNCE ? " announce" : " scrape"
92+ params . action === common . ACTIONS . ANNOUNCE ? ' announce' : ' scrape'
10193
10294 let peers
103- if ( response . action === " announce" ) {
95+ if ( response . action === ' announce' ) {
10496 peers = response . peers
10597 delete response . peers
10698
@@ -118,50 +110,35 @@ function setupWebSocketServer(server) {
118110 if ( ! params . answer ) {
119111 socket . send ( JSON . stringify ( response ) , socket . onSend )
120112 debug (
121- " sent response %s to %s" ,
113+ ' sent response %s to %s' ,
122114 JSON . stringify ( response ) ,
123115 params . peer_id
124116 )
125117 }
126118
127119 if ( Array . isArray ( params . offers ) ) {
128- debug ( "got %s offers from %s" , params . offers . length , params . peer_id )
129- debug ( "got %s peers from swarm %s" , peers . length , params . info_hash )
130-
131- const gotSwarm = swarm => {
132- if ( server . destroyed ) return
133- if ( ! swarm ) {
134- return server . emit (
135- "warning" ,
136- new Error ( "no swarm with that `info_hash`" )
137- )
120+ debug ( 'got %s offers from %s' , params . offers . length , params . peer_id )
121+ debug ( 'got %s peers from swarm %s' , peers . length , params . info_hash )
122+
123+ peers . forEach ( ( peer , i ) => {
124+ const { sdp } = ( params . offers && params . offers [ i ] && params . offers [ i ] . offer ) || { }
125+ const isTrickleSdp = SDP_TRICKLE_REGEX . test ( sdp )
126+ if ( isTrickleSdp ) {
127+ swarm . offers . set ( params . offers [ i ] . offer_id , peer . peerId )
138128 }
139129
140- peers . forEach ( ( peer , i ) => {
141- const { sdp } = params . offers && params . offers [ i ] && params . offers [ i ] . offer || { }
142- const isTrickleSdp = SDP_TRICKLE_REGEX . test ( sdp )
143- if ( isTrickleSdp ) {
144- swarm . offers . set ( params . offers [ i ] . offer_id , peer . peerId )
145- }
146-
147- peer . socket . send (
148- JSON . stringify ( {
149- action : "announce" ,
150- offer : params . offers [ i ] . offer ,
151- offer_id : params . offers [ i ] . offer_id ,
152- peer_id : common . hexToBinary ( params . peer_id ) ,
153- info_hash : common . hexToBinary ( params . info_hash ) ,
154- } ) ,
155- peer . socket . onSend
156- )
157- debug ( "sent offer to %s from %s" , peer . peerId , params . peer_id )
158- } )
159- }
160-
161- server . getSwarm ( params . info_hash )
162- . then ( )
163- . catch ( err => server . emit ( "warning" , err ) )
164-
130+ peer . socket . send (
131+ JSON . stringify ( {
132+ action : 'announce' ,
133+ offer : params . offers [ i ] . offer ,
134+ offer_id : params . offers [ i ] . offer_id ,
135+ peer_id : common . hexToBinary ( params . peer_id ) ,
136+ info_hash : common . hexToBinary ( params . info_hash )
137+ } ) ,
138+ peer . socket . onSend
139+ )
140+ debug ( 'sent offer to %s from %s' , peer . peerId , params . peer_id )
141+ } )
165142 }
166143
167144 const done = ( ) => {
@@ -173,43 +150,43 @@ function setupWebSocketServer(server) {
173150
174151 if ( params . answer ) {
175152 debug (
176- " got answer %s from %s" ,
153+ ' got answer %s from %s' ,
177154 JSON . stringify ( params . answer ) ,
178155 params . peer_id
179156 )
180157
181158 server . getSwarm ( params . info_hash )
182- . then ( gotSwarm )
183- . catch ( err => server . emit ( " warning" , err ) )
159+ . then ( gotSwarm )
160+ . catch ( err => server . emit ( ' warning' , err ) )
184161
185162 const gotSwarm = swarm => {
186163 if ( server . destroyed ) return
187164 if ( ! swarm ) {
188165 return server . emit (
189- " warning" ,
190- new Error ( " no swarm with that `info_hash`" )
166+ ' warning' ,
167+ new Error ( ' no swarm with that `info_hash`' )
191168 )
192169 }
193170 // Mark the destination peer as recently used in cache
194171 const toPeer = swarm . peers . get ( params . to_peer_id )
195172 if ( ! toPeer ) {
196173 return server . emit (
197- " warning" ,
198- new Error ( " no peer with that `to_peer_id`" )
174+ ' warning' ,
175+ new Error ( ' no peer with that `to_peer_id`' )
199176 )
200177 }
201178
202179 toPeer . socket . send (
203180 JSON . stringify ( {
204- action : " announce" ,
181+ action : ' announce' ,
205182 answer : params . answer ,
206183 offer_id : params . offer_id ,
207184 peer_id : common . hexToBinary ( params . peer_id ) ,
208- info_hash : common . hexToBinary ( params . info_hash ) ,
185+ info_hash : common . hexToBinary ( params . info_hash )
209186 } ) ,
210187 toPeer . socket . onSend
211188 )
212- debug ( " sent answer to %s from %s" , toPeer . peerId , params . peer_id )
189+ debug ( ' sent answer to %s from %s' , toPeer . peerId , params . peer_id )
213190
214191 done ( )
215192 }
@@ -224,7 +201,7 @@ function setupWebSocketServer(server) {
224201 }
225202
226203 const onWebSocketClose = ( socket ) => {
227- debug ( " websocket close %s" , socket . peerId )
204+ debug ( ' websocket close %s' , socket . peerId )
228205 socket . destroyed = true
229206
230207 if ( socket . peerId ) {
@@ -233,10 +210,10 @@ function setupWebSocketServer(server) {
233210 if ( swarm ) {
234211 swarm . announce (
235212 {
236- type : "ws" ,
237- event : " stopped" ,
213+ type : 'ws' ,
214+ event : ' stopped' ,
238215 numwant : 0 ,
239- peer_id : socket . peerId ,
216+ peer_id : socket . peerId
240217 } ,
241218 noop
242219 )
@@ -246,30 +223,30 @@ function setupWebSocketServer(server) {
246223
247224 // ignore all future errors
248225 socket . onSend = noop
249- socket . on ( " error" , noop )
226+ socket . on ( ' error' , noop )
250227
251228 socket . peerId = null
252229 socket . infoHashes = null
253230
254- if ( typeof socket . onMessageBound === " function" ) {
255- socket . removeListener ( " message" , socket . onMessageBound )
231+ if ( typeof socket . onMessageBound === ' function' ) {
232+ socket . removeListener ( ' message' , socket . onMessageBound )
256233 }
257234 socket . onMessageBound = null
258235
259- if ( typeof socket . onErrorBound === " function" ) {
260- socket . removeListener ( " error" , socket . onErrorBound )
236+ if ( typeof socket . onErrorBound === ' function' ) {
237+ socket . removeListener ( ' error' , socket . onErrorBound )
261238 }
262239 socket . onErrorBound = null
263240
264- if ( typeof socket . onCloseBound === " function" ) {
265- socket . removeListener ( " close" , socket . onCloseBound )
241+ if ( typeof socket . onCloseBound === ' function' ) {
242+ socket . removeListener ( ' close' , socket . onCloseBound )
266243 }
267244 socket . onCloseBound = null
268245 }
269246
270247 const onWebSocketError = ( socket , err ) => {
271- debug ( " websocket error %s" , err . message || err )
272- server . emit ( " warning" , err )
248+ debug ( ' websocket error %s' , err . message || err )
249+ server . emit ( ' warning' , err )
273250 onWebSocketClose ( socket )
274251 }
275252
@@ -281,17 +258,17 @@ function setupWebSocketServer(server) {
281258 }
282259
283260 ws . address = ( ) => server . http . address ( )
284- ws . on ( " connection" , onConnection )
285- ws . on ( " error" , ( err ) => onError ( err ) )
261+ ws . on ( ' connection' , onConnection )
262+ ws . on ( ' error' , ( err ) => onError ( err ) )
286263
287264 server . ws = ws
288265}
289266
290- function createWebSocketServer ( server , onListening ) {
267+ function createWebSocketServer ( server , onListening ) {
291268 setupHttpService ( server , onListening )
292269 setupWebSocketServer ( server )
293270}
294271
295272module . exports = createWebSocketServer
296273
297- function noop ( ) { }
274+ function noop ( ) { }
0 commit comments