Blame


1 5cdb1798 2005-10-29 devnull typedef struct Message Message;
2 5cdb1798 2005-10-29 devnull struct Message
3 5cdb1798 2005-10-29 devnull {
4 5cdb1798 2005-10-29 devnull int id;
5 5cdb1798 2005-10-29 devnull int refs;
6 5cdb1798 2005-10-29 devnull int subname;
7 5cdb1798 2005-10-29 devnull char name[Elemlen];
8 5cdb1798 2005-10-29 devnull
9 5cdb1798 2005-10-29 devnull // pointers into message
10 5cdb1798 2005-10-29 devnull char *start; // start of message
11 5cdb1798 2005-10-29 devnull char *end; // end of message
12 5cdb1798 2005-10-29 devnull char *header; // start of header
13 5cdb1798 2005-10-29 devnull char *hend; // end of header
14 5cdb1798 2005-10-29 devnull int hlen; // length of header minus ignored fields
15 5cdb1798 2005-10-29 devnull char *mheader; // start of mime header
16 5cdb1798 2005-10-29 devnull char *mhend; // end of mime header
17 5cdb1798 2005-10-29 devnull char *body; // start of body
18 5cdb1798 2005-10-29 devnull char *bend; // end of body
19 5cdb1798 2005-10-29 devnull char *rbody; // raw (unprocessed) body
20 5cdb1798 2005-10-29 devnull char *rbend; // end of raw (unprocessed) body
21 5cdb1798 2005-10-29 devnull char *lim;
22 5cdb1798 2005-10-29 devnull char deleted;
23 5cdb1798 2005-10-29 devnull char inmbox;
24 5cdb1798 2005-10-29 devnull char mallocd; // message is malloc'd
25 5cdb1798 2005-10-29 devnull char ballocd; // body is malloc'd
26 5cdb1798 2005-10-29 devnull char hallocd; // header is malloce'd
27 5cdb1798 2005-10-29 devnull
28 5cdb1798 2005-10-29 devnull // mail info
29 5cdb1798 2005-10-29 devnull String *unixheader;
30 5cdb1798 2005-10-29 devnull String *unixfrom;
31 5cdb1798 2005-10-29 devnull String *unixdate;
32 5cdb1798 2005-10-29 devnull String *from822;
33 5cdb1798 2005-10-29 devnull String *sender822;
34 5cdb1798 2005-10-29 devnull String *to822;
35 5cdb1798 2005-10-29 devnull String *bcc822;
36 5cdb1798 2005-10-29 devnull String *cc822;
37 5cdb1798 2005-10-29 devnull String *replyto822;
38 5cdb1798 2005-10-29 devnull String *date822;
39 5cdb1798 2005-10-29 devnull String *inreplyto822;
40 5cdb1798 2005-10-29 devnull String *subject822;
41 5cdb1798 2005-10-29 devnull String *messageid822;
42 5cdb1798 2005-10-29 devnull String *addrs;
43 5cdb1798 2005-10-29 devnull String *mimeversion;
44 5cdb1798 2005-10-29 devnull String *sdigest;
45 5cdb1798 2005-10-29 devnull
46 5cdb1798 2005-10-29 devnull // mime info
47 5cdb1798 2005-10-29 devnull String *boundary;
48 5cdb1798 2005-10-29 devnull String *type;
49 5cdb1798 2005-10-29 devnull int encoding;
50 5cdb1798 2005-10-29 devnull int disposition;
51 5cdb1798 2005-10-29 devnull String *charset;
52 5cdb1798 2005-10-29 devnull String *filename;
53 5cdb1798 2005-10-29 devnull int converted;
54 5cdb1798 2005-10-29 devnull int decoded;
55 5cdb1798 2005-10-29 devnull char lines[10]; // number of lines in rawbody
56 5cdb1798 2005-10-29 devnull
57 5cdb1798 2005-10-29 devnull Message *next; // same level
58 5cdb1798 2005-10-29 devnull Message *part; // down a level
59 5cdb1798 2005-10-29 devnull Message *whole; // up a level
60 5cdb1798 2005-10-29 devnull
61 5cdb1798 2005-10-29 devnull uchar digest[SHA1dlen];
62 5cdb1798 2005-10-29 devnull
63 5cdb1798 2005-10-29 devnull vlong imapuid; // used by imap4
64 5cdb1798 2005-10-29 devnull
65 5cdb1798 2005-10-29 devnull char uidl[80]; // used by pop3
66 5cdb1798 2005-10-29 devnull int mesgno;
67 5cdb1798 2005-10-29 devnull };
68 5cdb1798 2005-10-29 devnull
69 5cdb1798 2005-10-29 devnull enum
70 5cdb1798 2005-10-29 devnull {
71 5cdb1798 2005-10-29 devnull // encodings
72 5cdb1798 2005-10-29 devnull Enone= 0,
73 5cdb1798 2005-10-29 devnull Ebase64,
74 5cdb1798 2005-10-29 devnull Equoted,
75 5cdb1798 2005-10-29 devnull
76 5cdb1798 2005-10-29 devnull // disposition possibilities
77 5cdb1798 2005-10-29 devnull Dnone= 0,
78 5cdb1798 2005-10-29 devnull Dinline,
79 5cdb1798 2005-10-29 devnull Dfile,
80 5cdb1798 2005-10-29 devnull Dignore,
81 5cdb1798 2005-10-29 devnull
82 cbeb0b26 2006-04-01 devnull PAD64= '='
83 5cdb1798 2005-10-29 devnull };
84 5cdb1798 2005-10-29 devnull
85 5cdb1798 2005-10-29 devnull typedef struct Mailbox Mailbox;
86 5cdb1798 2005-10-29 devnull struct Mailbox
87 5cdb1798 2005-10-29 devnull {
88 5cdb1798 2005-10-29 devnull QLock ql; /* jpc named Qlock */
89 5cdb1798 2005-10-29 devnull int refs;
90 5cdb1798 2005-10-29 devnull Mailbox *next;
91 5cdb1798 2005-10-29 devnull int id;
92 5cdb1798 2005-10-29 devnull int dolock; // lock when syncing?
93 5cdb1798 2005-10-29 devnull int std;
94 5cdb1798 2005-10-29 devnull char name[Elemlen];
95 5cdb1798 2005-10-29 devnull char path[Pathlen];
96 5cdb1798 2005-10-29 devnull Dir *d;
97 5cdb1798 2005-10-29 devnull Message *root;
98 5cdb1798 2005-10-29 devnull int vers; // goes up each time mailbox is read
99 5cdb1798 2005-10-29 devnull
100 5cdb1798 2005-10-29 devnull ulong waketime;
101 5cdb1798 2005-10-29 devnull char *(*sync)(Mailbox*, int);
102 5cdb1798 2005-10-29 devnull void (*close)(Mailbox*);
103 5cdb1798 2005-10-29 devnull char *(*fetch)(Mailbox*, Message*);
104 5cdb1798 2005-10-29 devnull char *(*ctl)(Mailbox*, int, char**);
105 5cdb1798 2005-10-29 devnull void *aux; // private to Mailbox implementation
106 5cdb1798 2005-10-29 devnull };
107 5cdb1798 2005-10-29 devnull
108 5cdb1798 2005-10-29 devnull typedef char *Mailboxinit(Mailbox*, char*);
109 5cdb1798 2005-10-29 devnull
110 5cdb1798 2005-10-29 devnull extern Message *root;
111 5cdb1798 2005-10-29 devnull extern Mailboxinit plan9mbox;
112 5cdb1798 2005-10-29 devnull extern Mailboxinit pop3mbox;
113 5cdb1798 2005-10-29 devnull extern Mailboxinit imap4mbox;
114 5cdb1798 2005-10-29 devnull
115 5cdb1798 2005-10-29 devnull char* syncmbox(Mailbox*, int);
116 5cdb1798 2005-10-29 devnull char* geterrstr(void);
117 5cdb1798 2005-10-29 devnull void* emalloc(ulong);
118 5cdb1798 2005-10-29 devnull void* erealloc(void*, ulong);
119 5cdb1798 2005-10-29 devnull Message* newmessage(Message*);
120 5cdb1798 2005-10-29 devnull void delmessage(Mailbox*, Message*);
121 5cdb1798 2005-10-29 devnull void delmessages(int, char**);
122 5cdb1798 2005-10-29 devnull int newid(void);
123 5cdb1798 2005-10-29 devnull void mailplumb(Mailbox*, Message*, int);
124 5cdb1798 2005-10-29 devnull char* newmbox(char*, char*, int);
125 5cdb1798 2005-10-29 devnull void freembox(char*);
126 5cdb1798 2005-10-29 devnull void logmsg(char*, Message*);
127 5cdb1798 2005-10-29 devnull void msgincref(Message*);
128 5cdb1798 2005-10-29 devnull void msgdecref(Mailbox*, Message*);
129 5cdb1798 2005-10-29 devnull void mboxincref(Mailbox*);
130 5cdb1798 2005-10-29 devnull void mboxdecref(Mailbox*);
131 5cdb1798 2005-10-29 devnull void convert(Message*);
132 5cdb1798 2005-10-29 devnull void decode(Message*);
133 5cdb1798 2005-10-29 devnull int cistrncmp(char*, char*, int);
134 5cdb1798 2005-10-29 devnull int cistrcmp(char*, char*);
135 5cdb1798 2005-10-29 devnull int latin1toutf(char*, char*, char*);
136 5cdb1798 2005-10-29 devnull int windows1257toutf(char*, char*, char*);
137 5cdb1798 2005-10-29 devnull int decquoted(char*, char*, char*);
138 5cdb1798 2005-10-29 devnull int xtoutf(char*, char**, char*, char*);
139 5cdb1798 2005-10-29 devnull void countlines(Message*);
140 5cdb1798 2005-10-29 devnull int headerlen(Message*);
141 5cdb1798 2005-10-29 devnull void parse(Message*, int, Mailbox*, int);
142 5cdb1798 2005-10-29 devnull void parseheaders(Message*, int, Mailbox*, int);
143 5cdb1798 2005-10-29 devnull void parsebody(Message*, Mailbox*);
144 5cdb1798 2005-10-29 devnull void parseunix(Message*);
145 5cdb1798 2005-10-29 devnull String* date822tounix(char*);
146 5cdb1798 2005-10-29 devnull int fidmboxrefs(Mailbox*);
147 5cdb1798 2005-10-29 devnull int hashmboxrefs(Mailbox*);
148 5cdb1798 2005-10-29 devnull void checkmboxrefs(void);
149 5cdb1798 2005-10-29 devnull
150 5cdb1798 2005-10-29 devnull extern int debug;
151 5cdb1798 2005-10-29 devnull extern int fflag;
152 5cdb1798 2005-10-29 devnull extern int logging;
153 5cdb1798 2005-10-29 devnull extern char user[Elemlen];
154 5cdb1798 2005-10-29 devnull extern char stdmbox[Pathlen];
155 5cdb1798 2005-10-29 devnull extern QLock mbllock;
156 5cdb1798 2005-10-29 devnull extern Mailbox *mbl;
157 5cdb1798 2005-10-29 devnull extern char *mntpt;
158 5cdb1798 2005-10-29 devnull extern int biffing;
159 5cdb1798 2005-10-29 devnull extern int plumbing;
160 5cdb1798 2005-10-29 devnull extern char* Enotme;
161 5cdb1798 2005-10-29 devnull
162 5cdb1798 2005-10-29 devnull enum
163 5cdb1798 2005-10-29 devnull {
164 5cdb1798 2005-10-29 devnull /* mail subobjects */
165 5cdb1798 2005-10-29 devnull Qbody,
166 5cdb1798 2005-10-29 devnull Qbcc,
167 5cdb1798 2005-10-29 devnull Qcc,
168 5cdb1798 2005-10-29 devnull Qdate,
169 5cdb1798 2005-10-29 devnull Qdigest,
170 5cdb1798 2005-10-29 devnull Qdisposition,
171 5cdb1798 2005-10-29 devnull Qfilename,
172 5cdb1798 2005-10-29 devnull Qfrom,
173 5cdb1798 2005-10-29 devnull Qheader,
174 5cdb1798 2005-10-29 devnull Qinreplyto,
175 5cdb1798 2005-10-29 devnull Qlines,
176 5cdb1798 2005-10-29 devnull Qmimeheader,
177 5cdb1798 2005-10-29 devnull Qmessageid,
178 5cdb1798 2005-10-29 devnull Qraw,
179 5cdb1798 2005-10-29 devnull Qrawbody,
180 5cdb1798 2005-10-29 devnull Qrawheader,
181 5cdb1798 2005-10-29 devnull Qrawunix,
182 5cdb1798 2005-10-29 devnull Qreplyto,
183 5cdb1798 2005-10-29 devnull Qsender,
184 5cdb1798 2005-10-29 devnull Qsubject,
185 5cdb1798 2005-10-29 devnull Qto,
186 5cdb1798 2005-10-29 devnull Qtype,
187 5cdb1798 2005-10-29 devnull Qunixheader,
188 5cdb1798 2005-10-29 devnull Qinfo,
189 5cdb1798 2005-10-29 devnull Qunixdate,
190 5cdb1798 2005-10-29 devnull Qmax,
191 5cdb1798 2005-10-29 devnull
192 5cdb1798 2005-10-29 devnull /* other files */
193 5cdb1798 2005-10-29 devnull Qtop,
194 5cdb1798 2005-10-29 devnull Qmbox,
195 5cdb1798 2005-10-29 devnull Qdir,
196 5cdb1798 2005-10-29 devnull Qctl,
197 cbeb0b26 2006-04-01 devnull Qmboxctl
198 5cdb1798 2005-10-29 devnull };
199 5cdb1798 2005-10-29 devnull
200 5cdb1798 2005-10-29 devnull #define PATH(id, f) ((((id)&0xfffff)<<10) | (f))
201 5cdb1798 2005-10-29 devnull #define FILE(p) ((p) & 0x3ff)
202 5cdb1798 2005-10-29 devnull
203 5cdb1798 2005-10-29 devnull /* char *dirtab[]; jpc */
204 5cdb1798 2005-10-29 devnull
205 5cdb1798 2005-10-29 devnull // hash table to aid in name lookup, all files have an entry
206 5cdb1798 2005-10-29 devnull typedef struct Hash Hash;
207 5cdb1798 2005-10-29 devnull struct Hash {
208 5cdb1798 2005-10-29 devnull Hash *next;
209 5cdb1798 2005-10-29 devnull char *name;
210 5cdb1798 2005-10-29 devnull ulong ppath;
211 5cdb1798 2005-10-29 devnull Qid qid;
212 5cdb1798 2005-10-29 devnull Mailbox *mb;
213 5cdb1798 2005-10-29 devnull Message *m;
214 5cdb1798 2005-10-29 devnull };
215 5cdb1798 2005-10-29 devnull
216 5cdb1798 2005-10-29 devnull Hash *hlook(ulong, char*);
217 5cdb1798 2005-10-29 devnull void henter(ulong, char*, Qid, Message*, Mailbox*);
218 5cdb1798 2005-10-29 devnull void hfree(ulong, char*);
219 5cdb1798 2005-10-29 devnull
220 5cdb1798 2005-10-29 devnull ulong msgallocd, msgfreed;
221 5cdb1798 2005-10-29 devnull