aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/upas/nfs/box.h
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2006-02-15 12:39:09 +0000
committerrsc <devnull@localhost>2006-02-15 12:39:09 +0000
commit941e17134e92de7f12977f1899860b57bbf83330 (patch)
treee0c7dc5b23b603b24c2ec0cb8d3544f91bb36101 /src/cmd/upas/nfs/box.h
parent1ea614ffaf9378df45410995d0a8c13042bba123 (diff)
downloadplan9port-941e17134e92de7f12977f1899860b57bbf83330.tar.gz
plan9port-941e17134e92de7f12977f1899860b57bbf83330.tar.bz2
plan9port-941e17134e92de7f12977f1899860b57bbf83330.zip
imap-based new upas/fs
Diffstat (limited to 'src/cmd/upas/nfs/box.h')
-rw-r--r--src/cmd/upas/nfs/box.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/cmd/upas/nfs/box.h b/src/cmd/upas/nfs/box.h
new file mode 100644
index 00000000..2eeb93e9
--- /dev/null
+++ b/src/cmd/upas/nfs/box.h
@@ -0,0 +1,133 @@
+enum
+{
+ FlagJunk = 1<<0,
+ FlagNonJunk = 1<<1,
+ FlagReplied = 1<<2,
+ FlagFlagged = 1<<3,
+ FlagDeleted = 1<<4,
+ FlagDraft = 1<<5,
+ FlagSeen = 1<<6,
+ FlagNoInferiors = 1<<7,
+ FlagMarked = 1<<8,
+ FlagNoSelect = 1<<9,
+ FlagUnMarked = 1<<10,
+};
+
+typedef struct Box Box;
+typedef struct Hdr Hdr;
+typedef struct Msg Msg;
+typedef struct Part Part;
+
+struct Box
+{
+ char* name; /* name of mailbox */
+ char* elem; /* last element in name */
+ uint ix; /* index in box[] array */
+ uint id; /* id shown in file system */
+ uint flags; /* FlagNoInferiors, etc. */
+ uint time; /* last update time */
+ uint msgid; /* last message id used */
+
+ Msg** msg; /* array of messages (can have nils) */
+ uint nmsg;
+
+ char* imapname; /* name on IMAP server */
+ u32int validity; /* IMAP validity number */
+ uint uidnext; /* IMAP expected next uid */
+ uint recent; /* IMAP first recent message */
+ uint exists; /* IMAP last message in box */
+ uint maxseen; /* maximum IMAP uid seen */
+ int mark;
+ uint imapinit; /* up-to-date w.r.t. IMAP */
+
+ Box* parent; /* in tree */
+ Box** sub;
+ uint nsub;
+};
+
+struct Hdr
+{
+ /* LATER: store date as int, reformat for programs */
+ /* order known by fs.c */
+ char* date;
+ char* subject;
+ char* from;
+ char* sender;
+ char* replyto;
+ char* to;
+ char* cc;
+ char* bcc;
+ char* inreplyto;
+ char* messageid;
+ char* digest;
+};
+
+struct Msg
+{
+ Box* box; /* mailbox containing msg */
+ uint ix; /* index in box->msg[] array */
+ uint id; /* id shown in file system */
+ uint imapuid; /* IMAP uid */
+ uint imapid; /* IMAP id */
+ uint flags; /* FlagDeleted etc. */
+ uint date; /* smtp envelope date */
+ uint size;
+
+ Part** part; /* message subparts - part[0] is root */
+ uint npart;
+};
+
+struct Part
+{
+ Msg* msg; /* msg containing part */
+ uint ix; /* index in msg->part[] */
+ uint pix; /* id in parent->sub[] */
+ Part* parent; /* parent in structure */
+ Part** sub; /* children in structure */
+ uint nsub;
+
+ /* order known by fs.c */
+ char* type; /* e.g., "text/plain" */
+ char* idstr;
+ char* desc;
+ char* encoding;
+ char* charset;
+ char* raw;
+ char* rawheader;
+ char* rawbody;
+ char* mimeheader;
+
+ /* order known by fs.c */
+ uint size;
+ uint lines;
+
+ char* body;
+ uint nbody;
+ Hdr* hdr; /* RFC822 envelope for message/rfc822 */
+};
+
+void boxinit(void);
+Box* boxbyname(char*);
+Box* boxbyid(uint);
+Box* boxcreate(char*);
+void boxfree(Box*);
+Box* subbox(Box*, char*);
+Msg* msgcreate(Box*);
+Part* partcreate(Msg*, Part*);
+
+void hdrfree(Hdr*);
+
+Msg* msgbyid(Box*, uint);
+Msg* msgbyimapuid(Box*, uint, int);
+void msgfree(Msg*);
+void msgplumb(Msg*, int);
+
+Part* partbyid(Msg*, uint);
+Part* subpart(Part*, uint);
+void partfree(Part*);
+
+extern Box** boxes;
+extern uint nboxes;
+
+extern Box* rootbox;
+