X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Ffilter.h;h=a11372779154d3db6fbf33d9a87a8937d0519607;hb=6154a392a1f0d96d4599a45f1c37d84dbe5bfa4d;hp=986e6cfec12aa93a3a2ffdd89b70ebe3a12a62ea;hpb=d8b00b7c6eb72ef123eeb85016649742932c38d9;p=apps%2Fpfixtools.git diff --git a/postlicyd/filter.h b/postlicyd/filter.h index 986e6cf..a113727 100644 --- a/postlicyd/filter.h +++ b/postlicyd/filter.h @@ -39,11 +39,13 @@ #include "common.h" #include "filter_tokens.h" #include "hook_tokens.h" +#include "param_tokens.h" #include "query.h" #include "array.h" typedef filter_token filter_type_t; typedef hook_token filter_result_t; +typedef param_token filter_param_id_t; typedef struct filter_hook_t { filter_result_t type; @@ -54,11 +56,11 @@ typedef struct filter_hook_t { } filter_hook_t; ARRAY(filter_hook_t) -typedef struct filter_params_t { - char *name; +typedef struct filter_param_t { + filter_param_id_t type; char *value; -} filter_params_t; -ARRAY(filter_params_t) +} filter_param_t; +ARRAY(filter_param_t) typedef struct filter_t { char *name; @@ -67,7 +69,7 @@ typedef struct filter_t { A(filter_hook_t) hooks; void *data; - A(filter_params_t) params; + A(filter_param_t) params; } filter_t; ARRAY(filter_t) @@ -78,6 +80,9 @@ ARRAY(filter_t) #define CHECK_HOOK(Hook) \ assert(Hook != HTK_UNKNOWN && Hook != HTK_count \ && "Unknown hook") +#define CHECK_PARAM(Param) \ + assert(Param != ATK_UNKNOWN && Param != ATK_count \ + && "Unknown param") typedef filter_result_t (*filter_runner_t)(const filter_t *filter, const query_t *query); @@ -91,6 +96,9 @@ filter_type_t filter_register(const char *type, filter_constructor_t constructor __attribute__((nonnull(2))) filter_result_t filter_hook_register(filter_type_t filter, const char *name); +__attribute__((nonnull(2))) +filter_param_id_t filter_param_register(filter_type_t filter, const char *name); + __attribute__((nonnull(1))) static inline void filter_init(filter_t *filter) { @@ -146,9 +154,8 @@ static inline void filter_hook_wipe(filter_hook_t *hook) } __attribute__((nonnull(1))) -static inline void filter_params_wipe(filter_params_t *param) +static inline void filter_params_wipe(filter_param_t *param) { - p_delete(¶m->name); p_delete(¶m->value); } @@ -156,7 +163,7 @@ __attribute__((nonnull(1))) void filter_wipe(filter_t *filter); __attribute__((nonnull(1,2))) -filter_result_t filter_run(const filter_t *filter, const query_t *query); +const filter_hook_t *filter_run(const filter_t *filter, const query_t *query); #endif