Skip to content

Commit 45803d6

Browse files
committed
WIP
1 parent 3833c4e commit 45803d6

File tree

1 file changed

+29
-26
lines changed

1 file changed

+29
-26
lines changed

lib/client.js

Lines changed: 29 additions & 26 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,13 +1178,17 @@ 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()
@@ -1197,14 +1198,18 @@ async function connect (client) {
11971198
util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
11981199
})
11991200

1200-
addListener(socket, 'close', () => {
1201-
if (!socket[kError] && parser.statusCode && !parser.shouldKeepAlive) {
1201+
addListener(socket, 'close', function () {
1202+
const { [kParser]: parser } = this
1203+
1204+
if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
12021205
// We treat all incoming data so far as a valid response.
12031206
parser.onMessageComplete()
12041207
}
12051208

1206-
socket[kParser].destroy()
1207-
socket[kParser] = null
1209+
this[kParser].destroy()
1210+
this[kParser] = null
1211+
1212+
onSocketClose()
12081213
})
12091214

12101215
client[kSocket] = socket
@@ -1215,8 +1220,6 @@ async function connect (client) {
12151220
socket[kClient] = client
12161221
socket[kError] = null
12171222

1218-
addListener(socket, 'close', onSocketClose)
1219-
12201223
if (channels.connected.hasSubscribers) {
12211224
channels.connected.publish({
12221225
connectParams: {

0 commit comments

Comments
 (0)