Mercurial > hg > nginx
annotate src/http/modules/ngx_http_quic_module.c @ 8895:4b2d259bdadd quic
QUIC: connections with wrong ALPN protocols are now rejected.
Previously, it was not enforced in the stream module.
Now, since b9e02e9b2f1d it is possible to specify protocols.
Since ALPN is always required, the 'require_alpn' setting is now obsolete.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Wed, 03 Nov 2021 13:36:21 +0300 |
parents | 74b43926b470 |
children | 41caf5410110 |
rev | line source |
---|---|
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
1 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
2 /* |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
3 * Copyright (C) Nginx, Inc. |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
4 * Copyright (C) Roman Arutyunyan |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
5 */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
6 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
7 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
8 #include <ngx_config.h> |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
9 #include <ngx_core.h> |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
10 #include <ngx_http.h> |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
11 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
12 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
13 static ngx_int_t ngx_http_variable_quic(ngx_http_request_t *r, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
14 ngx_http_variable_value_t *v, uintptr_t data); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
15 static ngx_int_t ngx_http_quic_add_variables(ngx_conf_t *cf); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
16 static void *ngx_http_quic_create_srv_conf(ngx_conf_t *cf); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
17 static char *ngx_http_quic_merge_srv_conf(ngx_conf_t *cf, void *parent, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
18 void *child); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
19 static char *ngx_http_quic_max_ack_delay(ngx_conf_t *cf, void *post, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
20 void *data); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
21 static char *ngx_http_quic_max_udp_payload_size(ngx_conf_t *cf, void *post, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
22 void *data); |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
23 static char *ngx_http_quic_host_key(ngx_conf_t *cf, ngx_command_t *cmd, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
24 void *conf); |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
25 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
26 static ngx_conf_post_t ngx_http_quic_max_ack_delay_post = |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
27 { ngx_http_quic_max_ack_delay }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
28 static ngx_conf_post_t ngx_http_quic_max_udp_payload_size_post = |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
29 { ngx_http_quic_max_udp_payload_size }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
30 static ngx_conf_num_bounds_t ngx_http_quic_ack_delay_exponent_bounds = |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
31 { ngx_conf_check_num_bounds, 0, 20 }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
32 static ngx_conf_num_bounds_t ngx_http_quic_active_connection_id_limit_bounds = |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
33 { ngx_conf_check_num_bounds, 2, -1 }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
34 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
35 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
36 static ngx_command_t ngx_http_quic_commands[] = { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
37 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
38 { ngx_string("quic_max_idle_timeout"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
39 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
40 ngx_conf_set_msec_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
41 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
42 offsetof(ngx_quic_conf_t, tp.max_idle_timeout), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
43 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
44 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
45 { ngx_string("quic_max_ack_delay"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
46 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
47 ngx_conf_set_msec_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
48 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
49 offsetof(ngx_quic_conf_t, tp.max_ack_delay), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
50 &ngx_http_quic_max_ack_delay_post }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
51 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
52 { ngx_string("quic_max_udp_payload_size"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
53 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
54 ngx_conf_set_size_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
55 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
56 offsetof(ngx_quic_conf_t, tp.max_udp_payload_size), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
57 &ngx_http_quic_max_udp_payload_size_post }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
58 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
59 { ngx_string("quic_initial_max_data"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
60 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
61 ngx_conf_set_size_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
62 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
63 offsetof(ngx_quic_conf_t, tp.initial_max_data), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
64 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
65 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
66 { ngx_string("quic_initial_max_stream_data_bidi_local"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
67 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
68 ngx_conf_set_size_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
69 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
70 offsetof(ngx_quic_conf_t, tp.initial_max_stream_data_bidi_local), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
71 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
72 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
73 { ngx_string("quic_initial_max_stream_data_bidi_remote"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
74 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
75 ngx_conf_set_size_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
76 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
77 offsetof(ngx_quic_conf_t, tp.initial_max_stream_data_bidi_remote), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
78 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
79 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
80 { ngx_string("quic_initial_max_stream_data_uni"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
81 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
82 ngx_conf_set_size_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
83 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
84 offsetof(ngx_quic_conf_t, tp.initial_max_stream_data_uni), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
85 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
86 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
87 { ngx_string("quic_initial_max_streams_bidi"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
88 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
89 ngx_conf_set_num_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
90 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
91 offsetof(ngx_quic_conf_t, tp.initial_max_streams_bidi), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
92 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
93 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
94 { ngx_string("quic_initial_max_streams_uni"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
95 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
96 ngx_conf_set_num_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
97 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
98 offsetof(ngx_quic_conf_t, tp.initial_max_streams_uni), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
99 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
100 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
101 { ngx_string("quic_ack_delay_exponent"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
102 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
103 ngx_conf_set_num_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
104 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
105 offsetof(ngx_quic_conf_t, tp.ack_delay_exponent), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
106 &ngx_http_quic_ack_delay_exponent_bounds }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
107 |
8628
45db1b5c1706
QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents:
8563
diff
changeset
|
108 { ngx_string("quic_disable_active_migration"), |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
109 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
8628
45db1b5c1706
QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents:
8563
diff
changeset
|
110 ngx_conf_set_flag_slot, |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
111 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
112 offsetof(ngx_quic_conf_t, tp.disable_active_migration), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
113 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
114 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
115 { ngx_string("quic_active_connection_id_limit"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
116 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
117 ngx_conf_set_num_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
118 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
119 offsetof(ngx_quic_conf_t, tp.active_connection_id_limit), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
120 &ngx_http_quic_active_connection_id_limit_bounds }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
121 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
122 { ngx_string("quic_retry"), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
123 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
124 ngx_conf_set_flag_slot, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
125 NGX_HTTP_SRV_CONF_OFFSET, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
126 offsetof(ngx_quic_conf_t, retry), |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
127 NULL }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
128 |
8815
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
129 { ngx_string("quic_gso"), |
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
130 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG, |
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
131 ngx_conf_set_flag_slot, |
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
132 NGX_HTTP_SRV_CONF_OFFSET, |
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
133 offsetof(ngx_quic_conf_t, gso_enabled), |
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
134 NULL }, |
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
135 |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
136 { ngx_string("quic_host_key"), |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
137 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
138 ngx_http_quic_host_key, |
8562
b31c02454539
QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents:
8482
diff
changeset
|
139 NGX_HTTP_SRV_CONF_OFFSET, |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
140 0, |
8562
b31c02454539
QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents:
8482
diff
changeset
|
141 NULL }, |
b31c02454539
QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents:
8482
diff
changeset
|
142 |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
143 ngx_null_command |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
144 }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
145 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
146 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
147 static ngx_http_module_t ngx_http_quic_module_ctx = { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
148 ngx_http_quic_add_variables, /* preconfiguration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
149 NULL, /* postconfiguration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
150 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
151 NULL, /* create main configuration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
152 NULL, /* init main configuration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
153 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
154 ngx_http_quic_create_srv_conf, /* create server configuration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
155 ngx_http_quic_merge_srv_conf, /* merge server configuration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
156 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
157 NULL, /* create location configuration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
158 NULL /* merge location configuration */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
159 }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
160 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
161 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
162 ngx_module_t ngx_http_quic_module = { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
163 NGX_MODULE_V1, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
164 &ngx_http_quic_module_ctx, /* module context */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
165 ngx_http_quic_commands, /* module directives */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
166 NGX_HTTP_MODULE, /* module type */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
167 NULL, /* init master */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
168 NULL, /* init module */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
169 NULL, /* init process */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
170 NULL, /* init thread */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
171 NULL, /* exit thread */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
172 NULL, /* exit process */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
173 NULL, /* exit master */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
174 NGX_MODULE_V1_PADDING |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
175 }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
176 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
177 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
178 static ngx_http_variable_t ngx_http_quic_vars[] = { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
179 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
180 { ngx_string("quic"), NULL, ngx_http_variable_quic, 0, 0, 0 }, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
181 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
182 ngx_http_null_variable |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
183 }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
184 |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
185 static ngx_str_t ngx_http_quic_salt = ngx_string("ngx_quic"); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
186 |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
187 |
8679
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
188 ngx_int_t |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
189 ngx_http_quic_init(ngx_connection_t *c) |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
190 { |
8825
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
191 uint64_t n; |
8679
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
192 ngx_quic_conf_t *qcf; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
193 ngx_http_connection_t *hc, *phc; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
194 ngx_http_core_loc_conf_t *clcf; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
195 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
196 hc = c->data; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
197 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
198 hc->ssl = 1; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
199 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
200 if (c->quic == NULL) { |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
201 qcf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_quic_module); |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
202 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
203 ngx_quic_run(c, qcf); |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
204 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
205 return NGX_DONE; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
206 } |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
207 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
208 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http init quic stream"); |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
209 |
8825
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
210 #if (NGX_HTTP_V3) |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
211 if (!hc->addr_conf->http3) |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
212 #endif |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
213 { |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
214 /* Use HTTP/3 General Protocol Error Code 0x101 for finalization */ |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
215 |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
216 if (c->quic->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) { |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
217 ngx_quic_finalize_connection(c->quic->parent, 0x101, |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
218 "unexpected uni stream"); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
219 ngx_http_close_connection(c); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
220 return NGX_DONE; |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
221 } |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
222 |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
223 clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
224 |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
225 n = c->quic->id >> 2; |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
226 |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
227 if (n >= clcf->keepalive_requests) { |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
228 ngx_quic_finalize_connection(c->quic->parent, 0x101, |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
229 "reached maximum number of requests"); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
230 ngx_http_close_connection(c); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
231 return NGX_DONE; |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
232 } |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
233 |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
234 if (ngx_current_msec - c->quic->parent->start_time |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
235 > clcf->keepalive_time) |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
236 { |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
237 ngx_quic_finalize_connection(c->quic->parent, 0x101, |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
238 "reached maximum time for requests"); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
239 ngx_http_close_connection(c); |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
240 return NGX_DONE; |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
241 } |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
242 } |
59d2d47ad3c6
QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents:
8815
diff
changeset
|
243 |
8769
9ec3e71f8a61
HTTP/3: reference h3c directly from ngx_http_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents:
8755
diff
changeset
|
244 phc = ngx_http_quic_get_connection(c); |
8679
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
245 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
246 if (phc->ssl_servername) { |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
247 hc->ssl_servername = phc->ssl_servername; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
248 hc->conf_ctx = phc->conf_ctx; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
249 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
250 clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module); |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
251 ngx_set_connection_log(c, clcf->error_log); |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
252 } |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
253 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
254 return NGX_OK; |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
255 } |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
256 |
e1eb7f4ca9f1
HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents:
8634
diff
changeset
|
257 |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
258 static ngx_int_t |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
259 ngx_http_variable_quic(ngx_http_request_t *r, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
260 ngx_http_variable_value_t *v, uintptr_t data) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
261 { |
8630
279ad36f2f4b
QUIC: renamed c->qs to c->quic.
Roman Arutyunyan <arut@nginx.com>
parents:
8628
diff
changeset
|
262 if (r->connection->quic) { |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
263 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
264 v->len = 4; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
265 v->valid = 1; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
266 v->no_cacheable = 1; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
267 v->not_found = 0; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
268 v->data = (u_char *) "quic"; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
269 return NGX_OK; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
270 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
271 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
272 v->not_found = 1; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
273 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
274 return NGX_OK; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
275 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
276 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
277 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
278 static ngx_int_t |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
279 ngx_http_quic_add_variables(ngx_conf_t *cf) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
280 { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
281 ngx_http_variable_t *var, *v; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
282 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
283 for (v = ngx_http_quic_vars; v->name.len; v++) { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
284 var = ngx_http_add_variable(cf, &v->name, v->flags); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
285 if (var == NULL) { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
286 return NGX_ERROR; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
287 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
288 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
289 var->get_handler = v->get_handler; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
290 var->data = v->data; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
291 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
292 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
293 return NGX_OK; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
294 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
295 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
296 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
297 static void * |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
298 ngx_http_quic_create_srv_conf(ngx_conf_t *cf) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
299 { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
300 ngx_quic_conf_t *conf; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
301 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
302 conf = ngx_pcalloc(cf->pool, sizeof(ngx_quic_conf_t)); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
303 if (conf == NULL) { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
304 return NULL; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
305 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
306 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
307 /* |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
308 * set by ngx_pcalloc(): |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
309 * |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
310 * conf->tp.original_dcid = { 0, NULL }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
311 * conf->tp.initial_scid = { 0, NULL }; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
312 * conf->tp.retry_scid = { 0, NULL }; |
8562
b31c02454539
QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents:
8482
diff
changeset
|
313 * conf->tp.sr_token = { 0 } |
b31c02454539
QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents:
8482
diff
changeset
|
314 * conf->tp.sr_enabled = 0 |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
315 * conf->tp.preferred_address = NULL |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
316 * conf->host_key = { 0, NULL } |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
317 */ |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
318 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
319 conf->tp.max_idle_timeout = NGX_CONF_UNSET_MSEC; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
320 conf->tp.max_ack_delay = NGX_CONF_UNSET_MSEC; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
321 conf->tp.max_udp_payload_size = NGX_CONF_UNSET_SIZE; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
322 conf->tp.initial_max_data = NGX_CONF_UNSET_SIZE; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
323 conf->tp.initial_max_stream_data_bidi_local = NGX_CONF_UNSET_SIZE; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
324 conf->tp.initial_max_stream_data_bidi_remote = NGX_CONF_UNSET_SIZE; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
325 conf->tp.initial_max_stream_data_uni = NGX_CONF_UNSET_SIZE; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
326 conf->tp.initial_max_streams_bidi = NGX_CONF_UNSET_UINT; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
327 conf->tp.initial_max_streams_uni = NGX_CONF_UNSET_UINT; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
328 conf->tp.ack_delay_exponent = NGX_CONF_UNSET_UINT; |
8628
45db1b5c1706
QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents:
8563
diff
changeset
|
329 conf->tp.disable_active_migration = NGX_CONF_UNSET; |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
330 conf->tp.active_connection_id_limit = NGX_CONF_UNSET_UINT; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
331 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
332 conf->retry = NGX_CONF_UNSET; |
8815
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
333 conf->gso_enabled = NGX_CONF_UNSET; |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
334 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
335 return conf; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
336 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
337 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
338 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
339 static char * |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
340 ngx_http_quic_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
341 { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
342 ngx_quic_conf_t *prev = parent; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
343 ngx_quic_conf_t *conf = child; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
344 |
8563
bed310672f39
QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents:
8562
diff
changeset
|
345 ngx_http_ssl_srv_conf_t *sscf; |
bed310672f39
QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents:
8562
diff
changeset
|
346 |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
347 ngx_conf_merge_msec_value(conf->tp.max_idle_timeout, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
348 prev->tp.max_idle_timeout, 60000); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
349 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
350 ngx_conf_merge_msec_value(conf->tp.max_ack_delay, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
351 prev->tp.max_ack_delay, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
352 NGX_QUIC_DEFAULT_MAX_ACK_DELAY); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
353 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
354 ngx_conf_merge_size_value(conf->tp.max_udp_payload_size, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
355 prev->tp.max_udp_payload_size, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
356 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
357 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
358 ngx_conf_merge_size_value(conf->tp.initial_max_data, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
359 prev->tp.initial_max_data, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
360 16 * NGX_QUIC_STREAM_BUFSIZE); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
361 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
362 ngx_conf_merge_size_value(conf->tp.initial_max_stream_data_bidi_local, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
363 prev->tp.initial_max_stream_data_bidi_local, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
364 NGX_QUIC_STREAM_BUFSIZE); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
365 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
366 ngx_conf_merge_size_value(conf->tp.initial_max_stream_data_bidi_remote, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
367 prev->tp.initial_max_stream_data_bidi_remote, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
368 NGX_QUIC_STREAM_BUFSIZE); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
369 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
370 ngx_conf_merge_size_value(conf->tp.initial_max_stream_data_uni, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
371 prev->tp.initial_max_stream_data_uni, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
372 NGX_QUIC_STREAM_BUFSIZE); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
373 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
374 ngx_conf_merge_uint_value(conf->tp.initial_max_streams_bidi, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
375 prev->tp.initial_max_streams_bidi, 16); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
376 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
377 ngx_conf_merge_uint_value(conf->tp.initial_max_streams_uni, |
8726
55aabb7269e7
HTTP/3: set initial_max_streams_uni default value to 3.
Roman Arutyunyan <arut@nginx.com>
parents:
8694
diff
changeset
|
378 prev->tp.initial_max_streams_uni, 3); |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
379 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
380 ngx_conf_merge_uint_value(conf->tp.ack_delay_exponent, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
381 prev->tp.ack_delay_exponent, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
382 NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
383 |
8628
45db1b5c1706
QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents:
8563
diff
changeset
|
384 ngx_conf_merge_value(conf->tp.disable_active_migration, |
45db1b5c1706
QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents:
8563
diff
changeset
|
385 prev->tp.disable_active_migration, 0); |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
386 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
387 ngx_conf_merge_uint_value(conf->tp.active_connection_id_limit, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
388 prev->tp.active_connection_id_limit, 2); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
389 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
390 ngx_conf_merge_value(conf->retry, prev->retry, 0); |
8815
8ab0d609af09
QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8806
diff
changeset
|
391 ngx_conf_merge_value(conf->gso_enabled, prev->gso_enabled, 0); |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
392 |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
393 ngx_conf_merge_str_value(conf->host_key, prev->host_key, ""); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
394 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
395 if (conf->host_key.len == 0) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
396 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
397 conf->host_key.len = NGX_QUIC_DEFAULT_HOST_KEY_LEN; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
398 conf->host_key.data = ngx_palloc(cf->pool, conf->host_key.len); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
399 if (conf->host_key.data == NULL) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
400 return NGX_CONF_ERROR; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
401 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
402 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
403 if (RAND_bytes(conf->host_key.data, NGX_QUIC_DEFAULT_HOST_KEY_LEN) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
404 <= 0) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
405 { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
406 return NGX_CONF_ERROR; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
407 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
408 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
409 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
410 if (ngx_quic_derive_key(cf->log, "av_token_key", |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
411 &conf->host_key, &ngx_http_quic_salt, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
412 conf->av_token_key, NGX_QUIC_AV_KEY_LEN) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
413 != NGX_OK) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
414 { |
8686 | 415 return NGX_CONF_ERROR; |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
416 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
417 |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
418 if (ngx_quic_derive_key(cf->log, "sr_token_key", |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
419 &conf->host_key, &ngx_http_quic_salt, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
420 conf->sr_token_key, NGX_QUIC_SR_KEY_LEN) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
421 != NGX_OK) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
422 { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
423 return NGX_CONF_ERROR; |
8634
831d1960826f
QUIC: generate default stateless reset token key.
Roman Arutyunyan <arut@nginx.com>
parents:
8630
diff
changeset
|
424 } |
831d1960826f
QUIC: generate default stateless reset token key.
Roman Arutyunyan <arut@nginx.com>
parents:
8630
diff
changeset
|
425 |
8563
bed310672f39
QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents:
8562
diff
changeset
|
426 sscf = ngx_http_conf_get_module_srv_conf(cf, ngx_http_ssl_module); |
bed310672f39
QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents:
8562
diff
changeset
|
427 conf->ssl = &sscf->ssl; |
bed310672f39
QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents:
8562
diff
changeset
|
428 |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
429 return NGX_CONF_OK; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
430 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
431 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
432 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
433 static char * |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
434 ngx_http_quic_max_ack_delay(ngx_conf_t *cf, void *post, void *data) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
435 { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
436 ngx_msec_t *sp = data; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
437 |
8806
f8ad3dd142ad
QUIC: consider max_ack_delay=16384 invalid.
Roman Arutyunyan <arut@nginx.com>
parents:
8769
diff
changeset
|
438 if (*sp >= 16384) { |
8481
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
439 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
440 "\"quic_max_ack_delay\" must be less than 16384"); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
441 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
442 return NGX_CONF_ERROR; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
443 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
444 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
445 return NGX_CONF_OK; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
446 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
447 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
448 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
449 static char * |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
450 ngx_http_quic_max_udp_payload_size(ngx_conf_t *cf, void *post, void *data) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
451 { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
452 size_t *sp = data; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
453 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
454 if (*sp < NGX_QUIC_MIN_INITIAL_SIZE |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
455 || *sp > NGX_QUIC_MAX_UDP_PAYLOAD_SIZE) |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
456 { |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
457 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
458 "\"quic_max_udp_payload_size\" must be between " |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
459 "%d and %d", |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
460 NGX_QUIC_MIN_INITIAL_SIZE, |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
461 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE); |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
462 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
463 return NGX_CONF_ERROR; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
464 } |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
465 |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
466 return NGX_CONF_OK; |
0d2b2664b41c
QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
467 } |
8694
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
468 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
469 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
470 static char * |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
471 ngx_http_quic_host_key(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
472 { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
473 ngx_quic_conf_t *qcf = conf; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
474 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
475 u_char *buf; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
476 size_t size; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
477 ssize_t n; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
478 ngx_str_t *value; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
479 ngx_file_t file; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
480 ngx_file_info_t fi; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
481 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
482 if (qcf->host_key.len) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
483 return "is duplicate"; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
484 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
485 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
486 buf = NULL; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
487 #if (NGX_SUPPRESS_WARN) |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
488 size = 0; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
489 #endif |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
490 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
491 value = cf->args->elts; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
492 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
493 if (ngx_conf_full_name(cf->cycle, &value[1], 1) != NGX_OK) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
494 return NGX_CONF_ERROR; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
495 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
496 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
497 ngx_memzero(&file, sizeof(ngx_file_t)); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
498 file.name = value[1]; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
499 file.log = cf->log; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
500 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
501 file.fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
502 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
503 if (file.fd == NGX_INVALID_FILE) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
504 ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
505 ngx_open_file_n " \"%V\" failed", &file.name); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
506 return NGX_CONF_ERROR; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
507 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
508 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
509 if (ngx_fd_info(file.fd, &fi) == NGX_FILE_ERROR) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
510 ngx_conf_log_error(NGX_LOG_CRIT, cf, ngx_errno, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
511 ngx_fd_info_n " \"%V\" failed", &file.name); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
512 goto failed; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
513 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
514 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
515 size = ngx_file_size(&fi); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
516 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
517 if (size == 0) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
518 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
519 "\"%V\" zero key size", &file.name); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
520 goto failed; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
521 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
522 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
523 buf = ngx_pnalloc(cf->pool, size); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
524 if (buf == NULL) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
525 goto failed; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
526 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
527 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
528 n = ngx_read_file(&file, buf, size, 0); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
529 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
530 if (n == NGX_ERROR) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
531 ngx_conf_log_error(NGX_LOG_CRIT, cf, ngx_errno, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
532 ngx_read_file_n " \"%V\" failed", &file.name); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
533 goto failed; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
534 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
535 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
536 if ((size_t) n != size) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
537 ngx_conf_log_error(NGX_LOG_CRIT, cf, 0, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
538 ngx_read_file_n " \"%V\" returned only " |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
539 "%z bytes instead of %uz", &file.name, n, size); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
540 goto failed; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
541 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
542 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
543 qcf->host_key.data = buf; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
544 qcf->host_key.len = n; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
545 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
546 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
547 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
548 ngx_close_file_n " \"%V\" failed", &file.name); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
549 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
550 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
551 return NGX_CONF_OK; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
552 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
553 failed: |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
554 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
555 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
556 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno, |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
557 ngx_close_file_n " \"%V\" failed", &file.name); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
558 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
559 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
560 if (buf) { |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
561 ngx_explicit_memzero(buf, size); |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
562 } |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
563 |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
564 return NGX_CONF_ERROR; |
cef042935003
QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents:
8686
diff
changeset
|
565 } |