@@ -541,7 +541,7 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, options
541
541
// This request is not WebSocket request
542
542
return ;
543
543
}
544
-
544
+
545
545
// Turn of all bufferings
546
546
// For server set KeepAlive
547
547
// For client set encoding
@@ -640,6 +640,15 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, options
640
640
// Make the outgoing WebSocket request
641
641
var reverseProxy = agent . appendMessage ( outgoing ) ;
642
642
643
+ function proxyError ( err ) {
644
+ reverseProxy . end ( ) ;
645
+ if ( self . emit ( 'webSocketProxyError' , req , socket , head ) ) {
646
+ return ;
647
+ }
648
+
649
+ socket . end ( ) ;
650
+ }
651
+
643
652
//
644
653
// Here we set the incoming `req`, `socket` and `head` data to the outgoing
645
654
// request so that we can reuse this data later on in the closure scope
@@ -665,7 +674,8 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, options
665
674
agent . on ( 'upgrade' , function ( _ , remoteSocket , head ) {
666
675
//
667
676
// Prepare the socket for the reverseProxy request and begin to
668
- // stream data between the two sockets
677
+ // stream data between the two sockets. Here it is important to
678
+ // note that `remoteSocket._httpMessage === reverseProxy`.
669
679
//
670
680
_socket ( remoteSocket , true ) ;
671
681
onUpgrade ( remoteSocket . _httpMessage , remoteSocket ) ;
@@ -705,26 +715,19 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, options
705
715
socket . write ( sdata ) ;
706
716
socket . write ( data ) ;
707
717
}
708
- catch ( e ) {
709
- reverseProxy . end ( ) ;
710
- socket . end ( ) ;
718
+ catch ( ex ) {
719
+ proxyError ( ex )
711
720
}
712
721
713
722
// Catch socket errors
714
- socket . on ( 'error' , function ( ) {
715
- reverseProxy . end ( ) ;
716
- socket . end ( ) ;
717
- } ) ;
723
+ socket . on ( 'error' , proxyError ) ;
718
724
719
725
// Remove data listener now that the 'handshake' is complete
720
726
reverseProxy . socket . removeListener ( 'data' , handshake ) ;
721
727
} ) ;
722
728
}
723
729
724
- reverseProxy . on ( 'error' , function ( err ) {
725
- reverseProxy . end ( ) ;
726
- socket . end ( ) ;
727
- } ) ;
730
+ reverseProxy . on ( 'error' , proxyError ) ;
728
731
729
732
try {
730
733
//
@@ -733,8 +736,7 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, options
733
736
reverseProxy . write ( head ) ;
734
737
}
735
738
catch ( ex ) {
736
- reverseProxy . end ( ) ;
737
- socket . end ( ) ;
739
+ proxyError ( ex ) ;
738
740
}
739
741
740
742
//
0 commit comments