Mercurial > hg > nginx
comparison src/http/v3/ngx_http_v3_module.c @ 8353:036164360fa9 quic
HTTP/3: directives with limited values converted to post handler.
The purpose is to show a precise line number with an invalid value.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Wed, 22 Apr 2020 15:59:19 +0300 |
parents | d73516830236 |
children | 7ea34e13937f |
comparison
equal
deleted
inserted
replaced
8352:d73516830236 | 8353:036164360fa9 |
---|---|
8 #include <ngx_config.h> | 8 #include <ngx_config.h> |
9 #include <ngx_core.h> | 9 #include <ngx_core.h> |
10 #include <ngx_http.h> | 10 #include <ngx_http.h> |
11 | 11 |
12 | 12 |
13 static char *ngx_http_v3_max_ack_delay(ngx_conf_t *cf, void *post, void *data); | |
14 static char *ngx_http_v3_max_packet_size(ngx_conf_t *cf, void *post, | |
15 void *data); | |
16 | |
17 | |
18 static ngx_conf_post_t ngx_http_v3_max_ack_delay_post = | |
19 { ngx_http_v3_max_ack_delay }; | |
20 static ngx_conf_post_t ngx_http_v3_max_packet_size_post = | |
21 { ngx_http_v3_max_packet_size }; | |
22 static ngx_conf_num_bounds_t ngx_http_v3_ack_delay_exponent_bounds = | |
23 { ngx_conf_check_num_bounds, 0, 20 }; | |
24 static ngx_conf_num_bounds_t ngx_http_v3_active_connection_id_limit_bounds = | |
25 { ngx_conf_check_num_bounds, 2, -1 }; | |
26 | |
27 | |
13 static ngx_command_t ngx_http_v3_commands[] = { | 28 static ngx_command_t ngx_http_v3_commands[] = { |
14 | 29 |
15 { ngx_string("quic_max_idle_timeout"), | 30 { ngx_string("quic_max_idle_timeout"), |
16 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 31 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
17 ngx_conf_set_msec_slot, | 32 ngx_conf_set_msec_slot, |
22 { ngx_string("quic_max_ack_delay"), | 37 { ngx_string("quic_max_ack_delay"), |
23 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 38 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
24 ngx_conf_set_msec_slot, | 39 ngx_conf_set_msec_slot, |
25 NGX_HTTP_SRV_CONF_OFFSET, | 40 NGX_HTTP_SRV_CONF_OFFSET, |
26 offsetof(ngx_http_v3_srv_conf_t, quic.max_ack_delay), | 41 offsetof(ngx_http_v3_srv_conf_t, quic.max_ack_delay), |
27 NULL }, | 42 &ngx_http_v3_max_ack_delay_post }, |
28 | 43 |
29 { ngx_string("quic_max_packet_size"), | 44 { ngx_string("quic_max_packet_size"), |
30 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 45 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
31 ngx_conf_set_size_slot, | 46 ngx_conf_set_size_slot, |
32 NGX_HTTP_SRV_CONF_OFFSET, | 47 NGX_HTTP_SRV_CONF_OFFSET, |
33 offsetof(ngx_http_v3_srv_conf_t, quic.max_packet_size), | 48 offsetof(ngx_http_v3_srv_conf_t, quic.max_packet_size), |
34 NULL }, | 49 &ngx_http_v3_max_packet_size_post }, |
35 | 50 |
36 { ngx_string("quic_initial_max_data"), | 51 { ngx_string("quic_initial_max_data"), |
37 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 52 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
38 ngx_conf_set_size_slot, | 53 ngx_conf_set_size_slot, |
39 NGX_HTTP_SRV_CONF_OFFSET, | 54 NGX_HTTP_SRV_CONF_OFFSET, |
78 { ngx_string("quic_ack_delay_exponent"), | 93 { ngx_string("quic_ack_delay_exponent"), |
79 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 94 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
80 ngx_conf_set_num_slot, | 95 ngx_conf_set_num_slot, |
81 NGX_HTTP_SRV_CONF_OFFSET, | 96 NGX_HTTP_SRV_CONF_OFFSET, |
82 offsetof(ngx_http_v3_srv_conf_t, quic.ack_delay_exponent), | 97 offsetof(ngx_http_v3_srv_conf_t, quic.ack_delay_exponent), |
83 NULL }, | 98 &ngx_http_v3_ack_delay_exponent_bounds }, |
84 | 99 |
85 { ngx_string("quic_active_migration"), | 100 { ngx_string("quic_active_migration"), |
86 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 101 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
87 ngx_conf_set_num_slot, | 102 ngx_conf_set_num_slot, |
88 NGX_HTTP_SRV_CONF_OFFSET, | 103 NGX_HTTP_SRV_CONF_OFFSET, |
92 { ngx_string("quic_active_connection_id_limit"), | 107 { ngx_string("quic_active_connection_id_limit"), |
93 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, | 108 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
94 ngx_conf_set_num_slot, | 109 ngx_conf_set_num_slot, |
95 NGX_HTTP_SRV_CONF_OFFSET, | 110 NGX_HTTP_SRV_CONF_OFFSET, |
96 offsetof(ngx_http_v3_srv_conf_t, quic.active_connection_id_limit), | 111 offsetof(ngx_http_v3_srv_conf_t, quic.active_connection_id_limit), |
97 NULL }, | 112 &ngx_http_v3_active_connection_id_limit_bounds }, |
98 | 113 |
99 ngx_null_command | 114 ngx_null_command |
100 }; | 115 }; |
101 | 116 |
102 | 117 |
257 | 272 |
258 ngx_conf_merge_msec_value(conf->quic.max_ack_delay, | 273 ngx_conf_merge_msec_value(conf->quic.max_ack_delay, |
259 prev->quic.max_ack_delay, | 274 prev->quic.max_ack_delay, |
260 NGX_QUIC_DEFAULT_MAX_ACK_DELAY); | 275 NGX_QUIC_DEFAULT_MAX_ACK_DELAY); |
261 | 276 |
262 if (conf->quic.max_ack_delay > 16384) { | |
263 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
264 "\"quic_max_ack_delay\" greater than" | |
265 " 16384 is invalid"); | |
266 return NGX_CONF_ERROR; | |
267 } | |
268 | |
269 ngx_conf_merge_size_value(conf->quic.max_packet_size, | 277 ngx_conf_merge_size_value(conf->quic.max_packet_size, |
270 prev->quic.max_packet_size, | 278 prev->quic.max_packet_size, |
271 NGX_QUIC_DEFAULT_MAX_PACKET_SIZE); | 279 NGX_QUIC_DEFAULT_MAX_PACKET_SIZE); |
272 | 280 |
273 if (conf->quic.max_packet_size < 1200 | |
274 || conf->quic.max_packet_size > 65527) | |
275 { | |
276 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
277 "\"quic_max_packet_size\" less than" | |
278 " 1200 or greater than 65527 is invalid"); | |
279 return NGX_CONF_ERROR; | |
280 } | |
281 | |
282 ngx_conf_merge_size_value(conf->quic.initial_max_data, | 281 ngx_conf_merge_size_value(conf->quic.initial_max_data, |
283 prev->quic.initial_max_data, | 282 prev->quic.initial_max_data, |
284 16 * NGX_QUIC_STREAM_BUFSIZE); | 283 16 * NGX_QUIC_STREAM_BUFSIZE); |
285 | 284 |
286 ngx_conf_merge_size_value(conf->quic.initial_max_stream_data_bidi_local, | 285 ngx_conf_merge_size_value(conf->quic.initial_max_stream_data_bidi_local, |
303 | 302 |
304 ngx_conf_merge_uint_value(conf->quic.ack_delay_exponent, | 303 ngx_conf_merge_uint_value(conf->quic.ack_delay_exponent, |
305 prev->quic.ack_delay_exponent, | 304 prev->quic.ack_delay_exponent, |
306 NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT); | 305 NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT); |
307 | 306 |
308 if (conf->quic.ack_delay_exponent > 20) { | |
309 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
310 "\"quic_ack_delay_exponent\" greater than" | |
311 " 20 is invalid"); | |
312 return NGX_CONF_ERROR; | |
313 } | |
314 | |
315 ngx_conf_merge_uint_value(conf->quic.disable_active_migration, | 307 ngx_conf_merge_uint_value(conf->quic.disable_active_migration, |
316 prev->quic.disable_active_migration, 1); | 308 prev->quic.disable_active_migration, 1); |
317 | 309 |
318 ngx_conf_merge_uint_value(conf->quic.active_connection_id_limit, | 310 ngx_conf_merge_uint_value(conf->quic.active_connection_id_limit, |
319 prev->quic.active_connection_id_limit, 2); | 311 prev->quic.active_connection_id_limit, 2); |
320 | 312 |
321 if (conf->quic.active_connection_id_limit < 2) { | 313 return NGX_CONF_OK; |
314 } | |
315 | |
316 | |
317 static char * | |
318 ngx_http_v3_max_ack_delay(ngx_conf_t *cf, void *post, void *data) | |
319 { | |
320 ngx_msec_t *sp = data; | |
321 | |
322 if (*sp > 16384) { | |
322 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 323 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
323 "\"quic_active_connection_id_limit\" less than" | 324 "\"quic_max_ack_delay\" must be less than 16384"); |
324 " 2 is invalid"); | 325 |
325 return NGX_CONF_ERROR; | 326 return NGX_CONF_ERROR; |
326 } | 327 } |
327 | 328 |
328 return NGX_CONF_OK; | 329 return NGX_CONF_OK; |
329 } | 330 } |
330 | 331 |
332 | |
333 static char * | |
334 ngx_http_v3_max_packet_size(ngx_conf_t *cf, void *post, void *data) | |
335 { | |
336 size_t *sp = data; | |
337 | |
338 if (*sp < NGX_QUIC_MIN_INITIAL_SIZE | |
339 || *sp > NGX_QUIC_DEFAULT_MAX_PACKET_SIZE) | |
340 { | |
341 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
342 "\"quic_max_packet_size\" must be between %d and %d", | |
343 NGX_QUIC_MIN_INITIAL_SIZE, | |
344 NGX_QUIC_DEFAULT_MAX_PACKET_SIZE); | |
345 | |
346 return NGX_CONF_ERROR; | |
347 } | |
348 | |
349 return NGX_CONF_OK; | |
350 } |