diff options
author | James M Snell <jasnell@gmail.com> | 2018-08-10 13:33:46 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2018-08-15 15:58:41 -0700 |
commit | 32902d09b43e9d7f19eb6178ef5db835652d97c1 (patch) | |
tree | 1e2ebe3a42f0c592555589f8fc830619f66fce3f | |
parent | 755520c4c3f9e1f85268d65ca647dec076e9a17a (diff) | |
download | android-node-v8-32902d09b43e9d7f19eb6178ef5db835652d97c1.tar.gz android-node-v8-32902d09b43e9d7f19eb6178ef5db835652d97c1.tar.bz2 android-node-v8-32902d09b43e9d7f19eb6178ef5db835652d97c1.zip |
http2: emit timeout on compat request and response
Fixes: https://github.com/nodejs/node/issues/20079
PR-URL: https://github.com/nodejs/node/pull/22252
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
-rw-r--r-- | lib/internal/http2/compat.js | 9 | ||||
-rw-r--r-- | test/parallel/test-http2-compat-serverrequest-settimeout.js | 1 | ||||
-rw-r--r-- | test/parallel/test-http2-compat-serverresponse-settimeout.js | 1 |
3 files changed, 11 insertions, 0 deletions
diff --git a/lib/internal/http2/compat.js b/lib/internal/http2/compat.js index 33f636f69b..40276d8723 100644 --- a/lib/internal/http2/compat.js +++ b/lib/internal/http2/compat.js @@ -241,6 +241,13 @@ function onStreamCloseRequest() { req.emit('close'); } +function onStreamTimeout(kind) { + return function onStreamTimeout() { + const obj = this[kind]; + obj.emit('timeout'); + }; +} + class Http2ServerRequest extends Readable { constructor(stream, headers, options, rawHeaders) { super(options); @@ -263,6 +270,7 @@ class Http2ServerRequest extends Readable { stream.on('error', onStreamError); stream.on('aborted', onStreamAbortedRequest); stream.on('close', onStreamCloseRequest); + stream.on('timeout', onStreamTimeout(kRequest)); this.on('pause', onRequestPause); this.on('resume', onRequestResume); } @@ -416,6 +424,7 @@ class Http2ServerResponse extends Stream { stream.on('aborted', onStreamAbortedResponse); stream.on('close', onStreamCloseResponse); stream.on('wantTrailers', onStreamTrailersReady); + stream.on('timeout', onStreamTimeout(kResponse)); } // User land modules such as finalhandler just check truthiness of this diff --git a/test/parallel/test-http2-compat-serverrequest-settimeout.js b/test/parallel/test-http2-compat-serverrequest-settimeout.js index 81184d7075..4b7a629cf5 100644 --- a/test/parallel/test-http2-compat-serverrequest-settimeout.js +++ b/test/parallel/test-http2-compat-serverrequest-settimeout.js @@ -12,6 +12,7 @@ server.on('request', (req, res) => { req.setTimeout(msecs, common.mustCall(() => { res.end(); })); + req.on('timeout', common.mustCall()); res.on('finish', common.mustCall(() => { req.setTimeout(msecs, common.mustNotCall()); process.nextTick(() => { diff --git a/test/parallel/test-http2-compat-serverresponse-settimeout.js b/test/parallel/test-http2-compat-serverresponse-settimeout.js index 220a84a754..e24621ad09 100644 --- a/test/parallel/test-http2-compat-serverresponse-settimeout.js +++ b/test/parallel/test-http2-compat-serverresponse-settimeout.js @@ -12,6 +12,7 @@ server.on('request', (req, res) => { res.setTimeout(msecs, common.mustCall(() => { res.end(); })); + res.on('timeout', common.mustCall()); res.on('finish', common.mustCall(() => { res.setTimeout(msecs, common.mustNotCall()); process.nextTick(() => { |