annotate src/http/ngx_http_variables.c @ 6133:af7eba90645d

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