@@ -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+
12121229char *
12131230ngx_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 );
0 commit comments