diff --git a/lib/client-base.js b/lib/client-base.js index 52318aee6d2..f23541b765b 100644 --- a/lib/client-base.js +++ b/lib/client-base.js @@ -3,7 +3,6 @@ const { URL } = require('url') const net = require('net') const tls = require('tls') -const { HTTPParser } = require('http-parser-js') const EventEmitter = require('events') const Request = require('./request') const assert = require('assert') @@ -39,6 +38,8 @@ const { kEnqueue, kClient } = require('./symbols') +// TODO: This is not really allowed by Node but it works for now. +const HTTPParser = process.binding('http_parser').HTTPParser // eslint-disable-line const CRLF = Buffer.from('\r\n', 'ascii') const TE_CHUNKED = Buffer.from('transfer-encoding: chunked\r\n', 'ascii') @@ -285,15 +286,31 @@ class ClientBase extends EventEmitter { } } +class HTTPServerAsyncResource { + constructor (type, socket) { + this.type = type + this.socket = socket + } +} + class Parser extends HTTPParser { constructor (client, socket) { - super(HTTPParser.RESPONSE) + super() this.client = client this.socket = socket this.resumeSocket = () => socket.resume() this.read = 0 this.body = null + + this.initialize( + HTTPParser.RESPONSE, + // TODO: What to do with these options? + new HTTPServerAsyncResource('HTTPINCOMINGMESSAGE', socket), + 0, + false, + 0 + ) } /* istanbul ignore next: we don't support trailers yet */ @@ -301,7 +318,8 @@ class Parser extends HTTPParser { // TODO: Handle trailers. } - [HTTPParser.kOnHeadersComplete] ({ statusCode, headers }) { + [HTTPParser.kOnHeadersComplete] (versionMajor, versionMinor, headers, method, + url, statusCode, statusMessage, upgrade, shouldKeepAlive) { const { client, resumeSocket } = this const request = client[kQueue][client[kRunningIdx]] const { signal, opaque } = request diff --git a/package.json b/package.json index dfa0415d7fd..748226014d4 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,6 @@ "standard": "^14.0.0", "tap": "^14.0.0" }, - "dependencies": { - "http-parser-js": "^0.5.2" - }, "pre-commit": [ "coverage" ]