1 #ifndef EXT_VARIABLES_MODIFIERS_H
2 #define EXT_VARIABLES_MODIFIERS_H
3
4 #include "sieve-common.h"
5 #include "sieve-runtime-trace.h"
6
7 #include "ext-variables-common.h"
8
9 #define ext_variables_namespace_name(nspc) \
10 (nspc)->object->def->name
11 #define ext_variables_namespaces_equal(nspc1, nspc2) \
12 ( (nspc1)->def == (nspc2)->def ))
13
14 /*
15 * Modifier registry
16 */
17
18 bool ext_variables_modifier_exists
19 (const struct sieve_extension *var_ext, struct sieve_validator *valdtr,
20 const char *identifier);
21 const struct sieve_variables_modifier *ext_variables_modifier_create_instance
22 (const struct sieve_extension *var_ext, struct sieve_validator *valdtr,
23 struct sieve_command *cmd, const char *identifier);
24
25 void ext_variables_register_core_modifiers
26 (const struct sieve_extension *var_ext,
27 struct ext_variables_validator_context *ctx);
28
29 /*
30 * Modifier operand
31 */
32
33 extern const struct sieve_operand_def modifier_operand;
34
ext_variables_opr_modifier_emit(struct sieve_binary_block * sblock,const struct sieve_extension * ext,const struct sieve_variables_modifier_def * modf_def)35 static inline void ext_variables_opr_modifier_emit
36 (struct sieve_binary_block *sblock, const struct sieve_extension *ext,
37 const struct sieve_variables_modifier_def *modf_def)
38 {
39 sieve_opr_object_emit(sblock, ext, &modf_def->obj_def);
40 }
41
42 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)43 ext_variables_opr_modifier_read(const struct sieve_runtime_env *renv,
44 const struct sieve_extension *var_ext,
45 sieve_size_t *address,
46 struct sieve_variables_modifier *modf)
47 {
48 if ( !sieve_opr_object_read
49 (renv, &sieve_variables_modifier_operand_class, address, &modf->object) ) {
50 sieve_runtime_trace_error(renv, "invalid modifier operand");
51 return FALSE;
52 }
53
54 modf->def = (const struct sieve_variables_modifier_def *) modf->object.def;
55 modf->var_ext = var_ext;
56 return TRUE;
57 }
58
ext_variables_opr_modifier_dump(const struct sieve_dumptime_env * denv,sieve_size_t * address)59 static inline bool ext_variables_opr_modifier_dump
60 (const struct sieve_dumptime_env *denv, sieve_size_t *address)
61 {
62 return sieve_opr_object_dump
63 (denv, &sieve_variables_modifier_operand_class, address, NULL);
64 }
65
66 #endif
67