#ifndef MESSAGE_H
#define MESSAGE_H
#include "sieve_interface.h"
#include "tree.h"
typedef struct Action action_list_t;
typedef enum {
ACTION_NULL = -1,
ACTION_NONE = 0,
ACTION_REJECT,
ACTION_FILEINTO,
ACTION_KEEP,
ACTION_REDIRECT,
ACTION_DISCARD,
ACTION_VACATION,
ACTION_SETFLAG,
ACTION_ADDFLAG,
ACTION_REMOVEFLAG,
ACTION_MARK,
ACTION_UNMARK,
ACTION_NOTIFY,
ACTION_DENOTIFY
} action_t;
action_list_t *new_action_list(void);
void free_action_list(action_list_t *actions);
struct Action {
action_t a;
union {
sieve_reject_context_t rej;
sieve_fileinto_context_t fil;
sieve_keep_context_t keep;
sieve_redirect_context_t red;
struct {
sieve_send_response_context_t send;
sieve_autorespond_context_t autoresp;
} vac;
struct {
const char *flag;
} fla;
} u;
char *param;
struct Action *next;
char *vac_subj;
char *vac_msg;
int vac_days;
};
typedef struct notify_list_s {
int isactive;
const char *id;
const char *method;
const char **options;
const char *priority;
const char *message;
struct notify_list_s *next;
} notify_list_t;
typedef enum {
ADDRESS_ALL,
ADDRESS_LOCALPART,
ADDRESS_DOMAIN,
ADDRESS_USER,
ADDRESS_DETAIL
} address_part_t;
int parse_address(const char *header, void **data, void **marker);
char *get_address(address_part_t addrpart, void **data, void **marker,
int canon_domain);
int free_address(void **data, void **marker);
notify_list_t *new_notify_list(void);
void free_notify_list(notify_list_t *n);
int do_reject(action_list_t *m, const char *msg);
int do_fileinto(action_list_t *m, const char *mbox,
sieve_imapflags_t *imapflags);
int do_redirect(action_list_t *m, const char *addr);
int do_keep(action_list_t *m, sieve_imapflags_t *imapflags);
int do_discard(action_list_t *m);
int do_vacation(action_list_t *m, char *addr, char *fromaddr,
char *subj, const char *msg, int days, int mime);
int do_setflag(action_list_t *m, const char *flag);
int do_addflag(action_list_t *m, const char *flag);
int do_removeflag(action_list_t *m, const char *flag);
int do_mark(action_list_t *m);
int do_unmark(action_list_t *m);
int do_notify(notify_list_t *n, const char *id,
const char *method, const char **options,
const char *priority, const char *message);
int do_denotify(notify_list_t *n, comparator_t *comp, const void *pat,
void *comprock, const char *priority);
#endif