1
/* Copyright (c) 2002-2009 Dovecot Sieve authors, see the included COPYING file
4
#ifndef __SIEVE_EXTENSIONS_H
5
#define __SIEVE_EXTENSIONS_H
8
#include "sieve-common.h"
11
* Per-extension object registry
14
struct sieve_extension_objects {
23
struct sieve_extension {
31
bool (*validator_load)
32
(struct sieve_validator *validator);
33
bool (*generator_load)
34
(const struct sieve_codegen_env *cgenv);
35
bool (*interpreter_load)
36
(const struct sieve_runtime_env *renv, sieve_size_t *address);
38
(struct sieve_binary *binary);
41
(struct sieve_dumptime_env *denv);
43
(const struct sieve_dumptime_env *denv, sieve_size_t *address);
45
struct sieve_extension_objects operations;
46
struct sieve_extension_objects operands;
49
#define SIEVE_EXT_ID(EXT) (*((EXT)->_id))
50
#define SIEVE_EXT_ENABLED(EXT) (((EXT)->_id != NULL) && (*((EXT)->_id) >= 0))
52
#define SIEVE_EXT_DEFINE_NO_OBJECTS \
54
#define SIEVE_EXT_DEFINE_OBJECT(OBJ) \
56
#define SIEVE_EXT_DEFINE_OBJECTS(OBJS) \
57
{ OBJS, N_ELEMENTS(OBJS) }
59
#define SIEVE_EXT_GET_OBJECTS_COUNT(ext, field) \
63
* Defining opcodes and operands
66
#define SIEVE_EXT_DEFINE_NO_OPERATIONS SIEVE_EXT_DEFINE_NO_OBJECTS
67
#define SIEVE_EXT_DEFINE_OPERATION(OP) SIEVE_EXT_DEFINE_OBJECT(OP)
68
#define SIEVE_EXT_DEFINE_OPERATIONS(OPS) SIEVE_EXT_DEFINE_OBJECTS(OPS)
70
#define SIEVE_EXT_DEFINE_NO_OPERANDS SIEVE_EXT_DEFINE_NO_OBJECTS
71
#define SIEVE_EXT_DEFINE_OPERAND(OP) SIEVE_EXT_DEFINE_OBJECT(OP)
72
#define SIEVE_EXT_DEFINE_OPERANDS(OPS) SIEVE_EXT_DEFINE_OBJECTS(OPS)
75
* Pre-loaded extensions
78
extern const struct sieve_extension *sieve_preloaded_extensions[];
79
extern const unsigned int sieve_preloaded_extensions_count;
82
* Extensions init/deinit
85
bool sieve_extensions_init(void);
86
void sieve_extensions_deinit(void);
92
int sieve_extension_register(const struct sieve_extension *extension, bool load);
93
int sieve_extension_require(const struct sieve_extension *extension);
94
int sieve_extensions_get_count(void);
95
const struct sieve_extension *sieve_extension_get_by_id(unsigned int ext_id);
96
const struct sieve_extension *sieve_extension_get_by_name(const char *name);
98
const char *sieve_extensions_get_string(void);
99
void sieve_extensions_set_string(const char *ext_string);
102
* Capability registries
105
struct sieve_extension_capabilities {
108
const struct sieve_extension *extension;
110
const char *(*get_string)(void);
113
void sieve_extension_capabilities_register
114
(const struct sieve_extension_capabilities *cap);
115
const char *sieve_extension_capabilities_get_string
116
(const char *cap_name);
118
#endif /* __SIEVE_EXTENSIONS_H */