16 |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
17 |
|
|
18 |
#include <sys/types.h> |
#include <sys/types.h> |
19 |
|
#include <stdarg.h> |
20 |
#include <mailutils/mailutils.h> |
#include <mailutils/mailutils.h> |
21 |
|
|
22 |
typedef struct sieve_machine sieve_machine_t; |
typedef struct sieve_machine sieve_machine_t; |
23 |
|
|
24 |
typedef int (*sieve_instr_t) __P((sieve_machine_t *mach, list_t *args)); |
typedef int (*sieve_handler_t) __P((sieve_machine_t *mach, |
25 |
|
list_t args, list_t tags)); |
26 |
|
typedef int (*sieve_printf_t) __P((void *data, const char *fmt, va_list ap)); |
27 |
|
typedef int (*sieve_vprintf_t) __P((void *data, const char *fmt, va_list ap)); |
28 |
|
|
29 |
typedef enum { |
typedef enum { |
30 |
SVT_VOID, |
SVT_VOID, |
36 |
SVT_VALUE_LIST |
SVT_VALUE_LIST |
37 |
} sieve_data_type; |
} sieve_data_type; |
38 |
|
|
39 |
|
typedef struct sieve_runtime_tag sieve_runtime_tag_t; |
40 |
|
|
41 |
typedef struct { |
typedef struct { |
42 |
sieve_data_type type; |
sieve_data_type type; |
43 |
union { |
union { |
44 |
char *string; |
char *string; |
45 |
long number; |
long number; |
46 |
list_t list; |
list_t list; |
47 |
|
sieve_runtime_tag_t *tag; |
48 |
} v; |
} v; |
49 |
} sieve_value_t; |
} sieve_value_t; |
50 |
|
|
54 |
sieve_data_type argtype; |
sieve_data_type argtype; |
55 |
} sieve_tag_def_t; |
} sieve_tag_def_t; |
56 |
|
|
57 |
|
struct sieve_runtime_tag { |
58 |
|
int tag; |
59 |
|
sieve_value_t *arg; |
60 |
|
}; |
61 |
|
|
62 |
typedef struct { |
typedef struct { |
63 |
char *name; |
char *name; |
64 |
int required; |
int required; |
65 |
sieve_instr_t instr; |
sieve_handler_t handler; |
66 |
int num_req_args; |
int num_req_args; |
67 |
sieve_data_type *req_args; |
sieve_data_type *req_args; |
68 |
int num_tags; |
int num_tags; |
71 |
|
|
72 |
|
|
73 |
void *sieve_alloc __P((size_t size)); |
void *sieve_alloc __P((size_t size)); |
74 |
int sieve_open_source __P((const char *name)); |
void *sieve_palloc __P((list_t *pool, size_t size)); |
75 |
int sieve_parse __P((const char *name)); |
void *sieve_prealloc __P((list_t *pool, void *ptr, size_t size)); |
76 |
|
void sieve_pfree __P((list_t *pool, void *ptr)); |
77 |
|
char *sieve_pstrdup __P((list_t *pool, const char *str)); |
78 |
|
|
79 |
|
int sieve_compile __P((sieve_machine_t *mach, const char *name, void *data, |
80 |
|
sieve_printf_t errfn)); |
81 |
|
void sieve_set_debug __P((sieve_machine_t *mach, sieve_printf_t debug, |
82 |
|
int level)); |
83 |
|
|
84 |
sieve_value_t * sieve_value_create __P((sieve_data_type type, void *data)); |
sieve_value_t * sieve_value_create __P((sieve_data_type type, void *data)); |
85 |
|
|
86 |
sieve_register_t *sieve_test_lookup __P((const char *name)); |
sieve_register_t *sieve_test_lookup __P((const char *name)); |
87 |
sieve_register_t *sieve_action_lookup __P((const char *name)); |
sieve_register_t *sieve_action_lookup __P((const char *name)); |
88 |
int sieve_register_test __P((const char *name, sieve_instr_t instr, |
int sieve_register_test __P((const char *name, sieve_handler_t handler, |
89 |
sieve_data_type *arg_types, |
sieve_data_type *arg_types, |
90 |
sieve_tag_def_t *tags, int required)); |
sieve_tag_def_t *tags, int required)); |
91 |
int sieve_register_action __P((const char *name, sieve_instr_t instr, |
int sieve_register_action __P((const char *name, sieve_handler_t handler, |
92 |
sieve_data_type *arg_types, |
sieve_data_type *arg_types, |
93 |
sieve_tag_def_t *tags, int required)); |
sieve_tag_def_t *tags, int required)); |
94 |
|
|
95 |
void sieve_slist_destroy __P((list_t *plist)); |
void sieve_slist_destroy __P((list_t *plist)); |
96 |
void sieve_require __P((list_t slist)); |
void sieve_require __P((list_t slist)); |
97 |
|
|
98 |
|
void sieve_abort __P((sieve_machine_t *mach)); |