diff options
Diffstat (limited to 'pigeonhole/src/lib-sieve/sieve-match.h')
-rw-r--r-- | pigeonhole/src/lib-sieve/sieve-match.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/sieve-match.h b/pigeonhole/src/lib-sieve/sieve-match.h new file mode 100644 index 0000000..d4d726f --- /dev/null +++ b/pigeonhole/src/lib-sieve/sieve-match.h @@ -0,0 +1,68 @@ +#ifndef SIEVE_MATCH_H +#define SIEVE_MATCH_H + +#include "sieve-common.h" + +/* + * Matching context + */ + +struct sieve_match_context { + pool_t pool; + + const struct sieve_runtime_env *runenv; + + const struct sieve_match_type *match_type; + const struct sieve_comparator *comparator; + + void *data; + + int match_status; + int exec_status; + + bool trace:1; +}; + +/* + * Matching implementation + */ + +/* Manual value iteration (for when multiple matches are allowed) */ +struct sieve_match_context *sieve_match_begin + (const struct sieve_runtime_env *renv, + const struct sieve_match_type *mcht, + const struct sieve_comparator *cmp); +int sieve_match_value + (struct sieve_match_context *mctx, const char *value, size_t value_size, + struct sieve_stringlist *key_list); +int sieve_match_end(struct sieve_match_context **mctx, int *exec_status); + +/* Default matching operation */ +int sieve_match + (const struct sieve_runtime_env *renv, + const struct sieve_match_type *mcht, + const struct sieve_comparator *cmp, + struct sieve_stringlist *value_list, + struct sieve_stringlist *key_list, + int *exec_status); + +/* + * Read matching operands + */ + +enum sieve_match_opt_operand { + SIEVE_MATCH_OPT_END, + SIEVE_MATCH_OPT_COMPARATOR, + SIEVE_MATCH_OPT_MATCH_TYPE, + SIEVE_MATCH_OPT_LAST +}; + +int sieve_match_opr_optional_dump + (const struct sieve_dumptime_env *denv, sieve_size_t *address, int *opt_code); + +int sieve_match_opr_optional_read + (const struct sieve_runtime_env *renv, sieve_size_t *address, int *opt_code, + int *exec_status, struct sieve_comparator *cmp, + struct sieve_match_type *mcht); + +#endif |