match_con.h
#ifndef MATCH_CON_H
#define MATCH_CON_H 1
#define HTTPD_CONF_MAIN_MATCH_CON 1
#define HTTPD_CONF_MAIN_MATCH_REQ 2
#define HTTPD_CONF_MAIN_MATCH_RESP 3
#define HTTPD_POLICY_CON_POLICY 3
#define HTTPD_POLICY_REQ_POLICY 4
#define HTTPD_POLICY_CLIENT_IPV4_CIDR_EQ 5
#define HTTPD_POLICY_SERVER_IPV4_CIDR_EQ 6
static inline int httpd__match_iter_beg(Conf_parse *conf, Conf_token *token,
Vstr_ref **ret_ref,
unsigned int *ret_num)
COMPILE_ATTR_NONNULL_A() COMPILE_ATTR_WARN_UNUSED_RET();
static inline int httpd__match_iter_beg(Conf_parse *conf, Conf_token *token,
Vstr_ref **ret_ref,
unsigned int *ret_num)
{
*ret_ref = NULL;
*ret_num = 0;
if (!token->num)
return (FALSE);
*ret_ref = conf_token_get_user_value(conf, token, ret_num);
return (TRUE);
}
static inline int httpd__match_iter_nxt(Conf_parse *conf, Conf_token *token,
Vstr_ref **ret_ref,
unsigned int *ret_num)
COMPILE_ATTR_NONNULL_A() COMPILE_ATTR_WARN_UNUSED_RET();
static inline int httpd__match_iter_nxt(Conf_parse *conf, Conf_token *token,
Vstr_ref **ret_ref,
unsigned int *ret_num)
{
Conf_token *update = NULL;
if (!*ret_num)
token->num = 0;
else
{
if (*ret_ref)
{
update = (*ret_ref)->ptr;
*token = *update;
if (update->num == *ret_num)
update = NULL;
}
if (!conf_parse_num_token(conf, token, *ret_num))
token = NULL;
if (update && token)
*update = *token;
}
vstr_ref_del(*ret_ref); *ret_ref = NULL;
if (!token)
return (FALSE);
return (httpd__match_iter_beg(conf, token, ret_ref, ret_num));
}
static inline const Httpd_policy_opts *httpd__policy_build(struct Con *con,
Conf_parse *conf,
Conf_token *token,
unsigned int utype)
{
Opt_serv_policy_opts *policy = NULL;
Vstr_ref *ref = NULL;
Conf_token save;
save = *token;
CONF_SC_PARSE_TOP_TOKEN_RET(conf, token, FALSE);
if (!(policy = opt_policy_conf_find(con->policy->s->beg, conf, token)))
return (NULL);
ref = policy->ref;
if (!conf_token_set_user_value(conf, &save, utype, ref, token->num))
return (NULL);
return ((const Httpd_policy_opts *)policy);
}
#endif