summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/lib-sieve/sieve-script-private.h
diff options
context:
space:
mode:
Diffstat (limited to 'pigeonhole/src/lib-sieve/sieve-script-private.h')
-rw-r--r--pigeonhole/src/lib-sieve/sieve-script-private.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/sieve-script-private.h b/pigeonhole/src/lib-sieve/sieve-script-private.h
new file mode 100644
index 0000000..7f23c19
--- /dev/null
+++ b/pigeonhole/src/lib-sieve/sieve-script-private.h
@@ -0,0 +1,100 @@
+#ifndef SIEVE_SCRIPT_PRIVATE_H
+#define SIEVE_SCRIPT_PRIVATE_H
+
+#include "sieve-common.h"
+#include "sieve-script.h"
+
+/*
+ * Script object
+ */
+
+struct sieve_script_vfuncs {
+ void (*destroy)(struct sieve_script *script);
+
+ int (*open)(struct sieve_script *script, enum sieve_error *error_r);
+
+ int (*get_stream)(struct sieve_script *script,
+ struct istream **stream_r, enum sieve_error *error_r);
+
+ /* binary */
+ int (*binary_read_metadata)(struct sieve_script *_script,
+ struct sieve_binary_block *sblock,
+ sieve_size_t *offset);
+ void (*binary_write_metadata)(struct sieve_script *script,
+ struct sieve_binary_block *sblock);
+ bool (*binary_dump_metadata)(struct sieve_script *script,
+ struct sieve_dumptime_env *denv,
+ struct sieve_binary_block *sblock,
+ sieve_size_t *offset);
+ struct sieve_binary *(*binary_load)(struct sieve_script *script,
+ enum sieve_error *error_r);
+ int (*binary_save)(struct sieve_script *script,
+ struct sieve_binary *sbin, bool update,
+ enum sieve_error *error_r);
+ const char *(*binary_get_prefix)(struct sieve_script *script);
+
+ /* management */
+ int (*rename)(struct sieve_script *script, const char *newname);
+ int (*delete)(struct sieve_script *script);
+ int (*is_active)(struct sieve_script *script);
+ int (*activate)(struct sieve_script *script);
+
+ /* properties */
+ int (*get_size)(const struct sieve_script *script, uoff_t *size_r);
+
+ /* matching */
+ bool (*equals)(const struct sieve_script *script,
+ const struct sieve_script *other);
+};
+
+struct sieve_script {
+ pool_t pool;
+ unsigned int refcount;
+ struct sieve_storage *storage;
+ struct event *event;
+
+ const char *driver_name;
+ const struct sieve_script *script_class;
+ struct sieve_script_vfuncs v;
+
+ const char *name;
+ const char *location;
+
+ /* Stream */
+ struct istream *stream;
+
+ bool open:1;
+};
+
+void sieve_script_init(struct sieve_script *script,
+ struct sieve_storage *storage,
+ const struct sieve_script *script_class,
+ const char *location, const char *name);
+
+/*
+ * Built-in script drivers
+ */
+
+extern const struct sieve_script sieve_data_script;
+extern const struct sieve_script sieve_file_script;
+extern const struct sieve_script sieve_dict_script;
+extern const struct sieve_script sieve_ldap_script;
+
+/*
+ * Error handling
+ */
+
+void sieve_script_set_error(struct sieve_script *script, enum sieve_error error,
+ const char *fmt, ...) ATTR_FORMAT(3, 4);
+void sieve_script_set_internal_error(struct sieve_script *script);
+void sieve_script_set_critical(struct sieve_script *script,
+ const char *fmt, ...) ATTR_FORMAT(2, 3);
+
+/*
+ * Script sequence
+ */
+
+void sieve_script_sequence_init(struct sieve_script_sequence *seq,
+ struct sieve_storage *storage);
+
+#endif