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