annotate src/stream/ngx_stream_quic_module.c @ 8319:ffcaf0aad9f2 quic

HTTP/3: limited client header size. The limit is the size of all large client header buffers. Client header size is the total size of all client header names and values.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 17 Feb 2021 11:58:32 +0300
parents cef042935003
children b4e6b7049984
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
1
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
2 /*
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
4 * Copyright (C) Roman Arutyunyan
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
5 */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
6
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
7
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
8 #include <ngx_config.h>
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
9 #include <ngx_core.h>
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
10 #include <ngx_stream.h>
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
11
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
12 #include <ngx_event_quic_protection.h>
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
13
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
14
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
15 static ngx_int_t ngx_stream_variable_quic(ngx_stream_session_t *s,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
16 ngx_stream_variable_value_t *v, uintptr_t data);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
17 static ngx_int_t ngx_stream_quic_add_variables(ngx_conf_t *cf);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
18 static void *ngx_stream_quic_create_srv_conf(ngx_conf_t *cf);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
19 static char *ngx_stream_quic_merge_srv_conf(ngx_conf_t *cf, void *parent,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
20 void *child);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
21 static char *ngx_stream_quic_max_ack_delay(ngx_conf_t *cf, void *post,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
22 void *data);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
23 static char *ngx_stream_quic_max_udp_payload_size(ngx_conf_t *cf, void *post,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
24 void *data);
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
25 static char *ngx_stream_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
26 void *conf);
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
27
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
28
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
29 static ngx_conf_post_t ngx_stream_quic_max_ack_delay_post =
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
30 { ngx_stream_quic_max_ack_delay };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
31 static ngx_conf_post_t ngx_stream_quic_max_udp_payload_size_post =
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
32 { ngx_stream_quic_max_udp_payload_size };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
33 static ngx_conf_num_bounds_t ngx_stream_quic_ack_delay_exponent_bounds =
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
34 { ngx_conf_check_num_bounds, 0, 20 };
8101
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
35 static ngx_conf_num_bounds_t
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
36 ngx_stream_quic_active_connection_id_limit_bounds =
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
37 { ngx_conf_check_num_bounds, 2, -1 };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
38
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
39
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
40 static ngx_command_t ngx_stream_quic_commands[] = {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
41
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
42 { ngx_string("quic_max_idle_timeout"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
43 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
44 ngx_conf_set_msec_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
45 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
46 offsetof(ngx_quic_conf_t, tp.max_idle_timeout),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
47 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
48
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
49 { ngx_string("quic_max_ack_delay"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
50 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
51 ngx_conf_set_msec_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
52 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
53 offsetof(ngx_quic_conf_t, tp.max_ack_delay),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
54 &ngx_stream_quic_max_ack_delay_post },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
55
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
56 { ngx_string("quic_max_udp_payload_size"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
57 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
58 ngx_conf_set_size_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
59 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
60 offsetof(ngx_quic_conf_t, tp.max_udp_payload_size),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
61 &ngx_stream_quic_max_udp_payload_size_post },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
62
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
63 { ngx_string("quic_initial_max_data"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
64 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
65 ngx_conf_set_size_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
66 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
67 offsetof(ngx_quic_conf_t, tp.initial_max_data),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
68 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
69
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
70 { ngx_string("quic_initial_max_stream_data_bidi_local"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
71 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
72 ngx_conf_set_size_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
73 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
74 offsetof(ngx_quic_conf_t, tp.initial_max_stream_data_bidi_local),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
75 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
76
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
77 { ngx_string("quic_initial_max_stream_data_bidi_remote"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
78 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
79 ngx_conf_set_size_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
80 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
81 offsetof(ngx_quic_conf_t, tp.initial_max_stream_data_bidi_remote),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
82 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
83
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
84 { ngx_string("quic_initial_max_stream_data_uni"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
85 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
86 ngx_conf_set_size_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
87 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
88 offsetof(ngx_quic_conf_t, tp.initial_max_stream_data_uni),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
89 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
90
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
91 { ngx_string("quic_initial_max_streams_bidi"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
92 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
93 ngx_conf_set_num_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
94 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
95 offsetof(ngx_quic_conf_t, tp.initial_max_streams_bidi),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
96 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
97
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
98 { ngx_string("quic_initial_max_streams_uni"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
99 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
100 ngx_conf_set_num_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
101 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
102 offsetof(ngx_quic_conf_t, tp.initial_max_streams_uni),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
103 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
104
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
105 { ngx_string("quic_ack_delay_exponent"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
106 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
107 ngx_conf_set_num_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
108 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
109 offsetof(ngx_quic_conf_t, tp.ack_delay_exponent),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
110 &ngx_stream_quic_ack_delay_exponent_bounds },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
111
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
112 { ngx_string("quic_disable_active_migration"),
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
113 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
114 ngx_conf_set_flag_slot,
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
115 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
116 offsetof(ngx_quic_conf_t, tp.disable_active_migration),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
117 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
118
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
119 { ngx_string("quic_active_connection_id_limit"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
120 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
121 ngx_conf_set_num_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
122 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
123 offsetof(ngx_quic_conf_t, tp.active_connection_id_limit),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
124 &ngx_stream_quic_active_connection_id_limit_bounds },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
125
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
126 { ngx_string("quic_retry"),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
127 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_FLAG,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
128 ngx_conf_set_flag_slot,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
129 NGX_STREAM_SRV_CONF_OFFSET,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
130 offsetof(ngx_quic_conf_t, retry),
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
131 NULL },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
132
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
133 { ngx_string("quic_host_key"),
8202
50f5c4f75fc1 QUIC: added quic_stateless_reset_token_key Stream directive.
Roman Arutyunyan <arut@nginx.com>
parents: 8200
diff changeset
134 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_FLAG,
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
135 ngx_stream_quic_host_key,
8202
50f5c4f75fc1 QUIC: added quic_stateless_reset_token_key Stream directive.
Roman Arutyunyan <arut@nginx.com>
parents: 8200
diff changeset
136 NGX_STREAM_SRV_CONF_OFFSET,
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
137 0,
8202
50f5c4f75fc1 QUIC: added quic_stateless_reset_token_key Stream directive.
Roman Arutyunyan <arut@nginx.com>
parents: 8200
diff changeset
138 NULL },
50f5c4f75fc1 QUIC: added quic_stateless_reset_token_key Stream directive.
Roman Arutyunyan <arut@nginx.com>
parents: 8200
diff changeset
139
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
140 ngx_null_command
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
141 };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
142
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
143
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
144 static ngx_stream_module_t ngx_stream_quic_module_ctx = {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
145 ngx_stream_quic_add_variables, /* preconfiguration */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
146 NULL, /* postconfiguration */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
147
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
148 NULL, /* create main configuration */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
149 NULL, /* init main configuration */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
150
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
151 ngx_stream_quic_create_srv_conf, /* create server configuration */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
152 ngx_stream_quic_merge_srv_conf, /* merge server configuration */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
153 };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
154
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
155
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
156 ngx_module_t ngx_stream_quic_module = {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
157 NGX_MODULE_V1,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
158 &ngx_stream_quic_module_ctx, /* module context */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
159 ngx_stream_quic_commands, /* module directives */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
160 NGX_STREAM_MODULE, /* module type */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
161 NULL, /* init master */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
162 NULL, /* init module */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
163 NULL, /* init process */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
164 NULL, /* init thread */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
165 NULL, /* exit thread */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
166 NULL, /* exit process */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
167 NULL, /* exit master */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
168 NGX_MODULE_V1_PADDING
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
169 };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
170
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
171
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
172 static ngx_stream_variable_t ngx_stream_quic_vars[] = {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
173
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
174 { ngx_string("quic"), NULL, ngx_stream_variable_quic, 0, 0, 0 },
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
175
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
176 ngx_stream_null_variable
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
177 };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
178
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
179 static ngx_str_t ngx_stream_quic_salt = ngx_string("ngx_quic");
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
180
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
181
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
182 static ngx_int_t
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
183 ngx_stream_variable_quic(ngx_stream_session_t *s,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
184 ngx_stream_variable_value_t *v, uintptr_t data)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
185 {
8200
279ad36f2f4b QUIC: renamed c->qs to c->quic.
Roman Arutyunyan <arut@nginx.com>
parents: 8198
diff changeset
186 if (s->connection->quic) {
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
187
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
188 v->len = 4;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
189 v->valid = 1;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
190 v->no_cacheable = 1;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
191 v->not_found = 0;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
192 v->data = (u_char *) "quic";
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
193 return NGX_OK;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
194 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
195
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
196 v->not_found = 1;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
197
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
198 return NGX_OK;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
199 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
200
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
201
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
202 static ngx_int_t
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
203 ngx_stream_quic_add_variables(ngx_conf_t *cf)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
204 {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
205 ngx_stream_variable_t *var, *v;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
206
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
207 for (v = ngx_stream_quic_vars; v->name.len; v++) {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
208 var = ngx_stream_add_variable(cf, &v->name, v->flags);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
209 if (var == NULL) {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
210 return NGX_ERROR;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
211 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
212
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
213 var->get_handler = v->get_handler;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
214 var->data = v->data;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
215 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
216
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
217 return NGX_OK;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
218 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
219
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
220
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
221 static void *
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
222 ngx_stream_quic_create_srv_conf(ngx_conf_t *cf)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
223 {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
224 ngx_quic_conf_t *conf;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
225
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
226 conf = ngx_pcalloc(cf->pool, sizeof(ngx_quic_conf_t));
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
227 if (conf == NULL) {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
228 return NULL;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
229 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
230
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
231 /*
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
232 * set by ngx_pcalloc():
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
233 *
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
234 * conf->tp.original_dcid = { 0, NULL };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
235 * conf->tp.initial_scid = { 0, NULL };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
236 * conf->tp.retry_scid = { 0, NULL };
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
237 * conf->tp.preferred_address = NULL
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
238 * conf->host_key = { 0, NULL }
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
239 * conf->require_alpn = 0;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
240 */
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
241
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
242 conf->tp.max_idle_timeout = NGX_CONF_UNSET_MSEC;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
243 conf->tp.max_ack_delay = NGX_CONF_UNSET_MSEC;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
244 conf->tp.max_udp_payload_size = NGX_CONF_UNSET_SIZE;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
245 conf->tp.initial_max_data = NGX_CONF_UNSET_SIZE;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
246 conf->tp.initial_max_stream_data_bidi_local = NGX_CONF_UNSET_SIZE;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
247 conf->tp.initial_max_stream_data_bidi_remote = NGX_CONF_UNSET_SIZE;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
248 conf->tp.initial_max_stream_data_uni = NGX_CONF_UNSET_SIZE;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
249 conf->tp.initial_max_streams_bidi = NGX_CONF_UNSET_UINT;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
250 conf->tp.initial_max_streams_uni = NGX_CONF_UNSET_UINT;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
251 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
252 conf->tp.disable_active_migration = NGX_CONF_UNSET;
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
253 conf->tp.active_connection_id_limit = NGX_CONF_UNSET_UINT;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
254
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
255 conf->retry = NGX_CONF_UNSET;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
256
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
257 return conf;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
258 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
259
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
260
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
261 static char *
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
262 ngx_stream_quic_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
263 {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
264 ngx_quic_conf_t *prev = parent;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
265 ngx_quic_conf_t *conf = child;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
266
8101
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
267 ngx_stream_ssl_conf_t *scf;
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
268
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
269 ngx_conf_merge_msec_value(conf->tp.max_idle_timeout,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
270 prev->tp.max_idle_timeout, 60000);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
271
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
272 ngx_conf_merge_msec_value(conf->tp.max_ack_delay,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
273 prev->tp.max_ack_delay,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
274 NGX_QUIC_DEFAULT_MAX_ACK_DELAY);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
275
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
276 ngx_conf_merge_size_value(conf->tp.max_udp_payload_size,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
277 prev->tp.max_udp_payload_size,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
278 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
279
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
280 ngx_conf_merge_size_value(conf->tp.initial_max_data,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
281 prev->tp.initial_max_data,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
282 16 * NGX_QUIC_STREAM_BUFSIZE);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
283
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
284 ngx_conf_merge_size_value(conf->tp.initial_max_stream_data_bidi_local,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
285 prev->tp.initial_max_stream_data_bidi_local,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
286 NGX_QUIC_STREAM_BUFSIZE);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
287
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
288 ngx_conf_merge_size_value(conf->tp.initial_max_stream_data_bidi_remote,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
289 prev->tp.initial_max_stream_data_bidi_remote,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
290 NGX_QUIC_STREAM_BUFSIZE);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
291
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
292 ngx_conf_merge_size_value(conf->tp.initial_max_stream_data_uni,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
293 prev->tp.initial_max_stream_data_uni,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
294 NGX_QUIC_STREAM_BUFSIZE);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
295
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
296 ngx_conf_merge_uint_value(conf->tp.initial_max_streams_bidi,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
297 prev->tp.initial_max_streams_bidi, 16);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
298
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
299 ngx_conf_merge_uint_value(conf->tp.initial_max_streams_uni,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
300 prev->tp.initial_max_streams_uni, 16);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
301
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
302 ngx_conf_merge_uint_value(conf->tp.ack_delay_exponent,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
303 prev->tp.ack_delay_exponent,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
304 NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
305
8198
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
306 ngx_conf_merge_value(conf->tp.disable_active_migration,
45db1b5c1706 QUIC: connection multiplexing per port.
Roman Arutyunyan <arut@nginx.com>
parents: 8101
diff changeset
307 prev->tp.disable_active_migration, 0);
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
308
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
309 ngx_conf_merge_uint_value(conf->tp.active_connection_id_limit,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
310 prev->tp.active_connection_id_limit, 2);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
311
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
312 ngx_conf_merge_value(conf->retry, prev->retry, 0);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
313
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
314 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
315
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
316 if (conf->host_key.len == 0) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
317
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
318 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
319 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
320 if (conf->host_key.data == NULL) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
321 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
322 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
323
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
324 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
325 <= 0)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
326 {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
327 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
328 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
329 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
330
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
331 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
332 &conf->host_key, &ngx_stream_quic_salt,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
333 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
334 != NGX_OK)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
335 {
8279
dffb66fb783b QUIC: stateless retry.
Vladimir Homutov <vl@nginx.com>
parents: 8204
diff changeset
336 return NGX_CONF_ERROR;
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
337 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
338
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
339 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
340 &conf->host_key, &ngx_stream_quic_salt,
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
341 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
342 != NGX_OK)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
343 {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
344 return NGX_CONF_ERROR;
8204
831d1960826f QUIC: generate default stateless reset token key.
Roman Arutyunyan <arut@nginx.com>
parents: 8203
diff changeset
345 }
831d1960826f QUIC: generate default stateless reset token key.
Roman Arutyunyan <arut@nginx.com>
parents: 8203
diff changeset
346
8101
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
347 scf = ngx_stream_conf_get_module_srv_conf(cf, ngx_stream_ssl_module);
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
348 conf->ssl = &scf->ssl;
bed310672f39 QUIC: moved ssl configuration pointer to quic configuration.
Vladimir Homutov <vl@nginx.com>
parents: 8000
diff changeset
349
8000
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
350 return NGX_CONF_OK;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
351 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
352
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
353
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
354 static char *
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
355 ngx_stream_quic_max_ack_delay(ngx_conf_t *cf, void *post, void *data)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
356 {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
357 ngx_msec_t *sp = data;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
358
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
359 if (*sp > 16384) {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
360 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
361 "\"quic_max_ack_delay\" must be less than 16384");
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
362
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
363 return NGX_CONF_ERROR;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
364 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
365
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
366 return NGX_CONF_OK;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
367 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
368
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
369
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
370 static char *
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
371 ngx_stream_quic_max_udp_payload_size(ngx_conf_t *cf, void *post, void *data)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
372 {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
373 size_t *sp = data;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
374
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
375 if (*sp < NGX_QUIC_MIN_INITIAL_SIZE
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
376 || *sp > NGX_QUIC_MAX_UDP_PAYLOAD_SIZE)
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
377 {
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
378 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
379 "\"quic_max_udp_payload_size\" must be between "
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
380 "%d and %d",
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
381 NGX_QUIC_MIN_INITIAL_SIZE,
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
382 NGX_QUIC_MAX_UDP_PAYLOAD_SIZE);
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
383
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
384 return NGX_CONF_ERROR;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
385 }
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
386
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
387 return NGX_CONF_OK;
893b3313f53c QUIC: added "quic" listen parameter in Stream.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
388 }
8287
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
389
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
390
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
391 static char *
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
392 ngx_stream_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
393 {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
394 ngx_quic_conf_t *qcf = conf;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
395
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
396 u_char *buf;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
397 size_t size;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
398 ssize_t n;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
399 ngx_str_t *value;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
400 ngx_file_t file;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
401 ngx_file_info_t fi;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
402
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
403 if (qcf->host_key.len) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
404 return "is duplicate";
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
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
407 buf = NULL;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
408 #if (NGX_SUPPRESS_WARN)
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
409 size = 0;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
410 #endif
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 value = cf->args->elts;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
413
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
414 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
415 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
416 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
417
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
418 ngx_memzero(&file, sizeof(ngx_file_t));
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
419 file.name = value[1];
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
420 file.log = cf->log;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
421
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
422 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
423
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
424 if (file.fd == NGX_INVALID_FILE) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
425 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
426 ngx_open_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
427 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
428 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
429
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
430 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
431 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
432 ngx_fd_info_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
433 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
434 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
435
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
436 size = ngx_file_size(&fi);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
437
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
438 if (size == 0) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
439 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
440 "\"%V\" zero key size", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
441 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
442 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
443
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
444 buf = ngx_pnalloc(cf->pool, size);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
445 if (buf == NULL) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
446 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
447 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
448
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
449 n = ngx_read_file(&file, buf, size, 0);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
450
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
451 if (n == NGX_ERROR) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
452 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
453 ngx_read_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
454 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
455 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
456
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
457 if ((size_t) n != size) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
458 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
459 ngx_read_file_n " \"%V\" returned only "
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
460 "%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
461 goto failed;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
462 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
463
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
464 qcf->host_key.data = buf;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
465 qcf->host_key.len = n;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
466
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
467 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
468 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
469 ngx_close_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
470 }
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 return NGX_CONF_OK;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
473
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
474 failed:
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 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
477 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
478 ngx_close_file_n " \"%V\" failed", &file.name);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
479 }
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
480
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
481 if (buf) {
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
482 ngx_explicit_memzero(buf, size);
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
483 }
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 return NGX_CONF_ERROR;
cef042935003 QUIC: the "quic_host_key" directive.
Vladimir Homutov <vl@nginx.com>
parents: 8279
diff changeset
486 }