(statusCode, upgrade, shouldKeepAlive)
| 54337 | client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade")); |
| 54338 | try { |
| 54339 | request3.onUpgrade(statusCode, headers, socket); |
| 54340 | } catch (err) { |
| 54341 | util4.destroy(socket, err); |
| 54342 | } |
| 54343 | resume2(client); |
| 54344 | } |
| 54345 | onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { |
| 54346 | const { client, socket, headers, statusText } = this; |
| 54347 | if (socket.destroyed) { |
| 54348 | return -1; |
| 54349 | } |
| 54350 | const request3 = client[kQueue][client[kRunningIdx]]; |
| 54351 | if (!request3) { |
| 54352 | return -1; |
| 54353 | } |
| 54354 | assert2(!this.upgrade); |
| 54355 | assert2(this.statusCode < 200); |
| 54356 | if (statusCode === 100) { |
| 54357 | util4.destroy(socket, new SocketError("bad response", util4.getSocketInfo(socket))); |
| 54358 | return -1; |
| 54359 | } |
| 54360 | if (upgrade && !request3.upgrade) { |
| 54361 | util4.destroy(socket, new SocketError("bad upgrade", util4.getSocketInfo(socket))); |
| 54362 | return -1; |
| 54363 | } |
| 54364 | assert2.strictEqual(this.timeoutType, TIMEOUT_HEADERS); |
| 54365 | this.statusCode = statusCode; |
| 54366 | this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD. |
| 54367 | request3.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive"; |
| 54368 | if (this.statusCode >= 200) { |
| 54369 | const bodyTimeout = request3.bodyTimeout != null ? request3.bodyTimeout : client[kBodyTimeout]; |
| 54370 | this.setTimeout(bodyTimeout, TIMEOUT_BODY); |
| 54371 | } else if (this.timeout) { |
| 54372 | if (this.timeout.refresh) { |
| 54373 | this.timeout.refresh(); |
| 54374 | } |
| 54375 | } |
| 54376 | if (request3.method === "CONNECT") { |
| 54377 | assert2(client[kRunning] === 1); |
| 54378 | this.upgrade = true; |
| 54379 | return 2; |
| 54380 | } |
| 54381 | if (upgrade) { |
| 54382 | assert2(client[kRunning] === 1); |
| 54383 | this.upgrade = true; |
| 54384 | return 2; |
| 54385 | } |
| 54386 | assert2(this.headers.length % 2 === 0); |
| 54387 | this.headers = []; |
| 54388 | this.headersSize = 0; |
| 54389 | if (this.shouldKeepAlive && client[kPipelining]) { |
| 54390 | const keepAliveTimeout = this.keepAlive ? util4.parseKeepAliveTimeout(this.keepAlive) : null; |
| 54391 | if (keepAliveTimeout != null) { |
| 54392 | const timeout = Math.min( |
| 54393 | keepAliveTimeout - client[kKeepAliveTimeoutThreshold], |
| 54394 | client[kKeepAliveMaxTimeout] |
| 54395 | ); |
| 54396 | if (timeout <= 0) { |
no test coverage detected