http2: support net.Server options

Make `http2.createServer()` support `net.Server` options.

PR-URL: https://github.com/nodejs/node/pull/27782
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
This commit is contained in:
Luigi Pinca 2019-05-20 14:59:20 +02:00 committed by Daniel Bevenius
parent d2cabee64c
commit 165916b1f3
3 changed files with 55 additions and 2 deletions

View File

@ -1912,6 +1912,10 @@ error will be thrown.
<!-- YAML
added: v8.4.0
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/27782
description: The `options` parameter now supports `net.createServer()`
options.
- version: v8.9.3
pr-url: https://github.com/nodejs/node/pull/17105
description: Added the `maxOutstandingPings` option with a default limit of
@ -1987,6 +1991,7 @@ changes:
`Http2ServerResponse` class to use.
Useful for extending the original `Http2ServerResponse`.
**Default:** `Http2ServerResponse`.
* ...: Any [`net.createServer()`][] option can be provided.
* `onRequestHandler` {Function} See [Compatibility API][]
* Returns: {Http2Server}
@ -3466,6 +3471,7 @@ following additional properties:
[`http2.createServer()`]: #http2_http2_createserver_options_onrequesthandler
[`http2session.close()`]: #http2_http2session_close_callback
[`http2stream.pushStream()`]: #http2_http2stream_pushstream_headers_options_callback
[`net.createServer()`]: net.html#net_net_createserver_options_connectionlistener
[`net.Server.close()`]: net.html#net_server_close_callback
[`net.Socket.bufferSize`]: net.html#net_socket_buffersize
[`net.Socket.prototype.ref()`]: net.html#net_socket_ref

View File

@ -2697,8 +2697,9 @@ class Http2SecureServer extends TLSServer {
class Http2Server extends NETServer {
constructor(options, requestListener) {
super(connectionListener);
this[kOptions] = initializeOptions(options);
options = initializeOptions(options);
super(options, connectionListener);
this[kOptions] = options;
this.timeout = 0;
this.on('newListener', setupCompat);
if (typeof requestListener === 'function')

View File

@ -10,6 +10,7 @@ const commonFixtures = require('../common/fixtures');
if (!common.hasCrypto)
common.skip('missing crypto');
const assert = require('assert');
const http2 = require('http2');
const tls = require('tls');
const net = require('net');
@ -48,6 +49,25 @@ server.on('error', common.mustNotCall());
}));
}
// Test that `http2.createServer()` supports `net.Server` options.
{
const server = http2.createServer({ allowHalfOpen: true });
server.on('connection', common.mustCall((socket) => {
assert.strictEqual(socket.allowHalfOpen, true);
socket.end();
server.close();
}));
assert.strictEqual(server.allowHalfOpen, true);
server.listen(0, common.mustCall(() => {
const port = server.address().port;
const socket = net.connect(port, common.mustCall());
socket.resume();
}));
}
// Test the secure server socket timeout.
{
let client;
@ -67,3 +87,29 @@ server.on('error', common.mustNotCall());
}, common.mustCall());
}));
}
// Test that `http2.createSecureServer()` supports `net.Server` options.
{
const server = http2.createSecureServer({
allowHalfOpen: true,
...options
});
server.on('secureConnection', common.mustCall((socket) => {
assert.strictEqual(socket.allowHalfOpen, true);
socket.end();
server.close();
}));
assert.strictEqual(server.allowHalfOpen, true);
server.listen(0, common.mustCall(() => {
const port = server.address().port;
const socket = tls.connect({
port: port,
rejectUnauthorized: false,
ALPNProtocols: ['h2']
}, common.mustCall());
socket.resume();
}));
}