projects
/
apps
/
pfixtools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
No need for the +x mode on configuration files.
[apps/pfixtools.git]
/
postlicyd
/
filter.h
diff --git
a/postlicyd/filter.h
b/postlicyd/filter.h
index
f551e58
..
c2c7a4f
100644
(file)
--- a/
postlicyd/filter.h
+++ b/
postlicyd/filter.h
@@
-43,6
+43,7
@@
#include "query.h"
#include "array.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 filter_token filter_type_t;
typedef hook_token filter_result_t;
typedef param_token filter_param_id_t;
@@
-51,9
+52,13
@@
typedef struct filter_hook_t {
filter_result_t type;
char *value;
filter_result_t type;
char *value;
+ int counter;
+ int cost;
+
unsigned postfix:1;
unsigned async:1;
int filter_id;
unsigned postfix:1;
unsigned async:1;
int filter_id;
+
} filter_hook_t;
ARRAY(filter_hook_t)
} filter_hook_t;
ARRAY(filter_hook_t)
@@
-81,13
+86,24
@@
typedef struct filter_t {
} filter_t;
ARRAY(filter_t)
} filter_t;
ARRAY(filter_t)
+#define MAX_COUNTERS (64)
+
/** Context of the query. To be filled with data to use when
* performing asynchronous filtering.
*/
typedef struct filter_context_t {
/** Context of the query. To be filled with data to use when
* performing asynchronous filtering.
*/
typedef struct filter_context_t {
+ /* filter context
+ */
const filter_t *current_filter;
void *contexts[FTK_count];
const filter_t *current_filter;
void *contexts[FTK_count];
+ /* message context
+ */
+ char instance[64];
+ uint32_t counters[MAX_COUNTERS];
+
+ /* connection context
+ */
void *data;
} filter_context_t;
void *data;
} filter_context_t;
@@
-116,6
+132,12
@@
typedef void (*filter_destructor_t)(filter_t *filter);
typedef void *(*filter_context_constructor_t)(void);
typedef void (*filter_context_destructor_t)(void*);
typedef void *(*filter_context_constructor_t)(void);
typedef void (*filter_context_destructor_t)(void*);
+typedef void (*filter_async_handler_t)(filter_context_t *context,
+ const filter_hook_t *result);
+
+/** Number of filter currently running.
+ */
+extern uint32_t filter_running;
/* Registration.
*/
/* Registration.
*/
@@
-132,6
+154,8
@@
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(2)))
filter_param_id_t filter_param_register(filter_type_t filter, const char *name);
+__attribute__((nonnull))
+void filter_async_handler_register(filter_async_handler_t handler);
/* Filter builder.
*/
/* Filter builder.
*/
@@
-258,10
+282,16
@@
bool filter_test(const filter_t *filter, const query_t *query,
/* Filter context
*/
/* Filter context
*/
-__attribute__((nonnull))
+__attribute__((nonnull
(1)
))
void filter_context_prepare(filter_context_t *context, void* qctx);
__attribute__((nonnull))
void filter_context_wipe(filter_context_t *context);
void filter_context_prepare(filter_context_t *context, void* qctx);
__attribute__((nonnull))
void filter_context_wipe(filter_context_t *context);
+__attribute__((nonnull))
+void filter_context_clean(filter_context_t *context);
+
+__attribute__((nonnull))
+void filter_post_async_result(filter_context_t *context, filter_result_t result);
+
#endif
#endif