annotate src/http/ngx_http_variables.c @ 9230:e14debe728b0 radix_with_skip

Closed the radix_with_skip branch. The radix_with_skip branch is an archive of an experiment did in 2008, and it is no longer relevant. It is now closed to avoid cluttering of the branches list. If needed, closed branches still can be seen with "hg branches --closed".
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 23 Mar 2024 04:30:45 +0300
parents 4fee4ebbfb0b
children d311b7f6a403
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
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 #include <ngx_config.h>
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_http.h>
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
10 #include <nginx.h>
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
13 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
14 ngx_http_variable_value_t *v, uintptr_t data);
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
15 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
16 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
17 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
18 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
19 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
20 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
21 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
22 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
23
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
24 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
25 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
26 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
27 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
28 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
29 ngx_http_variable_value_t *v, uintptr_t data);
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
30 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
31 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
32
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
33 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
34 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
35 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
36 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
37 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
38 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
39 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
40 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
41 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
42 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
43 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
44 ngx_http_variable_value_t *v, uintptr_t data);
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
45 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
46 ngx_http_variable_value_t *v, uintptr_t data);
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
47 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
48 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
49 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
50 ngx_http_variable_value_t *v, uintptr_t data);
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
51 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
52 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
53 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
54 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
55 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
56 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
57 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
58 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
59 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
60 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
61 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
62 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
63 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
64 ngx_http_variable_value_t *v, uintptr_t data);
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
65 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
66 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
67
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
68 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
69 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
70 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
71 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
72 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
73 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
74 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
75 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
76 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
77 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
78 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
79 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
80
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
81 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
82 ngx_http_variable_value_t *v, uintptr_t data);
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
83 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
84 ngx_http_variable_value_t *v, uintptr_t data);
2249
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
85 static ngx_int_t ngx_http_variable_pid(ngx_http_request_t *r,
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
86 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
87
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
88 /*
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
89 * TODO:
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
90 * 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
91 * REMOTE_HOST (null), REMOTE_IDENT (null),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
92 * SERVER_SOFTWARE
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
93 *
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
94 * 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
95 */
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
97 /*
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
98 * the $http_host, $http_user_agent, $http_referer, $http_via,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
99 * and $http_x_forwarded_for variables may be handled by generic
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
100 * ngx_http_variable_unknown_header_in(), but for perfomance reasons
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
101 * they are handled using dedicated entries
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
102 */
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
103
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
104 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
105
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
106 { 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
107 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
108
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
109 { 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
110 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
111
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
112 { 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
113 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
114
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 #if (NGX_HTTP_GZIP)
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
116 { 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
117 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
118 #endif
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119
1113
f1d7cf0f68e3 optimize $http_x_forwarded_for
Igor Sysoev <igor@sysoev.ru>
parents: 983
diff changeset
120 #if (NGX_HTTP_PROXY || NGX_HTTP_REALIP)
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
121 { ngx_string("http_x_forwarded_for"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
122 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
123 #endif
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
125 { ngx_string("http_cookie"), NULL, ngx_http_variable_headers,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
126 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
127
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
128 { ngx_string("content_length"), NULL, ngx_http_variable_header,
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
129 offsetof(ngx_http_request_t, headers_in.content_length), 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
130
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
131 { 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
132 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
133
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
134 { 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
135
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
136 { ngx_string("binary_remote_addr"), NULL,
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
137 ngx_http_variable_binary_remote_addr, 0, 0, 0 },
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
138
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
139 { 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
140
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
141 { 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
142
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
143 { 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
144
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
145 { 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
146
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
147 { 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
148 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
149
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
150 { ngx_string("scheme"), NULL, ngx_http_variable_scheme, 0, 0, 0 },
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
151
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
152 { 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
153 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
154
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
155 { ngx_string("uri"), NULL, ngx_http_variable_request,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
156 offsetof(ngx_http_request_t, uri),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
157 NGX_HTTP_VAR_NOCACHEABLE, 0 },
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
158
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
159 { 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
160 offsetof(ngx_http_request_t, uri),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
161 NGX_HTTP_VAR_NOCACHEABLE, 0 },
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
162
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
163 { ngx_string("request"), NULL, ngx_http_variable_request,
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
164 offsetof(ngx_http_request_t, request_line), 0, 0 },
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
165
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
166 { ngx_string("document_root"), NULL,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
167 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
168
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
169 { ngx_string("realpath_root"), NULL,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
170 ngx_http_variable_realpath_root, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
171
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
172 { 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
173 offsetof(ngx_http_request_t, args),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
174 NGX_HTTP_VAR_NOCACHEABLE, 0 },
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
176 { ngx_string("args"),
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
177 ngx_http_variable_request_set,
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
178 ngx_http_variable_request,
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
179 offsetof(ngx_http_request_t, args),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
180 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
181
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
182 { ngx_string("is_args"), NULL, ngx_http_variable_is_args,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
183 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
184
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
185 { ngx_string("request_filename"), NULL,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
186 ngx_http_variable_request_filename, 0,
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
187 NGX_HTTP_VAR_NOCACHEABLE, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
188
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
189 { 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
190
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
191 { ngx_string("request_method"), NULL,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
192 ngx_http_variable_request_method, 0, 0, 0 },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
193
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
194 { 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
195
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
196 { 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
197 0, 0, 0 },
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
198
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
199 { ngx_string("request_completion"), NULL,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
200 ngx_http_variable_request_completion,
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
201 0, 0, 0 },
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
202
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
203 { ngx_string("request_body_file"), NULL,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
204 ngx_http_variable_request_body_file,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
205 0, 0, 0 },
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
206
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
207 { ngx_string("sent_http_content_type"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
208 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
209
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
210 { ngx_string("sent_http_content_length"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
211 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
212
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
213 { ngx_string("sent_http_last_modified"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
214 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
215
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
216 { ngx_string("sent_http_connection"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
217 ngx_http_variable_sent_connection, 0, 0, 0 },
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
218
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
219 { ngx_string("sent_http_keep_alive"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
220 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
221
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
222 { ngx_string("sent_http_transfer_encoding"), NULL,
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
223 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
224
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
225 { 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
226 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
227
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
228 { ngx_string("limit_rate"), ngx_http_variable_request_set_size,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
229 ngx_http_variable_request,
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
230 offsetof(ngx_http_request_t, limit_rate),
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
231 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
232
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
233 { ngx_string("nginx_version"), NULL, ngx_http_variable_nginx_version,
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
234 0, 0, 0 },
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
235
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
236 { ngx_string("hostname"), NULL, ngx_http_variable_hostname,
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
237 0, 0, 0 },
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
238
2249
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
239 { ngx_string("pid"), NULL, ngx_http_variable_pid,
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
240 0, 0, 0 },
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
241
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
242 { ngx_null_string, NULL, NULL, 0, 0, 0 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 };
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
246 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
247 ngx_http_variable("");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
248 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
249 ngx_http_variable("1");
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
250
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
251
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 ngx_http_variable_t *
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
253 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
254 {
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
255 ngx_int_t rc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
256 ngx_uint_t i;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
257 ngx_hash_key_t *key;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
258 ngx_http_variable_t *v;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
259 ngx_http_core_main_conf_t *cmcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
260
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
261 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
262
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
263 key = cmcf->variables_keys->keys.elts;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
264 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
265 if (name->len != key[i].key.len
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
266 || 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
267 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
268 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
269 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
270
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
271 v = key[i].value;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
272
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
273 if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
274 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
275 "the duplicate \"%V\" variable", name);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
276 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
277 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
278
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
279 return v;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
280 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
281
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
282 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
283 if (v == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
284 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
285 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
286
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
287 v->name.len = name->len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
288 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
289 if (v->name.data == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
290 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
291 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
292
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
293 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
294
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
295 v->set_handler = NULL;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
296 v->get_handler = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
297 v->data = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
298 v->flags = flags;
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
299 v->index = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
300
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
301 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
302
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
303 if (rc == NGX_ERROR) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
304 return NULL;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
305 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
306
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
307 if (rc == NGX_BUSY) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
308 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
309 "conflicting variable name \"%V\"", name);
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
310 return NULL;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
311 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
312
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
313 return v;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
314 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
315
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
316
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
317 ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
318 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
319 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
320 ngx_uint_t i;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
321 ngx_http_variable_t *v;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
322 ngx_http_core_main_conf_t *cmcf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
323
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 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
325
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
326 v = cmcf->variables.elts;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
327
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
328 if (v == NULL) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
329 if (ngx_array_init(&cmcf->variables, cf->pool, 4,
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
330 sizeof(ngx_http_variable_t)) == NGX_ERROR)
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
331 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
332 return NGX_ERROR;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
333 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
334
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
335 } else {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
336 for (i = 0; i < cmcf->variables.nelts; i++) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
337 if (name->len != v[i].name.len
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
338 || 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
339 {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
340 continue;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
341 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
342
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
343 return i;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
344 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
347 v = ngx_array_push(&cmcf->variables);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
348 if (v == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
349 return NGX_ERROR;
499
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
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
352 v->name.len = name->len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
353 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
354 if (v->name.data == NULL) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
355 return NGX_ERROR;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
356 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
358 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
359
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
360 v->set_handler = NULL;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
361 v->get_handler = NULL;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
362 v->data = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
363 v->flags = 0;
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
364 v->index = cmcf->variables.nelts - 1;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
365
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
366 return cmcf->variables.nelts - 1;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
367 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
368
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370 ngx_http_variable_value_t *
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371 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
372 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
373 ngx_http_variable_t *v;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
374 ngx_http_core_main_conf_t *cmcf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
375
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 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
377
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
378 if (cmcf->variables.nelts <= index) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 "unknown variable index: %d", index);
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381 return NULL;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
384 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
385 return &r->variables[index];
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
386 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
388 v = cmcf->variables.elts;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
390 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
391 == NGX_OK)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
392 {
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
393 if (v[index].flags & NGX_HTTP_VAR_NOCACHEABLE) {
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
394 r->variables[index].no_cacheable = 1;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
396
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
397 return &r->variables[index];
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
400 r->variables[index].valid = 0;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
401 r->variables[index].not_found = 1;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
402
798
97e89a42711f NULL is short way
Igor Sysoev <igor@sysoev.ru>
parents: 797
diff changeset
403 return NULL;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
404 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
405
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
406
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
407 ngx_http_variable_value_t *
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
408 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
409 {
1150
1030996f617c style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1113
diff changeset
410 ngx_http_variable_value_t *v;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
411
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
412 v = &r->variables[index];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
413
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
414 if (v->valid) {
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
415 if (!v->no_cacheable) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
416 return v;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
417 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
418
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
419 v->valid = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
420 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
421 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
422
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
423 return ngx_http_get_indexed_variable(r, index);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
424 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
425
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
426
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
427 ngx_http_variable_value_t *
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
428 ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key,
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
429 ngx_uint_t nowarn)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
430 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
431 ngx_http_variable_t *v;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
432 ngx_http_variable_value_t *vv;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
433 ngx_http_core_main_conf_t *cmcf;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
434
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
435 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
436
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
437 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
438
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
439 if (v) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
440 if (v->flags & NGX_HTTP_VAR_INDEXED) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
441 return ngx_http_get_indexed_variable(r, v->index);
519
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
442
12234c998d83 nginx-0.1.34-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
443 } else {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
444
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
445 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
446
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
447 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
448 return vv;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
449 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
450
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
451 return NULL;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
452 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
453 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
454
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
455 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
456 if (vv == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
457 return NULL;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
458 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
459
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
460 if (ngx_strncmp(name->data, "http_", 5) == 0) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
462 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
463 == NGX_OK)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
464 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
465 return vv;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
466 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
467
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
468 return NULL;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
469 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
470
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
471 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
472
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
473 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
474 == NGX_OK)
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
475 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
476 return vv;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
477 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
478
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479 return NULL;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
481
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
482 if (ngx_strncmp(name->data, "upstream_http_", 10) == 0) {
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
483
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
484 if (ngx_http_upstream_header_variable(r, vv, (uintptr_t) name)
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
485 == NGX_OK)
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
486 {
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
487 return vv;
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
488 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
489
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
490 return NULL;
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
491 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
492
2307
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
493 if (ngx_strncmp(name->data, "cookie_", 7) == 0) {
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
494
2359
4fee4ebbfb0b $cookie_... variable did not for SSI and perl
Igor Sysoev <igor@sysoev.ru>
parents: 2333
diff changeset
495 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
496 return vv;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
497 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
498
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
499 return NULL;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
500 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
501
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
502 if (ngx_strncmp(name->data, "arg_", 4) == 0) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
503
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
504 if (ngx_http_variable_argument(r, vv, (uintptr_t) name) == NGX_OK) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
505 return vv;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
506 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
507
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
508 return NULL;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
509 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
510
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
511 vv->not_found = 1;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
512
635
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
513 if (nowarn == 0) {
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
514 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
515 "unknown \"%V\" variable", name);
18268abd340c nginx-0.3.39-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
516 }
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
517
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
518 return vv;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
519 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
520
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
521
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
522 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
523 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
524 uintptr_t data)
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_str_t *s;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
527
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
528 s = (ngx_str_t *) ((char *) r + data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
529
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
530 if (s->data) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
531 v->len = s->len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
532 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
533 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
534 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
535 v->data = s->data;
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 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
538 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
539 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
540
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
541 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
542 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
543
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
544
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
545 static void
1350
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
546 ngx_http_variable_request_set(ngx_http_request_t *r,
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
547 ngx_http_variable_value_t *v, uintptr_t data)
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
548 {
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
549 ngx_str_t *s;
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
550
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
551 s = (ngx_str_t *) ((char *) r + data);
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
552
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
553 s->len = v->len;
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
554 s->data = v->data;
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
555 }
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
556
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
557
8682f64fccb3 allow to set $args
Igor Sysoev <igor@sysoev.ru>
parents: 1329
diff changeset
558 static void
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
559 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
560 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
561 {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
562 ssize_t s, *sp;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
563 ngx_str_t val;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
564
1310
33d6c994a0b2 Sun Studio on sparc uses different bit order
Igor Sysoev <igor@sysoev.ru>
parents: 1191
diff changeset
565 val.len = v->len;
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
566 val.data = v->data;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
567
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
568 s = ngx_parse_size(&val);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
569
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
570 if (s == NGX_ERROR) {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
571 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
572 "invalid size \"%V\"", &val);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
573 return;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
574 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
575
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
576 sp = (ssize_t *) ((char *) r + data);
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
577
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
578 *sp = s;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
579
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
580 return;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
581 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
582
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
583
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
584 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
585 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
586 uintptr_t data)
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
587 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
588 ngx_table_elt_t *h;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
589
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
590 h = *(ngx_table_elt_t **) ((char *) r + data);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
591
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
592 if (h) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
593 v->len = h->value.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
594 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
595 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
596 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
597 v->data = h->value.data;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
598
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
599 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
600 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
601 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
602
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
603 return NGX_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
604 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
605
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
606
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
607 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
608 ngx_http_variable_headers(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
609 uintptr_t data)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
610 {
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
611 ssize_t len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
612 u_char *p;
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
613 ngx_uint_t i, n;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
614 ngx_array_t *a;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
615 ngx_table_elt_t **h;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
616
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
617 a = (ngx_array_t *) ((char *) r + data);
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
618
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
619 n = a->nelts;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
620
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
621 if (n == 0) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
622 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
623 return NGX_OK;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
624 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
625
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
626 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
627 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
628 v->not_found = 0;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
629
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
630 h = a->elts;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
631
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
632 if (n == 1) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
633 v->len = (*h)->value.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
634 v->data = (*h)->value.data;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
635
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
636 return NGX_OK;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
637 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
638
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
639 len = - (ssize_t) (sizeof("; ") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
640
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
641 for (i = 0; i < n; i++) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
642 len += h[i]->value.len + sizeof("; ") - 1;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
643 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
644
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
645 p = ngx_pnalloc(r->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
646 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
647 return NGX_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
648 }
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 v->len = len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
651 v->data = p;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
652
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
653 for (i = 0; /* void */ ; i++) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
654 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
655
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
656 if (i == n - 1) {
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
657 break;
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
658 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
659
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
660 *p++ = ';'; *p++ = ' ';
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
661 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
662
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
663 return NGX_OK;
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
664 }
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
665
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
666
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
667 static ngx_int_t
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
668 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
669 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
670 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
671 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
672 &r->headers_in.headers.part,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
673 sizeof("http_") - 1);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
674 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
675
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
676
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
677 static ngx_int_t
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
678 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
679 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
680 {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
681 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
682 &r->headers_out.headers.part,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
683 sizeof("sent_http_") - 1);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
684 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
685
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
686
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
687 ngx_int_t
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
688 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
689 ngx_list_part_t *part, size_t prefix)
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
690 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
691 u_char ch;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
692 ngx_uint_t i, n;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
693 ngx_table_elt_t *header;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
694
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
695 header = part->elts;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
696
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
697 for (i = 0; /* void */ ; i++) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
698
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
699 if (i >= part->nelts) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
700 if (part->next == NULL) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
701 break;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
702 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
703
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
704 part = part->next;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
705 header = part->elts;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
706 i = 0;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
707 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
708
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
709 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
710 ch = header[i].key.data[n];
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
711
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
712 if (ch >= 'A' && ch <= 'Z') {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
713 ch |= 0x20;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
714
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
715 } else if (ch == '-') {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
716 ch = '_';
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
717 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
718
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
719 if (var->data[n + prefix] != ch) {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
720 break;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
721 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
722 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
723
742
75d767d32624 nonexistent $sent_http_content has value of $sent_http_content_length or so
Igor Sysoev <igor@sysoev.ru>
parents: 732
diff changeset
724 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
725 v->len = header[i].value.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
726 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
727 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
728 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
729 v->data = header[i].value.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
730
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
731 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
732 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
733 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
734
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
735 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
736
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
737 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
738 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
739
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
740
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
741 static ngx_int_t
2307
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
742 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
743 uintptr_t data)
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
744 {
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
745 ngx_str_t *name = (ngx_str_t *) data;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
746
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
747 ngx_str_t cookie, s;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
748
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
749 s.len = name->len - (sizeof("cookie_") - 1);
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
750 s.data = name->data + sizeof("cookie_") - 1;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
751
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
752 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
753 == NGX_DECLINED)
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
754 {
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
755 v->not_found = 1;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
756 return NGX_OK;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
757 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
758
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
759 v->len = cookie.len;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
760 v->valid = 1;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
761 v->no_cacheable = 0;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
762 v->not_found = 0;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
763 v->data = cookie.data;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
764
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
765 return NGX_OK;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
766 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
767
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
768
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
769 static ngx_int_t
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
770 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
771 uintptr_t data)
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
772 {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
773 ngx_str_t *name = (ngx_str_t *) data;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
774
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
775 u_char *p, *arg;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
776 size_t len;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
777
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
778 if (r->args.len == 0) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
779 v->not_found = 1;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
780 return NGX_OK;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
781 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
782
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
783 len = name->len - 1 - (sizeof("arg_") - 1);
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
784 arg = name->data + sizeof("arg_") - 1;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
785
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
786 for (p = r->args.data; *p && *p != ' '; p++) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
787
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
788 /*
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
789 * although r->args.data is not null-terminated by itself,
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
790 * however, there is null in the end of request line
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
791 */
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
792
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
793 p = ngx_strcasestrn(p, (char *) arg, len);
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
794
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
795 if (p == NULL) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
796 v->not_found = 1;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
797 return NGX_OK;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
798 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
799
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
800 if ((p == r->args.data || *(p - 1) == '&') && *(p + len + 1) == '=') {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
801
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
802 v->data = p + len + 2;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
803
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
804 p = (u_char *) ngx_strchr(p, '&');
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
805
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
806 if (p == NULL) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
807 p = r->args.data + r->args.len;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
808 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
809
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
810 v->len = p - v->data;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
811 v->valid = 1;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
812 v->no_cacheable = 0;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
813 v->not_found = 0;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
814
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
815 return NGX_OK;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
816 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
817 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
818
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
819 v->not_found = 1;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
820
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
821 return NGX_OK;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
822 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
823
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
824
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
825 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
826 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
827 uintptr_t data)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
828 {
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
829 ngx_http_core_srv_conf_t *cscf;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
830
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
831 if (r->headers_in.server.len) {
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
832 v->len = r->headers_in.server.len;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
833 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
834
a6fe6bedb9e3 fix segfault when $host is used and
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
835 } else {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
836 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
837
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
838 v->len = cscf->server_name.len;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
839 v->data = cscf->server_name.data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
840 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
841
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
842 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
843 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
844 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
845
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
846 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
847 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
848
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
849
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
850 static ngx_int_t
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
851 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
852 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
853 {
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
854 struct sockaddr_in *sin;
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
855
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
856 /* AF_INET only */
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
857
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
858 sin = (struct sockaddr_in *) r->connection->sockaddr;
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
859
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
860 v->len = sizeof(in_addr_t);
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
861 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
862 v->no_cacheable = 0;
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
863 v->not_found = 0;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
864 v->data = (u_char *) &sin->sin_addr.s_addr;
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
865
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
866 return NGX_OK;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
867 }
982
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
868
664afe2c1480 $binary_remote_addr
Igor Sysoev <igor@sysoev.ru>
parents: 928
diff changeset
869
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
870 static ngx_int_t
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
871 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
872 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
873 {
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
874 v->len = r->connection->addr_text.len;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
875 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
876 v->no_cacheable = 0;
983
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
877 v->not_found = 0;
7a8ca436d611 ngx_http_variable_binary_remote_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 982
diff changeset
878 v->data = r->connection->addr_text.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
879
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
880 return NGX_OK;
499
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
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
884 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
885 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
886 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
887 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
888 ngx_uint_t port;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
889 struct sockaddr_in *sin;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
890
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
891 v->len = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
892 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
893 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
894 v->not_found = 0;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
895
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
896 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
897 if (v->data == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
898 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
899 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
900
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
901 /* AF_INET only */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
902
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
903 if (r->connection->sockaddr->sa_family == AF_INET) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
904 sin = (struct sockaddr_in *) r->connection->sockaddr;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
905
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
906 port = ntohs(sin->sin_port);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
907
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
908 if (port > 0 && port < 65536) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
909 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
910 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
911 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
912
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
913 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
914 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
915
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
916
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
917 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
918 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
919 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
920 {
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
921 ngx_str_t s;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
922
2197
74477ea8074f *) remove zero termination in ngx_inet_ntop() and ngx_sock_ntop()
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
923 s.data = ngx_pnalloc(r->pool, NGX_INET_ADDRSTRLEN);
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
924 if (s.data == NULL) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
925 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
926 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
927
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
928 if (ngx_http_server_addr(r, &s) != NGX_OK) {
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
929 return NGX_ERROR;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
930 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
931
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
932 v->len = s.len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
933 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
934 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
935 v->not_found = 0;
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1565
diff changeset
936 v->data = s.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
937
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
938 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
939 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
940
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
941
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
942 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
943 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
944 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
945 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
946 v->len = r->port_text->len - 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
947 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
948 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
949 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
950 v->data = r->port_text->data + 1;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
951
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
952 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
953 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
954
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
955
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
956 static ngx_int_t
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
957 ngx_http_variable_scheme(ngx_http_request_t *r,
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
958 ngx_http_variable_value_t *v, uintptr_t data)
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
959 {
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
960 #if (NGX_HTTP_SSL)
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
961
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
962 if (r->connection->ssl) {
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
963 v->len = sizeof("https") - 1;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
964 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
965 v->no_cacheable = 0;
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
966 v->not_found = 0;
732
5e42c1615f4d nginx-0.4.4-RELEASE
Igor Sysoev <igor@sysoev.ru>
parents: 731
diff changeset
967 v->data = (u_char *) "https";
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
968
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
969 return NGX_OK;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
970 }
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
971
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
972 #endif
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
973
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
974 v->len = sizeof("http") - 1;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
975 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
976 v->no_cacheable = 0;
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
977 v->not_found = 0;
732
5e42c1615f4d nginx-0.4.4-RELEASE
Igor Sysoev <igor@sysoev.ru>
parents: 731
diff changeset
978 v->data = (u_char *) "http";
731
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
979
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
980 return NGX_OK;
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
981 }
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
982
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
983
44161d685b8a $scheme variable
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
984 static ngx_int_t
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
985 ngx_http_variable_is_args(ngx_http_request_t *r,
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
986 ngx_http_variable_value_t *v, uintptr_t data)
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
987 {
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
988 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
989 v->no_cacheable = 0;
1351
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
990 v->not_found = 0;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
991
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
992 if (r->args.len == 0) {
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
993 v->len = 0;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
994 v->data = NULL;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
995 return NGX_OK;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
996 }
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
997
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
998 v->len = 1;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
999 v->data = (u_char *) "?";
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1000
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1001 return NGX_OK;
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1002 }
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1003
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1004
9ca095d36863 $is_args
Igor Sysoev <igor@sysoev.ru>
parents: 1350
diff changeset
1005 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1006 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
1007 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
1008 {
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1009 ngx_str_t path;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1010 ngx_http_core_loc_conf_t *clcf;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1011
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1012 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
1013
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1014 if (clcf->root_lengths == NULL) {
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1015 v->len = clcf->root.len;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1016 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1017 v->no_cacheable = 0;
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1018 v->not_found = 0;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1019 v->data = clcf->root.data;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1020
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1021 } else {
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1022 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
1023 clcf->root_values->elts)
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1024 == NULL)
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1025 {
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1026 return NGX_ERROR;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1027 }
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1028
1352
e958b3cab51a --sysconfdir=DIR
Igor Sysoev <igor@sysoev.ru>
parents: 1351
diff changeset
1029 if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0)
e958b3cab51a --sysconfdir=DIR
Igor Sysoev <igor@sysoev.ru>
parents: 1351
diff changeset
1030 == NGX_ERROR)
e958b3cab51a --sysconfdir=DIR
Igor Sysoev <igor@sysoev.ru>
parents: 1351
diff changeset
1031 {
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1032 return NGX_ERROR;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1033 }
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1034
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1035 v->len = path.len;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1036 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1037 v->no_cacheable = 0;
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1038 v->not_found = 0;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1039 v->data = path.data;
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1040 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1041
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1042 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1043 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1044
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1045
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1046 static ngx_int_t
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1047 ngx_http_variable_realpath_root(ngx_http_request_t *r,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1048 ngx_http_variable_value_t *v, uintptr_t data)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1049 {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1050 size_t len;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1051 ngx_str_t path;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1052 ngx_http_core_loc_conf_t *clcf;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1053 u_char real[NGX_MAX_PATH];
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1054
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1055 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1056
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1057 if (clcf->root_lengths == NULL) {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1058 path = clcf->root;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1059
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1060 } else {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1061 if (ngx_http_script_run(r, &path, clcf->root_lengths->elts, 1,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1062 clcf->root_values->elts)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1063 == NULL)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1064 {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1065 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1066 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1067
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1068 path.data[path.len - 1] = '\0';
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1069
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1070 if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1071 == NGX_ERROR)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1072 {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1073 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1074 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1075 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1076
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1077 if (ngx_realpath(path.data, real) == NULL) {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1078 ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1079 ngx_realpath_n " \"%s\" failed", path.data);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1080 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1081 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1082
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1083 len = ngx_strlen(real);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1084
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1085 v->data = ngx_pnalloc(r->pool, len);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1086 if (v->data == NULL) {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1087 return NGX_ERROR;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1088 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1089
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1090 v->len = len;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1091 v->valid = 1;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1092 v->no_cacheable = 0;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1093 v->not_found = 0;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1094
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1095 ngx_memcpy(v->data, real, len);
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1096
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1097 return NGX_OK;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1098 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1099
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1100
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2249
diff changeset
1101 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1102 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
1103 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
1104 {
773
c3ebeee31026 remove r->root_length
Igor Sysoev <igor@sysoev.ru>
parents: 763
diff changeset
1105 size_t root;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1106 ngx_str_t path;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1107
773
c3ebeee31026 remove r->root_length
Igor Sysoev <igor@sysoev.ru>
parents: 763
diff changeset
1108 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
1109 return NGX_ERROR;
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1110 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1111
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
1112 /* 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
1113
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1114 v->len = path.len - 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1115 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1116 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1117 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1118 v->data = path.data;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1119
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1120 return NGX_OK;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1121 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1122
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1123
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1124 static ngx_int_t
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1125 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
1126 ngx_http_variable_value_t *v, uintptr_t data)
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1127 {
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1128 ngx_http_core_srv_conf_t *cscf;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1129
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1130 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
1131
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1132 v->len = cscf->server_name.len;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1133 v->valid = 1;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1134 v->no_cacheable = 0;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1135 v->not_found = 0;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1136 v->data = cscf->server_name.data;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1137
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1138 return NGX_OK;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1139 }
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1140
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1141
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
1142 static ngx_int_t
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1143 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
1144 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
1145 {
647
95d7da23ea53 nginx-0.3.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1146 if (r->main->method_name.data) {
95d7da23ea53 nginx-0.3.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1147 v->len = r->main->method_name.len;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1148 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1149 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1150 v->not_found = 0;
647
95d7da23ea53 nginx-0.3.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
1151 v->data = r->main->method_name.data;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1152
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1153 } else {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1154 v->not_found = 1;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1155 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1156
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1157 return NGX_OK;
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1158 }
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1159
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
1160
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1161 static ngx_int_t
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1162 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
1163 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
1164 {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1165 ngx_int_t rc;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1166
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1167 rc = ngx_http_auth_basic_user(r);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1168
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1169 if (rc == NGX_DECLINED) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1170 v->not_found = 1;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1171 return NGX_OK;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1172 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1173
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1174 if (rc == NGX_ERROR) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1175 return NGX_ERROR;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1176 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 533
diff changeset
1177
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1178 v->len = r->headers_in.user.len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1179 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1180 v->no_cacheable = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1181 v->not_found = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1182 v->data = r->headers_in.user.data;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1183
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1184 return NGX_OK;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1185 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1186
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1187
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1188 static ngx_int_t
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1189 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
1190 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
1191 {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1192 off_t sent;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1193 u_char *p;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1194
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1195 sent = r->connection->sent - r->header_size;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1196
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1197 if (sent < 0) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1198 sent = 0;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1199 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1200
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1201 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
1202 if (p == NULL) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1203 return NGX_ERROR;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1204 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1205
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1206 v->len = ngx_sprintf(p, "%O", sent) - p;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1207 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1208 v->no_cacheable = 0;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1209 v->not_found = 0;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1210 v->data = p;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1211
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1212 return NGX_OK;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1213 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1214
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1215
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1216 static ngx_int_t
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1217 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
1218 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
1219 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1220 if (r->headers_out.content_type.len) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1221 v->len = r->headers_out.content_type.len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1222 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1223 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1224 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1225 v->data = r->headers_out.content_type.data;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1226
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1227 } else {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1228 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1229 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1230
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1231 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1232 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1233
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1234
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1235 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1236 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
1237 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
1238 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1239 u_char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1240
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1241 if (r->headers_out.content_length) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1242 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
1243 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1244 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1245 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1246 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
1247
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1248 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1249 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1250
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1251 if (r->headers_out.content_length_n >= 0) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1252 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
1253 if (p == NULL) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1254 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1255 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1256
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1257 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
1258 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1259 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1260 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1261 v->data = p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1262
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1263 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1264 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1265
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1266 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1267
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1268 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1269 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1270
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1271
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1272 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1273 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
1274 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
1275 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1276 u_char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1277
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1278 if (r->headers_out.last_modified) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1279 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
1280 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1281 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1282 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1283 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
1284
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1285 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1286 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1287
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1288 if (r->headers_out.last_modified_time >= 0) {
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1289 p = ngx_pnalloc(r->pool,
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1290 sizeof("Last-Modified: Mon, 28 Sep 1970 06:00:00 GMT") - 1);
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1291 if (p == NULL) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1292 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1293 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1294
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1295 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
1296 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1297 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1298 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1299 v->data = p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1300
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1301 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1302 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1303
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1304 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1305
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1306 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1307 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1308
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1309
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1310 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1311 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
1312 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
1313 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1314 size_t len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1315 char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1316
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1317 if (r->keepalive) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1318 len = sizeof("keep-alive") - 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1319 p = "keep-alive";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1320
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1321 } else {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1322 len = sizeof("close") - 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1323 p = "close";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1324 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1325
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1326 v->len = len;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1327 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1328 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1329 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1330 v->data = (u_char *) p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1331
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1332 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1333 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1334
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1335
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1336 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1337 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
1338 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
1339 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1340 u_char *p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1341 ngx_http_core_loc_conf_t *clcf;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1342
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1343 if (r->keepalive) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1344 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
1345
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1346 if (clcf->keepalive_header) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1347
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2011
diff changeset
1348 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
1349 if (p == NULL) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1350 return NGX_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1351 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1352
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1353 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
1354 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1355 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1356 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1357 v->data = p;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1358
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1359 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1360 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1361 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1362
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1363 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1364
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1365 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1366 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1367
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1368
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1369 static ngx_int_t
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1370 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
1371 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
1372 {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1373 if (r->chunked) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1374 v->len = sizeof("chunked") - 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1375 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1376 v->no_cacheable = 0;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1377 v->not_found = 0;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1378 v->data = (u_char *) "chunked";
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1379
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1380 } else {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1381 v->not_found = 1;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1382 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1383
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1384 return NGX_OK;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1385 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1386
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1387
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
1388 static ngx_int_t
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1389 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
1390 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
1391 {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1392 if (r->request_complete) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1393 v->len = 2;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1394 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1395 v->no_cacheable = 0;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1396 v->not_found = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1397 v->data = (u_char *) "OK";
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1398
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1399 return NGX_OK;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1400 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1401
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1402 v->len = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1403 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1404 v->no_cacheable = 0;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1405 v->not_found = 0;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1406 v->data = (u_char *) "";
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1407
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1408 return NGX_OK;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1409 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1410
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
1411
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1412 static ngx_int_t
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1413 ngx_http_variable_request_body_file(ngx_http_request_t *r,
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1414 ngx_http_variable_value_t *v, uintptr_t data)
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1415 {
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1416 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
1417 v->not_found = 1;
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1418
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1419 return NGX_OK;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1420 }
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1421
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1422 v->len = r->request_body->temp_file->file.name.len;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1423 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1424 v->no_cacheable = 0;
759
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1425 v->not_found = 0;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1426 v->data = r->request_body->temp_file->file.name.data;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1427
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1428 return NGX_OK;
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1429 }
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1430
1606be879985 $request_body_file
Igor Sysoev <igor@sysoev.ru>
parents: 742
diff changeset
1431
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1432 static ngx_int_t
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1433 ngx_http_variable_nginx_version(ngx_http_request_t *r,
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1434 ngx_http_variable_value_t *v, uintptr_t data)
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1435 {
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1436 v->len = sizeof(NGINX_VERSION) - 1;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1437 v->valid = 1;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1438 v->no_cacheable = 0;
1329
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1439 v->not_found = 0;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1440 v->data = (u_char *) NGINX_VERSION;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1441
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1442 return NGX_OK;
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1443 }
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1444
80e6f567574f $nginx_version
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1445
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1446 static ngx_int_t
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1447 ngx_http_variable_hostname(ngx_http_request_t *r,
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1448 ngx_http_variable_value_t *v, uintptr_t data)
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1449 {
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1450 v->len = ngx_cycle->hostname.len;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1451 v->valid = 1;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1452 v->no_cacheable = 0;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1453 v->not_found = 0;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1454 v->data = ngx_cycle->hostname.data;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1455
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1456 return NGX_OK;
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1457 }
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1458
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
1459
2249
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1460 static ngx_int_t
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1461 ngx_http_variable_pid(ngx_http_request_t *r,
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1462 ngx_http_variable_value_t *v, uintptr_t data)
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1463 {
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1464 u_char *p;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1465
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1466 p = ngx_pnalloc(r->pool, NGX_INT64_LEN);
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1467 if (p == NULL) {
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1468 return NGX_ERROR;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1469 }
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1470
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1471 v->len = ngx_sprintf(p, "%P", ngx_pid) - p;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1472 v->valid = 1;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1473 v->no_cacheable = 0;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1474 v->not_found = 0;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1475 v->data = p;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1476
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1477 return NGX_OK;
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1478 }
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1479
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
1480
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1481 ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1482 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
1483 {
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1484 ngx_int_t rc;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1485 ngx_http_variable_t *v;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1486 ngx_http_core_main_conf_t *cmcf;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1487
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1488 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
1489
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1490 cmcf->variables_keys = ngx_pcalloc(cf->temp_pool,
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1491 sizeof(ngx_hash_keys_arrays_t));
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1492 if (cmcf->variables_keys == NULL) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1493 return NGX_ERROR;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1494 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1495
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1496 cmcf->variables_keys->pool = cf->pool;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1497 cmcf->variables_keys->temp_pool = cf->pool;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1498
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1499 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
1500 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1501 {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1502 return NGX_ERROR;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1503 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1504
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1505 for (v = ngx_http_core_variables; v->name.len; v++) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1506 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
1507 NGX_HASH_READONLY_KEY);
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1508
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1509 if (rc == NGX_OK) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1510 continue;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1511 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1512
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1513 if (rc == NGX_BUSY) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1514 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
1515 "conflicting variable name \"%V\"", &v->name);
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1516 }
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1517
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1518 return NGX_ERROR;
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1519 }
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1520
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1521 return NGX_OK;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1522 }
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1523
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1524
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1525 ngx_int_t
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1526 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
1527 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1528 ngx_uint_t i, n;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1529 ngx_hash_key_t *key;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1530 ngx_hash_init_t hash;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1531 ngx_http_variable_t *v, *av;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1532 ngx_http_core_main_conf_t *cmcf;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1533
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1534 /* set the handlers for the indexed http variables */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1535
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1536 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
1537
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1538 v = cmcf->variables.elts;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1539 key = cmcf->variables_keys->keys.elts;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1540
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1541 for (i = 0; i < cmcf->variables.nelts; i++) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1542
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1543 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
1544
1191
0eb2dc4fdea8 fix segfault introduced in r1190
Igor Sysoev <igor@sysoev.ru>
parents: 1173
diff changeset
1545 av = key[n].value;
0eb2dc4fdea8 fix segfault introduced in r1190
Igor Sysoev <igor@sysoev.ru>
parents: 1173
diff changeset
1546
0eb2dc4fdea8 fix segfault introduced in r1190
Igor Sysoev <igor@sysoev.ru>
parents: 1173
diff changeset
1547 if (av->get_handler
0eb2dc4fdea8 fix segfault introduced in r1190
Igor Sysoev <igor@sysoev.ru>
parents: 1173
diff changeset
1548 && 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
1549 && 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
1550 == 0)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1551 {
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
1552 v[i].get_handler = av->get_handler;
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1553 v[i].data = av->data;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 519
diff changeset
1554
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1555 av->flags |= NGX_HTTP_VAR_INDEXED;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1556 v[i].flags = av->flags;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1557
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1558 av->index = i;
533
d6e48c08d718 nginx-0.1.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1559
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1560 goto next;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1561 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1562 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1563
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1564 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
1565 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
1566 v[i].data = (uintptr_t) &v[i].name;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1567
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1568 continue;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1569 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1570
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1571 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
1572 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
1573 v[i].data = (uintptr_t) &v[i].name;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1574
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1575 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1576 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1577
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1578 if (ngx_strncmp(v[i].name.data, "upstream_http_", 14) == 0) {
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1579 v[i].get_handler = ngx_http_upstream_header_variable;
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1580 v[i].data = (uintptr_t) &v[i].name;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
1581 v[i].flags = NGX_HTTP_VAR_NOCACHEABLE;
1162
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1582
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1583 continue;
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1584 }
f59d15404269 $upstream_http_... variables
Igor Sysoev <igor@sysoev.ru>
parents: 1150
diff changeset
1585
2307
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1586 if (ngx_strncmp(v[i].name.data, "cookie_", 7) == 0) {
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1587 v[i].get_handler = ngx_http_variable_cookie;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1588 v[i].data = (uintptr_t) &v[i].name;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1589
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1590 continue;
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1591 }
4b98aa04ee24 $cookie_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
1592
2137
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1593 if (ngx_strncmp(v[i].name.data, "arg_", 4) == 0) {
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1594 v[i].get_handler = ngx_http_variable_argument;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1595 v[i].data = (uintptr_t) &v[i].name;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1596
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1597 continue;
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1598 }
76d5af541412 $arg_... variable
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
1599
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1600 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
1601 "unknown \"%V\" variable", &v[i].name);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1602
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1603 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1604
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1605 next:
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1606 continue;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1607 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1608
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1609
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1610 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
1611 av = key[n].value;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1612
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1613 if (av->flags & NGX_HTTP_VAR_NOHASH) {
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1614 key[n].key.data = NULL;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
1615 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
1616 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
1617
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
1618
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1619 hash.hash = &cmcf->variables_hash;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1620 hash.key = ngx_hash_key;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1621 hash.max_size = cmcf->variables_hash_max_size;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1622 hash.bucket_size = cmcf->variables_hash_bucket_size;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1623 hash.name = "variables_hash";
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1624 hash.pool = cf->pool;
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1625 hash.temp_pool = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1626
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1627 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
1628 cmcf->variables_keys->keys.nelts)
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1629 != NGX_OK)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1630 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1631 return NGX_ERROR;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1632 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1633
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1634 cmcf->variables_keys = NULL;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1635
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1636 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1637 }
2333
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1638
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1639
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1640 void
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1641 ngx_http_variable_value_rbtree_insert(ngx_rbtree_node_t *temp,
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1642 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel)
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1643 {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1644 ngx_rbtree_node_t **p;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1645 ngx_http_variable_value_node_t *vvn, *vvt;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1646
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1647 for ( ;; ) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1648
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1649 vvn = (ngx_http_variable_value_node_t *) node;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1650 vvt = (ngx_http_variable_value_node_t *) temp;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1651
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1652 if (node->key != temp->key) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1653
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1654 p = (node->key < temp->key) ? &temp->left : &temp->right;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1655
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1656 } else if (vvn->len != vvt->len) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1657
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1658 p = (vvn->len < vvt->len) ? &temp->left : &temp->right;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1659
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1660 } else {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1661 p = (ngx_memcmp(vvn->value->data, vvt->value->data, vvn->len) < 0)
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1662 ? &temp->left : &temp->right;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1663 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1664
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1665 if (*p == sentinel) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1666 break;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1667 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1668
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1669 temp = *p;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1670 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1671
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1672 *p = node;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1673 node->parent = temp;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1674 node->left = sentinel;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1675 node->right = sentinel;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1676 ngx_rbt_red(node);
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1677 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1678
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1679
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1680 ngx_http_variable_value_t *
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1681 ngx_http_variable_value_lookup(ngx_rbtree_t *rbtree, ngx_str_t *val,
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1682 uint32_t hash)
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1683 {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1684 ngx_int_t rc;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1685 ngx_rbtree_node_t *node, *sentinel;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1686 ngx_http_variable_value_node_t *vvn;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1687
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1688 node = rbtree->root;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1689 sentinel = rbtree->sentinel;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1690
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1691 while (node != sentinel) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1692
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1693 vvn = (ngx_http_variable_value_node_t *) node;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1694
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1695 if (hash != node->key) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1696 node = (hash < node->key) ? node->left : node->right;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1697 continue;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1698 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1699
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1700 if (val->len != vvn->len) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1701 node = (val->len < vvn->len) ? node->left : node->right;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1702 continue;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1703 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1704
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1705 rc = ngx_memcmp(val->data, vvn->value->data, val->len);
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1706
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1707 if (rc < 0) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1708 node = node->left;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1709 continue;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1710 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1711
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1712 if (rc > 0) {
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1713 node = node->right;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1714 continue;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1715 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1716
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1717 return vvn->value;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1718 }
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1719
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1720 return NULL;
f267d23868fc variable value rbtree support
Igor Sysoev <igor@sysoev.ru>
parents: 2307
diff changeset
1721 }