# HG changeset patch # User Roman Arutyunyan # Date 1584987620 -10800 # Node ID 8e54a17dabeef03616bb6e4942bb15260d58e5c2 # Parent c87a13514abcfe09ac07d931538d087b8c3d7f46 Respect QUIC max_idle_timeout. diff -r c87a13514abc -r 8e54a17dabee src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c Mon Mar 23 19:42:09 2020 +0300 +++ b/src/event/ngx_event_quic.c Mon Mar 23 21:20:20 2020 +0300 @@ -30,7 +30,6 @@ typedef struct { ngx_rbtree_t tree; ngx_rbtree_node_t sentinel; - ngx_msec_t timeout; ngx_connection_handler_pt handler; ngx_uint_t id_counter; @@ -59,6 +58,8 @@ ngx_quic_streams_t streams; ngx_uint_t max_data; + ngx_uint_t send_timer_set; + /* unsigned send_timer_set:1 */ #define SSL_ECRYPTION_LAST ((ssl_encryption_application) + 1) uint64_t crypto_offset[SSL_ECRYPTION_LAST]; @@ -255,6 +256,12 @@ return NGX_ERROR; } + if (qc->ctp.max_idle_timeout > 0 + && qc->ctp.max_idle_timeout < qc->tp.max_idle_timeout) + { + qc->tp.max_idle_timeout = qc->ctp.max_idle_timeout; + } + qc->client_tp_done = 1; } } @@ -334,7 +341,7 @@ void ngx_quic_run(ngx_connection_t *c, ngx_ssl_t *ssl, ngx_quic_tp_t *tp, - ngx_msec_t timeout, ngx_connection_handler_pt handler) + ngx_connection_handler_pt handler) { ngx_buf_t *b; ngx_quic_header_t pkt; @@ -359,9 +366,8 @@ // we don't need stream handler for initial packet processing c->quic->streams.handler = handler; - c->quic->streams.timeout = timeout; - ngx_add_timer(c->read, timeout); + ngx_add_timer(c->read, c->quic->tp.max_idle_timeout); c->read->handler = ngx_quic_input_handler; @@ -524,9 +530,10 @@ static void ngx_quic_input_handler(ngx_event_t *rev) { - ssize_t n; - ngx_buf_t b; - ngx_connection_t *c; + ssize_t n; + ngx_buf_t b; + ngx_connection_t *c; + ngx_quic_connection_t *qc; static u_char buf[65535]; @@ -544,8 +551,6 @@ return; } - ngx_add_timer(rev, c->quic->streams.timeout); - if (c->close) { ngx_quic_close_connection(c); return; @@ -569,6 +574,11 @@ ngx_quic_close_connection(c); return; } + + qc = c->quic; + + qc->send_timer_set = 0; + ngx_add_timer(rev, qc->tp.max_idle_timeout); } @@ -1209,6 +1219,11 @@ qc->frames = NULL; + if (!qc->send_timer_set) { + qc->send_timer_set = 1; + ngx_add_timer(c->read, qc->tp.max_idle_timeout); + } + return NGX_OK; } diff -r c87a13514abc -r 8e54a17dabee src/event/ngx_event_quic.h --- a/src/event/ngx_event_quic.h Mon Mar 23 19:42:09 2020 +0300 +++ b/src/event/ngx_event_quic.h Mon Mar 23 21:20:20 2020 +0300 @@ -54,7 +54,7 @@ void ngx_quic_run(ngx_connection_t *c, ngx_ssl_t *ssl, ngx_quic_tp_t *tp, - ngx_msec_t timeout, ngx_connection_handler_pt handler); + ngx_connection_handler_pt handler); ngx_connection_t *ngx_quic_create_uni_stream(ngx_connection_t *c); diff -r c87a13514abc -r 8e54a17dabee src/http/ngx_http_request.c --- a/src/http/ngx_http_request.c Mon Mar 23 19:42:09 2020 +0300 +++ b/src/http/ngx_http_request.c Mon Mar 23 21:20:20 2020 +0300 @@ -347,9 +347,7 @@ v3cf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v3_module); sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module); - ngx_quic_run(c, &sscf->ssl, &v3cf->quic, - c->listening->post_accept_timeout, - ngx_http_quic_stream_handler); + ngx_quic_run(c, &sscf->ssl, &v3cf->quic, ngx_http_quic_stream_handler); return; } #endif diff -r c87a13514abc -r 8e54a17dabee src/http/v3/ngx_http_v3_module.c --- a/src/http/v3/ngx_http_v3_module.c Mon Mar 23 19:42:09 2020 +0300 +++ b/src/http/v3/ngx_http_v3_module.c Mon Mar 23 21:20:20 2020 +0300 @@ -229,7 +229,7 @@ ngx_http_v3_srv_conf_t *conf = child; ngx_conf_merge_msec_value(conf->quic.max_idle_timeout, - prev->quic.max_idle_timeout, 10000); + prev->quic.max_idle_timeout, 60000); // > 2 ^ 14 is invalid ngx_conf_merge_msec_value(conf->quic.max_ack_delay,