details: https://hg.nginx.org/nginx/rev/ad3d34ddfdcc branches: changeset: 9158:ad3d34ddfdcc user: Roman Arutyunyan <a...@nginx.com> date: Wed Sep 13 17:59:37 2023 +0400 description: QUIC: "handshake_timeout" configuration parameter.
Previously QUIC did not have such parameter and handshake duration was controlled by HTTP/3. However that required creating and storing HTTP/3 session on first client datagram. Apparently there's no convenient way to store the session object until QUIC handshake is complete. In the followup patches session creation will be postponed to init() callback. diffstat: src/event/quic/ngx_event_quic.c | 6 ++++++ src/event/quic/ngx_event_quic.h | 3 ++- src/event/quic/ngx_event_quic_streams.c | 4 ++++ src/event/quic/ngx_event_quic_transport.c | 2 +- src/http/v3/ngx_http_v3_module.c | 8 ++++++-- src/http/v3/ngx_http_v3_request.c | 8 +------- 6 files changed, 20 insertions(+), 11 deletions(-) diffs (128 lines): diff -r daf8f5ba23d8 -r ad3d34ddfdcc src/event/quic/ngx_event_quic.c --- a/src/event/quic/ngx_event_quic.c Fri Sep 01 20:31:46 2023 +0400 +++ b/src/event/quic/ngx_event_quic.c Wed Sep 13 17:59:37 2023 +0400 @@ -211,6 +211,8 @@ ngx_quic_run(ngx_connection_t *c, ngx_qu qc = ngx_quic_get_connection(c); ngx_add_timer(c->read, qc->tp.max_idle_timeout); + ngx_add_timer(&qc->close, qc->conf->handshake_timeout); + ngx_quic_connstate_dbg(c); c->read->handler = ngx_quic_input_handler; @@ -485,6 +487,10 @@ ngx_quic_close_connection(ngx_connection ngx_quic_free_frames(c, &qc->send_ctx[i].sent); } + if (qc->close.timer_set) { + ngx_del_timer(&qc->close); + } + if (rc == NGX_DONE) { /* diff -r daf8f5ba23d8 -r ad3d34ddfdcc src/event/quic/ngx_event_quic.h --- a/src/event/quic/ngx_event_quic.h Fri Sep 01 20:31:46 2023 +0400 +++ b/src/event/quic/ngx_event_quic.h Wed Sep 13 17:59:37 2023 +0400 @@ -67,7 +67,8 @@ typedef struct { ngx_flag_t retry; ngx_flag_t gso_enabled; ngx_flag_t disable_active_migration; - ngx_msec_t timeout; + ngx_msec_t handshake_timeout; + ngx_msec_t idle_timeout; ngx_str_t host_key; size_t stream_buffer_size; ngx_uint_t max_concurrent_streams_bidi; diff -r daf8f5ba23d8 -r ad3d34ddfdcc src/event/quic/ngx_event_quic_streams.c --- a/src/event/quic/ngx_event_quic_streams.c Fri Sep 01 20:31:46 2023 +0400 +++ b/src/event/quic/ngx_event_quic_streams.c Wed Sep 13 17:59:37 2023 +0400 @@ -630,6 +630,10 @@ ngx_quic_do_init_streams(ngx_connection_ qc->streams.initialized = 1; + if (!qc->closing && qc->close.timer_set) { + ngx_del_timer(&qc->close); + } + return NGX_OK; } diff -r daf8f5ba23d8 -r ad3d34ddfdcc src/event/quic/ngx_event_quic_transport.c --- a/src/event/quic/ngx_event_quic_transport.c Fri Sep 01 20:31:46 2023 +0400 +++ b/src/event/quic/ngx_event_quic_transport.c Wed Sep 13 17:59:37 2023 +0400 @@ -1985,7 +1985,7 @@ ngx_quic_init_transport_params(ngx_quic_ * tp->preferred_address = NULL */ - tp->max_idle_timeout = qcf->timeout; + tp->max_idle_timeout = qcf->idle_timeout; tp->max_udp_payload_size = NGX_QUIC_MAX_UDP_PAYLOAD_SIZE; diff -r daf8f5ba23d8 -r ad3d34ddfdcc src/http/v3/ngx_http_v3_module.c --- a/src/http/v3/ngx_http_v3_module.c Fri Sep 01 20:31:46 2023 +0400 +++ b/src/http/v3/ngx_http_v3_module.c Wed Sep 13 17:59:37 2023 +0400 @@ -192,7 +192,7 @@ ngx_http_v3_create_srv_conf(ngx_conf_t * * h3scf->quic.host_key = { 0, NULL } * h3scf->quic.stream_reject_code_uni = 0; * h3scf->quic.disable_active_migration = 0; - * h3scf->quic.timeout = 0; + * h3scf->quic.idle_timeout = 0; * h3scf->max_blocked_streams = 0; */ @@ -223,7 +223,8 @@ ngx_http_v3_merge_srv_conf(ngx_conf_t *c ngx_http_v3_srv_conf_t *prev = parent; ngx_http_v3_srv_conf_t *conf = child; - ngx_http_ssl_srv_conf_t *sscf; + ngx_http_ssl_srv_conf_t *sscf; + ngx_http_core_srv_conf_t *cscf; ngx_conf_merge_value(conf->enable, prev->enable, 1); @@ -281,6 +282,9 @@ ngx_http_v3_merge_srv_conf(ngx_conf_t *c return NGX_CONF_ERROR; } + cscf = ngx_http_conf_get_module_srv_conf(cf, ngx_http_core_module); + conf->quic.handshake_timeout = cscf->client_header_timeout; + sscf = ngx_http_conf_get_module_srv_conf(cf, ngx_http_ssl_module); conf->quic.ssl = &sscf->ssl; diff -r daf8f5ba23d8 -r ad3d34ddfdcc src/http/v3/ngx_http_v3_request.c --- a/src/http/v3/ngx_http_v3_request.c Fri Sep 01 20:31:46 2023 +0400 +++ b/src/http/v3/ngx_http_v3_request.c Wed Sep 13 17:59:37 2023 +0400 @@ -58,18 +58,15 @@ static const struct { void ngx_http_v3_init_stream(ngx_connection_t *c) { - ngx_http_v3_session_t *h3c; ngx_http_connection_t *hc, *phc; ngx_http_v3_srv_conf_t *h3scf; ngx_http_core_loc_conf_t *clcf; - ngx_http_core_srv_conf_t *cscf; hc = c->data; hc->ssl = 1; clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module); - cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module); h3scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v3_module); if (c->quic == NULL) { @@ -78,10 +75,7 @@ ngx_http_v3_init_stream(ngx_connection_t return; } - h3c = hc->v3_session; - ngx_add_timer(&h3c->keepalive, cscf->client_header_timeout); - - h3scf->quic.timeout = clcf->keepalive_timeout; + h3scf->quic.idle_timeout = clcf->keepalive_timeout; ngx_quic_run(c, &h3scf->quic); return; } _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel