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>
This commit is contained in:
parent
755520c4c3
commit
32902d09b4
@ -241,6 +241,13 @@ function onStreamCloseRequest() {
|
|||||||
req.emit('close');
|
req.emit('close');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onStreamTimeout(kind) {
|
||||||
|
return function onStreamTimeout() {
|
||||||
|
const obj = this[kind];
|
||||||
|
obj.emit('timeout');
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
class Http2ServerRequest extends Readable {
|
class Http2ServerRequest extends Readable {
|
||||||
constructor(stream, headers, options, rawHeaders) {
|
constructor(stream, headers, options, rawHeaders) {
|
||||||
super(options);
|
super(options);
|
||||||
@ -263,6 +270,7 @@ class Http2ServerRequest extends Readable {
|
|||||||
stream.on('error', onStreamError);
|
stream.on('error', onStreamError);
|
||||||
stream.on('aborted', onStreamAbortedRequest);
|
stream.on('aborted', onStreamAbortedRequest);
|
||||||
stream.on('close', onStreamCloseRequest);
|
stream.on('close', onStreamCloseRequest);
|
||||||
|
stream.on('timeout', onStreamTimeout(kRequest));
|
||||||
this.on('pause', onRequestPause);
|
this.on('pause', onRequestPause);
|
||||||
this.on('resume', onRequestResume);
|
this.on('resume', onRequestResume);
|
||||||
}
|
}
|
||||||
@ -416,6 +424,7 @@ class Http2ServerResponse extends Stream {
|
|||||||
stream.on('aborted', onStreamAbortedResponse);
|
stream.on('aborted', onStreamAbortedResponse);
|
||||||
stream.on('close', onStreamCloseResponse);
|
stream.on('close', onStreamCloseResponse);
|
||||||
stream.on('wantTrailers', onStreamTrailersReady);
|
stream.on('wantTrailers', onStreamTrailersReady);
|
||||||
|
stream.on('timeout', onStreamTimeout(kResponse));
|
||||||
}
|
}
|
||||||
|
|
||||||
// User land modules such as finalhandler just check truthiness of this
|
// User land modules such as finalhandler just check truthiness of this
|
||||||
|
@ -12,6 +12,7 @@ server.on('request', (req, res) => {
|
|||||||
req.setTimeout(msecs, common.mustCall(() => {
|
req.setTimeout(msecs, common.mustCall(() => {
|
||||||
res.end();
|
res.end();
|
||||||
}));
|
}));
|
||||||
|
req.on('timeout', common.mustCall());
|
||||||
res.on('finish', common.mustCall(() => {
|
res.on('finish', common.mustCall(() => {
|
||||||
req.setTimeout(msecs, common.mustNotCall());
|
req.setTimeout(msecs, common.mustNotCall());
|
||||||
process.nextTick(() => {
|
process.nextTick(() => {
|
||||||
|
@ -12,6 +12,7 @@ server.on('request', (req, res) => {
|
|||||||
res.setTimeout(msecs, common.mustCall(() => {
|
res.setTimeout(msecs, common.mustCall(() => {
|
||||||
res.end();
|
res.end();
|
||||||
}));
|
}));
|
||||||
|
res.on('timeout', common.mustCall());
|
||||||
res.on('finish', common.mustCall(() => {
|
res.on('finish', common.mustCall(() => {
|
||||||
res.setTimeout(msecs, common.mustNotCall());
|
res.setTimeout(msecs, common.mustNotCall());
|
||||||
process.nextTick(() => {
|
process.nextTick(() => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user