Mercurial > hg > nginx
comparison src/http/v3/ngx_http_v3_request.c @ 9161:4939fd04737f
HTTP/3: postponed session creation to init() callback.
Now the session object is assigned to c->data while ngx_http_connection_t
object is referenced by its http_connection field, similar to
ngx_http_v2_connection_t and ngx_http_request_t.
The change allows to eliminate v3_session field from ngx_http_connection_t.
The field was under NGX_HTTP_V3 macro, which was a source of binary
compatibility problems when nginx/module is build with/without HTTP/3 support.
Postponing is essential since c->data should retain the reference to
ngx_http_connection_t object throughout QUIC handshake, because SSL callbacks
ngx_http_ssl_servername() and ngx_http_ssl_alpn_select() rely on this.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Thu, 14 Sep 2023 14:13:43 +0400 |
parents | 6d3ca6f8db35 |
children | 07ca679842de |
comparison
equal
deleted
inserted
replaced
9160:dd5fd5719027 | 9161:4939fd04737f |
---|---|
67 hc->ssl = 1; | 67 hc->ssl = 1; |
68 | 68 |
69 clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module); | 69 clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module); |
70 | 70 |
71 if (c->quic == NULL) { | 71 if (c->quic == NULL) { |
72 if (ngx_http_v3_init_session(c) != NGX_OK) { | |
73 ngx_http_close_connection(c); | |
74 return; | |
75 } | |
76 | |
77 h3scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v3_module); | 72 h3scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v3_module); |
78 h3scf->quic.idle_timeout = clcf->keepalive_timeout; | 73 h3scf->quic.idle_timeout = clcf->keepalive_timeout; |
79 | 74 |
80 ngx_quic_run(c, &h3scf->quic); | 75 ngx_quic_run(c, &h3scf->quic); |
81 return; | 76 return; |
110 ngx_http_v3_session_t *h3c; | 105 ngx_http_v3_session_t *h3c; |
111 ngx_http_v3_srv_conf_t *h3scf; | 106 ngx_http_v3_srv_conf_t *h3scf; |
112 ngx_http_core_loc_conf_t *clcf; | 107 ngx_http_core_loc_conf_t *clcf; |
113 | 108 |
114 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 init"); | 109 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 init"); |
110 | |
111 if (ngx_http_v3_init_session(c) != NGX_OK) { | |
112 return NGX_ERROR; | |
113 } | |
115 | 114 |
116 h3c = ngx_http_v3_get_session(c); | 115 h3c = ngx_http_v3_get_session(c); |
117 clcf = ngx_http_v3_get_module_loc_conf(c, ngx_http_core_module); | 116 clcf = ngx_http_v3_get_module_loc_conf(c, ngx_http_core_module); |
118 ngx_add_timer(&h3c->keepalive, clcf->keepalive_timeout); | 117 ngx_add_timer(&h3c->keepalive, clcf->keepalive_timeout); |
119 | 118 |