#ifndef SIEVE_COMMON_H #define SIEVE_COMMON_H #include "lib.h" #include "sieve.h" #include /* * Types */ typedef size_t sieve_size_t; typedef uint32_t sieve_offset_t; typedef uint64_t sieve_number_t; #define SIEVE_MAX_NUMBER ((sieve_number_t)-1) #define SIEVE_PRI_NUMBER PRIu64 /* * Forward declarations */ /* sieve-error.h */ struct sieve_error_handler; /* sieve-ast.h */ enum sieve_ast_argument_type; struct sieve_ast; struct sieve_ast_node; struct sieve_ast_argument; /* sieve-commands.h */ struct sieve_argument; struct sieve_argument_def; struct sieve_command; struct sieve_command_def; struct sieve_command_context; struct sieve_command_registration; /* sieve-stringlist.h */ struct sieve_stringlist; /* sieve-code.h */ struct sieve_operation_extension; /* sieve-lexer.h */ struct sieve_lexer; /* sieve-parser.h */ struct sieve_parser; /* sieve-validator.h */ struct sieve_validator; /* sieve-generator.h */ struct sieve_jumplist; struct sieve_generator; struct sieve_codegen_env; /* sieve-runtime.h */ struct sieve_runtime_env; /* sieve-interpreter.h */ struct sieve_interpreter; /* sieve-dump.h */ struct sieve_dumptime_env; /* sieve-binary-dumper.h */ struct sieve_binary_dumper; /* sieve-code-dumper.h */ struct sieve_code_dumper; /* sieve-extension.h */ struct sieve_extension; struct sieve_extension_def; struct sieve_extension_objects; /* sieve-code.h */ struct sieve_operand; struct sieve_operand_def; struct sieve_operand_class; struct sieve_operation; struct sieve_coded_stringlist; /* sieve-binary.h */ struct sieve_binary; struct sieve_binary_block; struct sieve_binary_debug_writer; struct sieve_binary_debug_reader; /* sieve-execute.h */ struct sieve_execute; /* sieve-objects.h */ struct sieve_object_def; struct sieve_object; /* sieve-comparator.h */ struct sieve_comparator; /* sieve-match-types.h */ struct sieve_match_type; /* sieve-match.h */ struct sieve_match_context; /* sieve-address.h */ struct sieve_address_list; /* sieve-address-parts.h */ struct sieve_address_part_def; struct sieve_address_part; /* sieve-result.h */ struct sieve_result; struct sieve_side_effects_list; struct sieve_result_print_env; /* sieve-actions.h */ struct sieve_action_exec_env; struct sieve_action; struct sieve_action_def; struct sieve_side_effect; struct sieve_side_effect_def; /* sieve-script.h */ struct sieve_script; struct sieve_script_sequence; /* sieve-storage.h */ struct sieve_storage_class_registry; struct sieve_storage; /* sieve-message.h */ struct sieve_message_context; struct sieve_message_override; struct sieve_message_override_def; /* sieve-plugins.h */ struct sieve_plugin; /* sieve.c */ struct sieve_ast *sieve_parse (struct sieve_script *script, struct sieve_error_handler *ehandler, enum sieve_error *error_r); bool sieve_validate (struct sieve_ast *ast, struct sieve_error_handler *ehandler, enum sieve_compile_flags flags, enum sieve_error *error_r); /* * Parent category */ extern struct event_category event_category_sieve; /* * Sieve engine instance */ #include "sieve-address-source.h" struct sieve_instance { /* Main engine pool */ pool_t pool; /* System environment */ const char *hostname; const char *domainname; const char *base_dir; const char *temp_dir; /* User environment */ const char *username; const char *home_dir; /* Flags */ enum sieve_flag flags; /* Callbacks */ const struct sieve_callbacks *callbacks; void *context; /* Logging, events, and debug */ struct event *event; bool debug; /* Extension registry */ struct sieve_extension_registry *ext_reg; /* Storage class registry */ struct sieve_storage_class_registry *storage_reg; /* Plugin modules */ struct sieve_plugin *plugins; enum sieve_env_location env_location; enum sieve_delivery_phase delivery_phase; /* Settings */ size_t max_script_size; unsigned int max_actions; unsigned int max_redirects; unsigned int max_cpu_time_secs; unsigned int resource_usage_timeout_secs; const struct smtp_address *user_email, *user_email_implicit; struct sieve_address_source redirect_from; unsigned int redirect_duplicate_period; }; /* * Script trace log */ void sieve_trace_log_write_line (struct sieve_trace_log *trace_log, const string_t *line) ATTR_NULL(2); /* * User e-mail address */ const struct smtp_address *sieve_get_user_email (struct sieve_instance *svinst); /* * Postmaster address */ const struct message_address * sieve_get_postmaster(const struct sieve_script_env *senv); const struct smtp_address * sieve_get_postmaster_smtp(const struct sieve_script_env *senv); const char * sieve_get_postmaster_address(const struct sieve_script_env *senv); #endif