@@ -31,15 +31,15 @@ module.exports = class Interceptor {
31
31
this . _proxyReq = proxyReq ;
32
32
this . _proxyRes = proxyRes ;
33
33
this . _proxySocket = proxySocket ;
34
- this . _isSocketOpened = true ;
34
+ this . _isClientSocketOpen = true ;
35
+ this . _isServerSocketOpen = true ;
35
36
36
37
this . _configure ( ) ;
37
38
}
38
39
39
40
_configure ( ) {
40
- this . _proxySocket . on ( 'close' , ( ) => {
41
- this . _isSocketOpened = false ;
42
- } ) ;
41
+ this . _proxySocket . on ( 'close' , ( ) => this . _isClientSocketOpen = false ) ;
42
+ this . _socket . on ( 'close' , ( ) => this . _isServerSocketOpen = false ) ;
43
43
44
44
const secWsExtensions = this . _proxyRes . headers [ 'sec-websocket-extensions' ] ;
45
45
const extensions = Extensions . parse ( secWsExtensions ) ;
@@ -50,10 +50,11 @@ module.exports = class Interceptor {
50
50
this . _serverExtensions = this . _isCompressed ? acceptExtensions ( { extensions, isServer : true } ) : null ;
51
51
}
52
52
53
- _getDataSender ( { sender, event, options} ) {
53
+ _getDataSender ( { sender, dataSendCond , event, options} ) {
54
54
return ( { data, binary = false } ) => {
55
55
const opts = Object . assign ( { fin : true , compress : this . _isCompressed , binary} , options ) ;
56
- sender . send ( data , opts ) ;
56
+
57
+ dataSendCond ( ) && sender . send ( data , opts ) ;
57
58
58
59
this . _proxyReq . emit ( event , { data, binary} ) ;
59
60
} ;
@@ -82,11 +83,12 @@ module.exports = class Interceptor {
82
83
83
84
// frame must be masked when send from client to server - https://tools.ietf.org/html/rfc6455#section-5.3
84
85
const options = { mask : true } ;
85
- const dataSender = this . _getDataSender ( { sender, event : 'wsClientMsg' , options} ) ;
86
+ const dataSendCond = ( ) => this . _isClientSocketOpen ;
87
+ const dataSender = this . _getDataSender ( { sender, dataSendCond, event : 'wsClientMsg' , options} ) ;
86
88
87
89
receiver . ontext = this . _getMsgHandler ( { interceptor : this . _options . wsInterceptClientMsg , dataSender, binary : false } ) ;
88
90
receiver . onbinary = this . _getMsgHandler ( { interceptor : this . _options . wsInterceptClientMsg , dataSender, binary : true } ) ;
89
- receiver . onclose = ( code , msg , { masked : mask } ) => this . _isSocketOpened && sender . close ( code , msg , mask ) ;
91
+ receiver . onclose = ( code , msg , { masked : mask } ) => this . _isClientSocketOpen && sender . close ( code , msg , mask ) ;
90
92
91
93
this . _socket . on ( 'data' , ( data ) => receiver . add ( data ) ) ;
92
94
}
@@ -97,11 +99,12 @@ module.exports = class Interceptor {
97
99
this . _proxyReq . emit ( 'serverSenderInited' , sender ) ;
98
100
99
101
const options = { mask : false } ;
100
- const dataSender = this . _getDataSender ( { sender, event : 'wsServerMsg' , options} ) ;
102
+ const dataSendCond = ( ) => this . _isServerSocketOpen ;
103
+ const dataSender = this . _getDataSender ( { sender, dataSendCond, event : 'wsServerMsg' , options} ) ;
101
104
102
105
receiver . ontext = this . _getMsgHandler ( { interceptor : this . _options . wsInterceptServerMsg , dataSender, binary : false } ) ;
103
106
receiver . onbinary = this . _getMsgHandler ( { interceptor : this . _options . wsInterceptServerMsg , dataSender, binary : true } ) ;
104
- receiver . onclose = ( code , msg , { masked : mask } ) => this . _isSocketOpened && sender . close ( code , msg , mask ) ;
107
+ receiver . onclose = ( code , msg , { masked : mask } ) => this . _isServerSocketOpen && sender . close ( code , msg , mask ) ;
105
108
106
109
this . _proxySocket . on ( 'data' , ( data ) => receiver . add ( data ) ) ;
107
110
}
0 commit comments