@@ -236,15 +236,17 @@ class Server extends EventEmitter {
236
236
message : Server . errorMessages [ errorCode ] ,
237
237
context : errorContext
238
238
} ) ;
239
- sendErrorMessage ( req , res , errorCode , errorContext ) ;
239
+ abortRequest ( res , errorCode , errorContext ) ;
240
240
return ;
241
241
}
242
242
243
243
if ( req . _query . sid ) {
244
244
debug ( "setting new request for existing client" ) ;
245
245
this . clients [ req . _query . sid ] . transport . onRequest ( req ) ;
246
246
} else {
247
- this . handshake ( req . _query . transport , req ) ;
247
+ const closeConnection = ( errorCode , errorContext ) =>
248
+ abortRequest ( res , errorCode , errorContext ) ;
249
+ this . handshake ( req . _query . transport , req , closeConnection ) ;
248
250
}
249
251
} ;
250
252
@@ -273,9 +275,11 @@ class Server extends EventEmitter {
273
275
*
274
276
* @param {String } transport name
275
277
* @param {Object } request object
278
+ * @param {Function } closeConnection
279
+ *
276
280
* @api private
277
281
*/
278
- async handshake ( transportName , req ) {
282
+ async handshake ( transportName , req , closeConnection ) {
279
283
const protocol = req . _query . EIO === "4" ? 4 : 3 ; // 3rd revision by default
280
284
if ( protocol === 3 && ! this . opts . allowEIO3 ) {
281
285
debug ( "unsupported protocol version" ) ;
@@ -288,11 +292,7 @@ class Server extends EventEmitter {
288
292
protocol
289
293
}
290
294
} ) ;
291
- sendErrorMessage (
292
- req ,
293
- req . res ,
294
- Server . errors . UNSUPPORTED_PROTOCOL_VERSION
295
- ) ;
295
+ closeConnection ( Server . errors . UNSUPPORTED_PROTOCOL_VERSION ) ;
296
296
return ;
297
297
}
298
298
@@ -310,7 +310,7 @@ class Server extends EventEmitter {
310
310
error : e
311
311
}
312
312
} ) ;
313
- sendErrorMessage ( req , req . res , Server . errors . BAD_REQUEST ) ;
313
+ closeConnection ( Server . errors . BAD_REQUEST ) ;
314
314
return ;
315
315
}
316
316
@@ -341,7 +341,7 @@ class Server extends EventEmitter {
341
341
error : e
342
342
}
343
343
} ) ;
344
- sendErrorMessage ( req , req . res , Server . errors . BAD_REQUEST ) ;
344
+ closeConnection ( Server . errors . BAD_REQUEST ) ;
345
345
return ;
346
346
}
347
347
const socket = new Socket ( id , this , transport , req , protocol ) ;
@@ -389,16 +389,16 @@ class Server extends EventEmitter {
389
389
message : Server . errorMessages [ errorCode ] ,
390
390
context : errorContext
391
391
} ) ;
392
- abortConnection ( socket , errorCode , errorContext ) ;
392
+ abortUpgrade ( socket , errorCode , errorContext ) ;
393
393
return ;
394
394
}
395
395
396
396
const head = Buffer . from ( upgradeHead ) ; // eslint-disable-line node/no-deprecated-api
397
397
upgradeHead = null ;
398
398
399
399
// delegate to ws
400
- this . ws . handleUpgrade ( req , socket , head , conn => {
401
- this . onWebSocket ( req , conn ) ;
400
+ this . ws . handleUpgrade ( req , socket , head , websocket => {
401
+ this . onWebSocket ( req , socket , websocket ) ;
402
402
} ) ;
403
403
} ) ;
404
404
}
@@ -409,40 +409,40 @@ class Server extends EventEmitter {
409
409
* @param {ws.Socket } websocket
410
410
* @api private
411
411
*/
412
- onWebSocket ( req , socket ) {
413
- socket . on ( "error" , onUpgradeError ) ;
412
+ onWebSocket ( req , socket , websocket ) {
413
+ websocket . on ( "error" , onUpgradeError ) ;
414
414
415
415
if (
416
416
transports [ req . _query . transport ] !== undefined &&
417
417
! transports [ req . _query . transport ] . prototype . handlesUpgrades
418
418
) {
419
419
debug ( "transport doesnt handle upgraded requests" ) ;
420
- socket . close ( ) ;
420
+ websocket . close ( ) ;
421
421
return ;
422
422
}
423
423
424
424
// get client id
425
425
const id = req . _query . sid ;
426
426
427
427
// keep a reference to the ws.Socket
428
- req . websocket = socket ;
428
+ req . websocket = websocket ;
429
429
430
430
if ( id ) {
431
431
const client = this . clients [ id ] ;
432
432
if ( ! client ) {
433
433
debug ( "upgrade attempt for closed client" ) ;
434
- socket . close ( ) ;
434
+ websocket . close ( ) ;
435
435
} else if ( client . upgrading ) {
436
436
debug ( "transport has already been trying to upgrade" ) ;
437
- socket . close ( ) ;
437
+ websocket . close ( ) ;
438
438
} else if ( client . upgraded ) {
439
439
debug ( "transport had already been upgraded" ) ;
440
- socket . close ( ) ;
440
+ websocket . close ( ) ;
441
441
} else {
442
442
debug ( "upgrading existing transport" ) ;
443
443
444
444
// transport error handling takes over
445
- socket . removeListener ( "error" , onUpgradeError ) ;
445
+ websocket . removeListener ( "error" , onUpgradeError ) ;
446
446
447
447
const transport = new transports [ req . _query . transport ] ( req ) ;
448
448
if ( req . _query && req . _query . b64 ) {
@@ -455,14 +455,16 @@ class Server extends EventEmitter {
455
455
}
456
456
} else {
457
457
// transport error handling takes over
458
- socket . removeListener ( "error" , onUpgradeError ) ;
458
+ websocket . removeListener ( "error" , onUpgradeError ) ;
459
459
460
- this . handshake ( req . _query . transport , req ) ;
460
+ const closeConnection = ( errorCode , errorContext ) =>
461
+ abortUpgrade ( socket , errorCode , errorContext ) ;
462
+ this . handshake ( req . _query . transport , req , closeConnection ) ;
461
463
}
462
464
463
465
function onUpgradeError ( ) {
464
466
debug ( "websocket error before upgrade" ) ;
465
- // socket .close() not needed
467
+ // websocket .close() not needed
466
468
}
467
469
}
468
470
@@ -548,17 +550,16 @@ Server.errorMessages = {
548
550
} ;
549
551
550
552
/**
551
- * Sends an Engine.IO Error Message
553
+ * Close the HTTP long-polling request
552
554
*
553
- * @param req - the request object
554
555
* @param res - the response object
555
556
* @param errorCode - the error code
556
557
* @param errorContext - additional error context
557
558
*
558
559
* @api private
559
560
*/
560
561
561
- function sendErrorMessage ( req , res , errorCode , errorContext ) {
562
+ function abortRequest ( res , errorCode , errorContext ) {
562
563
const statusCode = errorCode === Server . errors . FORBIDDEN ? 403 : 400 ;
563
564
const message =
564
565
errorContext && errorContext . message
@@ -575,7 +576,7 @@ function sendErrorMessage(req, res, errorCode, errorContext) {
575
576
}
576
577
577
578
/**
578
- * Closes the connection
579
+ * Close the WebSocket connection
579
580
*
580
581
* @param {net.Socket } socket
581
582
* @param {string } errorCode - the error code
@@ -584,7 +585,7 @@ function sendErrorMessage(req, res, errorCode, errorContext) {
584
585
* @api private
585
586
*/
586
587
587
- function abortConnection ( socket , errorCode , errorContext ) {
588
+ function abortUpgrade ( socket , errorCode , errorContext = { } ) {
588
589
socket . on ( "error" , ( ) => {
589
590
debug ( "ignoring error from closed connection" ) ;
590
591
} ) ;
0 commit comments