annotate src/http/v3/ngx_http_v3_module.c @ 8497:0596fe1aee16 quic

HTTP/3: server pushes. New directives are added: - http3_max_concurrent_pushes - http3_push - http3_push_preload
author Roman Arutyunyan <arut@nginx.com>
date Thu, 23 Jul 2020 13:41:24 +0300
parents e533a352d118
children ae2e68f206f9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
1
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
2 /*
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
4 * Copyright (C) Roman Arutyunyan
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
5 */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
6
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
7
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
8 #include <ngx_config.h>
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
9 #include <ngx_core.h>
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
10 #include <ngx_http.h>
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
11
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
12
8493
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
13 static ngx_int_t ngx_http_variable_http3(ngx_http_request_t *r,
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
14 ngx_http_variable_value_t *v, uintptr_t data);
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
15 static ngx_int_t ngx_http_v3_add_variables(ngx_conf_t *cf);
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
16 static void *ngx_http_v3_create_srv_conf(ngx_conf_t *cf);
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
17 static char *ngx_http_v3_merge_srv_conf(ngx_conf_t *cf, void *parent,
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
18 void *child);
8497
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
19 static void *ngx_http_v3_create_loc_conf(ngx_conf_t *cf);
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
20 static char *ngx_http_v3_merge_loc_conf(ngx_conf_t *cf, void *parent,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
21 void *child);
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
22 static char *ngx_http_v3_push(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
8493
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
23
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
24
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
25 static ngx_command_t ngx_http_v3_commands[] = {
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
26
8454
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
27 { ngx_string("http3_max_field_size"),
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
28 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
29 ngx_conf_set_size_slot,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
30 NGX_HTTP_SRV_CONF_OFFSET,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
31 offsetof(ngx_http_v3_srv_conf_t, max_field_size),
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
32 NULL },
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
33
8456
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
34 { ngx_string("http3_max_table_capacity"),
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
35 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
36 ngx_conf_set_size_slot,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
37 NGX_HTTP_SRV_CONF_OFFSET,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
38 offsetof(ngx_http_v3_srv_conf_t, max_table_capacity),
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
39 NULL },
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
40
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
41 { ngx_string("http3_max_blocked_streams"),
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
42 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
43 ngx_conf_set_num_slot,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
44 NGX_HTTP_SRV_CONF_OFFSET,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
45 offsetof(ngx_http_v3_srv_conf_t, max_blocked_streams),
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
46 NULL },
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
47
8497
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
48 { ngx_string("http3_max_concurrent_pushes"),
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
49 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
50 ngx_conf_set_num_slot,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
51 NGX_HTTP_SRV_CONF_OFFSET,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
52 offsetof(ngx_http_v3_srv_conf_t, max_concurrent_pushes),
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
53 NULL },
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
54
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
55 { ngx_string("http3_push"),
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
56 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
57 ngx_http_v3_push,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
58 NGX_HTTP_LOC_CONF_OFFSET,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
59 0,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
60 NULL },
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
61
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
62 { ngx_string("http3_push_preload"),
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
63 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
64 ngx_conf_set_flag_slot,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
65 NGX_HTTP_LOC_CONF_OFFSET,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
66 offsetof(ngx_http_v3_loc_conf_t, push_preload),
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
67 NULL },
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
68
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
69 ngx_null_command
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
70 };
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
71
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
72
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
73 static ngx_http_module_t ngx_http_v3_module_ctx = {
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
74 ngx_http_v3_add_variables, /* preconfiguration */
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
75 NULL, /* postconfiguration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
76
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
77 NULL, /* create main configuration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
78 NULL, /* init main configuration */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
79
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
80 ngx_http_v3_create_srv_conf, /* create server configuration */
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
81 ngx_http_v3_merge_srv_conf, /* merge server configuration */
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
82
8497
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
83 ngx_http_v3_create_loc_conf, /* create location configuration */
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
84 ngx_http_v3_merge_loc_conf /* merge location configuration */
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
85 };
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
86
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
87
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
88 ngx_module_t ngx_http_v3_module = {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
89 NGX_MODULE_V1,
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
90 &ngx_http_v3_module_ctx, /* module context */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
91 ngx_http_v3_commands, /* module directives */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
92 NGX_HTTP_MODULE, /* module type */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
93 NULL, /* init master */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
94 NULL, /* init module */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
95 NULL, /* init process */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
96 NULL, /* init thread */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
97 NULL, /* exit thread */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
98 NULL, /* exit process */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
99 NULL, /* exit master */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
100 NGX_MODULE_V1_PADDING
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
101 };
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
102
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
103
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
104 static ngx_http_variable_t ngx_http_v3_vars[] = {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
105
8493
e533a352d118 Style: moved function declarations to match usual code style.
Roman Arutyunyan <arut@nginx.com>
parents: 8492
diff changeset
106 { ngx_string("http3"), NULL, ngx_http_variable_http3, 0, 0, 0 },
8297
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
107
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
108 ngx_http_null_variable
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
109 };
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
110
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
111
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
112 static ngx_int_t
8297
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
113 ngx_http_variable_http3(ngx_http_request_t *r,
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
114 ngx_http_variable_value_t *v, uintptr_t data)
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
115 {
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
116 v->valid = 1;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
117 v->no_cacheable = 1;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
118 v->not_found = 0;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
119
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
120 v->data = ngx_pnalloc(r->pool, sizeof("h3-xx") - 1);
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
121 if (v->data == NULL) {
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
122 return NGX_ERROR;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
123 }
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
124
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
125 v->len = ngx_sprintf(v->data, "h3-%d", NGX_QUIC_DRAFT_VERSION) - v->data;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
126
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
127 return NGX_OK;
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
128 }
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
129
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
130
0b95c2041887 HTTP/3: http3 variable.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
131 static ngx_int_t
8248
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
132 ngx_http_v3_add_variables(ngx_conf_t *cf)
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
133 {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
134 ngx_http_variable_t *var, *v;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
135
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
136 for (v = ngx_http_v3_vars; v->name.len; v++) {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
137 var = ngx_http_add_variable(cf, &v->name, v->flags);
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
138 if (var == NULL) {
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
139 return NGX_ERROR;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
140 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
141
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
142 var->get_handler = v->get_handler;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
143 var->data = v->data;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
144 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
145
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
146 return NGX_OK;
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
147 }
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
148
abb7c1a4c9d5 Adedd the http "quic" variable.
Vladimir Homutov <vl@nginx.com>
parents: 8247
diff changeset
149
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
150 static void *
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
151 ngx_http_v3_create_srv_conf(ngx_conf_t *cf)
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
152 {
8492
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
153 ngx_http_v3_srv_conf_t *h3scf;
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
154
8492
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
155 h3scf = ngx_pcalloc(cf->pool, sizeof(ngx_http_v3_srv_conf_t));
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
156 if (h3scf == NULL) {
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
157 return NULL;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
158 }
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
159
8492
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
160 h3scf->max_field_size = NGX_CONF_UNSET_SIZE;
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
161 h3scf->max_table_capacity = NGX_CONF_UNSET_SIZE;
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
162 h3scf->max_blocked_streams = NGX_CONF_UNSET_UINT;
8497
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
163 h3scf->max_concurrent_pushes = NGX_CONF_UNSET_UINT;
8454
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
164
8492
65c1fc5fae15 HTTP/3: renamed server configuration variables from v3cf to h3scf.
Roman Arutyunyan <arut@nginx.com>
parents: 8481
diff changeset
165 return h3scf;
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
166 }
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
167
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
168
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
169 static char *
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
170 ngx_http_v3_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
171 {
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
172 ngx_http_v3_srv_conf_t *prev = parent;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
173 ngx_http_v3_srv_conf_t *conf = child;
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8215
diff changeset
174
8454
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
175 ngx_conf_merge_size_value(conf->max_field_size,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
176 prev->max_field_size,
032cb35ce758 HTTP/3: http3_max_field_size directive to limit string size.
Roman Arutyunyan <arut@nginx.com>
parents: 8417
diff changeset
177 NGX_HTTP_V3_DEFAULT_MAX_FIELD_SIZE);
8383
7ea34e13937f Address validation using Retry packets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8353
diff changeset
178
8456
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
179 ngx_conf_merge_size_value(conf->max_table_capacity,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
180 prev->max_table_capacity,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
181 NGX_HTTP_V3_DEFAULT_MAX_TABLE_CAPACITY);
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
182
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
183 ngx_conf_merge_uint_value(conf->max_blocked_streams,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
184 prev->max_blocked_streams,
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
185 NGX_HTTP_V3_DEFAULT_MAX_BLOCKED_STREAMS);
c9538aef3211 HTTP/3: refactored dynamic table implementation.
Roman Arutyunyan <arut@nginx.com>
parents: 8454
diff changeset
186
8497
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
187 ngx_conf_merge_uint_value(conf->max_concurrent_pushes,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
188 prev->max_concurrent_pushes,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
189 NGX_HTTP_V3_DEFAULT_MAX_CONCURRENT_PUSHES);
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
190
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
191 return NGX_CONF_OK;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
192 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
193
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
194
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
195 static void *
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
196 ngx_http_v3_create_loc_conf(ngx_conf_t *cf)
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
197 {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
198 ngx_http_v3_loc_conf_t *h3lcf;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
199
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
200 h3lcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_v3_loc_conf_t));
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
201 if (h3lcf == NULL) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
202 return NULL;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
203 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
204
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
205 /*
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
206 * set by ngx_pcalloc():
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
207 *
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
208 * h3lcf->pushes = NULL;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
209 */
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
210
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
211 h3lcf->push_preload = NGX_CONF_UNSET;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
212 h3lcf->push = NGX_CONF_UNSET;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
213
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
214 return h3lcf;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
215 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
216
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
217
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
218 static char *
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
219 ngx_http_v3_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
220 {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
221 ngx_http_v3_loc_conf_t *prev = parent;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
222 ngx_http_v3_loc_conf_t *conf = child;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
223
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
224 ngx_conf_merge_value(conf->push, prev->push, 1);
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
225
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
226 if (conf->push && conf->pushes == NULL) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
227 conf->pushes = prev->pushes;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
228 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
229
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
230 ngx_conf_merge_value(conf->push_preload, prev->push_preload, 0);
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
231
8353
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
232 return NGX_CONF_OK;
036164360fa9 HTTP/3: directives with limited values converted to post handler.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8352
diff changeset
233 }
8497
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
234
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
235
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
236 static char *
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
237 ngx_http_v3_push(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
238 {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
239 ngx_http_v3_loc_conf_t *h3lcf = conf;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
240
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
241 ngx_str_t *value;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
242 ngx_http_complex_value_t *cv;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
243 ngx_http_compile_complex_value_t ccv;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
244
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
245 value = cf->args->elts;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
246
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
247 if (ngx_strcmp(value[1].data, "off") == 0) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
248
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
249 if (h3lcf->pushes) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
250 return "\"off\" parameter cannot be used with URI";
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
251 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
252
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
253 if (h3lcf->push == 0) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
254 return "is duplicate";
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
255 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
256
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
257 h3lcf->push = 0;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
258 return NGX_CONF_OK;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
259 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
260
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
261 if (h3lcf->push == 0) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
262 return "URI cannot be used with \"off\" parameter";
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
263 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
264
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
265 h3lcf->push = 1;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
266
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
267 if (h3lcf->pushes == NULL) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
268 h3lcf->pushes = ngx_array_create(cf->pool, 1,
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
269 sizeof(ngx_http_complex_value_t));
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
270 if (h3lcf->pushes == NULL) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
271 return NGX_CONF_ERROR;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
272 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
273 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
274
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
275 cv = ngx_array_push(h3lcf->pushes);
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
276 if (cv == NULL) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
277 return NGX_CONF_ERROR;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
278 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
279
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
280 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
281
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
282 ccv.cf = cf;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
283 ccv.value = &value[1];
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
284 ccv.complex_value = cv;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
285
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
286 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
287 return NGX_CONF_ERROR;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
288 }
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
289
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
290 return NGX_CONF_OK;
0596fe1aee16 HTTP/3: server pushes.
Roman Arutyunyan <arut@nginx.com>
parents: 8493
diff changeset
291 }