xref: /plan9/sys/src/cmd/upas/fs/dat.h (revision 43aadf5e5598b9159a98f64e309c3ae860328a56)
17dd7cddfSDavid du Colombier typedef struct Message Message;
27dd7cddfSDavid du Colombier struct Message
37dd7cddfSDavid du Colombier {
47dd7cddfSDavid du Colombier 	int	id;
57dd7cddfSDavid du Colombier 	int	refs;
67dd7cddfSDavid du Colombier 	int	subname;
79a747e4fSDavid du Colombier 	char	name[Elemlen];
87dd7cddfSDavid du Colombier 
97dd7cddfSDavid du Colombier 	// pointers into message
107dd7cddfSDavid du Colombier 	char	*start;		// start of message
117dd7cddfSDavid du Colombier 	char	*end;		// end of message
127dd7cddfSDavid du Colombier 	char	*header;	// start of header
137dd7cddfSDavid du Colombier 	char	*hend;		// end of header
147dd7cddfSDavid du Colombier 	int	hlen;		// length of header minus ignored fields
157dd7cddfSDavid du Colombier 	char	*mheader;	// start of mime header
167dd7cddfSDavid du Colombier 	char	*mhend;		// end of mime header
177dd7cddfSDavid du Colombier 	char	*body;		// start of body
187dd7cddfSDavid du Colombier 	char	*bend;		// end of body
197dd7cddfSDavid du Colombier 	char	*rbody;		// raw (unprocessed) body
207dd7cddfSDavid du Colombier 	char	*rbend;		// end of raw (unprocessed) body
217dd7cddfSDavid du Colombier 	char	*lim;
227dd7cddfSDavid du Colombier 	char	deleted;
237dd7cddfSDavid du Colombier 	char	inmbox;
247dd7cddfSDavid du Colombier 	char	mallocd;	// message is malloc'd
257dd7cddfSDavid du Colombier 	char	ballocd;	// body is malloc'd
267dd7cddfSDavid du Colombier 	char	hallocd;	// header is malloce'd
277dd7cddfSDavid du Colombier 
287dd7cddfSDavid du Colombier 	// mail info
2980ee5cbfSDavid du Colombier 	String	*unixheader;
307dd7cddfSDavid du Colombier 	String	*unixfrom;
317dd7cddfSDavid du Colombier 	String	*unixdate;
327dd7cddfSDavid du Colombier 	String	*from822;
337dd7cddfSDavid du Colombier 	String	*sender822;
347dd7cddfSDavid du Colombier 	String	*to822;
357dd7cddfSDavid du Colombier 	String	*bcc822;
367dd7cddfSDavid du Colombier 	String	*cc822;
377dd7cddfSDavid du Colombier 	String	*replyto822;
387dd7cddfSDavid du Colombier 	String	*date822;
397dd7cddfSDavid du Colombier 	String	*inreplyto822;
407dd7cddfSDavid du Colombier 	String	*subject822;
417dd7cddfSDavid du Colombier 	String	*messageid822;
427dd7cddfSDavid du Colombier 	String	*addrs;
437dd7cddfSDavid du Colombier 	String	*mimeversion;
447dd7cddfSDavid du Colombier 	String	*sdigest;
457dd7cddfSDavid du Colombier 
467dd7cddfSDavid du Colombier 	// mime info
477dd7cddfSDavid du Colombier 	String	*boundary;
487dd7cddfSDavid du Colombier 	String	*type;
497dd7cddfSDavid du Colombier 	int	encoding;
507dd7cddfSDavid du Colombier 	int	disposition;
517dd7cddfSDavid du Colombier 	String	*charset;
527dd7cddfSDavid du Colombier 	String	*filename;
537dd7cddfSDavid du Colombier 	int	converted;
547dd7cddfSDavid du Colombier 	int	decoded;
557dd7cddfSDavid du Colombier 	char	lines[10];	// number of lines in rawbody
567dd7cddfSDavid du Colombier 
577dd7cddfSDavid du Colombier 	Message	*next;		// same level
587dd7cddfSDavid du Colombier 	Message	*part;		// down a level
597dd7cddfSDavid du Colombier 	Message	*whole;		// up a level
607dd7cddfSDavid du Colombier 
617dd7cddfSDavid du Colombier 	uchar	digest[SHA1dlen];
6280ee5cbfSDavid du Colombier 
6380ee5cbfSDavid du Colombier 	vlong	imapuid;	// used by imap4
6480ee5cbfSDavid du Colombier 
6580ee5cbfSDavid du Colombier 	char		uidl[80];	// used by pop3
6680ee5cbfSDavid du Colombier 	int		mesgno;
677dd7cddfSDavid du Colombier };
687dd7cddfSDavid du Colombier 
697dd7cddfSDavid du Colombier enum
707dd7cddfSDavid du Colombier {
717dd7cddfSDavid du Colombier 	// encodings
727dd7cddfSDavid du Colombier 	Enone=	0,
737dd7cddfSDavid du Colombier 	Ebase64,
747dd7cddfSDavid du Colombier 	Equoted,
757dd7cddfSDavid du Colombier 
767dd7cddfSDavid du Colombier 	// disposition possibilities
777dd7cddfSDavid du Colombier 	Dnone=	0,
787dd7cddfSDavid du Colombier 	Dinline,
797dd7cddfSDavid du Colombier 	Dfile,
807dd7cddfSDavid du Colombier 	Dignore,
817dd7cddfSDavid du Colombier 
827dd7cddfSDavid du Colombier 	PAD64=	'=',
837dd7cddfSDavid du Colombier };
847dd7cddfSDavid du Colombier 
857dd7cddfSDavid du Colombier typedef struct Mailbox Mailbox;
867dd7cddfSDavid du Colombier struct Mailbox
877dd7cddfSDavid du Colombier {
887dd7cddfSDavid du Colombier 	QLock;
897dd7cddfSDavid du Colombier 	int	refs;
907dd7cddfSDavid du Colombier 	Mailbox	*next;
917dd7cddfSDavid du Colombier 	int	id;
9259cc4ca5SDavid du Colombier 	int	dolock;		// lock when syncing?
937dd7cddfSDavid du Colombier 	int	std;
949a747e4fSDavid du Colombier 	char	name[Elemlen];
959a747e4fSDavid du Colombier 	char	path[Pathlen];
969a747e4fSDavid du Colombier 	Dir	*d;
977dd7cddfSDavid du Colombier 	Message	*root;
987dd7cddfSDavid du Colombier 	int	vers;		// goes up each time mailbox is read
9980ee5cbfSDavid du Colombier 
10080ee5cbfSDavid du Colombier 	ulong waketime;
10180ee5cbfSDavid du Colombier 	char	*(*sync)(Mailbox*, int);
10280ee5cbfSDavid du Colombier 	void	(*close)(Mailbox*);
10380ee5cbfSDavid du Colombier 	char	*(*fetch)(Mailbox*, Message*);
10480ee5cbfSDavid du Colombier 	char	*(*ctl)(Mailbox*, int, char**);
10580ee5cbfSDavid du Colombier 	void	*aux;		// private to Mailbox implementation
1067dd7cddfSDavid du Colombier };
1077dd7cddfSDavid du Colombier 
10880ee5cbfSDavid du Colombier typedef char *Mailboxinit(Mailbox*, char*);
10980ee5cbfSDavid du Colombier 
1107dd7cddfSDavid du Colombier extern Message	*root;
11180ee5cbfSDavid du Colombier extern Mailboxinit	plan9mbox;
11280ee5cbfSDavid du Colombier extern Mailboxinit	pop3mbox;
11380ee5cbfSDavid du Colombier extern Mailboxinit	imap4mbox;
114*43aadf5eSDavid du Colombier extern Mailboxinit	planbmbox;
115*43aadf5eSDavid du Colombier extern Mailboxinit	planbvmbox;
1167dd7cddfSDavid du Colombier 
1177dd7cddfSDavid du Colombier char*		syncmbox(Mailbox*, int);
11880ee5cbfSDavid du Colombier char*		geterrstr(void);
1197dd7cddfSDavid du Colombier void*		emalloc(ulong);
1207dd7cddfSDavid du Colombier void*		erealloc(void*, ulong);
1217dd7cddfSDavid du Colombier Message*	newmessage(Message*);
1227dd7cddfSDavid du Colombier void		delmessage(Mailbox*, Message*);
1237dd7cddfSDavid du Colombier void		delmessages(int, char**);
1247dd7cddfSDavid du Colombier int		newid(void);
1257dd7cddfSDavid du Colombier void		mailplumb(Mailbox*, Message*, int);
1267dd7cddfSDavid du Colombier char*		newmbox(char*, char*, int);
1277dd7cddfSDavid du Colombier void		freembox(char*);
12859cc4ca5SDavid du Colombier void		logmsg(char*, Message*);
1297dd7cddfSDavid du Colombier void		msgincref(Message*);
1307dd7cddfSDavid du Colombier void		msgdecref(Mailbox*, Message*);
1317dd7cddfSDavid du Colombier void		mboxincref(Mailbox*);
1327dd7cddfSDavid du Colombier void		mboxdecref(Mailbox*);
1337dd7cddfSDavid du Colombier void		convert(Message*);
1347dd7cddfSDavid du Colombier void		decode(Message*);
1357dd7cddfSDavid du Colombier int		cistrncmp(char*, char*, int);
1367dd7cddfSDavid du Colombier int		cistrcmp(char*, char*);
13717dd33a2SDavid du Colombier int		decquoted(char*, char*, char*, int);
1387dd7cddfSDavid du Colombier int		xtoutf(char*, char**, char*, char*);
1397dd7cddfSDavid du Colombier void		countlines(Message*);
1407dd7cddfSDavid du Colombier int		headerlen(Message*);
1417a02f3c0SDavid du Colombier void		parse(Message*, int, Mailbox*, int);
1427a02f3c0SDavid du Colombier void		parseheaders(Message*, int, Mailbox*, int);
14380ee5cbfSDavid du Colombier void		parsebody(Message*, Mailbox*);
14480ee5cbfSDavid du Colombier void		parseunix(Message*);
14580ee5cbfSDavid du Colombier String*	date822tounix(char*);
1467dd7cddfSDavid du Colombier int		fidmboxrefs(Mailbox*);
1477dd7cddfSDavid du Colombier int		hashmboxrefs(Mailbox*);
1485d459b5aSDavid du Colombier void		checkmboxrefs(void);
1497dd7cddfSDavid du Colombier 
1507dd7cddfSDavid du Colombier extern int	debug;
1517dd7cddfSDavid du Colombier extern int	fflag;
15259cc4ca5SDavid du Colombier extern int	logging;
1539a747e4fSDavid du Colombier extern char	user[Elemlen];
154*43aadf5eSDavid du Colombier extern char	stdmbox[Pathlen];
1557dd7cddfSDavid du Colombier extern QLock	mbllock;
1567dd7cddfSDavid du Colombier extern Mailbox	*mbl;
1577dd7cddfSDavid du Colombier extern char	*mntpt;
1587dd7cddfSDavid du Colombier extern int	biffing;
1597dd7cddfSDavid du Colombier extern int	plumbing;
16080ee5cbfSDavid du Colombier extern char*	Enotme;
1617dd7cddfSDavid du Colombier 
1627dd7cddfSDavid du Colombier enum
1637dd7cddfSDavid du Colombier {
1649a747e4fSDavid du Colombier 	/* mail subobjects */
1657dd7cddfSDavid du Colombier 	Qbody,
1667dd7cddfSDavid du Colombier 	Qbcc,
1677dd7cddfSDavid du Colombier 	Qcc,
1687dd7cddfSDavid du Colombier 	Qdate,
1697dd7cddfSDavid du Colombier 	Qdigest,
1707dd7cddfSDavid du Colombier 	Qdisposition,
1717dd7cddfSDavid du Colombier 	Qfilename,
1727dd7cddfSDavid du Colombier 	Qfrom,
1737dd7cddfSDavid du Colombier 	Qheader,
1747dd7cddfSDavid du Colombier 	Qinreplyto,
1757dd7cddfSDavid du Colombier 	Qlines,
1767dd7cddfSDavid du Colombier 	Qmimeheader,
1777dd7cddfSDavid du Colombier 	Qmessageid,
1787dd7cddfSDavid du Colombier 	Qraw,
1797dd7cddfSDavid du Colombier 	Qrawbody,
1807dd7cddfSDavid du Colombier 	Qrawheader,
1816b6b9ac8SDavid du Colombier 	Qrawunix,
1827dd7cddfSDavid du Colombier 	Qreplyto,
1837dd7cddfSDavid du Colombier 	Qsender,
1847dd7cddfSDavid du Colombier 	Qsubject,
1857dd7cddfSDavid du Colombier 	Qto,
1867dd7cddfSDavid du Colombier 	Qtype,
1877dd7cddfSDavid du Colombier 	Qunixheader,
1887dd7cddfSDavid du Colombier 	Qinfo,
1897dd7cddfSDavid du Colombier 	Qunixdate,
1909a747e4fSDavid du Colombier 	Qmax,
1919a747e4fSDavid du Colombier 
1929a747e4fSDavid du Colombier 	/* other files */
1937dd7cddfSDavid du Colombier 	Qtop,
1947dd7cddfSDavid du Colombier 	Qmbox,
1957dd7cddfSDavid du Colombier 	Qdir,
1967dd7cddfSDavid du Colombier 	Qctl,
19780ee5cbfSDavid du Colombier 	Qmboxctl,
1987dd7cddfSDavid du Colombier };
1997dd7cddfSDavid du Colombier 
2007dd7cddfSDavid du Colombier #define PATH(id, f)	((((id)&0xfffff)<<10) | (f))
2017dd7cddfSDavid du Colombier #define FILE(p)		((p) & 0x3ff)
2027dd7cddfSDavid du Colombier 
2037dd7cddfSDavid du Colombier char *dirtab[];
2047dd7cddfSDavid du Colombier 
2057dd7cddfSDavid du Colombier // hash table to aid in name lookup, all files have an entry
2067dd7cddfSDavid du Colombier typedef struct Hash Hash;
2077dd7cddfSDavid du Colombier struct Hash {
2087dd7cddfSDavid du Colombier 	Hash	*next;
2097dd7cddfSDavid du Colombier 	char	*name;
2107dd7cddfSDavid du Colombier 	ulong	ppath;
2117dd7cddfSDavid du Colombier 	Qid	qid;
2127dd7cddfSDavid du Colombier 	Mailbox	*mb;
2137dd7cddfSDavid du Colombier 	Message	*m;
2147dd7cddfSDavid du Colombier };
2157dd7cddfSDavid du Colombier 
2167dd7cddfSDavid du Colombier Hash	*hlook(ulong, char*);
2177dd7cddfSDavid du Colombier void	henter(ulong, char*, Qid, Message*, Mailbox*);
2187dd7cddfSDavid du Colombier void	hfree(ulong, char*);
2197dd7cddfSDavid du Colombier 
2207dd7cddfSDavid du Colombier ulong msgallocd, msgfreed;
22159cc4ca5SDavid du Colombier 
222