#ifndef __SIEVE_TYPES_H
#define __SIEVE_TYPES_H
#include "lib.h"
#include <stdio.h>
struct sieve_instance;
struct sieve_callbacks;
struct sieve_script;
struct sieve_binary;
struct sieve_message_data;
struct sieve_script_env;
struct sieve_exec_status;
enum sieve_flag {
SIEVE_FLAG_HOME_RELATIVE = (1 << 0),
};
enum sieve_env_location {
SIEVE_ENV_LOCATION_UNKNOWN = 0,
SIEVE_ENV_LOCATION_MDA,
SIEVE_ENV_LOCATION_MTA,
SIEVE_ENV_LOCATION_MS
};
enum sieve_delivery_phase {
SIEVE_DELIVERY_PHASE_UNKNOWN = 0,
SIEVE_DELIVERY_PHASE_PRE,
SIEVE_DELIVERY_PHASE_DURING,
SIEVE_DELIVERY_PHASE_POST,
};
struct sieve_environment {
const char *hostname;
const char *domainname;
const char *base_dir;
const char *username;
const char *home_dir;
enum sieve_flag flags;
enum sieve_env_location location;
enum sieve_delivery_phase delivery_phase;
};
struct sieve_callbacks {
const char *(*get_homedir)(void *context);
const char *(*get_setting)(void *context, const char *identifier);
};
enum sieve_error {
SIEVE_ERROR_NONE = 0,
SIEVE_ERROR_TEMP_FAILURE,
SIEVE_ERROR_NOT_POSSIBLE,
SIEVE_ERROR_BAD_PARAMS,
SIEVE_ERROR_NO_PERMISSION,
SIEVE_ERROR_NO_SPACE,
SIEVE_ERROR_NO_QUOTA,
SIEVE_ERROR_NOT_FOUND,
SIEVE_ERROR_EXISTS,
SIEVE_ERROR_NOT_VALID,
SIEVE_ERROR_ACTIVE
};
enum sieve_compile_flags {
SIEVE_COMPILE_FLAG_NOGLOBAL = (1<<0),
SIEVE_COMPILE_FLAG_UPLOADED = (1<<1),
SIEVE_COMPILE_FLAG_ACTIVATED = (1<<2),
};
struct sieve_message_data {
struct mail *mail;
const char *return_path;
const char *orig_envelope_to;
const char *final_envelope_to;
const char *auth_user;
const char *id;
};
enum sieve_runtime_flags {
SIEVE_RUNTIME_FLAG_NOGLOBAL = (1<<0)
};
typedef enum {
SIEVE_TRLVL_NONE,
SIEVE_TRLVL_ACTIONS,
SIEVE_TRLVL_COMMANDS,
SIEVE_TRLVL_TESTS,
SIEVE_TRLVL_MATCHING
} sieve_trace_level_t;
enum {
SIEVE_TRFLG_DEBUG = (1 << 0),
SIEVE_TRFLG_ADDRESSES = (1 << 1)
};
struct sieve_trace_config {
sieve_trace_level_t level;
unsigned int flags;
};
struct sieve_script_env {
const char *action_log_format;
struct mail_user *user;
const char *default_mailbox;
const char *postmaster_address;
bool mailbox_autocreate;
bool mailbox_autosubscribe;
void *script_context;
void *(*smtp_open)
(const struct sieve_script_env *senv, const char *destination,
const char *return_path, struct ostream **output_r);
bool (*smtp_close)(const struct sieve_script_env *senv, void *handle);
int (*duplicate_check)
(const struct sieve_script_env *senv, const void *id, size_t id_size);
void (*duplicate_mark)
(const struct sieve_script_env *senv, const void *id, size_t id_size,
time_t time);
int (*reject_mail)(const struct sieve_script_env *senv, const char *recipient,
const char *reason);
struct sieve_exec_status *exec_status;
struct ostream *trace_stream;
struct sieve_trace_config trace_config;
};
#define SIEVE_SCRIPT_DEFAULT_MAILBOX(senv) \
(senv->default_mailbox == NULL ? "INBOX" : senv->default_mailbox )
struct sieve_exec_status {
bool message_saved;
bool message_forwarded;
bool tried_default_save;
bool keep_original;
struct mail_storage *last_storage;
};
enum sieve_execution_exitcode {
SIEVE_EXEC_OK = 1,
SIEVE_EXEC_FAILURE = 0,
SIEVE_EXEC_TEMP_FAILURE = -1,
SIEVE_EXEC_BIN_CORRUPT = -2,
SIEVE_EXEC_KEEP_FAILED = -3
};
#endif