#ifndef __SIEVE_H
#define __SIEVE_H
struct sieve_script;
struct sieve_binary;
#include "sieve-config.h"
#include "sieve-types.h"
#include "sieve-error.h"
struct sieve_instance *sieve_init
(const struct sieve_environment *env, void *context, bool debug);
void sieve_deinit(struct sieve_instance **svinst);
const char *sieve_get_capabilities
(struct sieve_instance *svinst, const char *name);
void sieve_set_extensions
(struct sieve_instance *svinst, const char *extensions);
struct sieve_binary *sieve_compile_script
(struct sieve_script *script, struct sieve_error_handler *ehandler,
enum sieve_error *error_r);
struct sieve_binary *sieve_compile
(struct sieve_instance *svinst, const char *script_path,
const char *script_name, struct sieve_error_handler *ehandler,
enum sieve_error *error_r);
struct sieve_binary *sieve_load
(struct sieve_instance *svinst, const char *bin_path,
enum sieve_error *error_r);
struct sieve_binary *sieve_open
(struct sieve_instance *svinst, const char *script_path,
const char *script_name, struct sieve_error_handler *ehandler,
enum sieve_error *error_r);
int sieve_save
(struct sieve_binary *sbin, const char *bin_path, bool update,
enum sieve_error *error_r);
void sieve_close(struct sieve_binary **sbin);
const char *sieve_get_source(struct sieve_binary *sbin);
bool sieve_is_loaded(struct sieve_binary *sbin);
void sieve_dump
(struct sieve_binary *sbin, struct ostream *stream, bool verbose);
void sieve_hexdump
(struct sieve_binary *sbin, struct ostream *stream);
int sieve_test
(struct sieve_binary *sbin, const struct sieve_message_data *msgdata,
const struct sieve_script_env *senv, struct sieve_error_handler *ehandler,
struct ostream *stream, bool *keep);
int sieve_execute
(struct sieve_binary *sbin, const struct sieve_message_data *msgdata,
const struct sieve_script_env *senv, struct sieve_error_handler *ehandler,
bool *keep);
struct sieve_multiscript;
struct sieve_multiscript *sieve_multiscript_start_execute
(struct sieve_instance *svinst, const struct sieve_message_data *msgdata,
const struct sieve_script_env *senv);
struct sieve_multiscript *sieve_multiscript_start_test
(struct sieve_instance *svinst, const struct sieve_message_data *msgdata,
const struct sieve_script_env *senv, struct ostream *stream);
bool sieve_multiscript_run
(struct sieve_multiscript *mscript, struct sieve_binary *sbin,
struct sieve_error_handler *ehandler, bool final);
int sieve_multiscript_status(struct sieve_multiscript *mscript);
int sieve_multiscript_finish
(struct sieve_multiscript **mscript, struct sieve_error_handler *ehandler,
bool *keep);
unsigned int sieve_max_redirects(struct sieve_instance *svinst);
unsigned int sieve_max_actions(struct sieve_instance *svinst);
size_t sieve_max_script_size(struct sieve_instance *svinst);
struct sieve_directory;
struct sieve_directory *sieve_directory_open
(struct sieve_instance *svinst, const char *path, enum sieve_error *error_r);
const char *sieve_directory_get_scriptfile(struct sieve_directory *sdir);
void sieve_directory_close(struct sieve_directory **sdir);
#endif