return 0;
}
-static int config_filters_request(struct config_connection *conn)
-{
- struct config_filter_parser *const *filters = config_filter_get_all(config_filter);
- o_stream_cork(conn->output);
- while(*filters != NULL) {
- const struct config_filter *filter = &(*filters)->filter;
- o_stream_nsend_str(conn->output, "FILTER");
- if (filter->service != NULL)
- o_stream_nsend_str(conn->output, t_strdup_printf("\tservice=%s",
- str_tabescape(filter->service)));
- if (filter->local_name != NULL)
- o_stream_nsend_str(conn->output, t_strdup_printf("\tlocal-name=%s",
- str_tabescape(filter->local_name)));
- if (filter->local_bits > 0)
- o_stream_nsend_str(conn->output, t_strdup_printf("\tlocal-net=%s/%u",
- net_ip2addr(&filter->local_net),
- filter->local_bits));
- if (filter->remote_bits > 0)
- o_stream_nsend_str(conn->output, t_strdup_printf("\tremote-net=%s/%u",
- net_ip2addr(&filter->remote_net),
- filter->remote_bits));
- o_stream_nsend_str(conn->output, "\n");
- filters++;
- }
- o_stream_nsend_str(conn->output, "\n");
- o_stream_uncork(conn->output);
- return 0;
-}
-
-
static void config_connection_input(struct config_connection *conn)
{
const char *const *args, *line;
if (config_connection_request(conn, args + 1) < 0)
break;
}
- if (strcmp(args[0], "FILTERS") == 0) {
- if (config_filters_request(conn) < 0)
- break;
- }
}
}
return array_front(&matches);
}
-struct config_filter_parser *const *
-config_filter_get_all(struct config_filter_context *ctx)
-{
- ARRAY_TYPE(config_filter_parsers) filters;
- unsigned int i;
-
- t_array_init(&filters, 8);
- for (i = 0; ctx->parsers[i] != NULL; i++) {
- array_push_back(&filters, &ctx->parsers[i]);
- }
- array_sort(&filters, config_filter_parser_cmp_rev);
- array_append_zero(&filters);
- return array_front(&filters);
-}
-
struct config_filter_parser *const *
config_filter_find_subset(struct config_filter_context *ctx,
const struct config_filter *filter)
config_filter_find_subset(struct config_filter_context *ctx,
const struct config_filter *filter);
-struct config_filter_parser *const *
-config_filter_get_all(struct config_filter_context *ctx);
-
/* Returns TRUE if filter matches mask. */
bool config_filter_match(const struct config_filter *mask,
const struct config_filter *filter);