annotate src/stream/ngx_stream_variables.c @ 6640:e78eca6bfaf0

HTTP/2: fixed send timer handling. Checking for return value of c->send_chain() isn't sufficient since there are data can be left in the SSL buffer. Now the wew->ready flag is used instead. In particular, this fixed a connection leak in cases when all streams were closed, but there's still some data to be sent in the SSL buffer and the client forgot about the connection.
author Valentin Bartenev <vbart@nginx.com>
date Tue, 19 Jul 2016 20:31:09 +0300
parents eb4293155e87
children 5e2821c2de46
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);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
20 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
21 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
22 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
23 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
24 static ngx_int_t ngx_stream_variable_bytes_sent(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_connection(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);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
28
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 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
30 ngx_stream_variable_value_t *v, uintptr_t data);
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
31 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
32 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
33 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
34 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
35 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
36 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
37 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
38 ngx_stream_variable_value_t *v, uintptr_t data);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
39 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
40 ngx_stream_variable_value_t *v, uintptr_t data);
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
41
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
43 static ngx_stream_variable_t ngx_stream_core_variables[] = {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
44
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
45 { ngx_string("binary_remote_addr"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
46 ngx_stream_variable_binary_remote_addr, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
47
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
48 { ngx_string("remote_addr"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
49 ngx_stream_variable_remote_addr, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
50
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
51 { ngx_string("remote_port"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
52 ngx_stream_variable_remote_port, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
53
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
54 { ngx_string("server_addr"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
55 ngx_stream_variable_server_addr, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
56
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
57 { ngx_string("server_port"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
58 ngx_stream_variable_server_port, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
59
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
60 { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes_sent,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
61 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
62
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
63 { ngx_string("connection"), NULL,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
64 ngx_stream_variable_connection, 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
65
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
66 { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67 0, 0, 0 },
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
69 { ngx_string("hostname"), NULL, ngx_stream_variable_hostname,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
70 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
71
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
72 { ngx_string("pid"), NULL, ngx_stream_variable_pid,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
73 0, 0, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
74
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
75 { ngx_string("msec"), NULL, ngx_stream_variable_msec,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
76 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
77
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
78 { ngx_string("time_iso8601"), NULL, ngx_stream_variable_time_iso8601,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
79 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
80
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
81 { ngx_string("time_local"), NULL, ngx_stream_variable_time_local,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
82 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
83
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
84 { ngx_null_string, NULL, NULL, 0, 0, 0 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
85 };
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
86
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
87
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
88 ngx_stream_variable_value_t ngx_stream_variable_null_value =
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
89 ngx_stream_variable("");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90 ngx_stream_variable_value_t ngx_stream_variable_true_value =
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91 ngx_stream_variable("1");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 ngx_stream_variable_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95 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
96 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 ngx_int_t rc;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98 ngx_uint_t i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99 ngx_hash_key_t *key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
100 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
101 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103 if (name->len == 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 "invalid variable name \"$\"");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
106 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
107 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
108
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109 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
110
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
111 key = cmcf->variables_keys->keys.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112 for (i = 0; i < cmcf->variables_keys->keys.nelts; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113 if (name->len != key[i].key.len
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114 || ngx_strncasecmp(name->data, key[i].key.data, name->len) != 0)
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 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
117 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
118
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 v = key[i].value;
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 if (!(v->flags & NGX_STREAM_VAR_CHANGEABLE)) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
122 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
123 "the duplicate \"%V\" variable", name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
126
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127 return v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130 v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135 v->name.len = name->len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136 v->name.data = ngx_pnalloc(cf->pool, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137 if (v->name.data == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 ngx_strlow(v->name.data, name->data, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 v->set_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 v->get_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 v->data = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146 v->flags = flags;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147 v->index = 0;
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 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
150
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 if (rc == NGX_ERROR) {
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 if (rc == NGX_BUSY) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157 "conflicting variable name \"%V\"", name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161 return v;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 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
167 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168 ngx_uint_t i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172 if (name->len == 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
173 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 "invalid variable name \"$\"");
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175 return NGX_ERROR;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178 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
179
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
180 v = cmcf->variables.elts;
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 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 if (ngx_array_init(&cmcf->variables, cf->pool, 4,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184 sizeof(ngx_stream_variable_t))
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 != NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 return NGX_ERROR;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 for (i = 0; i < cmcf->variables.nelts; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 if (name->len != v[i].name.len
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198 return i;
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 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202 v = ngx_array_push(&cmcf->variables);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 return NGX_ERROR;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207 v->name.len = name->len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 v->name.data = ngx_pnalloc(cf->pool, name->len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209 if (v->name.data == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213 ngx_strlow(v->name.data, name->data, name->len);
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 v->set_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 v->get_handler = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217 v->data = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 v->flags = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219 v->index = cmcf->variables.nelts - 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 return v->index;
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
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 ngx_stream_variable_value_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 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
227 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
231 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
232
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
233 if (cmcf->variables.nelts <= index) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234 ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235 "unknown variable index: %ui", index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
239 if (s->variables[index].not_found || s->variables[index].valid) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240 return &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241 }
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 = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
244
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
245 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
246 == NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
247 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
248 if (v[index].flags & NGX_STREAM_VAR_NOCACHEABLE) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249 s->variables[index].no_cacheable = 1;
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 return &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255 s->variables[index].valid = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
256 s->variables[index].not_found = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
257
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 }
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
262 ngx_stream_variable_value_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 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
264 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 ngx_stream_variable_value_t *v;
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 v = &s->variables[index];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
268
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
269 if (v->valid || v->not_found) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
270 if (!v->no_cacheable) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
271 return v;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
274 v->valid = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
275 v->not_found = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
276 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
278 return ngx_stream_get_indexed_variable(s, index);
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
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 ngx_stream_variable_value_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
283 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
284 ngx_uint_t key)
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 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
287 ngx_stream_variable_value_t *vv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
288 ngx_stream_core_main_conf_t *cmcf;
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 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
291
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
292 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
293
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
294 if (v) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
295 if (v->flags & NGX_STREAM_VAR_INDEXED) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
296 return ngx_stream_get_flushed_variable(s, v->index);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
297
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
298 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
299
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
300 vv = ngx_palloc(s->connection->pool,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
301 sizeof(ngx_stream_variable_value_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
302
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
303 if (vv && v->get_handler(s, vv, v->data) == NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
304 return vv;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
307 return NULL;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
311 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
312 if (vv == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
313 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
314 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
315
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
316 vv->not_found = 1;
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 return vv;
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
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 static ngx_int_t
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
323 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
324 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
325 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
326 struct sockaddr_in *sin;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
327 #if (NGX_HAVE_INET6)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
328 struct sockaddr_in6 *sin6;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
329 #endif
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
330
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
331 switch (s->connection->sockaddr->sa_family) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
332
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
333 #if (NGX_HAVE_INET6)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
334 case AF_INET6:
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
335 sin6 = (struct sockaddr_in6 *) s->connection->sockaddr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
336
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
337 v->len = sizeof(struct in6_addr);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
338 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
339 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
340 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
341 v->data = sin6->sin6_addr.s6_addr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
342
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
343 break;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
344 #endif
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
345
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
346 default: /* AF_INET */
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
347 sin = (struct sockaddr_in *) s->connection->sockaddr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
348
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
349 v->len = sizeof(in_addr_t);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
350 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
351 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
352 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
353 v->data = (u_char *) &sin->sin_addr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
354
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
355 break;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
356 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
357
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
358 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
359 }
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
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
362 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
363 ngx_stream_variable_remote_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
364 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
365 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
366 v->len = s->connection->addr_text.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
367 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
368 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
369 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
370 v->data = s->connection->addr_text.data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
371
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
372 return NGX_OK;
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
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
375
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
376 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
377 ngx_stream_variable_remote_port(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
378 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
379 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
380 ngx_uint_t port;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
381
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
382 v->len = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
383 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
384 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
385 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
386
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
387 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
388 if (v->data == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
389 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
390 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
391
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
392 port = ngx_inet_get_port(s->connection->sockaddr);
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 if (port > 0 && port < 65536) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
395 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
396 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
397
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
398 return NGX_OK;
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
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 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
403 ngx_stream_variable_server_addr(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
404 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
405 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
406 ngx_str_t str;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
407 u_char addr[NGX_SOCKADDR_STRLEN];
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
408
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
409 str.len = NGX_SOCKADDR_STRLEN;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
410 str.data = addr;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
411
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
412 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
413 return NGX_ERROR;
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
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
416 str.data = ngx_pnalloc(s->connection->pool, str.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
417 if (str.data == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
418 return NGX_ERROR;
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
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
421 ngx_memcpy(str.data, addr, str.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
422
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
423 v->len = str.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
424 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
425 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
426 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
427 v->data = str.data;
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 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
430 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
431
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
432
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
433 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
434 ngx_stream_variable_server_port(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
435 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
436 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
437 ngx_uint_t port;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
438
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
439 v->len = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
440 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
441 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
442 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
443
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
444 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
445 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
446 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
447
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
448 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
449 if (v->data == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
450 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
451 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
452
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
453 port = ngx_inet_get_port(s->connection->local_sockaddr);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
454
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
455 if (port > 0 && port < 65536) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
456 v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
457 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
458
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
459 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
460 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
461
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
462
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
463 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
464 ngx_stream_variable_bytes_sent(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
465 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
466 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
467 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
468
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
469 p = ngx_pnalloc(s->connection->pool, NGX_OFF_T_LEN);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
470 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
471 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
472 }
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 v->len = ngx_sprintf(p, "%O", s->connection->sent) - p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
475 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
476 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
477 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
478 v->data = p;
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 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
481 }
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 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
485 ngx_stream_variable_connection(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
486 ngx_stream_variable_value_t *v, uintptr_t data)
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 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
489
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
490 p = ngx_pnalloc(s->connection->pool, NGX_ATOMIC_T_LEN);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
491 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
492 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
493 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
494
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
495 v->len = ngx_sprintf(p, "%uA", s->connection->number) - p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
496 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
497 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
498 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
499 v->data = p;
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 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
502 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
503
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 static ngx_int_t
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
506 ngx_stream_variable_nginx_version(ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
507 ngx_stream_variable_value_t *v, uintptr_t data)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
508 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
509 v->len = sizeof(NGINX_VERSION) - 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
510 v->valid = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
511 v->no_cacheable = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
512 v->not_found = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
513 v->data = (u_char *) NGINX_VERSION;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
514
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
515 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
516 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
517
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
518
6608
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
519 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
520 ngx_stream_variable_hostname(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
521 ngx_stream_variable_value_t *v, uintptr_t data)
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 v->len = ngx_cycle->hostname.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
524 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
525 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
526 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
527 v->data = ngx_cycle->hostname.data;
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 return NGX_OK;
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
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
532
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
533 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
534 ngx_stream_variable_pid(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
535 ngx_stream_variable_value_t *v, uintptr_t data)
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 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
538
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
539 p = ngx_pnalloc(s->connection->pool, NGX_INT64_LEN);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
540 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
541 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
542 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
543
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
544 v->len = ngx_sprintf(p, "%P", ngx_pid) - p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
545 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
546 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
547 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
548 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
549
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
550 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
551 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
552
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 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
555 ngx_stream_variable_msec(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
556 ngx_stream_variable_value_t *v, uintptr_t data)
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 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
559 ngx_time_t *tp;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
560
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
561 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
562 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
563 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
564 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
565
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
566 tp = ngx_timeofday();
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
567
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
568 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
569 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
570 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
571 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
572 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
573
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
574 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
575 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
576
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
577
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
578 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
579 ngx_stream_variable_time_iso8601(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
580 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
581 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
582 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
583
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
584 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
585 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
586 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
587 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
588
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
589 ngx_memcpy(p, ngx_cached_http_log_iso8601.data,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
590 ngx_cached_http_log_iso8601.len);
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
591
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
592 v->len = ngx_cached_http_log_iso8601.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
593 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
594 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
595 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
596 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
597
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
598 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
599 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
600
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
601
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
602 static ngx_int_t
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
603 ngx_stream_variable_time_local(ngx_stream_session_t *s,
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
604 ngx_stream_variable_value_t *v, uintptr_t data)
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
605 {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
606 u_char *p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
607
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
608 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
609 if (p == NULL) {
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
610 return NGX_ERROR;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
611 }
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
612
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
613 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
614
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
615 v->len = ngx_cached_http_log_time.len;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
616 v->valid = 1;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
617 v->no_cacheable = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
618 v->not_found = 0;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
619 v->data = p;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
620
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
621 return NGX_OK;
eb4293155e87 Stream: core module variables.
Vladimir Homutov <vl@nginx.com>
parents: 6607
diff changeset
622 }
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
6607
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
625 void *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
626 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
627 ngx_str_t *match)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
628 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
629 void *value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
630 u_char *low;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
631 size_t len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
632 ngx_uint_t key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
633
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
634 len = match->len;
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 if (len) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
637 low = ngx_pnalloc(s->connection->pool, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
638 if (low == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
639 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
640 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
641
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
642 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
643 low = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
644 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
645
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
646 key = ngx_hash_strlow(low, match->data, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
647
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
648 value = ngx_hash_find_combined(&map->hash, key, low, len);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
649 if (value) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
650 return value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
651 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
652
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
653 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
654
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
655 if (len && map->nregex) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
656 ngx_int_t n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
657 ngx_uint_t i;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
658 ngx_stream_map_regex_t *reg;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
659
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
660 reg = map->regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
661
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
662 for (i = 0; i < map->nregex; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
663
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
664 n = ngx_stream_regex_exec(s, reg[i].regex, match);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
665
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
666 if (n == NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
667 return reg[i].value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
668 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
669
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
670 if (n == NGX_DECLINED) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
671 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
672 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
673
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
674 /* NGX_ERROR */
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
675
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
676 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
677 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
678 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
679
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
680 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
681
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
682 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
683 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
684
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
685
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
686 #if (NGX_PCRE)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
687
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
688 static ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
689 ngx_stream_variable_not_found(ngx_stream_session_t *s,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
690 ngx_stream_variable_value_t *v, uintptr_t data)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
691 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
692 v->not_found = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
693 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
694 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
695
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
696
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
697 ngx_stream_regex_t *
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
698 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
699 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
700 u_char *p;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
701 size_t size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
702 ngx_str_t name;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
703 ngx_uint_t i, n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
704 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
705 ngx_stream_regex_t *re;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
706 ngx_stream_regex_variable_t *rv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
707 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
708
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
709 rc->pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
710
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
711 if (ngx_regex_compile(rc) != NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
712 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
713 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
714 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
715
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
716 re = ngx_pcalloc(cf->pool, sizeof(ngx_stream_regex_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
717 if (re == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
718 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
719 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
720
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
721 re->regex = rc->regex;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
722 re->ncaptures = rc->captures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
723 re->name = rc->pattern;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
724
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
725 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
726 cmcf->ncaptures = ngx_max(cmcf->ncaptures, re->ncaptures);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
727
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
728 n = (ngx_uint_t) rc->named_captures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
729
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
730 if (n == 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
731 return re;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
732 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
733
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
734 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
735 if (rv == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
736 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
737 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
738
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
739 re->variables = rv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
740 re->nvariables = n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
741
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
742 size = rc->name_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
743 p = rc->names;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
744
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
745 for (i = 0; i < n; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
746 rv[i].capture = 2 * ((p[0] << 8) + p[1]);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
747
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
748 name.data = &p[2];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
749 name.len = ngx_strlen(name.data);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
750
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
751 v = ngx_stream_add_variable(cf, &name, NGX_STREAM_VAR_CHANGEABLE);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
752 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
753 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
754 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
755
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
756 rv[i].index = ngx_stream_get_variable_index(cf, &name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
757 if (rv[i].index == NGX_ERROR) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
758 return NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
759 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
760
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
761 v->get_handler = ngx_stream_variable_not_found;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
762
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
763 p += size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
764 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
765
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
766 return re;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
767 }
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
770 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
771 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
772 ngx_str_t *str)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
773 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
774 ngx_int_t rc, index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
775 ngx_uint_t i, n, len;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
776 ngx_stream_variable_value_t *vv;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
777 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
778
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
779 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
780
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
781 if (re->ncaptures) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
782 len = cmcf->ncaptures;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
783
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
784 if (s->captures == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
785 s->captures = ngx_palloc(s->connection->pool, len * sizeof(int));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
786 if (s->captures == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
787 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
788 }
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
791 } else {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
792 len = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
793 }
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 rc = ngx_regex_exec(re->regex, str, s->captures, len);
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 if (rc == NGX_REGEX_NO_MATCHED) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
798 return NGX_DECLINED;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
799 }
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 (rc < 0) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
802 ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
803 ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
804 rc, str, &re->name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
805 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
806 }
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 for (i = 0; i < re->nvariables; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
809
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
810 n = re->variables[i].capture;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
811 index = re->variables[i].index;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
812 vv = &s->variables[index];
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 vv->len = s->captures[n + 1] - s->captures[n];
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
815 vv->valid = 1;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
816 vv->no_cacheable = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
817 vv->not_found = 0;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
818 vv->data = &str->data[s->captures[n]];
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 #if (NGX_DEBUG)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
821 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
822 ngx_stream_variable_t *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
823
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
824 v = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
825
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
826 ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
827 "stream regex set $%V to \"%v\"", &v[index].name, vv);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
828 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
829 #endif
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 s->ncaptures = rc * 2;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
833 s->captures_data = str->data;
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 return NGX_OK;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
836 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
837
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
838 #endif
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
839
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
840
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
841 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
842 ngx_stream_variables_add_core_vars(ngx_conf_t *cf)
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 ngx_int_t rc;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
845 ngx_stream_variable_t *cv, *v;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
846 ngx_stream_core_main_conf_t *cmcf;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
847
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
848 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
849
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
850 cmcf->variables_keys = ngx_pcalloc(cf->temp_pool,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
851 sizeof(ngx_hash_keys_arrays_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
852 if (cmcf->variables_keys == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
853 return NGX_ERROR;
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 cmcf->variables_keys->pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
857 cmcf->variables_keys->temp_pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
858
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
859 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
860 != NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
861 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
862 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
863 }
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 for (cv = ngx_stream_core_variables; cv->name.len; cv++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
866 v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t));
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
867 if (v == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
868 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
869 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
870
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
871 *v = *cv;
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 rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
874 NGX_HASH_READONLY_KEY);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
875
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
876 if (rc == NGX_OK) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
877 continue;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
878 }
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 if (rc == NGX_BUSY) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
881 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
882 "conflicting variable name \"%V\"", &v->name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
883 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
884
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
885 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
886 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
887
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
888 return NGX_OK;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
892 ngx_int_t
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
893 ngx_stream_variables_init_vars(ngx_conf_t *cf)
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 ngx_uint_t i, n;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
896 ngx_hash_key_t *key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
897 ngx_hash_init_t hash;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
898 ngx_stream_variable_t *v, *av;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
899 ngx_stream_core_main_conf_t *cmcf;
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 /* set the handlers for the indexed stream variables */
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 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
904
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
905 v = cmcf->variables.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
906 key = cmcf->variables_keys->keys.elts;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
907
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
908 for (i = 0; i < cmcf->variables.nelts; i++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
909
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
910 for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
911
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
912 av = key[n].value;
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 if (v[i].name.len == key[n].key.len
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
915 && 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
916 == 0)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
917 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
918 v[i].get_handler = av->get_handler;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
919 v[i].data = av->data;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
920
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
921 av->flags |= NGX_STREAM_VAR_INDEXED;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
922 v[i].flags = av->flags;
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 av->index = i;
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 if (av->get_handler == NULL) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
927 break;
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 goto next;
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 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
933
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
934 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
935 "unknown \"%V\" variable", &v[i].name);
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
936
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
937 return NGX_ERROR;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
938
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
939 next:
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
940 continue;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
944 for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
945 av = key[n].value;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
946
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
947 if (av->flags & NGX_STREAM_VAR_NOHASH) {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
948 key[n].key.data = NULL;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
949 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
950 }
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
951
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
952
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
953 hash.hash = &cmcf->variables_hash;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
954 hash.key = ngx_hash_key;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
955 hash.max_size = cmcf->variables_hash_max_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
956 hash.bucket_size = cmcf->variables_hash_bucket_size;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
957 hash.name = "variables_hash";
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
958 hash.pool = cf->pool;
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
959 hash.temp_pool = NULL;
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 if (ngx_hash_init(&hash, cmcf->variables_keys->keys.elts,
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
962 cmcf->variables_keys->keys.nelts)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
963 != NGX_OK)
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
964 {
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
965 return NGX_ERROR;
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
c70b7f4537e1 Stream: variables and script.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
968 cmcf->variables_keys = NULL;
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 }