Blob


1 enum
2 {
3 FlagJunk = 1<<0,
4 FlagNonJunk = 1<<1,
5 FlagReplied = 1<<2,
6 FlagFlagged = 1<<3,
7 FlagDeleted = 1<<4,
8 FlagDraft = 1<<5,
9 FlagSeen = 1<<6,
10 FlagNoInferiors = 1<<7,
11 FlagMarked = 1<<8,
12 FlagNoSelect = 1<<9,
13 FlagUnMarked = 1<<10,
14 FlagRecent = 1<<11
15 };
17 typedef struct Box Box;
18 typedef struct Hdr Hdr;
19 typedef struct Msg Msg;
20 typedef struct Part Part;
22 struct Box
23 {
24 char* name; /* name of mailbox */
25 char* elem; /* last element in name */
26 uint ix; /* index in box[] array */
27 uint id; /* id shown in file system */
28 uint flags; /* FlagNoInferiors, etc. */
29 uint time; /* last update time */
30 uint msgid; /* last message id used */
32 Msg** msg; /* array of messages (can have nils) */
33 uint nmsg;
35 char* imapname; /* name on IMAP server */
36 u32int validity; /* IMAP validity number */
37 uint uidnext; /* IMAP expected next uid */
38 uint recent; /* IMAP first recent message */
39 uint exists; /* IMAP last message in box */
40 uint maxseen; /* maximum IMAP uid seen */
41 int mark;
42 uint imapinit; /* up-to-date w.r.t. IMAP */
44 Box* parent; /* in tree */
45 Box** sub;
46 uint nsub;
47 };
49 struct Hdr
50 {
51 /* LATER: store date as int, reformat for programs */
52 /* order known by fs.c */
53 char* date;
54 char* subject;
55 char* from;
56 char* sender;
57 char* replyto;
58 char* to;
59 char* cc;
60 char* bcc;
61 char* inreplyto;
62 char* messageid;
63 char* digest;
64 };
66 struct Msg
67 {
68 Box* box; /* mailbox containing msg */
69 uint ix; /* index in box->msg[] array */
70 uint id; /* id shown in file system */
71 uint imapuid; /* IMAP uid */
72 uint imapid; /* IMAP id */
73 uint flags; /* FlagDeleted etc. */
74 uint date; /* smtp envelope date */
75 uint size;
77 Part** part; /* message subparts - part[0] is root */
78 uint npart;
79 };
81 struct Part
82 {
83 Msg* msg; /* msg containing part */
84 uint ix; /* index in msg->part[] */
85 uint pix; /* id in parent->sub[] */
86 Part* parent; /* parent in structure */
87 Part** sub; /* children in structure */
88 uint nsub;
90 /* order known by fs.c */
91 char* type; /* e.g., "text/plain" */
92 char* idstr;
93 char* desc;
94 char* encoding;
95 char* charset;
96 char* filename;
97 char* raw;
98 char* rawheader;
99 char* rawbody;
100 char* mimeheader;
102 /* order known by fs.c */
103 uint size;
104 uint lines;
106 char* body;
107 uint nbody;
108 Hdr* hdr; /* RFC822 envelope for message/rfc822 */
109 };
111 void boxinit(void);
112 Box* boxbyname(char*);
113 Box* boxbyid(uint);
114 Box* boxcreate(char*);
115 void boxfree(Box*);
116 Box* subbox(Box*, char*);
117 Msg* msgcreate(Box*);
118 Part* partcreate(Msg*, Part*);
120 void hdrfree(Hdr*);
122 Msg* msgbyid(Box*, uint);
123 Msg* msgbyimapuid(Box*, uint, int);
124 void msgfree(Msg*);
125 void msgplumb(Msg*, int);
127 Part* partbyid(Msg*, uint);
128 Part* subpart(Part*, uint);
129 void partfree(Part*);
131 extern Box** boxes;
132 extern uint nboxes;
134 extern Box* rootbox;