summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/lib-sieve/sieve-result.h
diff options
context:
space:
mode:
Diffstat (limited to 'pigeonhole/src/lib-sieve/sieve-result.h')
-rw-r--r--pigeonhole/src/lib-sieve/sieve-result.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/sieve-result.h b/pigeonhole/src/lib-sieve/sieve-result.h
new file mode 100644
index 0000000..a9fcadc
--- /dev/null
+++ b/pigeonhole/src/lib-sieve/sieve-result.h
@@ -0,0 +1,224 @@
+#ifndef SIEVE_RESULT_H
+#define SIEVE_RESULT_H
+
+#include "sieve-common.h"
+#include "sieve-error.h"
+#include "sieve-execute.h"
+
+/*
+ * Types
+ */
+
+struct sieve_side_effects_list;
+
+/*
+ * Result object
+ */
+
+struct sieve_result;
+
+struct sieve_result *
+sieve_result_create(struct sieve_instance *svinst, pool_t pool,
+ const struct sieve_execute_env *eenv);
+
+void sieve_result_ref(struct sieve_result *result);
+
+void sieve_result_unref(struct sieve_result **result);
+
+pool_t sieve_result_pool(struct sieve_result *result);
+
+/*
+ * Getters/Setters
+ */
+
+const struct sieve_script_env *
+sieve_result_get_script_env(struct sieve_result *result);
+const struct sieve_message_data *
+sieve_result_get_message_data(struct sieve_result *result);
+struct sieve_message_context *
+sieve_result_get_message_context(struct sieve_result *result);
+unsigned int sieve_result_get_exec_seq(struct sieve_result *result);
+
+/*
+ * Extension support
+ */
+
+void sieve_result_extension_set_context(struct sieve_result *result,
+ const struct sieve_extension *ext,
+ void *context);
+const void *
+sieve_result_extension_get_context(struct sieve_result *result,
+ const struct sieve_extension *ext);
+
+/*
+ * Result printing
+ */
+
+struct sieve_result_print_env {
+ struct sieve_result *result;
+ const struct sieve_script_env *scriptenv;
+ struct ostream *stream;
+};
+
+void sieve_result_vprintf(const struct sieve_result_print_env *penv,
+ const char *fmt, va_list args) ATTR_FORMAT(2, 0);
+void sieve_result_printf(const struct sieve_result_print_env *penv,
+ const char *fmt, ...) ATTR_FORMAT(2, 3);
+void sieve_result_action_printf(const struct sieve_result_print_env *penv,
+ const char *fmt, ...) ATTR_FORMAT(2, 3);
+void sieve_result_seffect_printf(const struct sieve_result_print_env *penv,
+ const char *fmt, ...) ATTR_FORMAT(2, 3);
+
+bool sieve_result_print(struct sieve_result *result,
+ const struct sieve_script_env *senv,
+ struct ostream *stream, bool *keep);
+
+/*
+ * Result composition
+ */
+
+void sieve_result_add_implicit_side_effect(
+ struct sieve_result *result, const struct sieve_action_def *to_action,
+ bool to_keep, const struct sieve_extension *ext,
+ const struct sieve_side_effect_def *seffect, void *context);
+
+int sieve_result_add_action(const struct sieve_runtime_env *renv,
+ const struct sieve_extension *ext, const char *name,
+ const struct sieve_action_def *act_def,
+ struct sieve_side_effects_list *seffects,
+ void *context, unsigned int instance_limit,
+ bool preserve_mail);
+int sieve_result_add_keep(const struct sieve_runtime_env *renv,
+ struct sieve_side_effects_list *seffects);
+
+void sieve_result_set_keep_action(struct sieve_result *result,
+ const struct sieve_extension *ext,
+ const struct sieve_action_def *act_def);
+void sieve_result_set_failure_action(struct sieve_result *result,
+ const struct sieve_extension *ext,
+ const struct sieve_action_def *act_def);
+
+/*
+ * Result execution
+ */
+
+struct sieve_result_execution;
+
+void sieve_result_mark_executed(struct sieve_result *result);
+
+struct sieve_result_execution *
+sieve_result_execution_create(struct sieve_result *result, pool_t pool);
+void sieve_result_execution_destroy(struct sieve_result_execution **_rexec);
+
+void *sieve_result_execution_get_dup_transaction(
+ struct sieve_result_execution *rexec);
+
+int sieve_result_execute(struct sieve_result_execution *rexec, int status,
+ bool commit, struct sieve_error_handler *ehandler,
+ bool *keep_r);
+
+bool sieve_result_executed(struct sieve_result_execution *rexec);
+bool sieve_result_committed(struct sieve_result_execution *rexec);
+
+bool sieve_result_executed_delivery(struct sieve_result_execution *rexec);
+
+/*
+ * Result evaluation
+ */
+
+struct sieve_result_iterate_context;
+
+struct sieve_result_iterate_context *
+sieve_result_iterate_init(struct sieve_result *result);
+const struct sieve_action *
+sieve_result_iterate_next(struct sieve_result_iterate_context *rictx,
+ bool *keep);
+void sieve_result_iterate_delete(struct sieve_result_iterate_context *rictx);
+
+/*
+ * Side effects list
+ */
+
+struct sieve_side_effects_list *
+sieve_side_effects_list_create(struct sieve_result *result);
+void sieve_side_effects_list_add(struct sieve_side_effects_list *list,
+ const struct sieve_side_effect *seffect);
+
+/*
+ * Error handling
+ */
+
+void sieve_result_error(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename, unsigned int csrc_linenum,
+ const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_error(aenv, ...) \
+ sieve_result_error(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_global_error(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename,
+ unsigned int csrc_linenum, const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_global_error(aenv, ...) \
+ sieve_result_global_error(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_warning(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename, unsigned int csrc_linenum,
+ const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_warning(aenv, ...) \
+ sieve_result_warning(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_global_warning(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename,
+ unsigned int csrc_linenum,
+ const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_global_warning(aenv, ...) \
+ sieve_result_global_warning(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_log(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename, unsigned int csrc_linenum,
+ const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_log(aenv, ...) \
+ sieve_result_log(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_global_log(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename,
+ unsigned int csrc_linenum, const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_global_log(aenv, ...) \
+ sieve_result_global_log(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_global_log_error(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename,
+ unsigned int csrc_linenum,
+ const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_global_log_error(aenv, ...) \
+ sieve_result_global_log_error(aenv, __FILE__, __LINE__, __VA_ARGS__)
+void sieve_result_global_log_warning(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename,
+ unsigned int csrc_linenum,
+ const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
+#define sieve_result_global_log_warning(aenv, ...) \
+ sieve_result_global_log_warning(aenv, __FILE__, __LINE__, __VA_ARGS__)
+
+void sieve_result_event_log(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename,
+ unsigned int csrc_linenum, struct event *event,
+ const char *fmt, ...) ATTR_FORMAT(5, 0);
+#define sieve_result_event_log(aenv, event, ...) \
+ sieve_result_event_log(aenv, __FILE__, __LINE__, event, __VA_ARGS__)
+
+void sieve_result_critical(const struct sieve_action_exec_env *aenv,
+ const char *csrc_filename, unsigned int csrc_linenum,
+ const char *user_prefix, const char *fmt, ...)
+ ATTR_FORMAT(5, 6);
+#define sieve_result_critical(aenv, ...) \
+ sieve_result_critical(aenv, __FILE__, __LINE__, __VA_ARGS__)
+int sieve_result_mail_error(const struct sieve_action_exec_env *aenv,
+ struct mail *mail,
+ const char *csrc_filename,
+ unsigned int csrc_linenum, const char *fmt, ...)
+ ATTR_FORMAT(5, 6);
+#define sieve_result_mail_error(aenv, mail, ...) \
+ sieve_result_mail_error(aenv, mail, __FILE__, __LINE__, __VA_ARGS__)
+
+#endif