[PATCH 3 of 3] HTTP/3: send Stream Cancellation instruction

Sergey Kandaurov pluknet at nginx.com
Wed Nov 10 15:59:01 UTC 2021


> On 18 Oct 2021, at 15:48, Roman Arutyunyan <arut at nginx.com> wrote:
> 
> # HG changeset patch
> # User Roman Arutyunyan <arut at nginx.com>
> # Date 1634557691 -10800
> #      Mon Oct 18 14:48:11 2021 +0300
> # Branch quic
> # Node ID 9018cf33137a19df69e70ee4a274164c226e7cbd
> # Parent  8ae53c592c719af4f3ba47dbd85f78be27aaf7db
> HTTP/3: send Stream Cancellation instruction.
> 
> As per quic-qpack-21:
> 
>   When a stream is reset or reading is abandoned, the decoder emits a
>   Stream Cancellation instruction.
> 
> Previously the instruction was not sent.  Now it's sent when closing QUIC
> stream connection if dynamic table capacity is non-zero and eof was not
> received from client.  The latter condition means that a trailers section
> may still be on its way from client and the stream needs to be cancelled.
> 
> diff --git a/src/http/v3/ngx_http_v3_request.c b/src/http/v3/ngx_http_v3_request.c
> --- a/src/http/v3/ngx_http_v3_request.c
> +++ b/src/http/v3/ngx_http_v3_request.c
> @@ -279,6 +279,14 @@ ngx_http_v3_wait_request_handler(ngx_eve
> void
> ngx_http_v3_reset_connection(ngx_connection_t *c)
> {
> +    ngx_http_v3_srv_conf_t  *h3scf;
> +
> +    h3scf = ngx_http_v3_get_module_srv_conf(c, ngx_http_v3_module);
> +
> +    if (h3scf->max_table_capacity > 0 && !c->read->eof) {
> +        (void) ngx_http_v3_send_cancel_stream(c, c->quic->id);
> +    }
> +
>     if (c->timedout) {
>         ngx_quic_reset_stream(c, NGX_HTTP_V3_ERR_GENERAL_PROTOCOL_ERROR);
> 

Looks good.

-- 
Sergey Kandaurov



More information about the nginx-devel mailing list