annotate src/http/ngx_http_variables.c @ 4957:7556a7acb14f stable-1.2

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