annotate src/http/modules/ngx_http_quic_module.c @ 8551:c35b255d80dc quic

HTTP/3: close connection on keepalive_requests * 2. After receiving GOAWAY, client is not supposed to create new streams. However, until client reads this frame, we allow it to create new streams, which are gracefully rejected. To prevent client from abusing this algorithm, a new limit is introduced. Upon reaching keepalive_requests * 2, server now closes the entire QUIC connection claiming excessive load.
author Roman Arutyunyan <arut@nginx.com>
date Thu, 29 Jul 2021 16:01:37 +0300
parents 59d2d47ad3c6
children 74b43926b470
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7999
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);
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
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: 8279
diff changeset
24 void *conf);
7999
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
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
108 { ngx_string("quic_disable_active_migration"),
7999
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,
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
110 ngx_conf_set_flag_slot,
7999
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
8540
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
129 { ngx_string("quic_gso"),
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
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: 8507
diff changeset
131 ngx_conf_set_flag_slot,
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
132 NGX_HTTP_SRV_CONF_OFFSET,
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
133 offsetof(ngx_quic_conf_t, gso_enabled),
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
134 NULL },
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
135
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
136 { ngx_string("quic_host_key"),
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
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: 8279
diff changeset
138 ngx_http_quic_host_key,
8100
b31c02454539 QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
139 NGX_HTTP_SRV_CONF_OFFSET,
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
140 0,
8100
b31c02454539 QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
141 NULL },
b31c02454539 QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
142
7999
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
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
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: 8279
diff changeset
186
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
187
8272
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
188 ngx_int_t
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
189 ngx_http_quic_init(ngx_connection_t *c)
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
190 {
8550
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
191 uint64_t n;
8272
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
192 ngx_quic_conf_t *qcf;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
193 ngx_http_connection_t *hc, *phc;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
194 ngx_http_core_loc_conf_t *clcf;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
195
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
196 hc = c->data;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
197
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
198 hc->ssl = 1;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
199
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
200 if (c->quic == NULL) {
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
201 c->log->connection = c->number;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
202
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
203 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: 8204
diff changeset
204
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
205 ngx_quic_run(c, qcf);
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
206
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
207 return NGX_DONE;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
208 }
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
209
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
210 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: 8204
diff changeset
211
8550
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
212 #if (NGX_HTTP_V3)
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
213 if (!hc->addr_conf->http3)
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
214 #endif
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
215 {
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
216 /* Use HTTP/3 General Protocol Error Code 0x101 for finalization */
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
217
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
218 if (c->quic->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) {
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
219 ngx_quic_finalize_connection(c->quic->parent, 0x101,
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
220 "unexpected uni stream");
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
221 ngx_http_close_connection(c);
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
222 return NGX_DONE;
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
223 }
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
224
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
225 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: 8540
diff changeset
226
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
227 n = c->quic->id >> 2;
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
228
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
229 if (n >= clcf->keepalive_requests) {
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
230 ngx_quic_finalize_connection(c->quic->parent, 0x101,
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
231 "reached maximum number of requests");
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
232 ngx_http_close_connection(c);
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
233 return NGX_DONE;
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
234 }
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
235
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
236 if (ngx_current_msec - c->quic->parent->start_time
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
237 > clcf->keepalive_time)
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
238 {
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
239 ngx_quic_finalize_connection(c->quic->parent, 0x101,
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
240 "reached maximum time for requests");
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
241 ngx_http_close_connection(c);
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
242 return NGX_DONE;
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
243 }
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
244 }
59d2d47ad3c6 QUIC: stream limits in "hq" mode.
Roman Arutyunyan <arut@nginx.com>
parents: 8540
diff changeset
245
8429
9ec3e71f8a61 HTTP/3: reference h3c directly from ngx_http_connection_t.
Roman Arutyunyan <arut@nginx.com>
parents: 8415
diff changeset
246 phc = ngx_http_quic_get_connection(c);
8272
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
247
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
248 if (phc->ssl_servername) {
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
249 hc->ssl_servername = phc->ssl_servername;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
250 hc->conf_ctx = phc->conf_ctx;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
251
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
252 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: 8204
diff changeset
253 ngx_set_connection_log(c, clcf->error_log);
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
254 }
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
255
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
256 return NGX_OK;
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
257 }
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
258
e1eb7f4ca9f1 HTTP/3: refactored request parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8204
diff changeset
259
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
260 static ngx_int_t
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
261 ngx_http_variable_quic(ngx_http_request_t *r,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
262 ngx_http_variable_value_t *v, uintptr_t data)
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
263 {
8200
279ad36f2f4b QUIC: renamed c->qs to c->quic.
Roman Arutyunyan <arut@nginx.com>
parents: 8198
diff changeset
264 if (r->connection->quic) {
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
265
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
266 v->len = 4;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
267 v->valid = 1;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
268 v->no_cacheable = 1;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
269 v->not_found = 0;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
270 v->data = (u_char *) "quic";
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
271 return NGX_OK;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
272 }
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 v->not_found = 1;
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 return NGX_OK;
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
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
279
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
280 static ngx_int_t
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
281 ngx_http_quic_add_variables(ngx_conf_t *cf)
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 ngx_http_variable_t *var, *v;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
284
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
285 for (v = ngx_http_quic_vars; v->name.len; v++) {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
286 var = ngx_http_add_variable(cf, &v->name, v->flags);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
287 if (var == NULL) {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
288 return NGX_ERROR;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
289 }
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
290
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
291 var->get_handler = v->get_handler;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
292 var->data = v->data;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
293 }
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 return NGX_OK;
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
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
298
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
299 static void *
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
300 ngx_http_quic_create_srv_conf(ngx_conf_t *cf)
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 ngx_quic_conf_t *conf;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
303
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
304 conf = ngx_pcalloc(cf->pool, sizeof(ngx_quic_conf_t));
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
305 if (conf == NULL) {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
306 return NULL;
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
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 * set by ngx_pcalloc():
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
311 *
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
312 * conf->tp.original_dcid = { 0, NULL };
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
313 * conf->tp.initial_scid = { 0, NULL };
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
314 * conf->tp.retry_scid = { 0, NULL };
8100
b31c02454539 QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
315 * conf->tp.sr_token = { 0 }
b31c02454539 QUIC: added stateless reset support.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
316 * conf->tp.sr_enabled = 0
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
317 * conf->tp.preferred_address = NULL
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
318 * conf->host_key = { 0, NULL }
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
319 */
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
320
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
321 conf->tp.max_idle_timeout = NGX_CONF_UNSET_MSEC;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
322 conf->tp.max_ack_delay = NGX_CONF_UNSET_MSEC;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
323 conf->tp.max_udp_payload_size = NGX_CONF_UNSET_SIZE;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
324 conf->tp.initial_max_data = 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_bidi_local = NGX_CONF_UNSET_SIZE;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
326 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
327 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
328 conf->tp.initial_max_streams_bidi = NGX_CONF_UNSET_UINT;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
329 conf->tp.initial_max_streams_uni = NGX_CONF_UNSET_UINT;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
330 conf->tp.ack_delay_exponent = NGX_CONF_UNSET_UINT;
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
331 conf->tp.disable_active_migration = NGX_CONF_UNSET;
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
332 conf->tp.active_connection_id_limit = NGX_CONF_UNSET_UINT;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
333
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
334 conf->retry = NGX_CONF_UNSET;
8540
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
335 conf->gso_enabled = NGX_CONF_UNSET;
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents: 7999
diff changeset
336 conf->require_alpn = 1;
7999
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 return conf;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
339 }
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
340
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 static char *
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
343 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
344 {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
345 ngx_quic_conf_t *prev = parent;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
346 ngx_quic_conf_t *conf = child;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
347
8101
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8100
diff changeset
348 ngx_http_ssl_srv_conf_t *sscf;
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8100
diff changeset
349
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
350 ngx_conf_merge_msec_value(conf->tp.max_idle_timeout,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
351 prev->tp.max_idle_timeout, 60000);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
352
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
353 ngx_conf_merge_msec_value(conf->tp.max_ack_delay,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
354 prev->tp.max_ack_delay,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
355 NGX_QUIC_DEFAULT_MAX_ACK_DELAY);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
356
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
357 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
358 prev->tp.max_udp_payload_size,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
359 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
360
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
361 ngx_conf_merge_size_value(conf->tp.initial_max_data,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
362 prev->tp.initial_max_data,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
363 16 * NGX_QUIC_STREAM_BUFSIZE);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
364
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
365 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
366 prev->tp.initial_max_stream_data_bidi_local,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
367 NGX_QUIC_STREAM_BUFSIZE);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
368
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
369 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
370 prev->tp.initial_max_stream_data_bidi_remote,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
371 NGX_QUIC_STREAM_BUFSIZE);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
372
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
373 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
374 prev->tp.initial_max_stream_data_uni,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
375 NGX_QUIC_STREAM_BUFSIZE);
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_bidi,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
378 prev->tp.initial_max_streams_bidi, 16);
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.initial_max_streams_uni,
8361
55aabb7269e7 HTTP/3: set initial_max_streams_uni default value to 3.
Roman Arutyunyan <arut@nginx.com>
parents: 8287
diff changeset
381 prev->tp.initial_max_streams_uni, 3);
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
382
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
383 ngx_conf_merge_uint_value(conf->tp.ack_delay_exponent,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
384 prev->tp.ack_delay_exponent,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
385 NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
386
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
387 ngx_conf_merge_value(conf->tp.disable_active_migration,
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
388 prev->tp.disable_active_migration, 0);
7999
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_uint_value(conf->tp.active_connection_id_limit,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
391 prev->tp.active_connection_id_limit, 2);
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
392
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
393 ngx_conf_merge_value(conf->retry, prev->retry, 0);
8540
8ab0d609af09 QUIC: the "quic_gso" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8507
diff changeset
394 ngx_conf_merge_value(conf->gso_enabled, prev->gso_enabled, 0);
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
395
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
396 ngx_conf_merge_str_value(conf->host_key, prev->host_key, "");
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
397
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
398 if (conf->host_key.len == 0) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
399
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
400 conf->host_key.len = NGX_QUIC_DEFAULT_HOST_KEY_LEN;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
401 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: 8279
diff changeset
402 if (conf->host_key.data == NULL) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
403 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
404 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
405
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
406 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: 8279
diff changeset
407 <= 0)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
408 {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
409 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
410 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
411 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
412
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
413 if (ngx_quic_derive_key(cf->log, "av_token_key",
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
414 &conf->host_key, &ngx_http_quic_salt,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
415 conf->av_token_key, NGX_QUIC_AV_KEY_LEN)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
416 != NGX_OK)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
417 {
8279
dffb66fb783b QUIC: stateless retry.
Vladimir Homutov <vl@nginx.com>
parents: 8272
diff changeset
418 return NGX_CONF_ERROR;
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
419 }
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
420
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
421 if (ngx_quic_derive_key(cf->log, "sr_token_key",
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
422 &conf->host_key, &ngx_http_quic_salt,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
423 conf->sr_token_key, NGX_QUIC_SR_KEY_LEN)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
424 != NGX_OK)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
425 {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
426 return NGX_CONF_ERROR;
8204
831d1960826f QUIC: generate default stateless reset token key.
Roman Arutyunyan <arut@nginx.com>
parents: 8200
diff changeset
427 }
831d1960826f QUIC: generate default stateless reset token key.
Roman Arutyunyan <arut@nginx.com>
parents: 8200
diff changeset
428
8101
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8100
diff changeset
429 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: 8100
diff changeset
430 conf->ssl = &sscf->ssl;
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8100
diff changeset
431
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
432 return NGX_CONF_OK;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
433 }
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
434
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 static char *
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
437 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
438 {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
439 ngx_msec_t *sp = data;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
440
8507
f8ad3dd142ad QUIC: consider max_ack_delay=16384 invalid.
Roman Arutyunyan <arut@nginx.com>
parents: 8429
diff changeset
441 if (*sp >= 16384) {
7999
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
442 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
443 "\"quic_max_ack_delay\" must be less than 16384");
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_ERROR;
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 return NGX_CONF_OK;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
449 }
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
450
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 static char *
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
453 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
454 {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
455 size_t *sp = data;
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 if (*sp < NGX_QUIC_MIN_INITIAL_SIZE
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
458 || *sp > NGX_QUIC_MAX_UDP_PAYLOAD_SIZE)
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
459 {
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
460 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
461 "\"quic_max_udp_payload_size\" must be between "
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
462 "%d and %d",
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
463 NGX_QUIC_MIN_INITIAL_SIZE,
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
464 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
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_ERROR;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
467 }
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
468
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
469 return NGX_CONF_OK;
0d2b2664b41c QUIC: added "quic" listen parameter.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
470 }
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
471
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
472
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
473 static char *
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
474 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: 8279
diff changeset
475 {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
476 ngx_quic_conf_t *qcf = conf;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
477
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
478 u_char *buf;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
479 size_t size;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
480 ssize_t n;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
481 ngx_str_t *value;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
482 ngx_file_t file;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
483 ngx_file_info_t fi;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
484
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
485 if (qcf->host_key.len) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
486 return "is duplicate";
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
487 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
488
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
489 buf = NULL;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
490 #if (NGX_SUPPRESS_WARN)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
491 size = 0;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
492 #endif
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
493
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
494 value = cf->args->elts;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
495
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
496 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: 8279
diff changeset
497 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
498 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
499
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
500 ngx_memzero(&file, sizeof(ngx_file_t));
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
501 file.name = value[1];
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
502 file.log = cf->log;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
503
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
504 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: 8279
diff changeset
505
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
506 if (file.fd == NGX_INVALID_FILE) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
507 ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
508 ngx_open_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
509 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
510 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
511
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
512 if (ngx_fd_info(file.fd, &fi) == NGX_FILE_ERROR) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
513 ngx_conf_log_error(NGX_LOG_CRIT, cf, ngx_errno,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
514 ngx_fd_info_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
515 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
516 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
517
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
518 size = ngx_file_size(&fi);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
519
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
520 if (size == 0) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
521 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
522 "\"%V\" zero key size", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
523 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
524 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
525
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
526 buf = ngx_pnalloc(cf->pool, size);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
527 if (buf == NULL) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
528 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
529 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
530
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
531 n = ngx_read_file(&file, buf, size, 0);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
532
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
533 if (n == NGX_ERROR) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
534 ngx_conf_log_error(NGX_LOG_CRIT, cf, ngx_errno,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
535 ngx_read_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
536 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
537 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
538
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
539 if ((size_t) n != size) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
540 ngx_conf_log_error(NGX_LOG_CRIT, cf, 0,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
541 ngx_read_file_n " \"%V\" returned only "
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
542 "%z bytes instead of %uz", &file.name, n, size);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
543 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
544 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
545
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
546 qcf->host_key.data = buf;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
547 qcf->host_key.len = n;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
548
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
549 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
550 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
551 ngx_close_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
552 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
553
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
554 return NGX_CONF_OK;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
555
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
556 failed:
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
557
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
558 if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
559 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
560 ngx_close_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
561 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
562
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
563 if (buf) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
564 ngx_explicit_memzero(buf, size);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
565 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
566
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
567 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
568 }