annotate src/stream/ngx_stream_variables.c @ 6694:ea9dfe2f62e7

Stream: preread phase. In this phase, head of a stream is read and analysed before proceeding to the content phase. Amount of data read is controlled by the module implementing the phase, but not more than defined by the "preread_buffer_size" directive. The time spent on processing preread is controlled by the "preread_timeout" directive. The typical preread phase module will parse the beginning of a stream and set variable that may be used by the content phase, for example to make routing decision.
author Vladimir Homutov <vl@nginx.com>
date Thu, 15 Sep 2016 14:56:02 +0300
parents b9f78a4e3597
children 8cd97c14b0e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 /*
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 * Copyright (C) Nginx, Inc.
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5 */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 #include <ngx_config.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9 #include <ngx_core.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10 #include <ngx_stream.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11 #include <nginx.h>
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
14 static ngx_int_t ngx_stream_variable_binary_remote_addr(
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
15 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
16 static ngx_int_t ngx_stream_variable_remote_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
17 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
18 static ngx_int_t ngx_stream_variable_remote_port(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
19 ngx_stream_variable_value_t *v, uintptr_t data);
6681
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
20 static ngx_int_t ngx_stream_variable_proxy_protocol_addr(
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
21 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data);
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
22 static ngx_int_t ngx_stream_variable_proxy_protocol_port(
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
23 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data);
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
24 static ngx_int_t ngx_stream_variable_server_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
25 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
26 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
27 ngx_stream_variable_value_t *v, uintptr_t data);
6668
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
28 static ngx_int_t ngx_stream_variable_bytes(ngx_stream_session_t *s,
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
29 ngx_stream_variable_value_t *v, uintptr_t data);
6669
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
30 static ngx_int_t ngx_stream_variable_session_time(ngx_stream_session_t *s,
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
31 ngx_stream_variable_value_t *v, uintptr_t data);
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
32 static ngx_int_t ngx_stream_variable_status(ngx_stream_session_t *s,
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
33 ngx_stream_variable_value_t *v, uintptr_t data);
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
34 static ngx_int_t ngx_stream_variable_connection(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
35 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
36
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
37 static ngx_int_t ngx_stream_variable_nginx_version(ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38 ngx_stream_variable_value_t *v, uintptr_t data);
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
39 static ngx_int_t ngx_stream_variable_hostname(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
40 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
41 static ngx_int_t ngx_stream_variable_pid(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
42 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
43 static ngx_int_t ngx_stream_variable_msec(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
44 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
45 static ngx_int_t ngx_stream_variable_time_iso8601(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
46 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
47 static ngx_int_t ngx_stream_variable_time_local(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
48 ngx_stream_variable_value_t *v, uintptr_t data);
6670
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
49 static ngx_int_t ngx_stream_variable_protocol(ngx_stream_session_t *s,
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
50 ngx_stream_variable_value_t *v, uintptr_t data);
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53 static ngx_stream_variable_t ngx_stream_core_variables[] = {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
55 { ngx_string("binary_remote_addr"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
56 ngx_stream_variable_binary_remote_addr, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
57
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
58 { ngx_string("remote_addr"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
59 ngx_stream_variable_remote_addr, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
60
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
61 { ngx_string("remote_port"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
62 ngx_stream_variable_remote_port, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
63
6681
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
64 { ngx_string("proxy_protocol_addr"), NULL,
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
65 ngx_stream_variable_proxy_protocol_addr, 0, 0, 0 },
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
66
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
67 { ngx_string("proxy_protocol_port"), NULL,
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
68 ngx_stream_variable_proxy_protocol_port, 0, 0, 0 },
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
69
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
70 { ngx_string("server_addr"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
71 ngx_stream_variable_server_addr, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
72
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
73 { ngx_string("server_port"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
74 ngx_stream_variable_server_port, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
75
6668
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
76 { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes,
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
77 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
78
6668
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
79 { ngx_string("bytes_received"), NULL, ngx_stream_variable_bytes,
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
80 1, 0, 0 },
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
81
6669
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
82 { ngx_string("session_time"), NULL, ngx_stream_variable_session_time,
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
83 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
84
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
85 { ngx_string("status"), NULL, ngx_stream_variable_status,
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
86 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
87
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
88 { ngx_string("connection"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
89 ngx_stream_variable_connection, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
90
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91 { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92 0, 0, 0 },
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
94 { ngx_string("hostname"), NULL, ngx_stream_variable_hostname,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
95 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
96
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
97 { ngx_string("pid"), NULL, ngx_stream_variable_pid,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
98 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
99
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
100 { ngx_string("msec"), NULL, ngx_stream_variable_msec,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
101 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
102
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
103 { ngx_string("time_iso8601"), NULL, ngx_stream_variable_time_iso8601,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
104 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
105
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
106 { ngx_string("time_local"), NULL, ngx_stream_variable_time_local,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
107 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
108
6670
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
109 { ngx_string("protocol"), NULL,
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
110 ngx_stream_variable_protocol, 0, 0, 0 },
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
111
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112 { ngx_null_string, NULL, NULL, 0, 0, 0 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113 };
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
115
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
116 ngx_stream_variable_value_t ngx_stream_variable_null_value =
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
117 ngx_stream_variable("");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
118 ngx_stream_variable_value_t ngx_stream_variable_true_value =
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 ngx_stream_variable("1");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
120
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
121
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
122 ngx_stream_variable_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
123 ngx_stream_add_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125 ngx_int_t rc;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
126 ngx_uint_t i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127 ngx_hash_key_t *key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 if (name->len == 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133 "invalid variable name \"$\"");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139 key = cmcf->variables_keys->keys.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140 for (i = 0; i < cmcf->variables_keys->keys.nelts; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 if (name->len != key[i].key.len
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 || ngx_strncasecmp(name->data, key[i].key.data, name->len) != 0)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147 v = key[i].value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
148
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
149 if (!(v->flags & NGX_STREAM_VAR_CHANGEABLE)) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 "the duplicate \"%V\" variable", name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
153 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
154
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 return v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158 v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163 v->name.len = name->len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 v->name.data = ngx_pnalloc(cf->pool, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 if (v->name.data == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 ngx_strlow(v->name.data, name->data, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171 v->set_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172 v->get_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
173 v->data = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 v->flags = flags;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175 v->index = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177 rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v, 0);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
179 if (rc == NGX_ERROR) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
180 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 if (rc == NGX_BUSY) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 "conflicting variable name \"%V\"", name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189 return v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 ngx_stream_get_variable_index(ngx_conf_t *cf, ngx_str_t *name)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196 ngx_uint_t i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200 if (name->len == 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202 "invalid variable name \"$\"");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
206 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 v = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 if (ngx_array_init(&cmcf->variables, cf->pool, 4,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212 sizeof(ngx_stream_variable_t))
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213 != NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219 for (i = 0; i < cmcf->variables.nelts; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 if (name->len != v[i].name.len
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 return i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230 v = ngx_array_push(&cmcf->variables);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
231 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
232 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
233 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235 v->name.len = name->len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236 v->name.data = ngx_pnalloc(cf->pool, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 if (v->name.data == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
239 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241 ngx_strlow(v->name.data, name->data, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
242
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
243 v->set_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
244 v->get_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
245 v->data = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
246 v->flags = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
247 v->index = cmcf->variables.nelts - 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
248
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249 return v->index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
250 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
251
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253 ngx_stream_variable_value_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254 ngx_stream_get_indexed_variable(ngx_stream_session_t *s, ngx_uint_t index)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
256 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
257 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
260
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
261 if (cmcf->variables.nelts <= index) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
262 ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 "unknown variable index: %ui", index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
264 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
266
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
267 if (s->variables[index].not_found || s->variables[index].valid) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
268 return &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
269 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
270
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
271 v = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
272
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
273 if (v[index].get_handler(s, &s->variables[index], v[index].data)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
274 == NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
275 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
276 if (v[index].flags & NGX_STREAM_VAR_NOCACHEABLE) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277 s->variables[index].no_cacheable = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
278 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
279
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
280 return &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
281 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
282
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
283 s->variables[index].valid = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
284 s->variables[index].not_found = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
285
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
286 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
287 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
288
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
289
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
290 ngx_stream_variable_value_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
291 ngx_stream_get_flushed_variable(ngx_stream_session_t *s, ngx_uint_t index)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
292 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
293 ngx_stream_variable_value_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
294
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
295 v = &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
296
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
297 if (v->valid || v->not_found) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
298 if (!v->no_cacheable) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
299 return v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
300 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
301
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
302 v->valid = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
303 v->not_found = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
304 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
305
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
306 return ngx_stream_get_indexed_variable(s, index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
307 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
308
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
309
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
310 ngx_stream_variable_value_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
311 ngx_stream_get_variable(ngx_stream_session_t *s, ngx_str_t *name,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
312 ngx_uint_t key)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
313 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
314 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
315 ngx_stream_variable_value_t *vv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
316 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
317
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
318 cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
319
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
320 v = ngx_hash_find(&cmcf->variables_hash, key, name->data, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
321
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
322 if (v) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
323 if (v->flags & NGX_STREAM_VAR_INDEXED) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
324 return ngx_stream_get_flushed_variable(s, v->index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
325
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
326 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
327
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
328 vv = ngx_palloc(s->connection->pool,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
329 sizeof(ngx_stream_variable_value_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
330
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
331 if (vv && v->get_handler(s, vv, v->data) == NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
332 return vv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
333 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
334
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
335 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
336 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
337 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
338
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
339 vv = ngx_palloc(s->connection->pool, sizeof(ngx_stream_variable_value_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
340 if (vv == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
341 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
342 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
343
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
344 vv->not_found = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
345
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
346 return vv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
347 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
348
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
349
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
350 static ngx_int_t
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
351 ngx_stream_variable_binary_remote_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
352 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
353 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
354 struct sockaddr_in *sin;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
355 #if (NGX_HAVE_INET6)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
356 struct sockaddr_in6 *sin6;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
357 #endif
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
358
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
359 switch (s->connection->sockaddr->sa_family) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
360
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
361 #if (NGX_HAVE_INET6)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
362 case AF_INET6:
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
363 sin6 = (struct sockaddr_in6 *) s->connection->sockaddr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
364
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
365 v->len = sizeof(struct in6_addr);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
366 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
367 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
368 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
369 v->data = sin6->sin6_addr.s6_addr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
370
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
371 break;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
372 #endif
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
373
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
374 default: /* AF_INET */
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
375 sin = (struct sockaddr_in *) s->connection->sockaddr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
376
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
377 v->len = sizeof(in_addr_t);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
378 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
379 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
380 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
381 v->data = (u_char *) &sin->sin_addr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
382
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
383 break;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
384 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
385
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
386 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
387 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
388
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
389
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
390 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
391 ngx_stream_variable_remote_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
392 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
393 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
394 v->len = s->connection->addr_text.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
395 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
396 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
397 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
398 v->data = s->connection->addr_text.data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
399
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
400 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
401 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
402
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
403
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
404 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
405 ngx_stream_variable_remote_port(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
406 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
407 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
408 ngx_uint_t port;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
409
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
410 v->len = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
411 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
412 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
413 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
414
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
415 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
416 if (v->data == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
417 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
418 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
419
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
420 port = ngx_inet_get_port(s->connection->sockaddr);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
421
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
422 if (port > 0 && port < 65536) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
423 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
424 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
425
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
426 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
427 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
428
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
429
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
430 static ngx_int_t
6681
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
431 ngx_stream_variable_proxy_protocol_addr(ngx_stream_session_t *s,
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
432 ngx_stream_variable_value_t *v, uintptr_t data)
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
433 {
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
434 v->len = s->connection->proxy_protocol_addr.len;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
435 v->valid = 1;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
436 v->no_cacheable = 0;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
437 v->not_found = 0;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
438 v->data = s->connection->proxy_protocol_addr.data;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
439
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
440 return NGX_OK;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
441 }
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
442
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
443
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
444 static ngx_int_t
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
445 ngx_stream_variable_proxy_protocol_port(ngx_stream_session_t *s,
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
446 ngx_stream_variable_value_t *v, uintptr_t data)
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
447 {
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
448 ngx_uint_t port;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
449
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
450 v->len = 0;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
451 v->valid = 1;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
452 v->no_cacheable = 0;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
453 v->not_found = 0;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
454
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
455 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1);
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
456 if (v->data == NULL) {
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
457 return NGX_ERROR;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
458 }
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
459
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
460 port = s->connection->proxy_protocol_port;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
461
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
462 if (port > 0 && port < 65536) {
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
463 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
464 }
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
465
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
466 return NGX_OK;
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
467 }
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
468
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
469
b9f78a4e3597 Stream: $proxy_protocol_addr and $proxy_protocol_port.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6674
diff changeset
470 static ngx_int_t
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
471 ngx_stream_variable_server_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
472 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
473 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
474 ngx_str_t str;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
475 u_char addr[NGX_SOCKADDR_STRLEN];
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
476
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
477 str.len = NGX_SOCKADDR_STRLEN;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
478 str.data = addr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
479
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
480 if (ngx_connection_local_sockaddr(s->connection, &str, 0) != NGX_OK) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
481 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
482 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
483
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
484 str.data = ngx_pnalloc(s->connection->pool, str.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
485 if (str.data == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
486 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
487 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
488
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
489 ngx_memcpy(str.data, addr, str.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
490
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
491 v->len = str.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
492 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
493 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
494 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
495 v->data = str.data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
496
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
497 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
498 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
499
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
500
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
501 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
502 ngx_stream_variable_server_port(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
503 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
504 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
505 ngx_uint_t port;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
506
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
507 v->len = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
508 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
509 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
510 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
511
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
512 if (ngx_connection_local_sockaddr(s->connection, NULL, 0) != NGX_OK) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
513 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
514 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
515
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
516 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
517 if (v->data == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
518 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
519 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
520
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
521 port = ngx_inet_get_port(s->connection->local_sockaddr);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
522
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
523 if (port > 0 && port < 65536) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
524 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
525 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
526
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
527 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
528 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
529
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
530
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
531 static ngx_int_t
6668
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
532 ngx_stream_variable_bytes(ngx_stream_session_t *s,
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
533 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
534 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
535 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
536
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
537 p = ngx_pnalloc(s->connection->pool, NGX_OFF_T_LEN);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
538 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
539 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
540 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
541
6668
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
542 if (data == 1) {
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
543 v->len = ngx_sprintf(p, "%O", s->received) - p;
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
544
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
545 } else {
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
546 v->len = ngx_sprintf(p, "%O", s->connection->sent) - p;
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
547 }
5e2821c2de46 Stream: the $bytes_received variable.
Vladimir Homutov <vl@nginx.com>
parents: 6608
diff changeset
548
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
549 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
550 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
551 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
552 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
553
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
554 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
555 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
556
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
557
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
558 static ngx_int_t
6669
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
559 ngx_stream_variable_session_time(ngx_stream_session_t *s,
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
560 ngx_stream_variable_value_t *v, uintptr_t data)
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
561 {
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
562 u_char *p;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
563 ngx_time_t *tp;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
564 ngx_msec_int_t ms;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
565
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
566 p = ngx_pnalloc(s->connection->pool, NGX_TIME_T_LEN + 4);
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
567 if (p == NULL) {
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
568 return NGX_ERROR;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
569 }
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
570
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
571 tp = ngx_timeofday();
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
572
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
573 ms = (ngx_msec_int_t)
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
574 ((tp->sec - s->start_sec) * 1000 + (tp->msec - s->start_msec));
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
575 ms = ngx_max(ms, 0);
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
576
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
577 v->len = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000) - p;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
578 v->valid = 1;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
579 v->no_cacheable = 0;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
580 v->not_found = 0;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
581 v->data = p;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
582
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
583 return NGX_OK;
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
584 }
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
585
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
586
164a0824ce20 Stream: the $session_time variable.
Vladimir Homutov <vl@nginx.com>
parents: 6668
diff changeset
587 static ngx_int_t
6674
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
588 ngx_stream_variable_status(ngx_stream_session_t *s,
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
589 ngx_stream_variable_value_t *v, uintptr_t data)
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
590 {
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
591 v->data = ngx_pnalloc(s->connection->pool, NGX_INT_T_LEN);
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
592 if (v->data == NULL) {
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
593 return NGX_ERROR;
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
594 }
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
595
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
596 v->len = ngx_sprintf(v->data, "%03ui", s->status) - v->data;
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
597 v->valid = 1;
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
598 v->no_cacheable = 0;
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
599 v->not_found = 0;
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
600
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
601 return NGX_OK;
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
602 }
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
603
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
604
38143d1abdec Stream: the $status variable.
Roman Arutyunyan <arut@nginx.com>
parents: 6670
diff changeset
605 static ngx_int_t
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
606 ngx_stream_variable_connection(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
607 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
608 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
609 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
610
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
611 p = ngx_pnalloc(s->connection->pool, NGX_ATOMIC_T_LEN);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
612 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
613 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
614 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
615
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
616 v->len = ngx_sprintf(p, "%uA", s->connection->number) - p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
617 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
618 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
619 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
620 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
621
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
622 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
623 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
624
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
625
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
626 static ngx_int_t
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
627 ngx_stream_variable_nginx_version(ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
628 ngx_stream_variable_value_t *v, uintptr_t data)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
629 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
630 v->len = sizeof(NGINX_VERSION) - 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
631 v->valid = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
632 v->no_cacheable = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
633 v->not_found = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
634 v->data = (u_char *) NGINX_VERSION;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
635
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
636 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
637 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
638
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
639
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
640 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
641 ngx_stream_variable_hostname(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
642 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
643 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
644 v->len = ngx_cycle->hostname.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
645 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
646 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
647 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
648 v->data = ngx_cycle->hostname.data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
649
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
650 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
651 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
652
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
653
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
654 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
655 ngx_stream_variable_pid(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
656 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
657 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
658 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
659
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
660 p = ngx_pnalloc(s->connection->pool, NGX_INT64_LEN);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
661 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
662 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
663 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
664
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
665 v->len = ngx_sprintf(p, "%P", ngx_pid) - p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
666 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
667 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
668 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
669 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
670
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
671 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
672 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
673
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
674
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
675 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
676 ngx_stream_variable_msec(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
677 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
678 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
679 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
680 ngx_time_t *tp;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
681
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
682 p = ngx_pnalloc(s->connection->pool, NGX_TIME_T_LEN + 4);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
683 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
684 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
685 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
686
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
687 tp = ngx_timeofday();
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
688
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
689 v->len = ngx_sprintf(p, "%T.%03M", tp->sec, tp->msec) - p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
690 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
691 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
692 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
693 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
694
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
695 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
696 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
697
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
698
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
699 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
700 ngx_stream_variable_time_iso8601(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
701 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
702 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
703 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
704
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
705 p = ngx_pnalloc(s->connection->pool, ngx_cached_http_log_iso8601.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
706 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
707 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
708 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
709
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
710 ngx_memcpy(p, ngx_cached_http_log_iso8601.data,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
711 ngx_cached_http_log_iso8601.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
712
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
713 v->len = ngx_cached_http_log_iso8601.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
714 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
715 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
716 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
717 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
718
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
719 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
720 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
721
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
722
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
723 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
724 ngx_stream_variable_time_local(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
725 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
726 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
727 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
728
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
729 p = ngx_pnalloc(s->connection->pool, ngx_cached_http_log_time.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
730 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
731 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
732 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
733
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
734 ngx_memcpy(p, ngx_cached_http_log_time.data, ngx_cached_http_log_time.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
735
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
736 v->len = ngx_cached_http_log_time.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
737 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
738 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
739 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
740 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
741
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
742 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
743 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
744
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
745
6670
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
746 static ngx_int_t
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
747 ngx_stream_variable_protocol(ngx_stream_session_t *s,
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
748 ngx_stream_variable_value_t *v, uintptr_t data)
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
749 {
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
750 v->len = 3;
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
751 v->valid = 1;
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
752 v->no_cacheable = 0;
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
753 v->not_found = 0;
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
754 v->data = (u_char *) (s->connection->type == SOCK_DGRAM ? "UDP" : "TCP");
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
755
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
756 return NGX_OK;
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
757 }
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
758
c6372a40c2a7 Stream: the $protocol variable.
Vladimir Homutov <vl@nginx.com>
parents: 6669
diff changeset
759
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
760 void *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
761 ngx_stream_map_find(ngx_stream_session_t *s, ngx_stream_map_t *map,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
762 ngx_str_t *match)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
763 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
764 void *value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
765 u_char *low;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
766 size_t len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
767 ngx_uint_t key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
768
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
769 len = match->len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
770
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
771 if (len) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
772 low = ngx_pnalloc(s->connection->pool, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
773 if (low == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
774 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
775 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
776
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
777 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
778 low = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
779 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
780
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
781 key = ngx_hash_strlow(low, match->data, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
782
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
783 value = ngx_hash_find_combined(&map->hash, key, low, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
784 if (value) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
785 return value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
786 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
787
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
788 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
789
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
790 if (len && map->nregex) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
791 ngx_int_t n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
792 ngx_uint_t i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
793 ngx_stream_map_regex_t *reg;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
794
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
795 reg = map->regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
796
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
797 for (i = 0; i < map->nregex; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
798
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
799 n = ngx_stream_regex_exec(s, reg[i].regex, match);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
800
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
801 if (n == NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
802 return reg[i].value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
803 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
804
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
805 if (n == NGX_DECLINED) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
806 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
807 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
808
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
809 /* NGX_ERROR */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
810
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
811 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
812 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
813 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
814
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
815 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
816
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
817 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
818 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
819
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
820
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
821 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
822
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
823 static ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
824 ngx_stream_variable_not_found(ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
825 ngx_stream_variable_value_t *v, uintptr_t data)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
826 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
827 v->not_found = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
828 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
829 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
830
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
831
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
832 ngx_stream_regex_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
833 ngx_stream_regex_compile(ngx_conf_t *cf, ngx_regex_compile_t *rc)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
834 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
835 u_char *p;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
836 size_t size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
837 ngx_str_t name;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
838 ngx_uint_t i, n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
839 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
840 ngx_stream_regex_t *re;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
841 ngx_stream_regex_variable_t *rv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
842 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
843
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
844 rc->pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
845
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
846 if (ngx_regex_compile(rc) != NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
847 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc->err);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
848 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
849 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
850
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
851 re = ngx_pcalloc(cf->pool, sizeof(ngx_stream_regex_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
852 if (re == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
853 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
854 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
855
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
856 re->regex = rc->regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
857 re->ncaptures = rc->captures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
858 re->name = rc->pattern;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
859
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
860 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
861 cmcf->ncaptures = ngx_max(cmcf->ncaptures, re->ncaptures);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
862
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
863 n = (ngx_uint_t) rc->named_captures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
864
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
865 if (n == 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
866 return re;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
867 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
868
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
869 rv = ngx_palloc(rc->pool, n * sizeof(ngx_stream_regex_variable_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
870 if (rv == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
871 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
872 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
873
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
874 re->variables = rv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
875 re->nvariables = n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
876
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
877 size = rc->name_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
878 p = rc->names;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
879
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
880 for (i = 0; i < n; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
881 rv[i].capture = 2 * ((p[0] << 8) + p[1]);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
882
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
883 name.data = &p[2];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
884 name.len = ngx_strlen(name.data);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
885
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
886 v = ngx_stream_add_variable(cf, &name, NGX_STREAM_VAR_CHANGEABLE);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
887 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
888 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
889 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
890
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
891 rv[i].index = ngx_stream_get_variable_index(cf, &name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
892 if (rv[i].index == NGX_ERROR) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
893 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
894 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
895
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
896 v->get_handler = ngx_stream_variable_not_found;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
897
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
898 p += size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
899 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
900
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
901 return re;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
902 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
903
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
904
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
905 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
906 ngx_stream_regex_exec(ngx_stream_session_t *s, ngx_stream_regex_t *re,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
907 ngx_str_t *str)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
908 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
909 ngx_int_t rc, index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
910 ngx_uint_t i, n, len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
911 ngx_stream_variable_value_t *vv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
912 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
913
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
914 cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
915
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
916 if (re->ncaptures) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
917 len = cmcf->ncaptures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
918
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
919 if (s->captures == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
920 s->captures = ngx_palloc(s->connection->pool, len * sizeof(int));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
921 if (s->captures == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
922 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
923 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
924 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
925
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
926 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
927 len = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
928 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
929
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
930 rc = ngx_regex_exec(re->regex, str, s->captures, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
931
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
932 if (rc == NGX_REGEX_NO_MATCHED) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
933 return NGX_DECLINED;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
934 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
935
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
936 if (rc < 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
937 ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
938 ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
939 rc, str, &re->name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
940 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
941 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
942
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
943 for (i = 0; i < re->nvariables; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
944
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
945 n = re->variables[i].capture;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
946 index = re->variables[i].index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
947 vv = &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
948
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
949 vv->len = s->captures[n + 1] - s->captures[n];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
950 vv->valid = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
951 vv->no_cacheable = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
952 vv->not_found = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
953 vv->data = &str->data[s->captures[n]];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
954
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
955 #if (NGX_DEBUG)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
956 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
957 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
958
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
959 v = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
960
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
961 ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
962 "stream regex set $%V to \"%v\"", &v[index].name, vv);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
963 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
964 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
965 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
966
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
967 s->ncaptures = rc * 2;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
968 s->captures_data = str->data;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
969
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
970 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
971 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
972
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
973 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
974
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
975
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
976 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
977 ngx_stream_variables_add_core_vars(ngx_conf_t *cf)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
978 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
979 ngx_int_t rc;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
980 ngx_stream_variable_t *cv, *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
981 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
982
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
983 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
984
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
985 cmcf->variables_keys = ngx_pcalloc(cf->temp_pool,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
986 sizeof(ngx_hash_keys_arrays_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
987 if (cmcf->variables_keys == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
988 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
989 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
990
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
991 cmcf->variables_keys->pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
992 cmcf->variables_keys->temp_pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
993
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
994 if (ngx_hash_keys_array_init(cmcf->variables_keys, NGX_HASH_SMALL)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
995 != NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
996 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
997 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
998 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
999
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1000 for (cv = ngx_stream_core_variables; cv->name.len; cv++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1001 v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1002 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1003 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1004 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1005
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1006 *v = *cv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1007
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1008 rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1009 NGX_HASH_READONLY_KEY);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1010
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1011 if (rc == NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1012 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1013 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1014
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1015 if (rc == NGX_BUSY) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1016 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1017 "conflicting variable name \"%V\"", &v->name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1018 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1019
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1020 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1021 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1022
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1023 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1024 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1025
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1026
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1027 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1028 ngx_stream_variables_init_vars(ngx_conf_t *cf)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1029 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1030 ngx_uint_t i, n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1031 ngx_hash_key_t *key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1032 ngx_hash_init_t hash;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1033 ngx_stream_variable_t *v, *av;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1034 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1035
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1036 /* set the handlers for the indexed stream variables */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1037
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1038 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1039
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1040 v = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1041 key = cmcf->variables_keys->keys.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1042
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1043 for (i = 0; i < cmcf->variables.nelts; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1044
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1045 for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1046
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1047 av = key[n].value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1048
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1049 if (v[i].name.len == key[n].key.len
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1050 && ngx_strncmp(v[i].name.data, key[n].key.data, v[i].name.len)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1051 == 0)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1052 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1053 v[i].get_handler = av->get_handler;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1054 v[i].data = av->data;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1055
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1056 av->flags |= NGX_STREAM_VAR_INDEXED;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1057 v[i].flags = av->flags;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1058
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1059 av->index = i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1060
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1061 if (av->get_handler == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1062 break;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1063 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1064
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1065 goto next;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1066 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1067 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1068
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1069 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1070 "unknown \"%V\" variable", &v[i].name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1071
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1072 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1073
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1074 next:
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1075 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1076 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1077
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1078
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1079 for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1080 av = key[n].value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1081
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1082 if (av->flags & NGX_STREAM_VAR_NOHASH) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1083 key[n].key.data = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1084 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1085 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1086
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1087
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1088 hash.hash = &cmcf->variables_hash;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1089 hash.key = ngx_hash_key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1090 hash.max_size = cmcf->variables_hash_max_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1091 hash.bucket_size = cmcf->variables_hash_bucket_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1092 hash.name = "variables_hash";
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1093 hash.pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1094 hash.temp_pool = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1095
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1096 if (ngx_hash_init(&hash, cmcf->variables_keys->keys.elts,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1097 cmcf->variables_keys->keys.nelts)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1098 != NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1099 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1100 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1101 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1102
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1103 cmcf->variables_keys = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1104
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1105 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1106 }