[PATCH] QUIC: relocated ngx_quic_init_streams() for 0-RTT

Sergey Kandaurov pluknet at nginx.com
Mon Jan 16 14:37:16 UTC 2023


> On 10 Jan 2023, at 17:30, Roman Arutyunyan <arut at nginx.com> wrote:
> 
> # HG changeset patch
> # User Roman Arutyunyan <arut at nginx.com>
> # Date 1673357050 -14400
> #      Tue Jan 10 17:24:10 2023 +0400
> # Branch quic
> # Node ID 5a09008e93a3842dc5a372e39617097893293ddf
> # Parent  7dac46ecb27d3f488d40b28cd8d07f884046e171
> QUIC: relocated ngx_quic_init_streams() for 0-RTT.
> 
> Previously, streams were initialized in early keys handler.  However, client
> transport parameters may not be available by then.  This happens, for example,
> when using QuicTLS.  Now streams are initialized in ngx_quic_crypto_input()
> after calling SSL_do_handshake() for both 0-RTT and 1-RTT.
> 
> diff --git a/src/event/quic/ngx_event_quic_ssl.c b/src/event/quic/ngx_event_quic_ssl.c
> --- a/src/event/quic/ngx_event_quic_ssl.c
> +++ b/src/event/quic/ngx_event_quic_ssl.c
> @@ -67,12 +67,6 @@ ngx_quic_set_read_secret(ngx_ssl_conn_t 
>         return 0;
>     }
> 
> -    if (level == ssl_encryption_early_data) {
> -        if (ngx_quic_init_streams(c) != NGX_OK) {
> -            return 0;
> -        }
> -    }
> -
>     return 1;
> }
> 
> @@ -138,10 +132,6 @@ ngx_quic_set_encryption_secrets(ngx_ssl_
>     }
> 
>     if (level == ssl_encryption_early_data) {
> -        if (ngx_quic_init_streams(c) != NGX_OK) {
> -            return 0;
> -        }
> -
>         return 1;
>     }
> 
> @@ -455,11 +445,17 @@ ngx_quic_crypto_input(ngx_connection_t *
>             qc->error_reason = "handshake failed";
>             return NGX_ERROR;
>         }
> -
> -        return NGX_OK;
>     }
> 
> -    if (SSL_in_init(ssl_conn)) {
> +    if (n <= 0 || SSL_in_init(ssl_conn)) {
> +        if (ngx_quic_keys_available(qc->keys, ssl_encryption_early_data)
> +            && qc->client_tp_done)
> +        {
> +            if (ngx_quic_init_streams(c) != NGX_OK) {
> +                return NGX_ERROR;
> +            }
> +        }
> +
>         return NGX_OK;
>     }
> 

Looks good.

-- 
Sergey Kandaurov


More information about the nginx-devel mailing list