@@ -628,9 +628,10 @@ Proxy.prototype._onWebSocketServerConnect = function(isSSL, ws, upgradeReq) {
628
628
ctx . clientToProxyWebSocket . on ( 'ping' , self . _onWebSocketFrame . bind ( self , ctx , 'ping' , false ) ) ;
629
629
ctx . clientToProxyWebSocket . on ( 'pong' , self . _onWebSocketFrame . bind ( self , ctx , 'pong' , false ) ) ;
630
630
ctx . clientToProxyWebSocket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
631
+ ctx . clientToProxyWebSocket . _socket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
631
632
ctx . clientToProxyWebSocket . on ( 'close' , self . _onWebSocketClose . bind ( self , ctx , false ) ) ;
632
633
ctx . clientToProxyWebSocket . _socket . pause ( ) ;
633
-
634
+
634
635
var url ;
635
636
if ( upgradeReq . url == '' || / ^ \/ / . test ( upgradeReq . url ) ) {
636
637
var hostPort = Proxy . parseHostAndPort ( upgradeReq ) ;
@@ -665,6 +666,7 @@ Proxy.prototype._onWebSocketServerConnect = function(isSSL, ws, upgradeReq) {
665
666
ctx . proxyToServerWebSocket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
666
667
ctx . proxyToServerWebSocket . on ( 'close' , self . _onWebSocketClose . bind ( self , ctx , true ) ) ;
667
668
ctx . proxyToServerWebSocket . on ( 'open' , function ( ) {
669
+ ctx . proxyToServerWebSocket . _socket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
668
670
if ( ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
669
671
ctx . clientToProxyWebSocket . _socket . resume ( ) ;
670
672
}
@@ -816,7 +818,7 @@ Proxy.prototype._onHttpServerRequest = function(isSSL, clientToProxyRequest, pro
816
818
}
817
819
if ( self . responseContentPotentiallyModified || ctx . responseContentPotentiallyModified ) {
818
820
ctx . serverToProxyResponse . headers [ 'transfer-encoding' ] = 'chunked' ;
819
- delete ctx . serverToProxyResponse . headers [ 'content-length' ] ;
821
+ delete ctx . serverToProxyResponse . headers [ 'content-length' ] ;
820
822
}
821
823
if ( self . keepAlive ) {
822
824
if ( ctx . clientToProxyRequest . headers [ 'proxy-connection' ] ) {
@@ -991,14 +993,14 @@ Proxy.prototype._onWebSocketClose = function(ctx, closedByServer, code, message)
991
993
}
992
994
if ( ctx . clientToProxyWebSocket . readyState !== ctx . proxyToServerWebSocket . readyState ) {
993
995
try {
994
- if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
995
- ctx . proxyToServerWebSocket . close ( code , message ) ;
996
+ if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
997
+ code === 1005 ? ctx . proxyToServerWebSocket . close ( ) : ctx . proxyToServerWebSocket . close ( code , message ) ;
996
998
} else if ( ctx . proxyToServerWebSocket . readyState === WebSocket . CLOSED && ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
997
- ctx . clientToProxyWebSocket . close ( code , message ) ;
999
+ code === 1005 ? ctx . proxyToServerWebSocket . close ( ) : ctx . clientToProxyWebSocket . close ( code , message ) ;
998
1000
}
999
- } catch ( err ) {
1000
- return self . _onWebSocketError ( ctx , err ) ;
1001
- }
1001
+ } catch ( err ) {
1002
+ return self . _onWebSocketError ( ctx , err ) ;
1003
+ }
1002
1004
}
1003
1005
} ) ;
1004
1006
}
@@ -1014,10 +1016,14 @@ Proxy.prototype._onWebSocketError = function(ctx, err) {
1014
1016
} ) ;
1015
1017
}
1016
1018
if ( ctx . proxyToServerWebSocket && ctx . clientToProxyWebSocket . readyState !== ctx . proxyToServerWebSocket . readyState ) {
1017
- if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
1018
- ctx . proxyToServerWebSocket . close ( ) ;
1019
- } else if ( ctx . proxyToServerWebSocket . readyState === WebSocket . CLOSED && ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
1020
- ctx . clientToProxyWebSocket . close ( ) ;
1019
+ try {
1020
+ if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
1021
+ ctx . proxyToServerWebSocket . close ( ) ;
1022
+ } else if ( ctx . proxyToServerWebSocket . readyState === WebSocket . CLOSED && ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
1023
+ ctx . clientToProxyWebSocket . close ( ) ;
1024
+ }
1025
+ } catch ( err ) {
1026
+ // ignore
1021
1027
}
1022
1028
}
1023
1029
} ;
0 commit comments