summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/lib-sieve/sieve-match.h
diff options
context:
space:
mode:
Diffstat (limited to 'pigeonhole/src/lib-sieve/sieve-match.h')
-rw-r--r--pigeonhole/src/lib-sieve/sieve-match.h68
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