Added the ngx_http_test_required_predicates() function.

In contrast to ngx_http_test_predicates(), it requires all values to be
non-empty and not equal to "0".
This commit is contained in:
Vladimir Homutov 2019-01-17 14:31:04 +03:00
parent de20d73ec5
commit b6b39b2fb9
2 changed files with 30 additions and 0 deletions

View File

@ -271,6 +271,34 @@ ngx_http_test_predicates(ngx_http_request_t *r, ngx_array_t *predicates)
}
ngx_int_t
ngx_http_test_required_predicates(ngx_http_request_t *r,
ngx_array_t *predicates)
{
ngx_str_t val;
ngx_uint_t i;
ngx_http_complex_value_t *cv;
if (predicates == NULL) {
return NGX_OK;
}
cv = predicates->elts;
for (i = 0; i < predicates->nelts; i++) {
if (ngx_http_complex_value(r, &cv[i], &val) != NGX_OK) {
return NGX_ERROR;
}
if (val.len == 0 || (val.len == 1 && val.data[0] == '0')) {
return NGX_DECLINED;
}
}
return NGX_OK;
}
char *
ngx_http_set_predicate_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{

View File

@ -214,6 +214,8 @@ char *ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd,
ngx_int_t ngx_http_test_predicates(ngx_http_request_t *r,
ngx_array_t *predicates);
ngx_int_t ngx_http_test_required_predicates(ngx_http_request_t *r,
ngx_array_t *predicates);
char *ngx_http_set_predicate_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);