summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/lib-sieve/plugins/variables/ext-variables-modifiers.h
diff options
context:
space:
mode:
Diffstat (limited to 'pigeonhole/src/lib-sieve/plugins/variables/ext-variables-modifiers.h')
-rw-r--r--pigeonhole/src/lib-sieve/plugins/variables/ext-variables-modifiers.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/plugins/variables/ext-variables-modifiers.h b/pigeonhole/src/lib-sieve/plugins/variables/ext-variables-modifiers.h
new file mode 100644
index 0000000..50b4256
--- /dev/null
+++ b/pigeonhole/src/lib-sieve/plugins/variables/ext-variables-modifiers.h
@@ -0,0 +1,66 @@
+#ifndef EXT_VARIABLES_MODIFIERS_H
+#define EXT_VARIABLES_MODIFIERS_H
+
+#include "sieve-common.h"
+#include "sieve-runtime-trace.h"
+
+#include "ext-variables-common.h"
+
+#define ext_variables_namespace_name(nspc) \
+ (nspc)->object->def->name
+#define ext_variables_namespaces_equal(nspc1, nspc2) \
+ ( (nspc1)->def == (nspc2)->def ))
+
+/*
+ * Modifier registry
+ */
+
+bool ext_variables_modifier_exists
+ (const struct sieve_extension *var_ext, struct sieve_validator *valdtr,
+ const char *identifier);
+const struct sieve_variables_modifier *ext_variables_modifier_create_instance
+ (const struct sieve_extension *var_ext, struct sieve_validator *valdtr,
+ struct sieve_command *cmd, const char *identifier);
+
+void ext_variables_register_core_modifiers
+ (const struct sieve_extension *var_ext,
+ struct ext_variables_validator_context *ctx);
+
+/*
+ * Modifier operand
+ */
+
+extern const struct sieve_operand_def modifier_operand;
+
+static inline void ext_variables_opr_modifier_emit
+(struct sieve_binary_block *sblock, const struct sieve_extension *ext,
+ const struct sieve_variables_modifier_def *modf_def)
+{
+ sieve_opr_object_emit(sblock, ext, &modf_def->obj_def);
+}
+
+static inline bool
+ext_variables_opr_modifier_read(const struct sieve_runtime_env *renv,
+ const struct sieve_extension *var_ext,
+ sieve_size_t *address,
+ struct sieve_variables_modifier *modf)
+{
+ if ( !sieve_opr_object_read
+ (renv, &sieve_variables_modifier_operand_class, address, &modf->object) ) {
+ sieve_runtime_trace_error(renv, "invalid modifier operand");
+ return FALSE;
+ }
+
+ modf->def = (const struct sieve_variables_modifier_def *) modf->object.def;
+ modf->var_ext = var_ext;
+ return TRUE;
+}
+
+static inline bool ext_variables_opr_modifier_dump
+(const struct sieve_dumptime_env *denv, sieve_size_t *address)
+{
+ return sieve_opr_object_dump
+ (denv, &sieve_variables_modifier_operand_class, address, NULL);
+}
+
+#endif