annotate src/http/ngx_http_variables.c @ 7213:c69c13f10502

Geo: fixed memory allocation error handling (closes #1482). If during configuration parsing of the geo directive the memory allocation has failed, pool used to parse configuration inside the block, and sometimes the temporary pool were not destroyed.
author Ruslan Ermilov <ru@nginx.com>
date Wed, 21 Feb 2018 15:50:42 +0300
parents 6ba68ad8b24c
children 0b1eb40de6da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4334
diff changeset
4 * Copyright (C) Nginx, Inc.
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
11 #include <nginx.h>
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
14 static ngx_http_variable_t *ngx_http_add_prefix_variable(ngx_conf_t *cf,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
15 ngx_str_t *name, ngx_uint_t flags);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
16
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
17 static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
18 ngx_http_variable_value_t *v, uintptr_t data);
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
19 #if 0
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
20 static void ngx_http_variable_request_set(ngx_http_request_t *r,
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
21 ngx_http_variable_value_t *v, uintptr_t data);
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
22 #endif
3282
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
23 static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
24 ngx_http_variable_value_t *v, uintptr_t data);
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
25 static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
26 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
27 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
28 ngx_http_variable_value_t *v, uintptr_t data);
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
29
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
30 static ngx_int_t ngx_http_variable_cookies(ngx_http_request_t *r,
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
31 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
32 static ngx_int_t ngx_http_variable_headers(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
33 ngx_http_variable_value_t *v, uintptr_t data);
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
34 static ngx_int_t ngx_http_variable_headers_internal(ngx_http_request_t *r,
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
35 ngx_http_variable_value_t *v, uintptr_t data, u_char sep);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
36
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
37 static ngx_int_t ngx_http_variable_unknown_header_in(ngx_http_request_t *r,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
38 ngx_http_variable_value_t *v, uintptr_t data);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
39 static ngx_int_t ngx_http_variable_unknown_header_out(ngx_http_request_t *r,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
40 ngx_http_variable_value_t *v, uintptr_t data);
7034
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
41 static ngx_int_t ngx_http_variable_unknown_trailer_out(ngx_http_request_t *r,
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
42 ngx_http_variable_value_t *v, uintptr_t data);
3144
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
43 static ngx_int_t ngx_http_variable_request_line(ngx_http_request_t *r,
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
44 ngx_http_variable_value_t *v, uintptr_t data);
2359
4fee4ebbfb0b $cookie_... variable did not for SSI and perl
Igor Sysoev <igor@sysoev.ru>
parents: 2333
diff changeset
45 static ngx_int_t ngx_http_variable_cookie(ngx_http_request_t *r,
4fee4ebbfb0b $cookie_... variable did not for SSI and perl
Igor Sysoev <igor@sysoev.ru>
parents: 2333
diff changeset
46 ngx_http_variable_value_t *v, uintptr_t data);
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
47 static ngx_int_t ngx_http_variable_argument(ngx_http_request_t *r,
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
48 ngx_http_variable_value_t *v, uintptr_t data);
4545
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
49 #if (NGX_HAVE_TCP_INFO)
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
50 static ngx_int_t ngx_http_variable_tcpinfo(ngx_http_request_t *r,
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
51 ngx_http_variable_value_t *v, uintptr_t data);
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
52 #endif
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
53
4928
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
54 static ngx_int_t ngx_http_variable_content_length(ngx_http_request_t *r,
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
55 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
56 static ngx_int_t ngx_http_variable_host(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
57 ngx_http_variable_value_t *v, uintptr_t data);
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
58 static ngx_int_t ngx_http_variable_binary_remote_addr(ngx_http_request_t *r,
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
59 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
60 static ngx_int_t ngx_http_variable_remote_addr(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
61 ngx_http_variable_value_t *v, uintptr_t data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
62 static ngx_int_t ngx_http_variable_remote_port(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
63 ngx_http_variable_value_t *v, uintptr_t data);
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
64 static ngx_int_t ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r,
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
65 ngx_http_variable_value_t *v, uintptr_t data);
6561
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
66 static ngx_int_t ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r,
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
67 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
68 static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
69 ngx_http_variable_value_t *v, uintptr_t data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
70 static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
71 ngx_http_variable_value_t *v, uintptr_t data);
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
72 static ngx_int_t ngx_http_variable_scheme(ngx_http_request_t *r,
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
73 ngx_http_variable_value_t *v, uintptr_t data);
4332
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
74 static ngx_int_t ngx_http_variable_https(ngx_http_request_t *r,
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
75 ngx_http_variable_value_t *v, uintptr_t data);
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
76 static void ngx_http_variable_set_args(ngx_http_request_t *r,
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
77 ngx_http_variable_value_t *v, uintptr_t data);
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
78 static ngx_int_t ngx_http_variable_is_args(ngx_http_request_t *r,
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
79 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
80 static ngx_int_t ngx_http_variable_document_root(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
81 ngx_http_variable_value_t *v, uintptr_t data);
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
82 static ngx_int_t ngx_http_variable_realpath_root(ngx_http_request_t *r,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
83 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
84 static ngx_int_t ngx_http_variable_request_filename(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
85 ngx_http_variable_value_t *v, uintptr_t data);
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
86 static ngx_int_t ngx_http_variable_server_name(ngx_http_request_t *r,
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
87 ngx_http_variable_value_t *v, uintptr_t data);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
88 static ngx_int_t ngx_http_variable_request_method(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
89 ngx_http_variable_value_t *v, uintptr_t data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
90 static ngx_int_t ngx_http_variable_remote_user(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
91 ngx_http_variable_value_t *v, uintptr_t data);
4886
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
92 static ngx_int_t ngx_http_variable_bytes_sent(ngx_http_request_t *r,
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
93 ngx_http_variable_value_t *v, uintptr_t data);
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
94 static ngx_int_t ngx_http_variable_body_bytes_sent(ngx_http_request_t *r,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
95 ngx_http_variable_value_t *v, uintptr_t data);
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
96 static ngx_int_t ngx_http_variable_pipe(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
97 ngx_http_variable_value_t *v, uintptr_t data);
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
98 static ngx_int_t ngx_http_variable_request_completion(ngx_http_request_t *r,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
99 ngx_http_variable_value_t *v, uintptr_t data);
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
100 static ngx_int_t ngx_http_variable_request_body(ngx_http_request_t *r,
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
101 ngx_http_variable_value_t *v, uintptr_t data);
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
102 static ngx_int_t ngx_http_variable_request_body_file(ngx_http_request_t *r,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
103 ngx_http_variable_value_t *v, uintptr_t data);
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
104 static ngx_int_t ngx_http_variable_request_length(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
105 ngx_http_variable_value_t *v, uintptr_t data);
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
106 static ngx_int_t ngx_http_variable_request_time(ngx_http_request_t *r,
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
107 ngx_http_variable_value_t *v, uintptr_t data);
6531
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
108 static ngx_int_t ngx_http_variable_request_id(ngx_http_request_t *r,
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
109 ngx_http_variable_value_t *v, uintptr_t data);
4685
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
110 static ngx_int_t ngx_http_variable_status(ngx_http_request_t *r,
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
111 ngx_http_variable_value_t *v, uintptr_t data);
4686
631eff4a0188 Style fix.
Andrey Belov <defan@nginx.com>
parents: 4685
diff changeset
112
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
113 static ngx_int_t ngx_http_variable_sent_content_type(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
114 ngx_http_variable_value_t *v, uintptr_t data);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
115 static ngx_int_t ngx_http_variable_sent_content_length(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
116 ngx_http_variable_value_t *v, uintptr_t data);
2485
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
117 static ngx_int_t ngx_http_variable_sent_location(ngx_http_request_t *r,
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
118 ngx_http_variable_value_t *v, uintptr_t data);
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
119 static ngx_int_t ngx_http_variable_sent_last_modified(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
120 ngx_http_variable_value_t *v, uintptr_t data);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
121 static ngx_int_t ngx_http_variable_sent_connection(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
122 ngx_http_variable_value_t *v, uintptr_t data);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
123 static ngx_int_t ngx_http_variable_sent_keep_alive(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
124 ngx_http_variable_value_t *v, uintptr_t data);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
125 static ngx_int_t ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
126 ngx_http_variable_value_t *v, uintptr_t data);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
127
4893
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
128 static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r,
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
129 ngx_http_variable_value_t *v, uintptr_t data);
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
130 static ngx_int_t ngx_http_variable_connection_requests(ngx_http_request_t *r,
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
131 ngx_http_variable_value_t *v, uintptr_t data);
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
132
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
133 static ngx_int_t ngx_http_variable_nginx_version(ngx_http_request_t *r,
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
134 ngx_http_variable_value_t *v, uintptr_t data);
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
135 static ngx_int_t ngx_http_variable_hostname(ngx_http_request_t *r,
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
136 ngx_http_variable_value_t *v, uintptr_t data);
2249
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
137 static ngx_int_t ngx_http_variable_pid(ngx_http_request_t *r,
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
138 ngx_http_variable_value_t *v, uintptr_t data);
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
139 static ngx_int_t ngx_http_variable_msec(ngx_http_request_t *r,
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
140 ngx_http_variable_value_t *v, uintptr_t data);
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
141 static ngx_int_t ngx_http_variable_time_iso8601(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
142 ngx_http_variable_value_t *v, uintptr_t data);
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
143 static ngx_int_t ngx_http_variable_time_local(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
144 ngx_http_variable_value_t *v, uintptr_t data);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
146 /*
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
147 * TODO:
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
148 * Apache CGI: AUTH_TYPE, PATH_INFO (null), PATH_TRANSLATED
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
149 * REMOTE_HOST (null), REMOTE_IDENT (null),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
150 * SERVER_SOFTWARE
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
151 *
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
152 * Apache SSI: DOCUMENT_NAME, LAST_MODIFIED, USER_NAME (file owner)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
153 */
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
155 /*
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5083
diff changeset
156 * the $http_host, $http_user_agent, $http_referer, and $http_via
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5083
diff changeset
157 * variables may be handled by generic
4572
67653855682e Fixed spelling in multiline C comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4558
diff changeset
158 * ngx_http_variable_unknown_header_in(), but for performance reasons
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
159 * they are handled using dedicated entries
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
160 */
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
161
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
162 static ngx_http_variable_t ngx_http_core_variables[] = {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
163
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
164 { ngx_string("http_host"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
165 offsetof(ngx_http_request_t, headers_in.host), 0, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
167 { ngx_string("http_user_agent"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
168 offsetof(ngx_http_request_t, headers_in.user_agent), 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
169
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
170 { ngx_string("http_referer"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
171 offsetof(ngx_http_request_t, headers_in.referer), 0, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 #if (NGX_HTTP_GZIP)
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
174 { ngx_string("http_via"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
175 offsetof(ngx_http_request_t, headers_in.via), 0, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 #endif
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177
4697
09187f9b0950 Fixed compile-time conditionals used to detect if X-Forwarded-For support
Ruslan Ermilov <ru@nginx.com>
parents: 4686
diff changeset
178 #if (NGX_HTTP_X_FORWARDED_FOR)
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5083
diff changeset
179 { ngx_string("http_x_forwarded_for"), NULL, ngx_http_variable_headers,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
180 offsetof(ngx_http_request_t, headers_in.x_forwarded_for), 0, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 #endif
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
183 { ngx_string("http_cookie"), NULL, ngx_http_variable_cookies,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
184 offsetof(ngx_http_request_t, headers_in.cookies), 0, 0 },
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
185
4928
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
186 { ngx_string("content_length"), NULL, ngx_http_variable_content_length,
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
187 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
188
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
189 { ngx_string("content_type"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
190 offsetof(ngx_http_request_t, headers_in.content_type), 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
191
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
192 { ngx_string("host"), NULL, ngx_http_variable_host, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
193
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
194 { ngx_string("binary_remote_addr"), NULL,
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
195 ngx_http_variable_binary_remote_addr, 0, 0, 0 },
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
196
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
197 { ngx_string("remote_addr"), NULL, ngx_http_variable_remote_addr, 0, 0, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
199 { ngx_string("remote_port"), NULL, ngx_http_variable_remote_port, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
200
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
201 { ngx_string("proxy_protocol_addr"), NULL,
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
202 ngx_http_variable_proxy_protocol_addr, 0, 0, 0 },
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
203
6561
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
204 { ngx_string("proxy_protocol_port"), NULL,
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
205 ngx_http_variable_proxy_protocol_port, 0, 0, 0 },
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
206
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
207 { ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
208
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
209 { ngx_string("server_port"), NULL, ngx_http_variable_server_port, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
210
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
211 { ngx_string("server_protocol"), NULL, ngx_http_variable_request,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
212 offsetof(ngx_http_request_t, http_protocol), 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
213
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
214 { ngx_string("scheme"), NULL, ngx_http_variable_scheme, 0, 0, 0 },
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
215
4332
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
216 { ngx_string("https"), NULL, ngx_http_variable_https, 0, 0, 0 },
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
217
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
218 { ngx_string("request_uri"), NULL, ngx_http_variable_request,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
219 offsetof(ngx_http_request_t, unparsed_uri), 0, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
221 { ngx_string("uri"), NULL, ngx_http_variable_request,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
222 offsetof(ngx_http_request_t, uri),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
223 NGX_HTTP_VAR_NOCACHEABLE, 0 },
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
224
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
225 { ngx_string("document_uri"), NULL, ngx_http_variable_request,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
226 offsetof(ngx_http_request_t, uri),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
227 NGX_HTTP_VAR_NOCACHEABLE, 0 },
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
228
3144
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
229 { ngx_string("request"), NULL, ngx_http_variable_request_line, 0, 0, 0 },
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
230
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
231 { ngx_string("document_root"), NULL,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
232 ngx_http_variable_document_root, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
233
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
234 { ngx_string("realpath_root"), NULL,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
235 ngx_http_variable_realpath_root, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
236
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
237 { ngx_string("query_string"), NULL, ngx_http_variable_request,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
238 offsetof(ngx_http_request_t, args),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
239 NGX_HTTP_VAR_NOCACHEABLE, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
241 { ngx_string("args"),
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
242 ngx_http_variable_set_args,
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
243 ngx_http_variable_request,
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
244 offsetof(ngx_http_request_t, args),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
245 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
246
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
247 { ngx_string("is_args"), NULL, ngx_http_variable_is_args,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
248 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
249
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
250 { ngx_string("request_filename"), NULL,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
251 ngx_http_variable_request_filename, 0,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
252 NGX_HTTP_VAR_NOCACHEABLE, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
253
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
254 { ngx_string("server_name"), NULL, ngx_http_variable_server_name, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
255
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
256 { ngx_string("request_method"), NULL,
3463
0904bd7d5b37 make $request_method non-cacheable
Igor Sysoev <igor@sysoev.ru>
parents: 3451
diff changeset
257 ngx_http_variable_request_method, 0,
0904bd7d5b37 make $request_method non-cacheable
Igor Sysoev <igor@sysoev.ru>
parents: 3451
diff changeset
258 NGX_HTTP_VAR_NOCACHEABLE, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
259
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
260 { ngx_string("remote_user"), NULL, ngx_http_variable_remote_user, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
261
4886
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
262 { ngx_string("bytes_sent"), NULL, ngx_http_variable_bytes_sent,
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
263 0, 0, 0 },
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
264
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
265 { ngx_string("body_bytes_sent"), NULL, ngx_http_variable_body_bytes_sent,
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
266 0, 0, 0 },
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
267
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
268 { ngx_string("pipe"), NULL, ngx_http_variable_pipe,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
269 0, 0, 0 },
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
270
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
271 { ngx_string("request_completion"), NULL,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
272 ngx_http_variable_request_completion,
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
273 0, 0, 0 },
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
274
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
275 { ngx_string("request_body"), NULL,
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
276 ngx_http_variable_request_body,
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
277 0, 0, 0 },
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
278
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
279 { ngx_string("request_body_file"), NULL,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
280 ngx_http_variable_request_body_file,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
281 0, 0, 0 },
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
282
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
283 { ngx_string("request_length"), NULL, ngx_http_variable_request_length,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
284 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
285
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
286 { ngx_string("request_time"), NULL, ngx_http_variable_request_time,
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
287 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
288
6531
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
289 { ngx_string("request_id"), NULL,
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
290 ngx_http_variable_request_id,
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
291 0, 0, 0 },
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
292
4685
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
293 { ngx_string("status"), NULL,
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
294 ngx_http_variable_status, 0,
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
295 NGX_HTTP_VAR_NOCACHEABLE, 0 },
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
296
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
297 { ngx_string("sent_http_content_type"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
298 ngx_http_variable_sent_content_type, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
299
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
300 { ngx_string("sent_http_content_length"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
301 ngx_http_variable_sent_content_length, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
302
2485
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
303 { ngx_string("sent_http_location"), NULL,
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
304 ngx_http_variable_sent_location, 0, 0, 0 },
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
305
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
306 { ngx_string("sent_http_last_modified"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
307 ngx_http_variable_sent_last_modified, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
308
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
309 { ngx_string("sent_http_connection"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
310 ngx_http_variable_sent_connection, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
311
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
312 { ngx_string("sent_http_keep_alive"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
313 ngx_http_variable_sent_keep_alive, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
314
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
315 { ngx_string("sent_http_transfer_encoding"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
316 ngx_http_variable_sent_transfer_encoding, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
317
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
318 { ngx_string("sent_http_cache_control"), NULL, ngx_http_variable_headers,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
319 offsetof(ngx_http_request_t, headers_out.cache_control), 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
320
7199
6ba68ad8b24c Basic support of the Link response header.
Ruslan Ermilov <ru@nginx.com>
parents: 7121
diff changeset
321 { ngx_string("sent_http_link"), NULL, ngx_http_variable_headers,
6ba68ad8b24c Basic support of the Link response header.
Ruslan Ermilov <ru@nginx.com>
parents: 7121
diff changeset
322 offsetof(ngx_http_request_t, headers_out.link), 0, 0 },
6ba68ad8b24c Basic support of the Link response header.
Ruslan Ermilov <ru@nginx.com>
parents: 7121
diff changeset
323
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
324 { ngx_string("limit_rate"), ngx_http_variable_request_set_size,
3282
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
325 ngx_http_variable_request_get_size,
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
326 offsetof(ngx_http_request_t, limit_rate),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
327 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
328
4893
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
329 { ngx_string("connection"), NULL,
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
330 ngx_http_variable_connection, 0, 0, 0 },
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
331
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
332 { ngx_string("connection_requests"), NULL,
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
333 ngx_http_variable_connection_requests, 0, 0, 0 },
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
334
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
335 { ngx_string("nginx_version"), NULL, ngx_http_variable_nginx_version,
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
336 0, 0, 0 },
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
337
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
338 { ngx_string("hostname"), NULL, ngx_http_variable_hostname,
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
339 0, 0, 0 },
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
340
2249
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
341 { ngx_string("pid"), NULL, ngx_http_variable_pid,
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
342 0, 0, 0 },
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
343
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
344 { ngx_string("msec"), NULL, ngx_http_variable_msec,
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
345 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
346
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
347 { ngx_string("time_iso8601"), NULL, ngx_http_variable_time_iso8601,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
348 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
349
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
350 { ngx_string("time_local"), NULL, ngx_http_variable_time_local,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
351 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
352
4545
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
353 #if (NGX_HAVE_TCP_INFO)
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
354 { ngx_string("tcpinfo_rtt"), NULL, ngx_http_variable_tcpinfo,
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
355 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
356
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
357 { ngx_string("tcpinfo_rttvar"), NULL, ngx_http_variable_tcpinfo,
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
358 1, NGX_HTTP_VAR_NOCACHEABLE, 0 },
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
359
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
360 { ngx_string("tcpinfo_snd_cwnd"), NULL, ngx_http_variable_tcpinfo,
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
361 2, NGX_HTTP_VAR_NOCACHEABLE, 0 },
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
362
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
363 { ngx_string("tcpinfo_rcv_space"), NULL, ngx_http_variable_tcpinfo,
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
364 3, NGX_HTTP_VAR_NOCACHEABLE, 0 },
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
365 #endif
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
366
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
367 { ngx_string("http_"), NULL, ngx_http_variable_unknown_header_in,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
368 0, NGX_HTTP_VAR_PREFIX, 0 },
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
369
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
370 { ngx_string("sent_http_"), NULL, ngx_http_variable_unknown_header_out,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
371 0, NGX_HTTP_VAR_PREFIX, 0 },
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
372
7034
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
373 { ngx_string("sent_trailer_"), NULL, ngx_http_variable_unknown_trailer_out,
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
374 0, NGX_HTTP_VAR_PREFIX, 0 },
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
375
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
376 { ngx_string("cookie_"), NULL, ngx_http_variable_cookie,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
377 0, NGX_HTTP_VAR_PREFIX, 0 },
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
378
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
379 { ngx_string("arg_"), NULL, ngx_http_variable_argument,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
380 0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
381
7077
2a288909abc6 Variables: macros for null variables.
Ruslan Ermilov <ru@nginx.com>
parents: 7053
diff changeset
382 ngx_http_null_variable
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 };
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
386 ngx_http_variable_value_t ngx_http_variable_null_value =
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
387 ngx_http_variable("");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
388 ngx_http_variable_value_t ngx_http_variable_true_value =
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
389 ngx_http_variable("1");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
390
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
391
6851
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
392 static ngx_uint_t ngx_http_variable_depth = 100;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
393
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
394
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 ngx_http_variable_t *
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
396 ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
397 {
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
398 ngx_int_t rc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
399 ngx_uint_t i;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
400 ngx_hash_key_t *key;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
401 ngx_http_variable_t *v;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
402 ngx_http_core_main_conf_t *cmcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
403
4972
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
404 if (name->len == 0) {
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
405 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
406 "invalid variable name \"$\"");
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
407 return NULL;
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
408 }
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
409
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
410 if (flags & NGX_HTTP_VAR_PREFIX) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
411 return ngx_http_add_prefix_variable(cf, name, flags);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
412 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
413
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
414 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
415
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
416 key = cmcf->variables_keys->keys.elts;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
417 for (i = 0; i < cmcf->variables_keys->keys.nelts; i++) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
418 if (name->len != key[i].key.len
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
419 || ngx_strncasecmp(name->data, key[i].key.data, name->len) != 0)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
420 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
421 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
422 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
423
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
424 v = key[i].value;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
425
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
426 if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
427 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
428 "the duplicate \"%V\" variable", name);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
429 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
430 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
431
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
432 v->flags &= flags | ~NGX_HTTP_VAR_WEAK;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
433
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
434 return v;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
435 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
436
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
437 v = ngx_palloc(cf->pool, sizeof(ngx_http_variable_t));
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
438 if (v == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
439 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
440 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
441
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
442 v->name.len = name->len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
443 v->name.data = ngx_pnalloc(cf->pool, name->len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
444 if (v->name.data == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
445 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
446 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
447
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
448 ngx_strlow(v->name.data, name->data, name->len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
449
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
450 v->set_handler = NULL;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
451 v->get_handler = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
452 v->data = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
453 v->flags = flags;
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
454 v->index = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
455
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
456 rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v, 0);
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
457
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
458 if (rc == NGX_ERROR) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
459 return NULL;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
460 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
461
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
462 if (rc == NGX_BUSY) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
463 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
464 "conflicting variable name \"%V\"", name);
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
465 return NULL;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
466 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
467
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
468 return v;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
469 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
470
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
471
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
472 static ngx_http_variable_t *
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
473 ngx_http_add_prefix_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags)
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
474 {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
475 ngx_uint_t i;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
476 ngx_http_variable_t *v;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
477 ngx_http_core_main_conf_t *cmcf;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
478
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
479 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
480
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
481 v = cmcf->prefix_variables.elts;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
482 for (i = 0; i < cmcf->prefix_variables.nelts; i++) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
483 if (name->len != v[i].name.len
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
484 || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0)
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
485 {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
486 continue;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
487 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
488
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
489 v = &v[i];
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
490
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
491 if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
492 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
493 "the duplicate \"%V\" variable", name);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
494 return NULL;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
495 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
496
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
497 v->flags &= flags | ~NGX_HTTP_VAR_WEAK;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
498
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
499 return v;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
500 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
501
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
502 v = ngx_array_push(&cmcf->prefix_variables);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
503 if (v == NULL) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
504 return NULL;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
505 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
506
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
507 v->name.len = name->len;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
508 v->name.data = ngx_pnalloc(cf->pool, name->len);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
509 if (v->name.data == NULL) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
510 return NULL;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
511 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
512
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
513 ngx_strlow(v->name.data, name->data, name->len);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
514
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
515 v->set_handler = NULL;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
516 v->get_handler = NULL;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
517 v->data = 0;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
518 v->flags = flags;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
519 v->index = 0;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
520
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
521 return v;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
522 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
523
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
524
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
525 ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
526 ngx_http_get_variable_index(ngx_conf_t *cf, ngx_str_t *name)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
527 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
528 ngx_uint_t i;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
529 ngx_http_variable_t *v;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
530 ngx_http_core_main_conf_t *cmcf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
531
4972
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
532 if (name->len == 0) {
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
533 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
534 "invalid variable name \"$\"");
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
535 return NGX_ERROR;
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
536 }
8b635cf36ccc Added checks that disallow adding a variable with an empty name.
Ruslan Ermilov <ru@nginx.com>
parents: 4928
diff changeset
537
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
539
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
540 v = cmcf->variables.elts;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
541
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
542 if (v == NULL) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
543 if (ngx_array_init(&cmcf->variables, cf->pool, 4,
2536
a6d6d762c554 small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
544 sizeof(ngx_http_variable_t))
a6d6d762c554 small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
545 != NGX_OK)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
546 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
547 return NGX_ERROR;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
548 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
549
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
550 } else {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
551 for (i = 0; i < cmcf->variables.nelts; i++) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
552 if (name->len != v[i].name.len
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
553 || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
554 {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
555 continue;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
556 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
557
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
558 return i;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
559 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
560 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
561
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
562 v = ngx_array_push(&cmcf->variables);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
563 if (v == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
564 return NGX_ERROR;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
565 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
566
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
567 v->name.len = name->len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
568 v->name.data = ngx_pnalloc(cf->pool, name->len);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
569 if (v->name.data == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
570 return NGX_ERROR;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
571 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
572
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
573 ngx_strlow(v->name.data, name->data, name->len);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
574
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
575 v->set_handler = NULL;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
576 v->get_handler = NULL;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
577 v->data = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
578 v->flags = 0;
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
579 v->index = cmcf->variables.nelts - 1;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
580
4540
cab9aa79256c Slight optimization in ngx_http_get_variable_index().
Ruslan Ermilov <ru@nginx.com>
parents: 4470
diff changeset
581 return v->index;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
582 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
583
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
584
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
585 ngx_http_variable_value_t *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
586 ngx_http_get_indexed_variable(ngx_http_request_t *r, ngx_uint_t index)
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
587 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
588 ngx_http_variable_t *v;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
589 ngx_http_core_main_conf_t *cmcf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
590
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
591 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
593 if (cmcf->variables.nelts <= index) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
594 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
5327
6b479db5b52b Format specifier fixes in error logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5316
diff changeset
595 "unknown variable index: %ui", index);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
596 return NULL;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
597 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
598
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
599 if (r->variables[index].not_found || r->variables[index].valid) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
600 return &r->variables[index];
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
601 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
602
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
603 v = cmcf->variables.elts;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
604
6851
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
605 if (ngx_http_variable_depth == 0) {
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
606 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
607 "cycle while evaluating variable \"%V\"",
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
608 &v[index].name);
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
609 return NULL;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
610 }
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
611
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
612 ngx_http_variable_depth--;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
613
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
614 if (v[index].get_handler(r, &r->variables[index], v[index].data)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
615 == NGX_OK)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
616 {
6851
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
617 ngx_http_variable_depth++;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
618
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
619 if (v[index].flags & NGX_HTTP_VAR_NOCACHEABLE) {
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
620 r->variables[index].no_cacheable = 1;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
621 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
622
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
623 return &r->variables[index];
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
624 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
625
6851
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
626 ngx_http_variable_depth++;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
627
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
628 r->variables[index].valid = 0;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
629 r->variables[index].not_found = 1;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
630
798
97e89a42711f NULL is short way
Igor Sysoev <igor@sysoev.ru>
parents: 797
diff changeset
631 return NULL;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
632 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
633
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
634
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
635 ngx_http_variable_value_t *
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
636 ngx_http_get_flushed_variable(ngx_http_request_t *r, ngx_uint_t index)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
637 {
1150
1030996f617c style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1113
diff changeset
638 ngx_http_variable_value_t *v;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
639
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
640 v = &r->variables[index];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
641
4470
d9bf6caf0371 Variables: honor no_cacheable for not_found variables.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
642 if (v->valid || v->not_found) {
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
643 if (!v->no_cacheable) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
644 return v;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
645 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
646
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
647 v->valid = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
648 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
649 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
650
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
651 return ngx_http_get_indexed_variable(r, index);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
652 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
653
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
654
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
655 ngx_http_variable_value_t *
3500
0eb46e3c5c02 change processing variables accessed by SSI and perl module:
Igor Sysoev <igor@sysoev.ru>
parents: 3499
diff changeset
656 ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
657 {
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
658 size_t len;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
659 ngx_uint_t i, n;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
660 ngx_http_variable_t *v;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
661 ngx_http_variable_value_t *vv;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
662 ngx_http_core_main_conf_t *cmcf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
663
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
664 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
665
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
666 v = ngx_hash_find(&cmcf->variables_hash, key, name->data, name->len);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
667
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
668 if (v) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
669 if (v->flags & NGX_HTTP_VAR_INDEXED) {
3500
0eb46e3c5c02 change processing variables accessed by SSI and perl module:
Igor Sysoev <igor@sysoev.ru>
parents: 3499
diff changeset
670 return ngx_http_get_flushed_variable(r, v->index);
6851
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
671 }
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
672
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
673 if (ngx_http_variable_depth == 0) {
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
674 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
675 "cycle while evaluating variable \"%V\"", name);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
676 return NULL;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
677 }
6851
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
678
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
679 ngx_http_variable_depth--;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
680
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
681 vv = ngx_palloc(r->pool, sizeof(ngx_http_variable_value_t));
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
682
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
683 if (vv && v->get_handler(r, vv, v->data) == NGX_OK) {
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
684 ngx_http_variable_depth++;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
685 return vv;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
686 }
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
687
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
688 ngx_http_variable_depth++;
8cd97c14b0e2 Limited recursion when evaluating variables.
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
689 return NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
690 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
691
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
692 vv = ngx_palloc(r->pool, sizeof(ngx_http_variable_value_t));
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
693 if (vv == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
694 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
695 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
696
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
697 len = 0;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
698
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
699 v = cmcf->prefix_variables.elts;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
700 n = cmcf->prefix_variables.nelts;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
701
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
702 for (i = 0; i < cmcf->prefix_variables.nelts; i++) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
703 if (name->len >= v[i].name.len && name->len > len
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
704 && ngx_strncmp(name->data, v[i].name.data, v[i].name.len) == 0)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
705 {
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
706 len = v[i].name.len;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
707 n = i;
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
708 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
709 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
710
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
711 if (n != cmcf->prefix_variables.nelts) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
712 if (v[n].get_handler(r, vv, (uintptr_t) name) == NGX_OK) {
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
713 return vv;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
714 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
715
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
716 return NULL;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
717 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
718
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
719 vv->not_found = 1;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
720
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
721 return vv;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
722 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
723
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
724
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
725 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
726 ngx_http_variable_request(ngx_http_request_t *r, ngx_http_variable_value_t *v,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
727 uintptr_t data)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
728 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
729 ngx_str_t *s;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
730
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
731 s = (ngx_str_t *) ((char *) r + data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
732
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
733 if (s->data) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
734 v->len = s->len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
735 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
736 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
737 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
738 v->data = s->data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
739
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
740 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
741 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
742 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
743
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
744 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
745 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
746
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
747
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
748 #if 0
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
749
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
750 static void
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
751 ngx_http_variable_request_set(ngx_http_request_t *r,
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
752 ngx_http_variable_value_t *v, uintptr_t data)
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
753 {
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
754 ngx_str_t *s;
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
755
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
756 s = (ngx_str_t *) ((char *) r + data);
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
757
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
758 s->len = v->len;
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
759 s->data = v->data;
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
760 }
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
761
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
762 #endif
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
763
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
764
3282
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
765 static ngx_int_t
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
766 ngx_http_variable_request_get_size(ngx_http_request_t *r,
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
767 ngx_http_variable_value_t *v, uintptr_t data)
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
768 {
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
769 size_t *sp;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
770
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
771 sp = (size_t *) ((char *) r + data);
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
772
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
773 v->data = ngx_pnalloc(r->pool, NGX_SIZE_T_LEN);
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
774 if (v->data == NULL) {
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
775 return NGX_ERROR;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
776 }
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
777
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
778 v->len = ngx_sprintf(v->data, "%uz", *sp) - v->data;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
779 v->valid = 1;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
780 v->no_cacheable = 0;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
781 v->not_found = 0;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
782
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
783 return NGX_OK;
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
784 }
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
785
c76b7a7959d5 fix segfault if $limit_rate was logged
Igor Sysoev <igor@sysoev.ru>
parents: 3268
diff changeset
786
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
787 static void
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
788 ngx_http_variable_request_set_size(ngx_http_request_t *r,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
789 ngx_http_variable_value_t *v, uintptr_t data)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
790 {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
791 ssize_t s, *sp;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
792 ngx_str_t val;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
793
1310
33d6c994a0b2 Sun Studio on sparc uses different bit order
Igor Sysoev <igor@sysoev.ru>
parents: 1191
diff changeset
794 val.len = v->len;
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
795 val.data = v->data;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
796
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
797 s = ngx_parse_size(&val);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
798
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
799 if (s == NGX_ERROR) {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
800 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
801 "invalid size \"%V\"", &val);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
802 return;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
803 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
804
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
805 sp = (ssize_t *) ((char *) r + data);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
806
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
807 *sp = s;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
808
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
809 return;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
810 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
811
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
812
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
813 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
814 ngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
815 uintptr_t data)
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
816 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
817 ngx_table_elt_t *h;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
818
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
819 h = *(ngx_table_elt_t **) ((char *) r + data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
820
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
821 if (h) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
822 v->len = h->value.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
823 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
824 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
825 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
826 v->data = h->value.data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
827
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
828 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
829 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
830 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
831
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
832 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
833 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
834
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
835
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
836 static ngx_int_t
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
837 ngx_http_variable_cookies(ngx_http_request_t *r,
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
838 ngx_http_variable_value_t *v, uintptr_t data)
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
839 {
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
840 return ngx_http_variable_headers_internal(r, v, data, ';');
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
841 }
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
842
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
843
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
844 static ngx_int_t
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
845 ngx_http_variable_headers(ngx_http_request_t *r,
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
846 ngx_http_variable_value_t *v, uintptr_t data)
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
847 {
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
848 return ngx_http_variable_headers_internal(r, v, data, ',');
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
849 }
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
850
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
851
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
852 static ngx_int_t
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
853 ngx_http_variable_headers_internal(ngx_http_request_t *r,
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
854 ngx_http_variable_value_t *v, uintptr_t data, u_char sep)
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
855 {
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
856 size_t len;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
857 u_char *p, *end;
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
858 ngx_uint_t i, n;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
859 ngx_array_t *a;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
860 ngx_table_elt_t **h;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
861
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
862 a = (ngx_array_t *) ((char *) r + data);
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
863
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
864 n = a->nelts;
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
865 h = a->elts;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
866
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
867 len = 0;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
868
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
869 for (i = 0; i < n; i++) {
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
870
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
871 if (h[i]->hash == 0) {
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
872 continue;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
873 }
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
874
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
875 len += h[i]->value.len + 2;
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
876 }
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
877
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
878 if (len == 0) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
879 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
880 return NGX_OK;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
881 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
882
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
883 len -= 2;
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
884
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
885 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
886 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
887 v->not_found = 0;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
888
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
889 if (n == 1) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
890 v->len = (*h)->value.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
891 v->data = (*h)->value.data;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
892
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
893 return NGX_OK;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
894 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
895
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
896 p = ngx_pnalloc(r->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
897 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
898 return NGX_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
899 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
900
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
901 v->len = len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
902 v->data = p;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
903
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
904 end = p + len;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
905
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
906 for (i = 0; /* void */ ; i++) {
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
907
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
908 if (h[i]->hash == 0) {
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
909 continue;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
910 }
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
911
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
912 p = ngx_copy(p, h[i]->value.data, h[i]->value.len);
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
913
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
914 if (p == end) {
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
915 break;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
916 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
917
5083
a805dc9c85cd Fixed separator in $sent_http_cache_control.
Ruslan Ermilov <ru@nginx.com>
parents: 5072
diff changeset
918 *p++ = sep; *p++ = ' ';
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
919 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
920
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
921 return NGX_OK;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
922 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
923
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
924
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
925 static ngx_int_t
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
926 ngx_http_variable_unknown_header_in(ngx_http_request_t *r,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
927 ngx_http_variable_value_t *v, uintptr_t data)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
928 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
929 return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
930 &r->headers_in.headers.part,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
931 sizeof("http_") - 1);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
932 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
933
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
934
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
935 static ngx_int_t
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
936 ngx_http_variable_unknown_header_out(ngx_http_request_t *r,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
937 ngx_http_variable_value_t *v, uintptr_t data)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
938 {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
939 return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
940 &r->headers_out.headers.part,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
941 sizeof("sent_http_") - 1);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
942 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
943
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
944
7034
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
945 static ngx_int_t
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
946 ngx_http_variable_unknown_trailer_out(ngx_http_request_t *r,
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
947 ngx_http_variable_value_t *v, uintptr_t data)
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
948 {
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
949 return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
950 &r->headers_out.trailers.part,
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
951 sizeof("sent_trailer_") - 1);
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
952 }
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
953
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 6899
diff changeset
954
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
955 ngx_int_t
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
956 ngx_http_variable_unknown_header(ngx_http_variable_value_t *v, ngx_str_t *var,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
957 ngx_list_part_t *part, size_t prefix)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
958 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
959 u_char ch;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
960 ngx_uint_t i, n;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
961 ngx_table_elt_t *header;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
962
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
963 header = part->elts;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
964
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
965 for (i = 0; /* void */ ; i++) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
966
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
967 if (i >= part->nelts) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
968 if (part->next == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
969 break;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
970 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
972 part = part->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 header = part->elts;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974 i = 0;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
975 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
976
4334
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
977 if (header[i].hash == 0) {
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
978 continue;
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
979 }
f8881d301d62 Fixed: some of $sent_http_* variables may contain header entries that actually
Valentin Bartenev <vbart@nginx.com>
parents: 4332
diff changeset
980
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
981 for (n = 0; n + prefix < var->len && n < header[i].key.len; n++) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
982 ch = header[i].key.data[n];
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
983
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
984 if (ch >= 'A' && ch <= 'Z') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
985 ch |= 0x20;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
986
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
987 } else if (ch == '-') {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
988 ch = '_';
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
989 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
990
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
991 if (var->data[n + prefix] != ch) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
992 break;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
993 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
994 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
995
742
75d767d32624 nonexistent $sent_http_content has value of $sent_http_content_length or so
Igor Sysoev <igor@sysoev.ru>
parents: 732
diff changeset
996 if (n + prefix == var->len && n == header[i].key.len) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
997 v->len = header[i].value.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
998 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
999 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1000 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1001 v->data = header[i].value.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1002
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1003 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1004 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1005 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1006
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1007 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1008
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1009 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1010 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1011
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1012
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1013 static ngx_int_t
3144
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1014 ngx_http_variable_request_line(ngx_http_request_t *r,
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1015 ngx_http_variable_value_t *v, uintptr_t data)
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1016 {
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1017 u_char *p, *s;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1018
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1019 s = r->request_line.data;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1020
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1021 if (s == NULL) {
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1022 s = r->request_start;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1023
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1024 if (s == NULL) {
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1025 v->not_found = 1;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1026 return NGX_OK;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1027 }
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1028
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1029 for (p = s; p < r->header_in->last; p++) {
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1030 if (*p == CR || *p == LF) {
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1031 break;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1032 }
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1033 }
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1034
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1035 r->request_line.len = p - s;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1036 r->request_line.data = s;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1037 }
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1038
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1039 v->len = r->request_line.len;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1040 v->valid = 1;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1041 v->no_cacheable = 0;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1042 v->not_found = 0;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1043 v->data = s;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1044
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1045 return NGX_OK;
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1046 }
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1047
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1048
ecbfc3396c42 allow to log invalid $request in access_log always,
Igor Sysoev <igor@sysoev.ru>
parents: 2878
diff changeset
1049 static ngx_int_t
2307
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1050 ngx_http_variable_cookie(ngx_http_request_t *r, ngx_http_variable_value_t *v,
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1051 uintptr_t data)
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1052 {
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1053 ngx_str_t *name = (ngx_str_t *) data;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1054
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1055 ngx_str_t cookie, s;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1056
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1057 s.len = name->len - (sizeof("cookie_") - 1);
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1058 s.data = name->data + sizeof("cookie_") - 1;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1059
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1060 if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &s, &cookie)
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1061 == NGX_DECLINED)
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1062 {
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1063 v->not_found = 1;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1064 return NGX_OK;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1065 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1066
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1067 v->len = cookie.len;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1068 v->valid = 1;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1069 v->no_cacheable = 0;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1070 v->not_found = 0;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1071 v->data = cookie.data;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1072
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1073 return NGX_OK;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1074 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1075
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1076
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1077 static ngx_int_t
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1078 ngx_http_variable_argument(ngx_http_request_t *r, ngx_http_variable_value_t *v,
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1079 uintptr_t data)
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1080 {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1081 ngx_str_t *name = (ngx_str_t *) data;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1082
2415
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1083 u_char *arg;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1084 size_t len;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1085 ngx_str_t value;
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1086
2415
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1087 len = name->len - (sizeof("arg_") - 1);
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1088 arg = name->data + sizeof("arg_") - 1;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1089
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1090 if (ngx_http_arg(r, arg, len, &value) != NGX_OK) {
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1091 v->not_found = 1;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1092 return NGX_OK;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1093 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1094
2415
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1095 v->data = value.data;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1096 v->len = value.len;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1097 v->valid = 1;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1098 v->no_cacheable = 0;
d311b7f6a403 ngx_http_arg()
Igor Sysoev <igor@sysoev.ru>
parents: 2359
diff changeset
1099 v->not_found = 0;
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1100
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1101 return NGX_OK;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1102 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1103
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1104
4545
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1105 #if (NGX_HAVE_TCP_INFO)
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1106
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1107 static ngx_int_t
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1108 ngx_http_variable_tcpinfo(ngx_http_request_t *r, ngx_http_variable_value_t *v,
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1109 uintptr_t data)
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1110 {
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1111 struct tcp_info ti;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1112 socklen_t len;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1113 uint32_t value;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1114
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1115 len = sizeof(struct tcp_info);
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1116 if (getsockopt(r->connection->fd, IPPROTO_TCP, TCP_INFO, &ti, &len) == -1) {
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1117 v->not_found = 1;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1118 return NGX_OK;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1119 }
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1120
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1121 v->data = ngx_pnalloc(r->pool, NGX_INT32_LEN);
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1122 if (v->data == NULL) {
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1123 return NGX_ERROR;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1124 }
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1125
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1126 switch (data) {
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1127 case 0:
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1128 value = ti.tcpi_rtt;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1129 break;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1130
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1131 case 1:
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1132 value = ti.tcpi_rttvar;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1133 break;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1134
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1135 case 2:
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1136 value = ti.tcpi_snd_cwnd;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1137 break;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1138
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1139 case 3:
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1140 value = ti.tcpi_rcv_space;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1141 break;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1142
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1143 /* suppress warning */
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1144 default:
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1145 value = 0;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1146 break;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1147 }
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1148
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1149 v->len = ngx_sprintf(v->data, "%uD", value) - v->data;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1150 v->valid = 1;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1151 v->no_cacheable = 0;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1152 v->not_found = 0;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1153
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1154 return NGX_OK;
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1155 }
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1156
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1157 #endif
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1158
ba39af7274ed Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, and
Ruslan Ermilov <ru@nginx.com>
parents: 4540
diff changeset
1159
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1160 static ngx_int_t
4928
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1161 ngx_http_variable_content_length(ngx_http_request_t *r,
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1162 ngx_http_variable_value_t *v, uintptr_t data)
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1163 {
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1164 u_char *p;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1165
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1166 if (r->headers_in.content_length) {
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1167 v->len = r->headers_in.content_length->value.len;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1168 v->data = r->headers_in.content_length->value.data;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1169 v->valid = 1;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1170 v->no_cacheable = 0;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1171 v->not_found = 0;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1172
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5815
diff changeset
1173 } else if (r->reading_body) {
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5815
diff changeset
1174 v->not_found = 1;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5815
diff changeset
1175 v->no_cacheable = 1;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5815
diff changeset
1176
4928
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1177 } else if (r->headers_in.content_length_n >= 0) {
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1178 p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1179 if (p == NULL) {
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1180 return NGX_ERROR;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1181 }
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1182
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1183 v->len = ngx_sprintf(p, "%O", r->headers_in.content_length_n) - p;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1184 v->data = p;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1185 v->valid = 1;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1186 v->no_cacheable = 0;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1187 v->not_found = 0;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1188
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1189 } else {
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1190 v->not_found = 1;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1191 }
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1192
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1193 return NGX_OK;
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1194 }
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1195
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1196
ec7d97006a30 Request body: $content_length variable to honor real body size.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4921
diff changeset
1197 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1198 ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1199 uintptr_t data)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1200 {
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1201 ngx_http_core_srv_conf_t *cscf;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1202
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1203 if (r->headers_in.server.len) {
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1204 v->len = r->headers_in.server.len;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1205 v->data = r->headers_in.server.data;
928
a6fe6bedb9e3 fix segfault when $host is used and
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
1206
a6fe6bedb9e3 fix segfault when $host is used and
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
1207 } else {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1208 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1209
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1210 v->len = cscf->server_name.len;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
1211 v->data = cscf->server_name.data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1212 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1213
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1214 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1215 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1216 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1217
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1218 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1219 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1220
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1221
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1222 static ngx_int_t
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1223 ngx_http_variable_binary_remote_addr(ngx_http_request_t *r,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1224 ngx_http_variable_value_t *v, uintptr_t data)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1225 {
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1226 struct sockaddr_in *sin;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1227 #if (NGX_HAVE_INET6)
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1228 struct sockaddr_in6 *sin6;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1229 #endif
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
1230
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1231 switch (r->connection->sockaddr->sa_family) {
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1232
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1233 #if (NGX_HAVE_INET6)
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1234 case AF_INET6:
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1235 sin6 = (struct sockaddr_in6 *) r->connection->sockaddr;
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
1236
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1237 v->len = sizeof(struct in6_addr);
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1238 v->valid = 1;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1239 v->no_cacheable = 0;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1240 v->not_found = 0;
3268
c6a40c815d45 use sin6_addr.s6_addr instead of "(u_char *) & .sin6_addr"
Igor Sysoev <igor@sysoev.ru>
parents: 3144
diff changeset
1241 v->data = sin6->sin6_addr.s6_addr;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1242
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1243 break;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1244 #endif
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1245
7121
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1246 #if (NGX_HAVE_UNIX_DOMAIN)
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1247 case AF_UNIX:
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1248
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1249 v->len = r->connection->addr_text.len;
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1250 v->valid = 1;
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1251 v->no_cacheable = 0;
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1252 v->not_found = 0;
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1253 v->data = r->connection->addr_text.data;
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1254
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1255 break;
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1256 #endif
924b6ef942bf Fixed handling of unix sockets in $binary_remote_addr.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7077
diff changeset
1257
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1258 default: /* AF_INET */
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1259 sin = (struct sockaddr_in *) r->connection->sockaddr;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1260
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1261 v->len = sizeof(in_addr_t);
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1262 v->valid = 1;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1263 v->no_cacheable = 0;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1264 v->not_found = 0;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1265 v->data = (u_char *) &sin->sin_addr;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1266
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1267 break;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1268 }
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
1269
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1270 return NGX_OK;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1271 }
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
1272
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
1273
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1274 static ngx_int_t
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1275 ngx_http_variable_remote_addr(ngx_http_request_t *r,
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1276 ngx_http_variable_value_t *v, uintptr_t data)
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1277 {
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1278 v->len = r->connection->addr_text.len;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1279 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1280 v->no_cacheable = 0;
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1281 v->not_found = 0;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
1282 v->data = r->connection->addr_text.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1283
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1284 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1285 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1286
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1287
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1288 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1289 ngx_http_variable_remote_port(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1290 ngx_http_variable_value_t *v, uintptr_t data)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1291 {
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
1292 ngx_uint_t port;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1293
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1294 v->len = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1295 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1296 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1297 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1298
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1299 v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1300 if (v->data == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1301 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1302 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1303
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
1304 port = ngx_inet_get_port(r->connection->sockaddr);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1305
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1306 if (port > 0 && port < 65536) {
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1307 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1308 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1309
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1310 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1311 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1312
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1313
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1314 static ngx_int_t
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1315 ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r,
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1316 ngx_http_variable_value_t *v, uintptr_t data)
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1317 {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1318 v->len = r->connection->proxy_protocol_addr.len;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1319 v->valid = 1;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1320 v->no_cacheable = 0;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1321 v->not_found = 0;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1322 v->data = r->connection->proxy_protocol_addr.data;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1323
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1324 return NGX_OK;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1325 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1326
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1327
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5464
diff changeset
1328 static ngx_int_t
6561
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1329 ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r,
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1330 ngx_http_variable_value_t *v, uintptr_t data)
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1331 {
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1332 ngx_uint_t port;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1333
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1334 v->len = 0;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1335 v->valid = 1;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1336 v->no_cacheable = 0;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1337 v->not_found = 0;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1338
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1339 v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1);
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1340 if (v->data == NULL) {
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1341 return NGX_ERROR;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1342 }
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1343
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1344 port = r->connection->proxy_protocol_port;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1345
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1346 if (port > 0 && port < 65536) {
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1347 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1348 }
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1349
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1350 return NGX_OK;
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1351 }
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1352
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1353
28c76d9d75b7 Added the $proxy_protocol_port variable.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6531
diff changeset
1354 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1355 ngx_http_variable_server_addr(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1356 ngx_http_variable_value_t *v, uintptr_t data)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1357 {
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1358 ngx_str_t s;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1359 u_char addr[NGX_SOCKADDR_STRLEN];
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1360
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1361 s.len = NGX_SOCKADDR_STRLEN;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1362 s.data = addr;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1363
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2844
diff changeset
1364 if (ngx_connection_local_sockaddr(r->connection, &s, 0) != NGX_OK) {
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1365 return NGX_ERROR;
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1366 }
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1367
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1368 s.data = ngx_pnalloc(r->pool, s.len);
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1369 if (s.data == NULL) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1370 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1371 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1372
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2485
diff changeset
1373 ngx_memcpy(s.data, addr, s.len);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1374
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1375 v->len = s.len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1376 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1377 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1378 v->not_found = 0;
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
1379 v->data = s.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1380
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1381 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1384
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1385 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1386 ngx_http_variable_server_port(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1387 ngx_http_variable_value_t *v, uintptr_t data)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1388 {
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
1389 ngx_uint_t port;
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1390
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1391 v->len = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1392 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1393 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1394 v->not_found = 0;
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1395
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2844
diff changeset
1396 if (ngx_connection_local_sockaddr(r->connection, NULL, 0) != NGX_OK) {
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1397 return NGX_ERROR;
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1398 }
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1399
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1400 v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1);
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1401 if (v->data == NULL) {
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1402 return NGX_ERROR;
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1403 }
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1404
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6561
diff changeset
1405 port = ngx_inet_get_port(r->connection->local_sockaddr);
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1406
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1407 if (port > 0 && port < 65536) {
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1408 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
1409 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1410
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1411 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1412 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1413
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1414
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1415 static ngx_int_t
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1416 ngx_http_variable_scheme(ngx_http_request_t *r,
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1417 ngx_http_variable_value_t *v, uintptr_t data)
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1418 {
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1419 #if (NGX_HTTP_SSL)
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1420
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1421 if (r->connection->ssl) {
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1422 v->len = sizeof("https") - 1;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1423 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1424 v->no_cacheable = 0;
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1425 v->not_found = 0;
732
5e42c1615f4d nginx-0.4.4-RELEASE
Igor Sysoev <igor@sysoev.ru>
parents: 731
diff changeset
1426 v->data = (u_char *) "https";
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1427
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1428 return NGX_OK;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1429 }
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1430
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1431 #endif
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1432
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1433 v->len = sizeof("http") - 1;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1434 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1435 v->no_cacheable = 0;
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1436 v->not_found = 0;
732
5e42c1615f4d nginx-0.4.4-RELEASE
Igor Sysoev <igor@sysoev.ru>
parents: 731
diff changeset
1437 v->data = (u_char *) "http";
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1438
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1439 return NGX_OK;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1440 }
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1441
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1442
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
1443 static ngx_int_t
4332
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1444 ngx_http_variable_https(ngx_http_request_t *r,
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1445 ngx_http_variable_value_t *v, uintptr_t data)
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1446 {
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1447 #if (NGX_HTTP_SSL)
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1448
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1449 if (r->connection->ssl) {
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1450 v->len = sizeof("on") - 1;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1451 v->valid = 1;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1452 v->no_cacheable = 0;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1453 v->not_found = 0;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1454 v->data = (u_char *) "on";
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1455
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1456 return NGX_OK;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1457 }
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1458
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1459 #endif
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1460
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1461 *v = ngx_http_variable_null_value;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1462
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1463 return NGX_OK;
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1464 }
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1465
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1466
5699
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1467 static void
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1468 ngx_http_variable_set_args(ngx_http_request_t *r,
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1469 ngx_http_variable_value_t *v, uintptr_t data)
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1470 {
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1471 r->args.len = v->len;
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1472 r->args.data = v->data;
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1473 r->valid_unparsed_uri = 0;
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1474 }
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1475
e9dbffc18a77 Setting $args now invalidates unparsed uri.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5677
diff changeset
1476
4332
4d9f985fd217 Added the $https variable.
Valentin Bartenev <vbart@nginx.com>
parents: 3929
diff changeset
1477 static ngx_int_t
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1478 ngx_http_variable_is_args(ngx_http_request_t *r,
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1479 ngx_http_variable_value_t *v, uintptr_t data)
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1480 {
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1481 if (r->args.len == 0) {
7053
7f480434c7f2 Variables: use ngx_http_variable_null_value where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 7034
diff changeset
1482 *v = ngx_http_variable_null_value;
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1483 return NGX_OK;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1484 }
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1485
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1486 v->len = 1;
7053
7f480434c7f2 Variables: use ngx_http_variable_null_value where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 7034
diff changeset
1487 v->valid = 1;
7f480434c7f2 Variables: use ngx_http_variable_null_value where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 7034
diff changeset
1488 v->no_cacheable = 0;
7f480434c7f2 Variables: use ngx_http_variable_null_value where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 7034
diff changeset
1489 v->not_found = 0;
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1490 v->data = (u_char *) "?";
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1491
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1492 return NGX_OK;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1493 }
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1494
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1495
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1496 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1497 ngx_http_variable_document_root(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1498 ngx_http_variable_value_t *v, uintptr_t data)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1499 {
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1500 ngx_str_t path;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1501 ngx_http_core_loc_conf_t *clcf;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1502
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1503 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1504
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1505 if (clcf->root_lengths == NULL) {
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1506 v->len = clcf->root.len;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1507 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1508 v->no_cacheable = 0;
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1509 v->not_found = 0;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1510 v->data = clcf->root.data;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1511
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1512 } else {
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1513 if (ngx_http_script_run(r, &path, clcf->root_lengths->elts, 0,
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1514 clcf->root_values->elts)
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1515 == NULL)
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1516 {
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1517 return NGX_ERROR;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1518 }
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1519
5316
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 5204
diff changeset
1520 if (ngx_get_full_name(r->pool, (ngx_str_t *) &ngx_cycle->prefix, &path)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 5204
diff changeset
1521 != NGX_OK)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 5204
diff changeset
1522 {
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1523 return NGX_ERROR;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1524 }
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1525
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1526 v->len = path.len;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1527 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1528 v->no_cacheable = 0;
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1529 v->not_found = 0;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1530 v->data = path.data;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1531 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1532
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1533 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1534 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1535
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1536
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1537 static ngx_int_t
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1538 ngx_http_variable_realpath_root(ngx_http_request_t *r,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1539 ngx_http_variable_value_t *v, uintptr_t data)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1540 {
4558
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1541 u_char *real;
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1542 size_t len;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1543 ngx_str_t path;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1544 ngx_http_core_loc_conf_t *clcf;
4558
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1545 #if (NGX_HAVE_MAX_PATH)
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1546 u_char buffer[NGX_MAX_PATH];
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1547 #endif
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1548
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1549 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1550
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1551 if (clcf->root_lengths == NULL) {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1552 path = clcf->root;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1553
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1554 } else {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1555 if (ngx_http_script_run(r, &path, clcf->root_lengths->elts, 1,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1556 clcf->root_values->elts)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1557 == NULL)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1558 {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1559 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1560 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1561
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1562 path.data[path.len - 1] = '\0';
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1563
5316
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 5204
diff changeset
1564 if (ngx_get_full_name(r->pool, (ngx_str_t *) &ngx_cycle->prefix, &path)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 5204
diff changeset
1565 != NGX_OK)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 5204
diff changeset
1566 {
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1567 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1568 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1569 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1570
4558
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1571 #if (NGX_HAVE_MAX_PATH)
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1572 real = buffer;
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1573 #else
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1574 real = NULL;
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1575 #endif
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1576
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1577 real = ngx_realpath(path.data, real);
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1578
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1579 if (real == NULL) {
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1580 ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1581 ngx_realpath_n " \"%s\" failed", path.data);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1582 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1583 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1584
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1585 len = ngx_strlen(real);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1586
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1587 v->data = ngx_pnalloc(r->pool, len);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1588 if (v->data == NULL) {
4558
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1589 #if !(NGX_HAVE_MAX_PATH)
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1590 ngx_free(real);
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1591 #endif
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1592 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1593 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1594
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1595 v->len = len;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1596 v->valid = 1;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1597 v->no_cacheable = 0;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1598 v->not_found = 0;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1599
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1600 ngx_memcpy(v->data, real, len);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1601
4558
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1602 #if !(NGX_HAVE_MAX_PATH)
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1603 ngx_free(real);
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1604 #endif
8865fd1f3aa5 Fixed unconditional MAX_PATH usage (ticket #22).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4545
diff changeset
1605
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1606 return NGX_OK;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1607 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1608
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1609
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1610 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1611 ngx_http_variable_request_filename(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1612 ngx_http_variable_value_t *v, uintptr_t data)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1613 {
773
c3ebeee31026 remove r->root_length
Igor Sysoev <igor@sysoev.ru>
parents: 763
diff changeset
1614 size_t root;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1615 ngx_str_t path;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1616
773
c3ebeee31026 remove r->root_length
Igor Sysoev <igor@sysoev.ru>
parents: 763
diff changeset
1617 if (ngx_http_map_uri_to_path(r, &path, &root, 0) == NULL) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1618 return NGX_ERROR;
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1619 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1620
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1621 /* ngx_http_map_uri_to_path() allocates memory for terminating '\0' */
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1622
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1623 v->len = path.len - 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1624 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1625 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1626 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1627 v->data = path.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1628
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1629 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1630 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1631
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1632
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1633 static ngx_int_t
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1634 ngx_http_variable_server_name(ngx_http_request_t *r,
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1635 ngx_http_variable_value_t *v, uintptr_t data)
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1636 {
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1637 ngx_http_core_srv_conf_t *cscf;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1638
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1639 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1640
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1641 v->len = cscf->server_name.len;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1642 v->valid = 1;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1643 v->no_cacheable = 0;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1644 v->not_found = 0;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1645 v->data = cscf->server_name.data;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1646
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1647 return NGX_OK;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1648 }
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1649
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1650
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1651 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1652 ngx_http_variable_request_method(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1653 ngx_http_variable_value_t *v, uintptr_t data)
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1654 {
647
95d7da23ea53 nginx-0.3.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1655 if (r->main->method_name.data) {
95d7da23ea53 nginx-0.3.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1656 v->len = r->main->method_name.len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1657 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1658 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1659 v->not_found = 0;
647
95d7da23ea53 nginx-0.3.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1660 v->data = r->main->method_name.data;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1661
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1662 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1663 v->not_found = 1;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1664 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1665
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1666 return NGX_OK;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1667 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1668
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1669
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1670 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1671 ngx_http_variable_remote_user(ngx_http_request_t *r,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1672 ngx_http_variable_value_t *v, uintptr_t data)
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1673 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1674 ngx_int_t rc;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1675
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1676 rc = ngx_http_auth_basic_user(r);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1677
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1678 if (rc == NGX_DECLINED) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1679 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1680 return NGX_OK;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1681 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1682
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1683 if (rc == NGX_ERROR) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1684 return NGX_ERROR;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1685 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1686
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1687 v->len = r->headers_in.user.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1688 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1689 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1690 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1691 v->data = r->headers_in.user.data;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1692
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1693 return NGX_OK;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1694 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1695
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1696
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1697 static ngx_int_t
4886
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1698 ngx_http_variable_bytes_sent(ngx_http_request_t *r,
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1699 ngx_http_variable_value_t *v, uintptr_t data)
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1700 {
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1701 u_char *p;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1702
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1703 p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1704 if (p == NULL) {
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1705 return NGX_ERROR;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1706 }
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1707
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1708 v->len = ngx_sprintf(p, "%O", r->connection->sent) - p;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1709 v->valid = 1;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1710 v->no_cacheable = 0;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1711 v->not_found = 0;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1712 v->data = p;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1713
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1714 return NGX_OK;
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1715 }
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1716
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1717
b7f6f097d95e Variable $bytes_sent.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4697
diff changeset
1718 static ngx_int_t
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1719 ngx_http_variable_body_bytes_sent(ngx_http_request_t *r,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1720 ngx_http_variable_value_t *v, uintptr_t data)
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1721 {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1722 off_t sent;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1723 u_char *p;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1724
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1725 sent = r->connection->sent - r->header_size;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1726
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1727 if (sent < 0) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1728 sent = 0;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1729 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1730
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1731 p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1732 if (p == NULL) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1733 return NGX_ERROR;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1734 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1735
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1736 v->len = ngx_sprintf(p, "%O", sent) - p;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1737 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1738 v->no_cacheable = 0;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1739 v->not_found = 0;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1740 v->data = p;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1741
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1742 return NGX_OK;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1743 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1744
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1745
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1746 static ngx_int_t
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1747 ngx_http_variable_pipe(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1748 ngx_http_variable_value_t *v, uintptr_t data)
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1749 {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1750 v->data = (u_char *) (r->pipeline ? "p" : ".");
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1751 v->len = 1;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1752 v->valid = 1;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1753 v->no_cacheable = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1754 v->not_found = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1755
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1756 return NGX_OK;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1757 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1758
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1759
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
1760 static ngx_int_t
4685
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1761 ngx_http_variable_status(ngx_http_request_t *r,
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1762 ngx_http_variable_value_t *v, uintptr_t data)
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1763 {
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1764 ngx_uint_t status;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1765
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1766 v->data = ngx_pnalloc(r->pool, NGX_INT_T_LEN);
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1767 if (v->data == NULL) {
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1768 return NGX_ERROR;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1769 }
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1770
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1771 if (r->err_status) {
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1772 status = r->err_status;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1773
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1774 } else if (r->headers_out.status) {
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1775 status = r->headers_out.status;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1776
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1777 } else if (r->http_version == NGX_HTTP_VERSION_9) {
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1778 status = 9;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1779
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1780 } else {
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1781 status = 0;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1782 }
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1783
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1784 v->len = ngx_sprintf(v->data, "%03ui", status) - v->data;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1785 v->valid = 1;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1786 v->no_cacheable = 0;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1787 v->not_found = 0;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1788
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1789 return NGX_OK;
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1790 }
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1791
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1792
956edecaedeb New core variable: $status.
Andrey Belov <defan@nginx.com>
parents: 4641
diff changeset
1793 static ngx_int_t
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1794 ngx_http_variable_sent_content_type(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1795 ngx_http_variable_value_t *v, uintptr_t data)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1796 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1797 if (r->headers_out.content_type.len) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1798 v->len = r->headers_out.content_type.len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1799 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1800 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1801 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1802 v->data = r->headers_out.content_type.data;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1803
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1804 } else {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1805 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1806 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1807
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1808 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1809 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1810
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1811
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1812 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1813 ngx_http_variable_sent_content_length(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1814 ngx_http_variable_value_t *v, uintptr_t data)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1815 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1816 u_char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1817
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1818 if (r->headers_out.content_length) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1819 v->len = r->headers_out.content_length->value.len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1820 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1821 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1822 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1823 v->data = r->headers_out.content_length->value.data;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1824
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1825 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1826 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1827
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1828 if (r->headers_out.content_length_n >= 0) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1829 p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1830 if (p == NULL) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1831 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1832 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1833
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1834 v->len = ngx_sprintf(p, "%O", r->headers_out.content_length_n) - p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1835 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1836 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1837 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1838 v->data = p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1839
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1840 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1841 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1842
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1843 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1844
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1845 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1846 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1847
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1848
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1849 static ngx_int_t
2485
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1850 ngx_http_variable_sent_location(ngx_http_request_t *r,
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1851 ngx_http_variable_value_t *v, uintptr_t data)
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1852 {
2539
051e9b12428e fix segfault introduced in r2486 in $sent_http_location processing
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1853 ngx_str_t name;
051e9b12428e fix segfault introduced in r2486 in $sent_http_location processing
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1854
2485
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1855 if (r->headers_out.location) {
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1856 v->len = r->headers_out.location->value.len;
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1857 v->valid = 1;
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1858 v->no_cacheable = 0;
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1859 v->not_found = 0;
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1860 v->data = r->headers_out.location->value.data;
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1861
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1862 return NGX_OK;
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1863 }
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1864
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3500
diff changeset
1865 ngx_str_set(&name, "sent_http_location");
2539
051e9b12428e fix segfault introduced in r2486 in $sent_http_location processing
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1866
051e9b12428e fix segfault introduced in r2486 in $sent_http_location processing
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
1867 return ngx_http_variable_unknown_header(v, &name,
2485
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1868 &r->headers_out.headers.part,
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1869 sizeof("sent_http_") - 1);
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1870 }
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1871
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1872
51b1097dbb67 fix $sent_http_location for local redirects
Igor Sysoev <igor@sysoev.ru>
parents: 2415
diff changeset
1873 static ngx_int_t
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1874 ngx_http_variable_sent_last_modified(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1875 ngx_http_variable_value_t *v, uintptr_t data)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1876 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1877 u_char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1878
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1879 if (r->headers_out.last_modified) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1880 v->len = r->headers_out.last_modified->value.len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1881 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1882 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1883 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1884 v->data = r->headers_out.last_modified->value.data;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1885
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1886 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1887 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1888
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1889 if (r->headers_out.last_modified_time >= 0) {
5434
c21e341c51cb Removed extra allocation for $sent_http_last_modified.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5361
diff changeset
1890 p = ngx_pnalloc(r->pool, sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1);
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1891 if (p == NULL) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1892 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1893 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1894
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1895 v->len = ngx_http_time(p, r->headers_out.last_modified_time) - p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1896 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1897 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1898 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1899 v->data = p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1900
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1901 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1902 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1903
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1904 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1905
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1906 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1907 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1908
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1909
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1910 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1911 ngx_http_variable_sent_connection(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1912 ngx_http_variable_value_t *v, uintptr_t data)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1913 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1914 size_t len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1915 char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1916
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5010
diff changeset
1917 if (r->headers_out.status == NGX_HTTP_SWITCHING_PROTOCOLS) {
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5010
diff changeset
1918 len = sizeof("upgrade") - 1;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5010
diff changeset
1919 p = "upgrade";
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5010
diff changeset
1920
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5010
diff changeset
1921 } else if (r->keepalive) {
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1922 len = sizeof("keep-alive") - 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1923 p = "keep-alive";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1924
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1925 } else {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1926 len = sizeof("close") - 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1927 p = "close";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1928 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1929
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1930 v->len = len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1931 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1932 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1933 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1934 v->data = (u_char *) p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1935
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1936 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1937 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1938
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1939
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1940 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1941 ngx_http_variable_sent_keep_alive(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1942 ngx_http_variable_value_t *v, uintptr_t data)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1943 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1944 u_char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1945 ngx_http_core_loc_conf_t *clcf;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1946
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1947 if (r->keepalive) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1948 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1949
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1950 if (clcf->keepalive_header) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1951
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1952 p = ngx_pnalloc(r->pool, sizeof("timeout=") - 1 + NGX_TIME_T_LEN);
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1953 if (p == NULL) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1954 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1955 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1956
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1957 v->len = ngx_sprintf(p, "timeout=%T", clcf->keepalive_header) - p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1958 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1959 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1960 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1961 v->data = p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1962
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1963 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1964 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1965 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1966
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1967 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1968
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1969 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1970 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1971
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1972
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1973 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1974 ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1975 ngx_http_variable_value_t *v, uintptr_t data)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1976 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1977 if (r->chunked) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1978 v->len = sizeof("chunked") - 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1979 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1980 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1981 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1982 v->data = (u_char *) "chunked";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1983
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1984 } else {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1985 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1986 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1987
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1988 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1989 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1990
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1991
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1992 static ngx_int_t
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1993 ngx_http_variable_request_completion(ngx_http_request_t *r,
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1994 ngx_http_variable_value_t *v, uintptr_t data)
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1995 {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1996 if (r->request_complete) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1997 v->len = 2;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1998 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1999 v->no_cacheable = 0;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2000 v->not_found = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2001 v->data = (u_char *) "OK";
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2002
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2003 return NGX_OK;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2004 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2005
7053
7f480434c7f2 Variables: use ngx_http_variable_null_value where appropriate.
Ruslan Ermilov <ru@nginx.com>
parents: 7034
diff changeset
2006 *v = ngx_http_variable_null_value;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2007
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2008 return NGX_OK;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2009 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2010
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2011
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2012 static ngx_int_t
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2013 ngx_http_variable_request_body(ngx_http_request_t *r,
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2014 ngx_http_variable_value_t *v, uintptr_t data)
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2015 {
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2016 u_char *p;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2017 size_t len;
4921
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2018 ngx_buf_t *buf;
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2019 ngx_chain_t *cl;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2020
2878
8535736ace1a fix segfault introduced in r2845
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2021 if (r->request_body == NULL
8535736ace1a fix segfault introduced in r2845
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2022 || r->request_body->bufs == NULL
8535736ace1a fix segfault introduced in r2845
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2023 || r->request_body->temp_file)
8535736ace1a fix segfault introduced in r2845
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2024 {
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2025 v->not_found = 1;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2026
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2027 return NGX_OK;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2028 }
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2029
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2030 cl = r->request_body->bufs;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2031 buf = cl->buf;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2032
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2033 if (cl->next == NULL) {
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2034 v->len = buf->last - buf->pos;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2035 v->valid = 1;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2036 v->no_cacheable = 0;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2037 v->not_found = 0;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2038 v->data = buf->pos;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2039
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2040 return NGX_OK;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2041 }
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2042
4921
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2043 len = buf->last - buf->pos;
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2044 cl = cl->next;
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2045
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2046 for ( /* void */ ; cl; cl = cl->next) {
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2047 buf = cl->buf;
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2048 len += buf->last - buf->pos;
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2049 }
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2050
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2051 p = ngx_pnalloc(r->pool, len);
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2052 if (p == NULL) {
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2053 return NGX_ERROR;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2054 }
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2055
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2056 v->data = p;
4921
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2057 cl = r->request_body->bufs;
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2058
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2059 for ( /* void */ ; cl; cl = cl->next) {
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2060 buf = cl->buf;
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2061 p = ngx_cpymem(p, buf->pos, buf->last - buf->pos);
fbc0791bebb2 Request body: $request_body variable generalization.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4913
diff changeset
2062 }
2844
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2063
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2064 v->len = len;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2065 v->valid = 1;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2066 v->no_cacheable = 0;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2067 v->not_found = 0;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2068
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2069 return NGX_OK;
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2070 }
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2071
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2072
2f3c80ff2123 $request_body variable
Igor Sysoev <igor@sysoev.ru>
parents: 2539
diff changeset
2073 static ngx_int_t
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2074 ngx_http_variable_request_body_file(ngx_http_request_t *r,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2075 ngx_http_variable_value_t *v, uintptr_t data)
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2076 {
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2077 if (r->request_body == NULL || r->request_body->temp_file == NULL) {
763
0b0f3d4854c0 variable should not be found if no request body file
Igor Sysoev <igor@sysoev.ru>
parents: 759
diff changeset
2078 v->not_found = 1;
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2079
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2080 return NGX_OK;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2081 }
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2082
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2083 v->len = r->request_body->temp_file->file.name.len;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2084 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
2085 v->no_cacheable = 0;
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2086 v->not_found = 0;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2087 v->data = r->request_body->temp_file->file.name.data;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2088
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2089 return NGX_OK;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2090 }
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2091
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
2092
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2093 static ngx_int_t
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2094 ngx_http_variable_request_length(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2095 ngx_http_variable_value_t *v, uintptr_t data)
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2096 {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2097 u_char *p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2098
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2099 p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2100 if (p == NULL) {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2101 return NGX_ERROR;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2102 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2103
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2104 v->len = ngx_sprintf(p, "%O", r->request_length) - p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2105 v->valid = 1;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2106 v->no_cacheable = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2107 v->not_found = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2108 v->data = p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2109
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2110 return NGX_OK;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2111 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2112
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2113
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2114 static ngx_int_t
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2115 ngx_http_variable_request_time(ngx_http_request_t *r,
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2116 ngx_http_variable_value_t *v, uintptr_t data)
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2117 {
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2118 u_char *p;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2119 ngx_time_t *tp;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2120 ngx_msec_int_t ms;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2121
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2122 p = ngx_pnalloc(r->pool, NGX_TIME_T_LEN + 4);
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2123 if (p == NULL) {
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2124 return NGX_ERROR;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2125 }
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2126
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2127 tp = ngx_timeofday();
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2128
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2129 ms = (ngx_msec_int_t)
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2130 ((tp->sec - r->start_sec) * 1000 + (tp->msec - r->start_msec));
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2131 ms = ngx_max(ms, 0);
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2132
5361
7094d6da2806 Win32: $request_time fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5327
diff changeset
2133 v->len = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000) - p;
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2134 v->valid = 1;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2135 v->no_cacheable = 0;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2136 v->not_found = 0;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2137 v->data = p;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2138
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2139 return NGX_OK;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2140 }
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2141
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2142
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2143 static ngx_int_t
6531
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2144 ngx_http_variable_request_id(ngx_http_request_t *r,
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2145 ngx_http_variable_value_t *v, uintptr_t data)
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2146 {
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2147 u_char *id;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2148
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2149 #if (NGX_OPENSSL)
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2150 u_char random_bytes[16];
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2151 #endif
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2152
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2153 id = ngx_pnalloc(r->pool, 32);
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2154 if (id == NULL) {
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2155 return NGX_ERROR;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2156 }
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2157
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2158 v->valid = 1;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2159 v->no_cacheable = 0;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2160 v->not_found = 0;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2161
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2162 v->len = 32;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2163 v->data = id;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2164
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2165 #if (NGX_OPENSSL)
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2166
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2167 if (RAND_bytes(random_bytes, 16) == 1) {
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2168 ngx_hex_dump(id, random_bytes, 16);
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2169 return NGX_OK;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2170 }
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2171
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2172 ngx_ssl_error(NGX_LOG_ERR, r->connection->log, 0, "RAND_bytes() failed");
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2173
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2174 #endif
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2175
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2176 ngx_sprintf(id, "%08xD%08xD%08xD%08xD",
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2177 (uint32_t) ngx_random(), (uint32_t) ngx_random(),
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2178 (uint32_t) ngx_random(), (uint32_t) ngx_random());
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2179
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2180 return NGX_OK;
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2181 }
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2182
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2183
59f8f2dd8b31 Variable $request_id.
Vladimir Homutov <vl@nginx.com>
parents: 6478
diff changeset
2184 static ngx_int_t
4893
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2185 ngx_http_variable_connection(ngx_http_request_t *r,
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2186 ngx_http_variable_value_t *v, uintptr_t data)
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2187 {
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2188 u_char *p;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2189
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2190 p = ngx_pnalloc(r->pool, NGX_ATOMIC_T_LEN);
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2191 if (p == NULL) {
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2192 return NGX_ERROR;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2193 }
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2194
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2195 v->len = ngx_sprintf(p, "%uA", r->connection->number) - p;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2196 v->valid = 1;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2197 v->no_cacheable = 0;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2198 v->not_found = 0;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2199 v->data = p;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2200
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2201 return NGX_OK;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2202 }
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2203
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2204
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2205 static ngx_int_t
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2206 ngx_http_variable_connection_requests(ngx_http_request_t *r,
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2207 ngx_http_variable_value_t *v, uintptr_t data)
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2208 {
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2209 u_char *p;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2210
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2211 p = ngx_pnalloc(r->pool, NGX_INT_T_LEN);
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2212 if (p == NULL) {
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2213 return NGX_ERROR;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2214 }
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2215
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2216 v->len = ngx_sprintf(p, "%ui", r->connection->requests) - p;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2217 v->valid = 1;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2218 v->no_cacheable = 0;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2219 v->not_found = 0;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2220 v->data = p;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2221
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2222 return NGX_OK;
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2223 }
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2224
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2225
e89bd9896fea Variables $connection and $connection_requests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4886
diff changeset
2226 static ngx_int_t
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2227 ngx_http_variable_nginx_version(ngx_http_request_t *r,
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2228 ngx_http_variable_value_t *v, uintptr_t data)
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2229 {
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2230 v->len = sizeof(NGINX_VERSION) - 1;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2231 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
2232 v->no_cacheable = 0;
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2233 v->not_found = 0;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2234 v->data = (u_char *) NGINX_VERSION;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2235
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2236 return NGX_OK;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2237 }
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2238
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
2239
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2240 static ngx_int_t
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2241 ngx_http_variable_hostname(ngx_http_request_t *r,
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2242 ngx_http_variable_value_t *v, uintptr_t data)
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2243 {
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2244 v->len = ngx_cycle->hostname.len;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2245 v->valid = 1;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2246 v->no_cacheable = 0;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2247 v->not_found = 0;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2248 v->data = ngx_cycle->hostname.data;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2249
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2250 return NGX_OK;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2251 }
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2252
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
2253
2249
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2254 static ngx_int_t
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2255 ngx_http_variable_pid(ngx_http_request_t *r,
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2256 ngx_http_variable_value_t *v, uintptr_t data)
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2257 {
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2258 u_char *p;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2259
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2260 p = ngx_pnalloc(r->pool, NGX_INT64_LEN);
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2261 if (p == NULL) {
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2262 return NGX_ERROR;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2263 }
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2264
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2265 v->len = ngx_sprintf(p, "%P", ngx_pid) - p;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2266 v->valid = 1;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2267 v->no_cacheable = 0;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2268 v->not_found = 0;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2269 v->data = p;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2270
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2271 return NGX_OK;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2272 }
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2273
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2274
4913
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2275 static ngx_int_t
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2276 ngx_http_variable_msec(ngx_http_request_t *r,
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2277 ngx_http_variable_value_t *v, uintptr_t data)
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2278 {
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2279 u_char *p;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2280 ngx_time_t *tp;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2281
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2282 p = ngx_pnalloc(r->pool, NGX_TIME_T_LEN + 4);
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2283 if (p == NULL) {
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2284 return NGX_ERROR;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2285 }
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2286
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2287 tp = ngx_timeofday();
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2288
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2289 v->len = ngx_sprintf(p, "%T.%03M", tp->sec, tp->msec) - p;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2290 v->valid = 1;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2291 v->no_cacheable = 0;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2292 v->not_found = 0;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2293 v->data = p;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2294
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2295 return NGX_OK;
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2296 }
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2297
002f2c783d7c Variables $request_time and $msec.
Ruslan Ermilov <ru@nginx.com>
parents: 4893
diff changeset
2298
5010
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2299 static ngx_int_t
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2300 ngx_http_variable_time_iso8601(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2301 ngx_http_variable_value_t *v, uintptr_t data)
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2302 {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2303 u_char *p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2304
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2305 p = ngx_pnalloc(r->pool, ngx_cached_http_log_iso8601.len);
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2306 if (p == NULL) {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2307 return NGX_ERROR;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2308 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2309
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2310 ngx_memcpy(p, ngx_cached_http_log_iso8601.data,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2311 ngx_cached_http_log_iso8601.len);
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2312
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2313 v->len = ngx_cached_http_log_iso8601.len;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2314 v->valid = 1;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2315 v->no_cacheable = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2316 v->not_found = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2317 v->data = p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2318
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2319 return NGX_OK;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2320 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2321
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2322
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2323 static ngx_int_t
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2324 ngx_http_variable_time_local(ngx_http_request_t *r,
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2325 ngx_http_variable_value_t *v, uintptr_t data)
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2326 {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2327 u_char *p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2328
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2329 p = ngx_pnalloc(r->pool, ngx_cached_http_log_time.len);
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2330 if (p == NULL) {
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2331 return NGX_ERROR;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2332 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2333
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2334 ngx_memcpy(p, ngx_cached_http_log_time.data, ngx_cached_http_log_time.len);
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2335
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2336 v->len = ngx_cached_http_log_time.len;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2337 v->valid = 1;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2338 v->no_cacheable = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2339 v->not_found = 0;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2340 v->data = p;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2341
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2342 return NGX_OK;
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2343 }
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2344
829cc5872186 Variables $pipe, $request_length, $time_iso8601, and $time_local.
Ruslan Ermilov <ru@nginx.com>
parents: 4972
diff changeset
2345
3872
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2346 void *
3929
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2347 ngx_http_map_find(ngx_http_request_t *r, ngx_http_map_t *map, ngx_str_t *match)
3872
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2348 {
3929
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2349 void *value;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2350 u_char *low;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2351 size_t len;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2352 ngx_uint_t key;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2353
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2354 len = match->len;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2355
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2356 if (len) {
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2357 low = ngx_pnalloc(r->pool, len);
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2358 if (low == NULL) {
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2359 return NULL;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2360 }
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2361
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2362 } else {
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2363 low = NULL;
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2364 }
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2365
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2366 key = ngx_hash_strlow(low, match->data, len);
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2367
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2368 value = ngx_hash_find_combined(&map->hash, key, low, len);
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2369 if (value) {
fa4612bfb9fa change ngx_http_map_find(): use case sensitive regexes
Igor Sysoev <igor@sysoev.ru>
parents: 3872
diff changeset
2370 return value;
3872
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2371 }
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2372
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2373 #if (NGX_PCRE)
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2374
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2375 if (len && map->nregex) {
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2376 ngx_int_t n;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2377 ngx_uint_t i;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2378 ngx_http_map_regex_t *reg;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2379
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2380 reg = map->regex;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2381
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2382 for (i = 0; i < map->nregex; i++) {
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2383
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2384 n = ngx_http_regex_exec(r, reg[i].regex, match);
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2385
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2386 if (n == NGX_OK) {
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2387 return reg[i].value;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2388 }
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2389
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2390 if (n == NGX_DECLINED) {
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2391 continue;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2392 }
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2393
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2394 /* NGX_ERROR */
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2395
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2396 return NULL;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2397 }
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2398 }
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2399
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2400 #endif
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2401
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2402 return NULL;
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2403 }
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2404
83cd1910329c allow regex as "map" parameter
Igor Sysoev <igor@sysoev.ru>
parents: 3641
diff changeset
2405
3356
fe08c14530e9 fix building without PCRE, the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3345
diff changeset
2406 #if (NGX_PCRE)
fe08c14530e9 fix building without PCRE, the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3345
diff changeset
2407
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2408 static ngx_int_t
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2409 ngx_http_variable_not_found(ngx_http_request_t *r, ngx_http_variable_value_t *v,
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2410 uintptr_t data)
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2411 {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2412 v->not_found = 1;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2413 return NGX_OK;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2414 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2415
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2416
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2417 ngx_http_regex_t *
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2418 ngx_http_regex_compile(ngx_conf_t *cf, ngx_regex_compile_t *rc)
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2419 {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2420 u_char *p;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2421 size_t size;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2422 ngx_str_t name;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2423 ngx_uint_t i, n;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2424 ngx_http_variable_t *v;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2425 ngx_http_regex_t *re;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2426 ngx_http_regex_variable_t *rv;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2427 ngx_http_core_main_conf_t *cmcf;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2428
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2429 rc->pool = cf->pool;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2430
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2431 if (ngx_regex_compile(rc) != NGX_OK) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2432 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc->err);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2433 return NULL;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2434 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2435
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2436 re = ngx_pcalloc(cf->pool, sizeof(ngx_http_regex_t));
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2437 if (re == NULL) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2438 return NULL;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2439 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2440
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2441 re->regex = rc->regex;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2442 re->ncaptures = rc->captures;
5204
a64c8a5da336 PCRE: retain input pattern for all regular expressions.
Piotr Sikora <piotr@cloudflare.com>
parents: 5084
diff changeset
2443 re->name = rc->pattern;
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2444
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2445 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2446 cmcf->ncaptures = ngx_max(cmcf->ncaptures, re->ncaptures);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2447
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2448 n = (ngx_uint_t) rc->named_captures;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2449
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2450 if (n == 0) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2451 return re;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2452 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2453
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2454 rv = ngx_palloc(rc->pool, n * sizeof(ngx_http_regex_variable_t));
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2455 if (rv == NULL) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2456 return NULL;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2457 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2458
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2459 re->variables = rv;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2460 re->nvariables = n;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2461
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2462 size = rc->name_size;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2463 p = rc->names;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2464
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2465 for (i = 0; i < n; i++) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2466 rv[i].capture = 2 * ((p[0] << 8) + p[1]);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2467
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2468 name.data = &p[2];
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2469 name.len = ngx_strlen(name.data);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2470
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2471 v = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2472 if (v == NULL) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2473 return NULL;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2474 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2475
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2476 rv[i].index = ngx_http_get_variable_index(cf, &name);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2477 if (rv[i].index == NGX_ERROR) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2478 return NULL;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2479 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2480
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2481 v->get_handler = ngx_http_variable_not_found;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2482
3409
bb79608169eb named captures worked for two names only
Igor Sysoev <igor@sysoev.ru>
parents: 3356
diff changeset
2483 p += size;
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2484 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2485
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2486 return re;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2487 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2488
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2489
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2490 ngx_int_t
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2491 ngx_http_regex_exec(ngx_http_request_t *r, ngx_http_regex_t *re, ngx_str_t *s)
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2492 {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2493 ngx_int_t rc, index;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2494 ngx_uint_t i, n, len;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2495 ngx_http_variable_value_t *vv;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2496 ngx_http_core_main_conf_t *cmcf;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2497
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2498 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2499
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2500 if (re->ncaptures) {
3345
d8228f0b5113 evaluate maximum captures size on configuration phase
Igor Sysoev <igor@sysoev.ru>
parents: 3344
diff changeset
2501 len = cmcf->ncaptures;
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2502
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2503 if (r->captures == NULL) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2504 r->captures = ngx_palloc(r->pool, len * sizeof(int));
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2505 if (r->captures == NULL) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2506 return NGX_ERROR;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2507 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2508 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2509
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2510 } else {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2511 len = 0;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2512 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2513
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2514 rc = ngx_regex_exec(re->regex, s, r->captures, len);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2515
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2516 if (rc == NGX_REGEX_NO_MATCHED) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2517 return NGX_DECLINED;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2518 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2519
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2520 if (rc < 0) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2521 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2522 ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2523 rc, s, &re->name);
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2524 return NGX_ERROR;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2525 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2526
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2527 for (i = 0; i < re->nvariables; i++) {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2528
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2529 n = re->variables[i].capture;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2530 index = re->variables[i].index;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2531 vv = &r->variables[index];
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2532
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2533 vv->len = r->captures[n + 1] - r->captures[n];
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2534 vv->valid = 1;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2535 vv->no_cacheable = 0;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2536 vv->not_found = 0;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2537 vv->data = &s->data[r->captures[n]];
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2538
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2539 #if (NGX_DEBUG)
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2540 {
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2541 ngx_http_variable_t *v;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2542
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2543 v = cmcf->variables.elts;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2544
6478
3ef7bb882ad4 Fixed logging with variable field width.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6263
diff changeset
2545 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
3ef7bb882ad4 Fixed logging with variable field width.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6263
diff changeset
2546 "http regex set $%V to \"%v\"", &v[index].name, vv);
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2547 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2548 #endif
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2549 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2550
3344
1aed55182ea2 fix captures in "rewrite", the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
2551 r->ncaptures = rc * 2;
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2552 r->captures_data = s->data;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2553
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2554 return NGX_OK;
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2555 }
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2556
3356
fe08c14530e9 fix building without PCRE, the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3345
diff changeset
2557 #endif
fe08c14530e9 fix building without PCRE, the bug had been introduced in r3326
Igor Sysoev <igor@sysoev.ru>
parents: 3345
diff changeset
2558
3325
42c16d8bddbe regex named captures
Igor Sysoev <igor@sysoev.ru>
parents: 3282
diff changeset
2559
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2560 ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2561 ngx_http_variables_add_core_vars(ngx_conf_t *cf)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2562 {
4641
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2563 ngx_http_variable_t *cv, *v;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2564 ngx_http_core_main_conf_t *cmcf;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2565
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2566 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2567
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2568 cmcf->variables_keys = ngx_pcalloc(cf->temp_pool,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2569 sizeof(ngx_hash_keys_arrays_t));
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2570 if (cmcf->variables_keys == NULL) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2571 return NGX_ERROR;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2572 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2573
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2574 cmcf->variables_keys->pool = cf->pool;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2575 cmcf->variables_keys->temp_pool = cf->pool;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2576
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2577 if (ngx_hash_keys_array_init(cmcf->variables_keys, NGX_HASH_SMALL)
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2578 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2579 {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2580 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2581 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2582
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2583 if (ngx_array_init(&cmcf->prefix_variables, cf->pool, 8,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2584 sizeof(ngx_http_variable_t))
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2585 != NGX_OK)
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2586 {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2587 return NGX_ERROR;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2588 }
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2589
4641
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2590 for (cv = ngx_http_core_variables; cv->name.len; cv++) {
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2591 v = ngx_http_add_variable(cf, &cv->name, cv->flags);
4641
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2592 if (v == NULL) {
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2593 return NGX_ERROR;
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2594 }
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2595
045bb3ef3ffc Fixed core variables dynamic access after reconfiguration.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4572
diff changeset
2596 *v = *cv;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2597 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2598
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2599 return NGX_OK;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2600 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2601
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2602
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2603 ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2604 ngx_http_variables_init_vars(ngx_conf_t *cf)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2605 {
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2606 size_t len;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2607 ngx_uint_t i, n;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2608 ngx_hash_key_t *key;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2609 ngx_hash_init_t hash;
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2610 ngx_http_variable_t *v, *av, *pv;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2611 ngx_http_core_main_conf_t *cmcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2612
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2613 /* set the handlers for the indexed http variables */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2614
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2615 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2616
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2617 v = cmcf->variables.elts;
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2618 pv = cmcf->prefix_variables.elts;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2619 key = cmcf->variables_keys->keys.elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2620
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2621 for (i = 0; i < cmcf->variables.nelts; i++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2622
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2623 for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2624
1191
0eb2dc4fdea8 fix segfault introduced in r1190
Igor Sysoev <igor@sysoev.ru>
parents: 1173
diff changeset
2625 av = key[n].value;
0eb2dc4fdea8 fix segfault introduced in r1190
Igor Sysoev <igor@sysoev.ru>
parents: 1173
diff changeset
2626
5815
6c99c5f00fc9 Variables: fixed non-indexed access of prefix vars (ticket #600).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5699
diff changeset
2627 if (v[i].name.len == key[n].key.len
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2628 && ngx_strncmp(v[i].name.data, key[n].key.data, v[i].name.len)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2629 == 0)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2630 {
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
2631 v[i].get_handler = av->get_handler;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2632 v[i].data = av->data;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
2633
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2634 av->flags |= NGX_HTTP_VAR_INDEXED;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2635 v[i].flags = av->flags;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2636
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2637 av->index = i;
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
2638
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2639 if (av->get_handler == NULL
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2640 || (av->flags & NGX_HTTP_VAR_WEAK))
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2641 {
5815
6c99c5f00fc9 Variables: fixed non-indexed access of prefix vars (ticket #600).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5699
diff changeset
2642 break;
6c99c5f00fc9 Variables: fixed non-indexed access of prefix vars (ticket #600).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5699
diff changeset
2643 }
6c99c5f00fc9 Variables: fixed non-indexed access of prefix vars (ticket #600).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5699
diff changeset
2644
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2645 goto next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2646 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2647 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2648
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2649 len = 0;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2650 av = NULL;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2651
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2652 for (n = 0; n < cmcf->prefix_variables.nelts; n++) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2653 if (v[i].name.len >= pv[n].name.len && v[i].name.len > len
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2654 && ngx_strncmp(v[i].name.data, pv[n].name.data, pv[n].name.len)
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2655 == 0)
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2656 {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2657 av = &pv[n];
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2658 len = pv[n].name.len;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2659 }
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
2660 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
2661
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2662 if (av) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2663 v[i].get_handler = av->get_handler;
5677
3a48775f1535 Upstream: added the "$upstream_cookie_<name>" variables.
Vladimir Homutov <vl@nginx.com>
parents: 5605
diff changeset
2664 v[i].data = (uintptr_t) &v[i].name;
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2665 v[i].flags = av->flags;
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2666
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2667 goto next;
5677
3a48775f1535 Upstream: added the "$upstream_cookie_<name>" variables.
Vladimir Homutov <vl@nginx.com>
parents: 5605
diff changeset
2668 }
3a48775f1535 Upstream: added the "$upstream_cookie_<name>" variables.
Vladimir Homutov <vl@nginx.com>
parents: 5605
diff changeset
2669
6899
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2670 if (v[i].get_handler == NULL) {
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2671 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2672 "unknown \"%V\" variable", &v[i].name);
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2673
d2b2ff157da5 Variables: generic prefix variables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6851
diff changeset
2674 return NGX_ERROR;
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
2675 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
2676
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2677 next:
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2678 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2679 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2680
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2681
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2682 for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2683 av = key[n].value;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2684
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2685 if (av->flags & NGX_HTTP_VAR_NOHASH) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2686 key[n].key.data = NULL;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2687 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2688 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2689
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2690
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2691 hash.hash = &cmcf->variables_hash;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2692 hash.key = ngx_hash_key;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2693 hash.max_size = cmcf->variables_hash_max_size;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2694 hash.bucket_size = cmcf->variables_hash_bucket_size;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2695 hash.name = "variables_hash";
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2696 hash.pool = cf->pool;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2697 hash.temp_pool = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2698
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2699 if (ngx_hash_init(&hash, cmcf->variables_keys->keys.elts,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2700 cmcf->variables_keys->keys.nelts)
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2701 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2702 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2703 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2704 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2705
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2706 cmcf->variables_keys = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2707
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2708 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
2709 }