@@ -1107,8 +1107,7 @@ async function connect (client) {
1107
1107
1108
1108
assert ( socket )
1109
1109
1110
- const isH2 = socket . alpnProtocol === 'h2'
1111
- if ( isH2 ) {
1110
+ if ( socket . alpnProtocol === 'h2' ) {
1112
1111
if ( ! h2ExperimentalWarned ) {
1113
1112
h2ExperimentalWarned = true
1114
1113
process . emitWarning ( 'H2 support is experimental, expect them to change at any time.' , {
@@ -1122,32 +1121,30 @@ async function connect (client) {
1122
1121
} )
1123
1122
1124
1123
client [ kHTTPConnVersion ] = 'h2'
1125
- session . on ( 'error' , err => {
1124
+ session . on ( 'error' , function ( err ) {
1126
1125
assert ( err . code !== 'ERR_TLS_CERT_ALTNAME_INVALID' )
1127
1126
1128
- session [ kError ] = err
1127
+ this [ kError ] = err
1129
1128
1130
- onError ( session [ kClient ] , err )
1129
+ onError ( this [ kClient ] , err )
1131
1130
} )
1132
- session . on ( 'frameError' , ( type , code , id ) => {
1131
+ session . on ( 'frameError' , function ( type , code , id ) {
1133
1132
if ( id === 0 ) {
1134
1133
const err = new InformationalError ( `HTTP/2: "frameError" received - type ${ type } , code ${ code } ` )
1135
- util . destroy ( session , err )
1134
+ util . destroy ( this , err )
1136
1135
util . destroy ( socket , err )
1137
1136
}
1138
1137
} )
1139
- session . on ( 'end' , ( ) => {
1138
+ session . on ( 'end' , function ( ) {
1140
1139
const err = new SocketError ( 'other side closed' )
1141
- util . destroy ( session , err )
1140
+ util . destroy ( this , err )
1142
1141
util . destroy ( socket , err )
1143
1142
} )
1144
- session . on ( 'goaway' , ( code ) => {
1145
- // TODO (fix): How is this different from onSOcketClose?
1146
-
1147
- session [ kError ] = new InformationalError ( `HTTP/2: "GOAWAY" frame received with code ${ code } ` )
1148
-
1143
+ session . on ( 'goaway' , function ( code ) {
1144
+ this [ kError ] = new InformationalError ( `HTTP/2: "GOAWAY" frame received with code ${ code } ` )
1149
1145
onSocketClose . call ( session )
1150
1146
} )
1147
+ session . on ( 'close' , onSocketClose )
1151
1148
session . unref ( )
1152
1149
1153
1150
client [ kSocket ] = session
@@ -1157,15 +1154,15 @@ async function connect (client) {
1157
1154
llhttpPromise = null
1158
1155
}
1159
1156
1160
- const parser = new Parser ( client , socket , llhttpInstance )
1161
-
1162
1157
socket [ kNoRef ] = false
1163
1158
socket [ kWriting ] = false
1164
1159
socket [ kReset ] = false
1165
1160
socket [ kBlocking ] = false
1166
- socket [ kParser ] = parser
1161
+ socket [ kParser ] = new Parser ( client , socket , llhttpInstance )
1162
+
1163
+ addListener ( socket , 'error' , function ( err ) {
1164
+ const { [ kParser ] : parser } = this
1167
1165
1168
- addListener ( socket , 'error' , err => {
1169
1166
// On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded
1170
1167
// to the user.
1171
1168
if ( err . code === 'ECONNRESET' && parser . statusCode && ! parser . shouldKeepAlive ) {
@@ -1181,30 +1178,37 @@ async function connect (client) {
1181
1178
onError ( this [ kClient ] , err )
1182
1179
} )
1183
1180
1184
- addListener ( socket , 'readable' , ( ) => {
1181
+ addListener ( socket , 'readable' , function ( ) {
1182
+ const { [ kParser ] : parser } = this
1183
+
1185
1184
if ( parser ) {
1186
1185
parser . readMore ( )
1187
1186
}
1188
1187
} )
1189
1188
1190
- addListener ( socket , 'end' , ( ) => {
1189
+ addListener ( socket , 'end' , function ( ) {
1190
+ const { [ kParser ] : parser } = this
1191
+
1191
1192
if ( parser && parser . statusCode && ! parser . shouldKeepAlive ) {
1192
1193
// We treat all incoming data so far as a valid response.
1193
1194
parser . onMessageComplete ( )
1194
- return
1195
+ } else {
1196
+ util . destroy ( this , new SocketError ( 'other side closed' , util . getSocketInfo ( this ) ) )
1195
1197
}
1196
-
1197
- util . destroy ( this , new SocketError ( 'other side closed' , util . getSocketInfo ( this ) ) )
1198
1198
} )
1199
1199
1200
- addListener ( socket , 'close' , ( ) => {
1201
- if ( ! socket [ kError ] && parser . statusCode && ! parser . shouldKeepAlive ) {
1200
+ addListener ( socket , 'close' , function ( ) {
1201
+ const { [ kParser ] : parser } = this
1202
+
1203
+ if ( ! this [ kError ] && parser . statusCode && ! parser . shouldKeepAlive ) {
1202
1204
// We treat all incoming data so far as a valid response.
1203
1205
parser . onMessageComplete ( )
1204
1206
}
1205
1207
1206
- socket [ kParser ] . destroy ( )
1207
- socket [ kParser ] = null
1208
+ this [ kParser ] . destroy ( )
1209
+ this [ kParser ] = null
1210
+
1211
+ onSocketClose ( )
1208
1212
} )
1209
1213
1210
1214
client [ kSocket ] = socket
@@ -1215,8 +1219,6 @@ async function connect (client) {
1215
1219
socket [ kClient ] = client
1216
1220
socket [ kError ] = null
1217
1221
1218
- addListener ( socket , 'close' , onSocketClose )
1219
-
1220
1222
if ( channels . connected . hasSubscribers ) {
1221
1223
channels . connected . publish ( {
1222
1224
connectParams : {
0 commit comments