From ac50259ccb2005bb135d9ed82f17188fc5a5732b Mon Sep 17 00:00:00 2001 From: Robert Jensen Date: Fri, 20 Sep 2019 14:15:16 -0400 Subject: [PATCH 1/3] tls: honor pauseOnConnect option `pauseOnConnect` is now passed along to the net.Socket constructor from the tls.Socket constructor. The `readable` flag must match the value of `pauseOnConnect`. Tests were added to cover all available net.Server options when used in the tls.Server constructor. Fixes: https://github.com/nodejs/node/issues/29620 Refs: https://github.com/nodejs/node/pull/27665 --- lib/_tls_wrap.js | 6 ++++-- test/parallel/test-tls-server-parent-constructor-options.js | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 2921a446cdc4b6..0579676cf2031e 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -411,7 +411,8 @@ function TLSSocket(socket, opts) { net.Socket.call(this, { handle: this._wrapHandle(wrap), allowHalfOpen: socket ? socket.allowHalfOpen : tlsOptions.allowHalfOpen, - readable: false, + pauseOnCreate: tlsOptions.pauseOnConnect, + readable: tlsOptions.pauseOnConnect, writable: false }); @@ -925,7 +926,8 @@ function tlsConnectionListener(rawSocket) { handshakeTimeout: this[kHandshakeTimeout], ALPNProtocols: this.ALPNProtocols, SNICallback: this[kSNICallback] || SNICallback, - enableTrace: this[kEnableTrace] + enableTrace: this[kEnableTrace], + pauseOnConnect: this.pauseOnConnect, }); socket.on('secure', onServerSocketSecure); diff --git a/test/parallel/test-tls-server-parent-constructor-options.js b/test/parallel/test-tls-server-parent-constructor-options.js index 17484c29bae930..f8b34e8b0cab62 100644 --- a/test/parallel/test-tls-server-parent-constructor-options.js +++ b/test/parallel/test-tls-server-parent-constructor-options.js @@ -19,9 +19,11 @@ const options = { { const server = tls.createServer(options, common.mustCall((socket) => { assert.strictEqual(socket.allowHalfOpen, false); + assert.strictEqual(socket.isPaused(), false); })); assert.strictEqual(server.allowHalfOpen, false); + assert.strictEqual(server.pauseOnConnect, false); server.listen(0, common.mustCall(() => { const socket = tls.connect({ @@ -40,13 +42,16 @@ const options = { { const server = tls.createServer({ allowHalfOpen: true, + pauseOnConnect: true, ...options }, common.mustCall((socket) => { assert.strictEqual(socket.allowHalfOpen, true); + assert.strictEqual(socket.isPaused(), true); socket.on('end', socket.end); })); assert.strictEqual(server.allowHalfOpen, true); + assert.strictEqual(server.pauseOnConnect, true); server.listen(0, common.mustCall(() => { const socket = tls.connect({ From 3b0c4639c74e177a16d89ff417e2bce909d96472 Mon Sep 17 00:00:00 2001 From: r1b Date: Wed, 25 Sep 2019 17:18:55 -0400 Subject: [PATCH 2/3] Update lib/_tls_wrap.js Co-Authored-By: Rich Trott --- lib/_tls_wrap.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 0579676cf2031e..774ee789d716f7 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -412,6 +412,7 @@ function TLSSocket(socket, opts) { handle: this._wrapHandle(wrap), allowHalfOpen: socket ? socket.allowHalfOpen : tlsOptions.allowHalfOpen, pauseOnCreate: tlsOptions.pauseOnConnect, + // readable only needed if pauseOnCreate will be handled readable: tlsOptions.pauseOnConnect, writable: false }); From 98eacc4b69ea9b086cc2f2f352cdc277ad9f5f10 Mon Sep 17 00:00:00 2001 From: Robert C Jensen Date: Thu, 26 Sep 2019 01:05:25 -0400 Subject: [PATCH 3/3] fix lint --- lib/_tls_wrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 774ee789d716f7..b0f83674884c5a 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -412,7 +412,7 @@ function TLSSocket(socket, opts) { handle: this._wrapHandle(wrap), allowHalfOpen: socket ? socket.allowHalfOpen : tlsOptions.allowHalfOpen, pauseOnCreate: tlsOptions.pauseOnConnect, - // readable only needed if pauseOnCreate will be handled + // The readable flag is only needed if pauseOnCreate will be handled. readable: tlsOptions.pauseOnConnect, writable: false });