HTTP/3: ngx_http_v3_get_session() macro.

It's used instead of accessing c->quic->parent->data directly.  Apart from being
simpler, it allows to change the way session is stored in the future by changing
the macro.
This commit is contained in:
Roman Arutyunyan 2021-04-30 19:10:11 +03:00
parent a40fa4aa96
commit 82f8734935
5 changed files with 24 additions and 22 deletions

View File

@ -74,6 +74,9 @@
#define NGX_HTTP_V3_ERR_DECODER_STREAM_ERROR 0x202 #define NGX_HTTP_V3_ERR_DECODER_STREAM_ERROR 0x202
#define ngx_http_v3_get_session(c) \
((ngx_http_v3_connection_t *) (c)->quic->parent->data)
#define ngx_http_v3_get_module_loc_conf(c, module) \ #define ngx_http_v3_get_module_loc_conf(c, module) \
ngx_http_get_module_loc_conf( \ ngx_http_get_module_loc_conf( \
((ngx_http_v3_connection_t *) c->quic->parent->data)->hc.conf_ctx, \ ((ngx_http_v3_connection_t *) c->quic->parent->data)->hc.conf_ctx, \

View File

@ -783,7 +783,7 @@ ngx_http_v3_push_resource(ngx_http_request_t *r, ngx_str_t *path,
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
c = r->connection; c = r->connection;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
h3scf = ngx_http_get_module_srv_conf(r, ngx_http_v3_module); h3scf = ngx_http_get_module_srv_conf(r, ngx_http_v3_module);
ngx_log_debug5(NGX_LOG_DEBUG_HTTP, c->log, 0, ngx_log_debug5(NGX_LOG_DEBUG_HTTP, c->log, 0,
@ -858,7 +858,7 @@ ngx_http_v3_create_push_request(ngx_http_request_t *pr, ngx_str_t *path,
goto failed; goto failed;
} }
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_memcpy(hc, h3c, sizeof(ngx_http_connection_t)); ngx_memcpy(hc, h3c, sizeof(ngx_http_connection_t));
c->data = hc; c->data = hc;

View File

@ -81,7 +81,7 @@ ngx_http_v3_init(ngx_connection_t *c)
clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module); clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module);
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
if (h3c->goaway) { if (h3c->goaway) {
ngx_quic_reset_stream(c, NGX_HTTP_V3_ERR_REQUEST_REJECTED); ngx_quic_reset_stream(c, NGX_HTTP_V3_ERR_REQUEST_REJECTED);
@ -188,7 +188,7 @@ ngx_http_v3_cleanup_request(void *data)
ngx_http_core_loc_conf_t *clcf; ngx_http_core_loc_conf_t *clcf;
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
if (--h3c->nrequests == 0) { if (--h3c->nrequests == 0) {
clcf = ngx_http_v3_get_module_loc_conf(c, ngx_http_core_module); clcf = ngx_http_v3_get_module_loc_conf(c, ngx_http_core_module);

View File

@ -148,7 +148,7 @@ ngx_http_v3_close_uni_stream(ngx_connection_t *c)
ngx_http_v3_uni_stream_t *us; ngx_http_v3_uni_stream_t *us;
us = c->data; us = c->data;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 close stream"); ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 close stream");
@ -178,7 +178,7 @@ ngx_http_v3_read_uni_stream_type(ngx_event_t *rev)
c = rev->data; c = rev->data;
us = c->data; us = c->data;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 read stream type"); ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 read stream type");
@ -410,7 +410,7 @@ ngx_http_v3_create_push_stream(ngx_connection_t *c, uint64_t push_id)
goto failed; goto failed;
} }
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
h3c->npushing++; h3c->npushing++;
cln->handler = ngx_http_v3_push_cleanup; cln->handler = ngx_http_v3_push_cleanup;
@ -466,7 +466,7 @@ ngx_http_v3_get_uni_stream(ngx_connection_t *c, ngx_uint_t type)
index = -1; index = -1;
} }
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
if (index >= 0) { if (index >= 0) {
if (h3c->known_streams[index]) { if (h3c->known_streams[index]) {
@ -525,7 +525,7 @@ ngx_http_v3_send_settings(ngx_connection_t *c)
ngx_http_v3_srv_conf_t *h3scf; ngx_http_v3_srv_conf_t *h3scf;
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 send settings"); ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 send settings");
@ -837,7 +837,7 @@ ngx_http_v3_set_max_push_id(ngx_connection_t *c, uint64_t max_push_id)
{ {
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http3 MAX_PUSH_ID:%uL", max_push_id); "http3 MAX_PUSH_ID:%uL", max_push_id);
@ -860,7 +860,7 @@ ngx_http_v3_cancel_push(ngx_connection_t *c, uint64_t push_id)
ngx_http_v3_push_t *push; ngx_http_v3_push_t *push;
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http3 CANCEL_PUSH:%uL", push_id); "http3 CANCEL_PUSH:%uL", push_id);

View File

@ -198,7 +198,7 @@ ngx_http_v3_insert(ngx_connection_t *c, ngx_str_t *name, ngx_str_t *value)
return NGX_HTTP_V3_ERR_ENCODER_STREAM_ERROR; return NGX_HTTP_V3_ERR_ENCODER_STREAM_ERROR;
} }
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
dt = &h3c->table; dt = &h3c->table;
ngx_log_debug4(NGX_LOG_DEBUG_HTTP, c->log, 0, ngx_log_debug4(NGX_LOG_DEBUG_HTTP, c->log, 0,
@ -250,8 +250,7 @@ ngx_http_v3_set_capacity(ngx_connection_t *c, ngx_uint_t capacity)
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http3 set capacity %ui", capacity); "http3 set capacity %ui", capacity);
pc = c->quic->parent; h3c = ngx_http_v3_get_session(c);
h3c = pc->data;
h3scf = ngx_http_get_module_srv_conf(h3c->hc.conf_ctx, ngx_http_v3_module); h3scf = ngx_http_get_module_srv_conf(h3c->hc.conf_ctx, ngx_http_v3_module);
if (capacity > h3scf->max_table_capacity) { if (capacity > h3scf->max_table_capacity) {
@ -278,6 +277,8 @@ ngx_http_v3_set_capacity(ngx_connection_t *c, ngx_uint_t capacity)
} }
if (dt->elts == NULL) { if (dt->elts == NULL) {
pc = c->quic->parent;
cln = ngx_pool_cleanup_add(pc->pool, 0); cln = ngx_pool_cleanup_add(pc->pool, 0);
if (cln == NULL) { if (cln == NULL) {
return NGX_ERROR; return NGX_ERROR;
@ -324,7 +325,7 @@ ngx_http_v3_evict(ngx_connection_t *c, size_t need)
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
ngx_http_v3_dynamic_table_t *dt; ngx_http_v3_dynamic_table_t *dt;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
dt = &h3c->table; dt = &h3c->table;
if (need > dt->capacity) { if (need > dt->capacity) {
@ -367,7 +368,7 @@ ngx_http_v3_duplicate(ngx_connection_t *c, ngx_uint_t index)
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 duplicate %ui", index); ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 duplicate %ui", index);
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
dt = &h3c->table; dt = &h3c->table;
if (dt->base + dt->nelts <= index) { if (dt->base + dt->nelts <= index) {
@ -451,7 +452,7 @@ ngx_http_v3_lookup(ngx_connection_t *c, ngx_uint_t index, ngx_str_t *name,
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
ngx_http_v3_dynamic_table_t *dt; ngx_http_v3_dynamic_table_t *dt;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
dt = &h3c->table; dt = &h3c->table;
if (index < dt->base || index - dt->base >= dt->nelts) { if (index < dt->base || index - dt->base >= dt->nelts) {
@ -494,7 +495,7 @@ ngx_http_v3_decode_insert_count(ngx_connection_t *c, ngx_uint_t *insert_count)
return NGX_OK; return NGX_OK;
} }
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
dt = &h3c->table; dt = &h3c->table;
h3scf = ngx_http_get_module_srv_conf(h3c->hc.conf_ctx, ngx_http_v3_module); h3scf = ngx_http_get_module_srv_conf(h3c->hc.conf_ctx, ngx_http_v3_module);
@ -536,15 +537,13 @@ ngx_int_t
ngx_http_v3_check_insert_count(ngx_connection_t *c, ngx_uint_t insert_count) ngx_http_v3_check_insert_count(ngx_connection_t *c, ngx_uint_t insert_count)
{ {
size_t n; size_t n;
ngx_connection_t *pc;
ngx_pool_cleanup_t *cln; ngx_pool_cleanup_t *cln;
ngx_http_v3_block_t *block; ngx_http_v3_block_t *block;
ngx_http_v3_srv_conf_t *h3scf; ngx_http_v3_srv_conf_t *h3scf;
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
ngx_http_v3_dynamic_table_t *dt; ngx_http_v3_dynamic_table_t *dt;
pc = c->quic->parent; h3c = ngx_http_v3_get_session(c);
h3c = pc->data;
dt = &h3c->table; dt = &h3c->table;
n = dt->base + dt->nelts; n = dt->base + dt->nelts;
@ -624,7 +623,7 @@ ngx_http_v3_new_header(ngx_connection_t *c)
ngx_http_v3_block_t *block; ngx_http_v3_block_t *block;
ngx_http_v3_connection_t *h3c; ngx_http_v3_connection_t *h3c;
h3c = c->quic->parent->data; h3c = ngx_http_v3_get_session(c);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http3 new dynamic header, blocked:%ui", h3c->nblocked); "http3 new dynamic header, blocked:%ui", h3c->nblocked);