summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/lib-sieve/sieve-script.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--pigeonhole/src/lib-sieve/sieve-script.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/sieve-script.h b/pigeonhole/src/lib-sieve/sieve-script.h
new file mode 100644
index 0000000..8ee53f4
--- /dev/null
+++ b/pigeonhole/src/lib-sieve/sieve-script.h
@@ -0,0 +1,163 @@
+#ifndef SIEVE_SCRIPT_H
+#define SIEVE_SCRIPT_H
+
+#include "sieve-common.h"
+
+#include <sys/types.h>
+
+
+/*
+ * Sieve script name
+ */
+
+bool sieve_script_name_is_valid(const char *scriptname);
+
+/*
+ * Sieve script file
+ */
+
+bool sieve_script_file_has_extension(const char *filename);
+
+/*
+ * Sieve script class
+ */
+
+void sieve_script_class_register(struct sieve_instance *svinst,
+ const struct sieve_script *script_class);
+void sieve_script_class_unregister(struct sieve_instance *svinst,
+ const struct sieve_script *script_class);
+
+/*
+ * Sieve script instance
+ */
+
+struct sieve_script;
+
+ARRAY_DEFINE_TYPE(sieve_script, struct sieve_script *);
+
+struct sieve_script *
+sieve_script_create(struct sieve_instance *svinst, const char *location,
+ const char *name, enum sieve_error *error_r) ATTR_NULL(3,4);
+
+void sieve_script_ref(struct sieve_script *script);
+void sieve_script_unref(struct sieve_script **script);
+
+int sieve_script_open(struct sieve_script *script, enum sieve_error *error_r)
+ ATTR_NULL(2);
+int sieve_script_open_as(struct sieve_script *script, const char *name,
+ enum sieve_error *error_r) ATTR_NULL(3);
+
+struct sieve_script *
+sieve_script_create_open(struct sieve_instance *svinst, const char *location,
+ const char *name, enum sieve_error *error_r)
+ ATTR_NULL(3, 4);
+int sieve_script_check(struct sieve_instance *svinst, const char *location,
+ const char *name, enum sieve_error *error_r)
+ ATTR_NULL(3, 4);
+
+/*
+ * Data script
+ */
+
+struct sieve_script *
+sieve_data_script_create_from_input(struct sieve_instance *svinst,
+ const char *name, struct istream *input);
+
+/*
+ * Binary
+ */
+
+int sieve_script_binary_read_metadata(struct sieve_script *script,
+ struct sieve_binary_block *sblock,
+ sieve_size_t *offset);
+void sieve_script_binary_write_metadata(struct sieve_script *script,
+ struct sieve_binary_block *sblock);
+bool sieve_script_binary_dump_metadata(struct sieve_script *script,
+ struct sieve_dumptime_env *denv,
+ struct sieve_binary_block *sblock,
+ sieve_size_t *offset) ATTR_NULL(1);
+
+struct sieve_binary *
+sieve_script_binary_load(struct sieve_script *script,
+ enum sieve_error *error_r);
+int sieve_script_binary_save(struct sieve_script *script,
+ struct sieve_binary *sbin, bool update,
+ enum sieve_error *error_r) ATTR_NULL(4);
+
+const char *sieve_script_binary_get_prefix(struct sieve_script *script);
+
+/*
+ * Stream management
+ */
+
+int sieve_script_get_stream(struct sieve_script *script,
+ struct istream **stream_r,
+ enum sieve_error *error_r) ATTR_NULL(3);
+
+/*
+ * Management
+ */
+
+// FIXME: check read/write flag!
+
+int sieve_script_rename(struct sieve_script *script, const char *newname);
+int sieve_script_is_active(struct sieve_script *script);
+int sieve_script_activate(struct sieve_script *script, time_t mtime);
+int sieve_script_delete(struct sieve_script *script, bool ignore_active);
+
+/*
+ * Properties
+ */
+
+const char *sieve_script_name(const struct sieve_script *script) ATTR_PURE;
+const char *sieve_script_location(const struct sieve_script *script) ATTR_PURE;
+struct sieve_instance *
+sieve_script_svinst(const struct sieve_script *script) ATTR_PURE;
+
+int sieve_script_get_size(struct sieve_script *script, uoff_t *size_r);
+bool sieve_script_is_open(const struct sieve_script *script) ATTR_PURE;
+bool sieve_script_is_default(const struct sieve_script *script) ATTR_PURE;
+
+const char *
+sieve_file_script_get_dirpath(const struct sieve_script *script) ATTR_PURE;
+const char *
+sieve_file_script_get_path(const struct sieve_script *script) ATTR_PURE;
+
+/*
+ * Comparison
+ */
+
+bool sieve_script_equals(const struct sieve_script *script,
+ const struct sieve_script *other);
+
+unsigned int sieve_script_hash(const struct sieve_script *script);
+static inline int
+sieve_script_cmp(const struct sieve_script *script,
+ const struct sieve_script *other)
+{
+ return ( sieve_script_equals(script, other) ? 0 : -1 );
+}
+
+/*
+ * Error handling
+ */
+
+const char *sieve_script_get_last_error(struct sieve_script *script,
+ enum sieve_error *error_r) ATTR_NULL(2);
+const char *sieve_script_get_last_error_lcase(struct sieve_script *script);
+
+/*
+ * Script sequence
+ */
+
+struct sieve_script_sequence;
+
+struct sieve_script_sequence *
+sieve_script_sequence_create(struct sieve_instance *svinst,
+ const char *location, enum sieve_error *error_r);
+struct sieve_script *
+sieve_script_sequence_next(struct sieve_script_sequence *seq,
+ enum sieve_error *error_r);
+void sieve_script_sequence_free(struct sieve_script_sequence **_seq);
+
+#endif