* add literal support to imap login / passwords; this should fix our communication...
[citadel.git] / citadel / modules / imap / serv_imap.h
1 /* $Id$ 
2  */
3
4
5 #define GLOBAL_UIDVALIDITY_VALUE        1L
6
7
8 void imap_cleanup_function(void);
9 void imap_greeting(void);
10 void imap_command_loop(void);
11 int imap_grabroom(char *returned_roomname, char *foldername, int zapped_ok);
12 void imap_free_transmitted_message(void);
13 int imap_do_expunge(void);
14 void imap_rescan_msgids(void);
15
16
17 struct citimap {
18         int authstate;
19         char authseq[SIZ];
20         int selected;                   /* set to 1 if in the SELECTED state */
21         int readonly;                   /* mailbox is open read only */
22         int num_msgs;                   /* Number of messages being mapped */
23         int num_alloc;                  /* Number of messages for which we've allocated space */
24         time_t last_mtime;              /* For checking whether the room was modified... */
25         long *msgids;
26         unsigned int *flags;
27         char *transmitted_message;      /* for APPEND command... */
28         size_t transmitted_length;
29
30         /* Cache most recent RFC822 FETCH because client might load in pieces */
31         char *cached_rfc822_data;
32         long cached_rfc822_msgnum;
33         size_t cached_rfc822_len;
34         char cached_rfc822_withbody;    /* 1 = body cached; 0 = only headers cached */
35
36         /* Cache most recent BODY FETCH because client might load in pieces */
37         char *cached_body;
38         size_t cached_body_len;
39         char cached_bodypart[SIZ];
40         long cached_bodymsgnum;
41         char cached_body_withbody;      /* 1 = body cached; 0 = only headers cached */
42 };
43
44 /*
45  * values of 'authstate'
46  */
47 enum {
48         imap_as_normal,
49         imap_as_expecting_username,
50         imap_as_expecting_password,
51         imap_as_expecting_plainauth,
52         imap_as_expecting_multilineusername,
53         imap_as_expecting_multilinepassword
54 };
55
56 /* Flags for the above struct.  Note that some of these are for internal use,
57  * and are not to be reported to IMAP clients.
58  */
59 #define IMAP_ANSWERED           1       /* reportable and setable */
60 #define IMAP_FLAGGED            2       /* reportable and setable */
61 #define IMAP_DELETED            4       /* reportable and setable */
62 #define IMAP_DRAFT              8       /* reportable and setable */
63 #define IMAP_SEEN               16      /* reportable and setable */
64
65 #define IMAP_MASK_SETABLE       0x1f
66 #define IMAP_MASK_SYSTEM        0xe0
67
68 #define IMAP_SELECTED           32      /* neither reportable nor setable */
69 #define IMAP_RECENT             64      /* reportable but not setable */
70
71
72 #define IMAP ((struct citimap *)CC->session_specific_data)
73
74 /*
75  * When loading arrays of message ID's into memory, increase the buffer to
76  * hold this many additional messages instead of calling realloc() each time.
77  */
78 #define REALLOC_INCREMENT 100