Skip to content

Commit 8a49a2d

Browse files
committed
lua_add_variable - initialize value (add optional arguments)
1 parent 479d520 commit 8a49a2d

File tree

3 files changed

+100
-4
lines changed

3 files changed

+100
-4
lines changed

src/ngx_stream_lua_directive.c

+44-3
Original file line numberDiff line numberDiff line change
@@ -1209,12 +1209,29 @@ ngx_stream_lua_undefined_var(ngx_stream_session_t *s,
12091209
}
12101210

12111211

1212+
static ngx_int_t
1213+
ngx_stream_lua_var(ngx_stream_session_t *s,
1214+
ngx_stream_variable_value_t *v, uintptr_t data)
1215+
{
1216+
ngx_str_t *str = (ngx_str_t *) data;
1217+
1218+
v->not_found = 0;
1219+
v->valid = 1;
1220+
v->no_cacheable = 0;
1221+
v->not_found = 0;
1222+
v->len = str->len;
1223+
v->data = str->data;
1224+
1225+
return NGX_OK;
1226+
}
1227+
1228+
12121229
char *
12131230
ngx_stream_lua_add_variable(ngx_conf_t *cf, ngx_command_t *cmd,
12141231
void *conf)
12151232
{
12161233
ngx_stream_variable_t *var;
1217-
ngx_str_t *value;
1234+
ngx_str_t *value, *data;
12181235
ngx_int_t ret;
12191236

12201237
value = cf->args->elts;
@@ -1234,8 +1251,32 @@ ngx_stream_lua_add_variable(ngx_conf_t *cf, ngx_command_t *cmd,
12341251
return NGX_CONF_ERROR;
12351252
}
12361253

1237-
if (var->get_handler == NULL) {
1238-
var->get_handler = ngx_stream_lua_undefined_var;
1254+
if (cf->args->nelts == 2) {
1255+
if (var->get_handler == NULL) {
1256+
var->get_handler = ngx_stream_lua_undefined_var;
1257+
}
1258+
} else {
1259+
if (var->get_handler == NULL) {
1260+
var->get_handler = ngx_stream_lua_var;
1261+
}
1262+
1263+
if (var->data) {
1264+
data = (ngx_str_t *) var->data;
1265+
} else {
1266+
data = ngx_pnalloc(cf->pool, sizeof(ngx_str_t));
1267+
if (data == NULL) {
1268+
return NGX_CONF_ERROR;
1269+
}
1270+
}
1271+
data->len = value[2].len;
1272+
1273+
data->data = ngx_pnalloc(cf->pool, value[2].len);
1274+
if (data->data == NULL) {
1275+
return NGX_CONF_ERROR;
1276+
}
1277+
ngx_memcpy(data->data, value[2].data, value[2].len);
1278+
1279+
var->data = (uintptr_t) data;
12391280
}
12401281

12411282
ret = ngx_stream_get_variable_index(cf, value + 1);

src/ngx_stream_lua_module.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ static ngx_command_t ngx_stream_lua_cmds[] = {
382382
NULL },
383383

384384
{ ngx_string("lua_add_variable"),
385-
NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1,
385+
NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE12,
386386
ngx_stream_lua_add_variable,
387387
0,
388388
0,

t/139-add-variable.t

+55
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,58 @@ bar
8888
[error]
8989
--- error_log
9090
access log: bar
91+
92+
93+
94+
=== TEST 5: sanity
95+
--- stream_config
96+
lua_add_variable $foo "foo";
97+
--- stream_server_config
98+
content_by_lua_block {
99+
ngx.say(ngx.var.foo)
100+
ngx.var.foo = "bar"
101+
ngx.say(ngx.var.foo)
102+
}
103+
--- stream_response
104+
foo
105+
bar
106+
--- no_error_log
107+
[warn]
108+
[error]
109+
110+
111+
112+
=== TEST 6: works with C code
113+
--- stream_config
114+
lua_add_variable $foo "foo";
115+
--- stream_server_config
116+
preread_by_lua_block {
117+
ngx.var.foo = "bar"
118+
}
119+
120+
return $foo\n;
121+
--- stream_response
122+
bar
123+
--- no_error_log
124+
[warn]
125+
[error]
126+
127+
128+
129+
=== TEST 7: multiple add with same name works
130+
--- stream_config
131+
lua_add_variable $foo "bar";
132+
lua_add_variable $foo "foo";
133+
--- stream_server_config
134+
preread_by_lua_block {
135+
ngx.say(ngx.var.foo)
136+
ngx.var.foo = "bar"
137+
}
138+
139+
return $foo\n;
140+
--- stream_response
141+
foo
142+
bar
143+
--- no_error_log
144+
[warn]
145+
[error]

0 commit comments

Comments
 (0)