summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/_http_common.js10
-rw-r--r--lib/_http_server.js23
-rw-r--r--lib/https.js6
3 files changed, 33 insertions, 6 deletions
diff --git a/lib/_http_common.js b/lib/_http_common.js
index b4caf5939e..a7e8b0c59b 100644
--- a/lib/_http_common.js
+++ b/lib/_http_common.js
@@ -34,6 +34,7 @@ const {
const debug = require('util').debuglog('http');
+const kIncomingMessage = Symbol('IncomingMessage');
const kOnHeaders = HTTPParser.kOnHeaders | 0;
const kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0;
const kOnBody = HTTPParser.kOnBody | 0;
@@ -73,7 +74,11 @@ function parserOnHeadersComplete(versionMajor, versionMinor, headers, method,
parser._url = '';
}
- parser.incoming = new IncomingMessage(parser.socket);
+ // Parser is also used by http client
+ var ParserIncomingMessage = parser.socket && parser.socket.server ?
+ parser.socket.server[kIncomingMessage] : IncomingMessage;
+
+ parser.incoming = new ParserIncomingMessage(parser.socket);
parser.incoming.httpVersionMajor = versionMajor;
parser.incoming.httpVersionMinor = versionMinor;
parser.incoming.httpVersion = `${versionMajor}.${versionMinor}`;
@@ -300,5 +305,6 @@ module.exports = {
freeParser,
httpSocketSetup,
methods,
- parsers
+ parsers,
+ kIncomingMessage
};
diff --git a/lib/_http_server.js b/lib/_http_server.js
index 496ebf285c..111a8525c4 100644
--- a/lib/_http_server.js
+++ b/lib/_http_server.js
@@ -33,6 +33,7 @@ const {
continueExpression,
chunkExpression,
httpSocketSetup,
+ kIncomingMessage,
_checkInvalidHeaderChar: checkInvalidHeaderChar
} = require('_http_common');
const { OutgoingMessage } = require('_http_outgoing');
@@ -41,9 +42,12 @@ const {
defaultTriggerAsyncIdScope,
getOrSetAsyncId
} = require('internal/async_hooks');
+const { IncomingMessage } = require('_http_incoming');
const errors = require('internal/errors');
const Buffer = require('buffer').Buffer;
+const kServerResponse = Symbol('ServerResponse');
+
const STATUS_CODES = {
100: 'Continue',
101: 'Switching Protocols',
@@ -263,9 +267,19 @@ function writeHead(statusCode, reason, obj) {
// Docs-only deprecated: DEP0063
ServerResponse.prototype.writeHeader = ServerResponse.prototype.writeHead;
+function Server(options, requestListener) {
+ if (!(this instanceof Server)) return new Server(options, requestListener);
+
+ if (typeof options === 'function') {
+ requestListener = options;
+ options = {};
+ } else if (options == null || typeof options === 'object') {
+ options = util._extend({}, options);
+ }
+
+ this[kIncomingMessage] = options.IncomingMessage || IncomingMessage;
+ this[kServerResponse] = options.ServerResponse || ServerResponse;
-function Server(requestListener) {
- if (!(this instanceof Server)) return new Server(requestListener);
net.Server.call(this, { allowHalfOpen: true });
if (requestListener) {
@@ -587,7 +601,7 @@ function parserOnIncoming(server, socket, state, req, keepAlive) {
}
}
- var res = new ServerResponse(req);
+ var res = new server[kServerResponse](req);
res._onPendingData = updateOutgoingData.bind(undefined, socket, state);
res.shouldKeepAlive = keepAlive;
@@ -690,5 +704,6 @@ module.exports = {
STATUS_CODES,
Server,
ServerResponse,
- _connectionListener: connectionListener
+ _connectionListener: connectionListener,
+ kServerResponse
};
diff --git a/lib/https.js b/lib/https.js
index 5013791fe2..741ce84d2f 100644
--- a/lib/https.js
+++ b/lib/https.js
@@ -36,6 +36,9 @@ const { inherits } = util;
const debug = util.debuglog('https');
const { urlToOptions, searchParamsSymbol } = require('internal/url');
const errors = require('internal/errors');
+const { IncomingMessage, ServerResponse } = require('http');
+const { kIncomingMessage } = require('_http_common');
+const { kServerResponse } = require('_http_server');
function Server(opts, requestListener) {
if (!(this instanceof Server)) return new Server(opts, requestListener);
@@ -57,6 +60,9 @@ function Server(opts, requestListener) {
opts.ALPNProtocols = ['http/1.1'];
}
+ this[kIncomingMessage] = opts.IncomingMessage || IncomingMessage;
+ this[kServerResponse] = opts.ServerResponse || ServerResponse;
+
tls.Server.call(this, opts, _connectionListener);
this.httpAllowHalfOpen = false;