diff src/http/v3/ngx_http_v3.h @ 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 f742b1b46901
children
line wrap: on
line diff
--- a/src/http/v3/ngx_http_v3.h
+++ b/src/http/v3/ngx_http_v3.h
@@ -78,11 +78,12 @@
 #define NGX_HTTP_V3_ERR_DECODER_STREAM_ERROR       0x202
 
 
-#define ngx_http_quic_get_connection(c)                                       \
-    ((ngx_http_connection_t *) ((c)->quic ? (c)->quic->parent->data           \
+#define ngx_http_v3_get_session(c)                                            \
+    ((ngx_http_v3_session_t *) ((c)->quic ? (c)->quic->parent->data           \
                                           : (c)->data))
 
-#define ngx_http_v3_get_session(c)  ngx_http_quic_get_connection(c)->v3_session
+#define ngx_http_quic_get_connection(c)                                       \
+    (ngx_http_v3_get_session(c)->http_connection)
 
 #define ngx_http_v3_get_module_loc_conf(c, module)                            \
     ngx_http_get_module_loc_conf(ngx_http_quic_get_connection(c)->conf_ctx,   \
@@ -120,6 +121,8 @@ struct ngx_http_v3_parse_s {
 
 
 struct ngx_http_v3_session_s {
+    ngx_http_connection_t        *http_connection;
+
     ngx_http_v3_dynamic_table_t   table;
 
     ngx_event_t                   keepalive;