comparison src/http/v3/ngx_http_v3_module.c @ 7951:c9538aef3211 quic

HTTP/3: refactored dynamic table implementation. Previously dynamic table was not functional because of zero limit on its size set by default. Now the following changes enable it: - new directives to set SETTINGS_QPACK_MAX_TABLE_CAPACITY and SETTINGS_QPACK_BLOCKED_STREAMS - send settings with SETTINGS_QPACK_MAX_TABLE_CAPACITY and SETTINGS_QPACK_BLOCKED_STREAMS to the client - send Insert Count Increment to the client - send Header Acknowledgement to the client - evict old dynamic table entries on overflow - decode Required Insert Count from client - block stream if Required Insert Count is not reached
author Roman Arutyunyan <arut@nginx.com>
date Thu, 02 Jul 2020 15:34:05 +0300
parents 032cb35ce758
children 0d2b2664b41c
comparison
equal deleted inserted replaced
7950:b0e81f49d7c0 7951:c9538aef3211
121 { ngx_string("http3_max_field_size"), 121 { ngx_string("http3_max_field_size"),
122 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, 122 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
123 ngx_conf_set_size_slot, 123 ngx_conf_set_size_slot,
124 NGX_HTTP_SRV_CONF_OFFSET, 124 NGX_HTTP_SRV_CONF_OFFSET,
125 offsetof(ngx_http_v3_srv_conf_t, max_field_size), 125 offsetof(ngx_http_v3_srv_conf_t, max_field_size),
126 NULL },
127
128 { ngx_string("http3_max_table_capacity"),
129 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
130 ngx_conf_set_size_slot,
131 NGX_HTTP_SRV_CONF_OFFSET,
132 offsetof(ngx_http_v3_srv_conf_t, max_table_capacity),
133 NULL },
134
135 { ngx_string("http3_max_blocked_streams"),
136 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
137 ngx_conf_set_num_slot,
138 NGX_HTTP_SRV_CONF_OFFSET,
139 offsetof(ngx_http_v3_srv_conf_t, max_blocked_streams),
126 NULL }, 140 NULL },
127 141
128 ngx_null_command 142 ngx_null_command
129 }; 143 };
130 144
274 v3cf->quic.active_connection_id_limit = NGX_CONF_UNSET_UINT; 288 v3cf->quic.active_connection_id_limit = NGX_CONF_UNSET_UINT;
275 289
276 v3cf->quic.retry = NGX_CONF_UNSET; 290 v3cf->quic.retry = NGX_CONF_UNSET;
277 291
278 v3cf->max_field_size = NGX_CONF_UNSET_SIZE; 292 v3cf->max_field_size = NGX_CONF_UNSET_SIZE;
293 v3cf->max_table_capacity = NGX_CONF_UNSET_SIZE;
294 v3cf->max_blocked_streams = NGX_CONF_UNSET_UINT;
279 295
280 return v3cf; 296 return v3cf;
281 } 297 }
282 298
283 299
339 } 355 }
340 356
341 ngx_conf_merge_size_value(conf->max_field_size, 357 ngx_conf_merge_size_value(conf->max_field_size,
342 prev->max_field_size, 358 prev->max_field_size,
343 NGX_HTTP_V3_DEFAULT_MAX_FIELD_SIZE); 359 NGX_HTTP_V3_DEFAULT_MAX_FIELD_SIZE);
360
361 ngx_conf_merge_size_value(conf->max_table_capacity,
362 prev->max_table_capacity,
363 NGX_HTTP_V3_DEFAULT_MAX_TABLE_CAPACITY);
364
365 ngx_conf_merge_uint_value(conf->max_blocked_streams,
366 prev->max_blocked_streams,
367 NGX_HTTP_V3_DEFAULT_MAX_BLOCKED_STREAMS);
344 368
345 return NGX_CONF_OK; 369 return NGX_CONF_OK;
346 } 370 }
347 371
348 372