#ifndef INCLUDED_IMAPD_H
#define INCLUDED_IMAPD_H
#include "annotate.h"
#include "charset.h"
#include "mailbox.h"
#include "prot.h"
extern char *imapd_userid;
extern struct auth_state *imapd_authstate;
extern int imapd_exists;
struct fieldlist {
char *section;
struct strlist *fields;
char *trail;
void *rock;
struct fieldlist *next;
};
struct fetchargs {
int fetchitems;
struct strlist *binsections;
struct strlist *sizesections;
struct strlist *bodysections;
struct fieldlist *fsections;
struct strlist *headers;
struct strlist *headers_not;
int start_octet;
int octet_count;
bit32 cache_atleast;
};
struct octetinfo
{
int start_octet;
int octet_count;
};
enum {
FETCH_UID = (1<<0),
FETCH_INTERNALDATE = (1<<1),
FETCH_SIZE = (1<<2),
FETCH_FLAGS = (1<<3),
FETCH_ENVELOPE = (1<<4),
FETCH_BODYSTRUCTURE = (1<<5),
FETCH_BODY = (1<<6),
FETCH_HEADER = (1<<7),
FETCH_TEXT = (1<<8),
FETCH_RFC822 = (1<<9),
FETCH_SETSEEN = (1<<10),
FETCH_IS_PARTIAL = (1<<12)
};
enum {
FETCH_FAST = (FETCH_FLAGS|FETCH_INTERNALDATE|FETCH_SIZE),
FETCH_ALL = (FETCH_FLAGS|FETCH_INTERNALDATE|FETCH_SIZE|FETCH_ENVELOPE),
FETCH_FULL = (FETCH_ALL|FETCH_BODY)
};
struct storeargs {
int operation;
int silent;
int seen;
bit32 system_flags;
bit32 user_flags[MAX_USER_FLAGS/32];
time_t update_time;
int usinguid;
int last_msgno;
int last_found;
};
enum {
STORE_ADD = 1,
STORE_REMOVE = 2,
STORE_REPLACE = 3
};
struct searchsub {
struct searchsub *next;
struct searchargs *sub1;
struct searchargs *sub2;
};
enum {
SEARCH_RECENT_SET = (1<<0),
SEARCH_RECENT_UNSET = (1<<1),
SEARCH_SEEN_SET = (1<<2),
SEARCH_SEEN_UNSET = (1<<3)
};
struct searchargs {
int flags;
unsigned smaller, larger;
time_t before, after;
time_t sentbefore, sentafter;
bit32 system_flags_set;
bit32 system_flags_unset;
bit32 user_flags_set[MAX_USER_FLAGS/32];
bit32 user_flags_unset[MAX_USER_FLAGS/32];
struct strlist *sequence;
struct strlist *uidsequence;
struct strlist *from;
struct strlist *to;
struct strlist *cc;
struct strlist *bcc;
struct strlist *subject;
struct strlist *messageid;
struct strlist *body;
struct strlist *text;
struct strlist *header_name, *header;
struct searchsub *sublist;
bit32 cache_atleast;
};
struct sortcrit {
unsigned key;
int flags;
union {
struct {
char *entry;
char *attrib;
} annot;
} args;
};
enum {
SORT_SEQUENCE = 0,
SORT_ARRIVAL,
SORT_CC,
SORT_DATE,
SORT_FROM,
SORT_SIZE,
SORT_SUBJECT,
SORT_TO,
SORT_ANNOTATION
};
#define SORT_REVERSE (1<<0)
enum {
STATUS_MESSAGES = (1<<0),
STATUS_RECENT = (1<<1),
STATUS_UIDNEXT = (1<<2),
STATUS_UIDVALIDITY = (1<<3),
STATUS_UNSEEN = (1<<4)
};
enum {
LIST_LSUB = (1<<0),
LIST_EXT = (1<<1),
LIST_SUBSCRIBED = (1<<2),
LIST_CHILDREN = (1<<3),
LIST_REMOTE = (1<<4)
};
extern struct protstream *imapd_out, *imapd_in;
extern void index_closemailbox(struct mailbox *mailbox);
extern void index_newmailbox(struct mailbox *mailbox, int examine_mode);
extern void index_operatemailbox(struct mailbox *mailbox);
extern void index_check(struct mailbox *mailbox, int usinguid,
int checkseen);
extern void index_checkseen(struct mailbox *mailbox, int quiet,
int usinguid, int oldexists);
extern int index_fetch(struct mailbox *mailbox, const char *sequence,
int usinguid, struct fetchargs *fetchargs,
int* fetchedsomething);
extern int index_store(struct mailbox *mailbox, char *sequence,
int usinguid, struct storeargs *storeargs,
char **flag, int nflags);
extern int index_search(struct mailbox *mailbox,
struct searchargs *searchargs, int usinguid);
extern int find_thread_algorithm(char *arg);
extern int index_sort(struct mailbox *mailbox, struct sortcrit *sortcrit,
struct searchargs *searchargs, int usinguid);
extern int index_thread(struct mailbox *mailbox, int algorithm,
struct searchargs *searchargs, int usinguid);
extern int index_copy(struct mailbox *mailbox, char *sequence,
int usinguid, char *name, char **copyuidp);
extern int index_status(struct mailbox *mailbox, char *name,
int statusitems);
extern int index_getuids(struct mailbox *mailbox, unsigned lowuid);
extern int index_getstate(struct mailbox *mailbox);
extern int index_checkstate(struct mailbox *mailbox, unsigned indexdate,
unsigned seendate);
extern int index_finduid(unsigned uid);
extern int index_getuid(unsigned msgno);
extern mailbox_decideproc_t index_expungeuidlist;
extern void index_getsearchtext(struct mailbox* mailbox,
index_search_text_receiver_t receiver,
void* rock);
#endif