mirror of
https://github.com/nginx/nginx.git
synced 2024-11-27 15:39:01 +08:00
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.
This commit is contained in:
parent
b489ba83e9
commit
33dca88792
@ -211,6 +211,8 @@ ngx_quic_run(ngx_connection_t *c, ngx_quic_conf_t *conf)
|
||||
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_t *c, ngx_int_t rc)
|
||||
ngx_quic_free_frames(c, &qc->send_ctx[i].sent);
|
||||
}
|
||||
|
||||
if (qc->close.timer_set) {
|
||||
ngx_del_timer(&qc->close);
|
||||
}
|
||||
|
||||
if (rc == NGX_DONE) {
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -630,6 +630,10 @@ ngx_quic_do_init_streams(ngx_connection_t *c)
|
||||
|
||||
qc->streams.initialized = 1;
|
||||
|
||||
if (!qc->closing && qc->close.timer_set) {
|
||||
ngx_del_timer(&qc->close);
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
@ -1985,7 +1985,7 @@ ngx_quic_init_transport_params(ngx_quic_tp_t *tp, ngx_quic_conf_t *qcf)
|
||||
* 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;
|
||||
|
||||
|
@ -192,7 +192,7 @@ ngx_http_v3_create_srv_conf(ngx_conf_t *cf)
|
||||
* 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 *cf, void *parent, void *child)
|
||||
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 *cf, void *parent, void *child)
|
||||
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;
|
||||
|
||||
|
@ -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 *c)
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user