plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

box.h (2802B)


      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 };
     16 
     17 typedef struct Box Box;
     18 typedef struct Hdr Hdr;
     19 typedef struct Msg Msg;
     20 typedef struct Part Part;
     21 
     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 */
     31 
     32 	Msg**	msg;			/* array of messages (can have nils) */
     33 	uint		nmsg;
     34 
     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 */
     43 
     44 	Box*		parent;		/* in tree */
     45 	Box**	sub;
     46 	uint		nsub;
     47 };
     48 
     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 };
     65 
     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;
     76 
     77 	Part**	part;			/* message subparts - part[0] is root */
     78 	uint		npart;
     79 };
     80 
     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;
     89 
     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;
    101 
    102 	/* order known by fs.c */
    103 	uint		size;
    104 	uint		lines;
    105 
    106 	char*	body;
    107 	uint		nbody;
    108 	Hdr*		hdr;			/* RFC822 envelope for message/rfc822 */
    109 };
    110 
    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*);
    119 
    120 void		hdrfree(Hdr*);
    121 
    122 Msg*	msgbyid(Box*, uint);
    123 Msg*	msgbyimapuid(Box*, uint, int);
    124 void		msgfree(Msg*);
    125 void		msgplumb(Msg*, int);
    126 
    127 Part*		partbyid(Msg*, uint);
    128 Part*		subpart(Part*, uint);
    129 void			partfree(Part*);
    130 
    131 extern	Box**	boxes;
    132 extern	uint		nboxes;
    133 
    134 extern	Box*		rootbox;