#ifndef CONFIG_FILTER_H
#define CONFIG_FILTER_H
#include "network.h"
struct master_service_settings_output;
struct config_filter {
const char *service;
const char *local_name;
const char *local_host, *remote_host;
struct ip_addr local_net, remote_net;
unsigned int local_bits, remote_bits;
};
struct config_filter_parser {
struct config_filter filter;
const char *file_and_line;
struct config_module_parser *parsers;
};
ARRAY_DEFINE_TYPE(config_filter_parsers, struct config_filter_parser *);
struct config_filter_context *config_filter_init(pool_t pool);
void config_filter_deinit(struct config_filter_context **ctx);
void config_filter_add_all(struct config_filter_context *ctx,
struct config_filter_parser *const *parsers);
int config_filter_parsers_get(struct config_filter_context *ctx, pool_t pool,
const char *module,
const struct config_filter *filter,
struct config_module_parser **parsers_r,
struct master_service_settings_output *output_r,
const char **error_r);
void config_filter_parsers_free(struct config_module_parser *parsers);
struct config_filter_parser *const *
config_filter_find_subset(struct config_filter_context *ctx,
const struct config_filter *filter);
bool config_filter_match(const struct config_filter *mask,
const struct config_filter *filter);
bool config_filters_equal(const struct config_filter *f1,
const struct config_filter *f2);
#endif