annotate src/http/v3/ngx_http_v3_module.c @ 8454:032cb35ce758 quic

HTTP/3: http3_max_field_size directive to limit string size. Client streams may send literal strings which are now limited in size by the new directive. The default value is 4096. The directive is similar to HTTP/2 directive http2_max_field_size.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 29 Jun 2020 15:56:14 +0300
parents 6633f17044eb
children c9538aef3211
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
1
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
2 /*
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
4 * Copyright (C) Roman Arutyunyan
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
5 */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
6
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
7
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
8 #include <ngx_config.h>
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
9 #include <ngx_core.h>
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
10 #include <ngx_http.h>
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
11
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
12
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
13 static char *ngx_http_v3_max_ack_delay(ngx_conf_t *cf, void *post, void *data);
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
14 static char *ngx_http_v3_max_udp_payload_size(ngx_conf_t *cf, void *post,
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
15 void *data);
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
16
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
17
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
18 static ngx_conf_post_t ngx_http_v3_max_ack_delay_post =
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
19 { ngx_http_v3_max_ack_delay };
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
20 static ngx_conf_post_t ngx_http_v3_max_udp_payload_size_post =
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
21 { ngx_http_v3_max_udp_payload_size };
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
22 static ngx_conf_num_bounds_t ngx_http_v3_ack_delay_exponent_bounds =
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
23 { ngx_conf_check_num_bounds, 0, 20 };
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
24 static ngx_conf_num_bounds_t ngx_http_v3_active_connection_id_limit_bounds =
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
25 { ngx_conf_check_num_bounds, 2, -1 };
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
26
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
27
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
28 static ngx_command_t ngx_http_v3_commands[] = {
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
29
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
30 { ngx_string("quic_max_idle_timeout"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
31 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
32 ngx_conf_set_msec_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
33 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
34 offsetof(ngx_http_v3_srv_conf_t, quic.max_idle_timeout),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
35 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
36
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
37 { ngx_string("quic_max_ack_delay"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
38 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
39 ngx_conf_set_msec_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
40 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
41 offsetof(ngx_http_v3_srv_conf_t, quic.max_ack_delay),
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
42 &ngx_http_v3_max_ack_delay_post },
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
43
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
44 { ngx_string("quic_max_udp_payload_size"),
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
45 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
46 ngx_conf_set_size_slot,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
47 NGX_HTTP_SRV_CONF_OFFSET,
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
48 offsetof(ngx_http_v3_srv_conf_t, quic.max_udp_payload_size),
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
49 &ngx_http_v3_max_udp_payload_size_post },
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
50
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
51 { ngx_string("quic_initial_max_data"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
52 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
53 ngx_conf_set_size_slot,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
54 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
55 offsetof(ngx_http_v3_srv_conf_t, quic.initial_max_data),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
56 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
57
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
58 { ngx_string("quic_initial_max_stream_data_bidi_local"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
59 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
60 ngx_conf_set_size_slot,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
61 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
62 offsetof(ngx_http_v3_srv_conf_t, quic.initial_max_stream_data_bidi_local),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
63 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
64
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
65 { ngx_string("quic_initial_max_stream_data_bidi_remote"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
66 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
67 ngx_conf_set_size_slot,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
68 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
69 offsetof(ngx_http_v3_srv_conf_t, quic.initial_max_stream_data_bidi_remote),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
70 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
71
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
72 { ngx_string("quic_initial_max_stream_data_uni"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
73 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
74 ngx_conf_set_size_slot,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
75 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
76 offsetof(ngx_http_v3_srv_conf_t, quic.initial_max_stream_data_uni),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
77 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
78
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
79 { ngx_string("quic_initial_max_streams_bidi"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
80 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
81 ngx_conf_set_num_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
82 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
83 offsetof(ngx_http_v3_srv_conf_t, quic.initial_max_streams_bidi),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
84 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
85
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
86 { ngx_string("quic_initial_max_streams_uni"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
87 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
88 ngx_conf_set_num_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
89 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
90 offsetof(ngx_http_v3_srv_conf_t, quic.initial_max_streams_uni),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
91 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
92
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
93 { ngx_string("quic_ack_delay_exponent"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
94 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
95 ngx_conf_set_num_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
96 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
97 offsetof(ngx_http_v3_srv_conf_t, quic.ack_delay_exponent),
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
98 &ngx_http_v3_ack_delay_exponent_bounds },
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
99
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
100 { ngx_string("quic_active_migration"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
101 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
102 ngx_conf_set_num_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
103 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
104 offsetof(ngx_http_v3_srv_conf_t, quic.disable_active_migration),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
105 NULL },
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
106
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
107 { ngx_string("quic_active_connection_id_limit"),
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
108 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
109 ngx_conf_set_num_slot,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
110 NGX_HTTP_SRV_CONF_OFFSET,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
111 offsetof(ngx_http_v3_srv_conf_t, quic.active_connection_id_limit),
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
112 &ngx_http_v3_active_connection_id_limit_bounds },
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
113
8383
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
114 { ngx_string("quic_retry"),
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
115 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
116 ngx_conf_set_flag_slot,
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
117 NGX_HTTP_SRV_CONF_OFFSET,
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
118 offsetof(ngx_http_v3_srv_conf_t, quic.retry),
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
119 NULL },
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
120
8454
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
121 { ngx_string("http3_max_field_size"),
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
122 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
123 ngx_conf_set_size_slot,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
124 NGX_HTTP_SRV_CONF_OFFSET,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
125 offsetof(ngx_http_v3_srv_conf_t, max_field_size),
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
126 NULL },
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
127
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
128 ngx_null_command
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
129 };
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
130
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
131
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
132 static ngx_int_t ngx_http_variable_quic(ngx_http_request_t *r,
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
133 ngx_http_variable_value_t *v, uintptr_t data);
8297
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
134 static ngx_int_t ngx_http_variable_http3(ngx_http_request_t *r,
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
135 ngx_http_variable_value_t *v, uintptr_t data);
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
136 static ngx_int_t ngx_http_v3_add_variables(ngx_conf_t *cf);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
137 static void *ngx_http_v3_create_srv_conf(ngx_conf_t *cf);
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
138 static char *ngx_http_v3_merge_srv_conf(ngx_conf_t *cf,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
139 void *parent, void *child);
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
140
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
141
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
142 static ngx_http_module_t ngx_http_v3_module_ctx = {
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
143 ngx_http_v3_add_variables, /* preconfiguration */
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
144 NULL, /* postconfiguration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
145
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
146 NULL, /* create main configuration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
147 NULL, /* init main configuration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
148
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
149 ngx_http_v3_create_srv_conf, /* create server configuration */
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
150 ngx_http_v3_merge_srv_conf, /* merge server configuration */
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
151
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
152 NULL, /* create location configuration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
153 NULL /* merge location configuration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
154 };
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
155
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
156
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
157 ngx_module_t ngx_http_v3_module = {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
158 NGX_MODULE_V1,
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
159 &ngx_http_v3_module_ctx, /* module context */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
160 ngx_http_v3_commands, /* module directives */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
161 NGX_HTTP_MODULE, /* module type */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
162 NULL, /* init master */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
163 NULL, /* init module */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
164 NULL, /* init process */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
165 NULL, /* init thread */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
166 NULL, /* exit thread */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
167 NULL, /* exit process */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
168 NULL, /* exit master */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
169 NGX_MODULE_V1_PADDING
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
170 };
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
171
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
172
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
173 static ngx_http_variable_t ngx_http_v3_vars[] = {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
174 { ngx_string("quic"), NULL, ngx_http_variable_quic,
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
175 0, 0, 0 },
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
176
8297
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
177 { ngx_string("http3"), NULL, ngx_http_variable_http3,
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
178 0, 0, 0 },
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
179
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
180 ngx_http_null_variable
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
181 };
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
182
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
183
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
184 static ngx_int_t
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
185 ngx_http_variable_quic(ngx_http_request_t *r,
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
186 ngx_http_variable_value_t *v, uintptr_t data)
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
187 {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
188 if (r->connection->qs) {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
189
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
190 v->len = 4;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
191 v->valid = 1;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
192 v->no_cacheable = 1;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
193 v->not_found = 0;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
194 v->data = (u_char *) "quic";
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
195 return NGX_OK;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
196 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
197
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
198 v->not_found = 1;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
199
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
200 return NGX_OK;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
201 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
202
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
203
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
204 static ngx_int_t
8297
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
205 ngx_http_variable_http3(ngx_http_request_t *r,
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
206 ngx_http_variable_value_t *v, uintptr_t data)
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
207 {
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
208 v->valid = 1;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
209 v->no_cacheable = 1;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
210 v->not_found = 0;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
211
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
212 v->data = ngx_pnalloc(r->pool, sizeof("h3-xx") - 1);
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
213 if (v->data == NULL) {
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
214 return NGX_ERROR;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
215 }
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
216
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
217 v->len = ngx_sprintf(v->data, "h3-%d", NGX_QUIC_DRAFT_VERSION) - v->data;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
218
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
219 return NGX_OK;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
220 }
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
221
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
222
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
223 static ngx_int_t
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
224 ngx_http_v3_add_variables(ngx_conf_t *cf)
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
225 {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
226 ngx_http_variable_t *var, *v;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
227
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
228 for (v = ngx_http_v3_vars; v->name.len; v++) {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
229 var = ngx_http_add_variable(cf, &v->name, v->flags);
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
230 if (var == NULL) {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
231 return NGX_ERROR;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
232 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
233
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
234 var->get_handler = v->get_handler;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
235 var->data = v->data;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
236 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
237
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
238 return NGX_OK;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
239 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
240
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
241
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
242
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
243 static void *
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
244 ngx_http_v3_create_srv_conf(ngx_conf_t *cf)
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
245 {
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
246 ngx_http_v3_srv_conf_t *v3cf;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
248 v3cf = ngx_pcalloc(cf->pool, sizeof(ngx_http_v3_srv_conf_t));
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
249 if (v3cf == NULL) {
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
250 return NULL;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
251 }
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
252
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
253 /*
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
254 * set by ngx_pcalloc():
8417
6633f17044eb QUIC draft-28 transport parameters support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8415
diff changeset
255 * v3cf->quic.original_dcid = { 0, NULL };
6633f17044eb QUIC draft-28 transport parameters support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8415
diff changeset
256 * v3cf->quic.initial_scid = { 0, NULL };
6633f17044eb QUIC draft-28 transport parameters support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8415
diff changeset
257 * v3cf->quic.retry_scid = { 0, NULL };
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
258 * v3cf->quic.stateless_reset_token = { 0 }
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
259 * conf->quic.preferred_address = NULL
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
260 */
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
261
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
262 v3cf->quic.max_idle_timeout = NGX_CONF_UNSET_MSEC;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
263 v3cf->quic.max_ack_delay = NGX_CONF_UNSET_MSEC;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
264
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
265 v3cf->quic.max_udp_payload_size = NGX_CONF_UNSET_SIZE;
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
266 v3cf->quic.initial_max_data = NGX_CONF_UNSET_SIZE;
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
267 v3cf->quic.initial_max_stream_data_bidi_local = NGX_CONF_UNSET_SIZE;
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
268 v3cf->quic.initial_max_stream_data_bidi_remote = NGX_CONF_UNSET_SIZE;
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
269 v3cf->quic.initial_max_stream_data_uni = NGX_CONF_UNSET_SIZE;
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
270 v3cf->quic.initial_max_streams_bidi = NGX_CONF_UNSET_UINT;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
271 v3cf->quic.initial_max_streams_uni = NGX_CONF_UNSET_UINT;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
272 v3cf->quic.ack_delay_exponent = NGX_CONF_UNSET_UINT;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
273 v3cf->quic.disable_active_migration = NGX_CONF_UNSET_UINT;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
274 v3cf->quic.active_connection_id_limit = NGX_CONF_UNSET_UINT;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
275
8383
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
276 v3cf->quic.retry = NGX_CONF_UNSET;
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
277
8454
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
278 v3cf->max_field_size = NGX_CONF_UNSET_SIZE;
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
279
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
280 return v3cf;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
281 }
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
282
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
283
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
284 static char *
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
285 ngx_http_v3_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
286 {
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
287 ngx_http_v3_srv_conf_t *prev = parent;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
288 ngx_http_v3_srv_conf_t *conf = child;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
289
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
290 ngx_conf_merge_msec_value(conf->quic.max_idle_timeout,
8271
8e54a17dabee Respect QUIC max_idle_timeout.
Roman Arutyunyan <arut@nginx.com>
parents: 8265
diff changeset
291 prev->quic.max_idle_timeout, 60000);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
292
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
293 ngx_conf_merge_msec_value(conf->quic.max_ack_delay,
8265
d45325e90221 Limit output QUIC packets with client max_packet_size.
Roman Arutyunyan <arut@nginx.com>
parents: 8248
diff changeset
294 prev->quic.max_ack_delay,
d45325e90221 Limit output QUIC packets with client max_packet_size.
Roman Arutyunyan <arut@nginx.com>
parents: 8248
diff changeset
295 NGX_QUIC_DEFAULT_MAX_ACK_DELAY);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
296
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
297 ngx_conf_merge_size_value(conf->quic.max_udp_payload_size,
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
298 prev->quic.max_udp_payload_size,
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
299 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
300
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
301 ngx_conf_merge_size_value(conf->quic.initial_max_data,
8338
0f9e9786b90d Added primitive flow control mechanisms.
Vladimir Homutov <vl@nginx.com>
parents: 8297
diff changeset
302 prev->quic.initial_max_data,
0f9e9786b90d Added primitive flow control mechanisms.
Vladimir Homutov <vl@nginx.com>
parents: 8297
diff changeset
303 16 * NGX_QUIC_STREAM_BUFSIZE);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
304
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
305 ngx_conf_merge_size_value(conf->quic.initial_max_stream_data_bidi_local,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
306 prev->quic.initial_max_stream_data_bidi_local,
8338
0f9e9786b90d Added primitive flow control mechanisms.
Vladimir Homutov <vl@nginx.com>
parents: 8297
diff changeset
307 NGX_QUIC_STREAM_BUFSIZE);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
308
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
309 ngx_conf_merge_size_value(conf->quic.initial_max_stream_data_bidi_remote,
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
310 prev->quic.initial_max_stream_data_bidi_remote,
8338
0f9e9786b90d Added primitive flow control mechanisms.
Vladimir Homutov <vl@nginx.com>
parents: 8297
diff changeset
311 NGX_QUIC_STREAM_BUFSIZE);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
312
8352
d73516830236 HTTP/3: bytes holding directives changed to ngx_conf_set_size_slot.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8340
diff changeset
313 ngx_conf_merge_size_value(conf->quic.initial_max_stream_data_uni,
8338
0f9e9786b90d Added primitive flow control mechanisms.
Vladimir Homutov <vl@nginx.com>
parents: 8297
diff changeset
314 prev->quic.initial_max_stream_data_uni,
0f9e9786b90d Added primitive flow control mechanisms.
Vladimir Homutov <vl@nginx.com>
parents: 8297
diff changeset
315 NGX_QUIC_STREAM_BUFSIZE);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
316
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
317 ngx_conf_merge_uint_value(conf->quic.initial_max_streams_bidi,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
318 prev->quic.initial_max_streams_bidi, 16);
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
319
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
320 ngx_conf_merge_uint_value(conf->quic.initial_max_streams_uni,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
321 prev->quic.initial_max_streams_uni, 16);
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
322
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
323 ngx_conf_merge_uint_value(conf->quic.ack_delay_exponent,
8265
d45325e90221 Limit output QUIC packets with client max_packet_size.
Roman Arutyunyan <arut@nginx.com>
parents: 8248
diff changeset
324 prev->quic.ack_delay_exponent,
d45325e90221 Limit output QUIC packets with client max_packet_size.
Roman Arutyunyan <arut@nginx.com>
parents: 8248
diff changeset
325 NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT);
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
326
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
327 ngx_conf_merge_uint_value(conf->quic.disable_active_migration,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
328 prev->quic.disable_active_migration, 1);
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
329
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
330 ngx_conf_merge_uint_value(conf->quic.active_connection_id_limit,
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
331 prev->quic.active_connection_id_limit, 2);
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
332
8383
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
333 ngx_conf_merge_value(conf->quic.retry, prev->quic.retry, 0);
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
334
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
335 if (conf->quic.retry) {
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
336 if (RAND_bytes(conf->quic.token_key, sizeof(conf->quic.token_key)) <= 0) {
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
337 return NGX_CONF_ERROR;
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
338 }
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
339 }
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
340
8454
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
341 ngx_conf_merge_size_value(conf->max_field_size,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
342 prev->max_field_size,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
343 NGX_HTTP_V3_DEFAULT_MAX_FIELD_SIZE);
8383
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
344
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
345 return NGX_CONF_OK;
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
346 }
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
347
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
348
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
349 static char *
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
350 ngx_http_v3_max_ack_delay(ngx_conf_t *cf, void *post, void *data)
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
351 {
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
352 ngx_msec_t *sp = data;
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
354 if (*sp > 16384) {
8340
a8fc0ab54cea Added handling of incorrect values in TP configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8338
diff changeset
355 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
356 "\"quic_max_ack_delay\" must be less than 16384");
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
357
8340
a8fc0ab54cea Added handling of incorrect values in TP configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8338
diff changeset
358 return NGX_CONF_ERROR;
a8fc0ab54cea Added handling of incorrect values in TP configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8338
diff changeset
359 }
a8fc0ab54cea Added handling of incorrect values in TP configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8338
diff changeset
360
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
361 return NGX_CONF_OK;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
362 }
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
363
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
364
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
365 static char *
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
366 ngx_http_v3_max_udp_payload_size(ngx_conf_t *cf, void *post, void *data)
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
367 {
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
368 size_t *sp = data;
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
369
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
370 if (*sp < NGX_QUIC_MIN_INITIAL_SIZE
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
371 || *sp > NGX_QUIC_MAX_UDP_PAYLOAD_SIZE)
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
372 {
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
373 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
374 "\"quic_max_udp_payload_size\" must be between "
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
375 "%d and %d",
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
376 NGX_QUIC_MIN_INITIAL_SIZE,
8415
125cbfa77013 Renamed max_packet_size to max_udp_payload_size, from draft-28.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8383
diff changeset
377 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
378
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
379 return NGX_CONF_ERROR;
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
380 }
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
381
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
382 return NGX_CONF_OK;
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
383 }