Skip to content

Commit be05f4b

Browse files
committed
WIP
1 parent 3833c4e commit be05f4b

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

lib/client.js

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,8 +1107,7 @@ async function connect (client) {
11071107

11081108
assert(socket)
11091109

1110-
const isH2 = socket.alpnProtocol === 'h2'
1111-
if (isH2) {
1110+
if (socket.alpnProtocol === 'h2') {
11121111
if (!h2ExperimentalWarned) {
11131112
h2ExperimentalWarned = true
11141113
process.emitWarning('H2 support is experimental, expect them to change at any time.', {
@@ -1122,32 +1121,30 @@ async function connect (client) {
11221121
})
11231122

11241123
client[kHTTPConnVersion] = 'h2'
1125-
session.on('error', err => {
1124+
session.on('error', function (err) {
11261125
assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
11271126

1128-
session[kError] = err
1127+
this[kError] = err
11291128

1130-
onError(session[kClient], err)
1129+
onError(this[kClient], err)
11311130
})
1132-
session.on('frameError', (type, code, id) => {
1131+
session.on('frameError', function (type, code, id) {
11331132
if (id === 0) {
11341133
const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)
1135-
util.destroy(session, err)
1134+
util.destroy(this, err)
11361135
util.destroy(socket, err)
11371136
}
11381137
})
1139-
session.on('end', () => {
1138+
session.on('end', function () {
11401139
const err = new SocketError('other side closed')
1141-
util.destroy(session, err)
1140+
util.destroy(this, err)
11421141
util.destroy(socket, err)
11431142
})
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}`)
11491145
onSocketClose.call(session)
11501146
})
1147+
session.on('close', onSocketClose)
11511148
session.unref()
11521149

11531150
client[kSocket] = session
@@ -1157,15 +1154,15 @@ async function connect (client) {
11571154
llhttpPromise = null
11581155
}
11591156

1160-
const parser = new Parser(client, socket, llhttpInstance)
1161-
11621157
socket[kNoRef] = false
11631158
socket[kWriting] = false
11641159
socket[kReset] = false
11651160
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
11671165

1168-
addListener(socket, 'error', err => {
11691166
// On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded
11701167
// to the user.
11711168
if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {
@@ -1181,30 +1178,37 @@ async function connect (client) {
11811178
onError(this[kClient], err)
11821179
})
11831180

1184-
addListener(socket, 'readable', () => {
1181+
addListener(socket, 'readable', function () {
1182+
const { [kParser]: parser } = this
1183+
11851184
if (parser) {
11861185
parser.readMore()
11871186
}
11881187
})
11891188

1190-
addListener(socket, 'end', () => {
1189+
addListener(socket, 'end', function () {
1190+
const { [kParser]: parser } = this
1191+
11911192
if (parser && parser.statusCode && !parser.shouldKeepAlive) {
11921193
// We treat all incoming data so far as a valid response.
11931194
parser.onMessageComplete()
1194-
return
1195+
} else {
1196+
util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
11951197
}
1196-
1197-
util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
11981198
})
11991199

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) {
12021204
// We treat all incoming data so far as a valid response.
12031205
parser.onMessageComplete()
12041206
}
12051207

1206-
socket[kParser].destroy()
1207-
socket[kParser] = null
1208+
this[kParser].destroy()
1209+
this[kParser] = null
1210+
1211+
onSocketClose()
12081212
})
12091213

12101214
client[kSocket] = socket
@@ -1215,8 +1219,6 @@ async function connect (client) {
12151219
socket[kClient] = client
12161220
socket[kError] = null
12171221

1218-
addListener(socket, 'close', onSocketClose)
1219-
12201222
if (channels.connected.hasSubscribers) {
12211223
channels.connected.publish({
12221224
connectParams: {

0 commit comments

Comments
 (0)