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