Skip to content

Commit

Permalink
http2: support passing options of http2.connect to net.connect
Browse files Browse the repository at this point in the history
PR-URL: #29816
Fixes: #29811
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Trivikram Kamat <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
  • Loading branch information
ZYSzys authored and BridgeAR committed Oct 9, 2019
1 parent 90562ae commit a240d45
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/internal/http2/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -2920,7 +2920,7 @@ function connect(authority, options, listener) {
} else {
switch (protocol) {
case 'http:':
socket = net.connect(options.port || port, options.host || host);
socket = net.connect({ port, host, ...options });
break;
case 'https:':
socket = tls.connect(port, host, initializeTLSOptions(options, host));
Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-http2-client-port-80.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const net = require('net');

const connect = net.connect;
net.connect = common.mustCall((...args) => {
assert.strictEqual(args[0], '80');
assert.strictEqual(args[0].port, '80');
return connect(...args);
});

Expand Down
42 changes: 42 additions & 0 deletions test/parallel/test-http2-connect-options.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Flags: --expose-internals
'use strict';
const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');

if (!common.hasMultiLocalhost())
common.skip('platform-specific test.');

const http2 = require('http2');
const assert = require('assert');

const server = http2.createServer((req, res) => {
console.log(`Connect from: ${req.connection.remoteAddress}`);
assert.strictEqual(req.connection.remoteAddress, '127.0.0.2');

req.on('end', common.mustCall(() => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(`You are from: ${req.connection.remoteAddress}`);
}));
req.resume();
});

server.listen(0, '127.0.0.1', common.mustCall(() => {
const options = { localAddress: '127.0.0.2' };

const client = http2.connect(
'http://localhost:' + server.address().port,
options
);
const req = client.request({
':path': '/'
});
req.on('data', () => req.resume());
req.on('end', common.mustCall(function() {
client.close();
req.close();
server.close();
process.exit();
}));
req.end();
}));

0 comments on commit a240d45

Please sign in to comment.