📄 imap4d.h
字号:
/* * mailbox and message representations * * these structures are allocated with emalloc and must be explicitly freed */typedef struct Box Box;typedef struct Header Header;typedef struct MAddr MAddr;typedef struct MbLock MbLock;typedef struct MimeHdr MimeHdr;typedef struct Msg Msg;typedef struct NamedInt NamedInt;typedef struct Pair Pair;enum{ StrAlloc = 32, /* characters allocated at a time */ BufSize = 8*1024, /* size of transfer block */ NDigest = 40, /* length of digest string */ NUid = 10, /* length of .imp uid string */ NFlags = 8, /* length of .imp flag string */ LockSecs = 5 * 60, /* seconds to wait for acquiring a locked file */ MboxNameLen = 256, /* max. length of upas/fs mbox name */ MsgNameLen = 32, /* max. length of a file in a upas/fs mbox */ UserNameLen = 64, /* max. length of user's name */ MUtf7Max = 6, /* max length for a modified utf7 character: &bbbb- */ /* * message flags */ MSeen = 1 << 0, MAnswered = 1 << 1, MFlagged = 1 << 2, MDeleted = 1 << 3, MDraft = 1 << 4, MRecent = 1 << 5, /* * message bogus flags */ NotBogus = 0, /* the message is displayable */ BogusHeader = 1, /* the header had bad characters */ BogusBody = 2, /* the body had bad characters */ BogusTried = 4, /* attempted to open the fake message */};struct Box{ char *name; /* path name of mailbox */ char *fs; /* fs name of mailbox */ char *fsDir; /* /mail/fs/box->fs */ char *imp; /* path name of .imp file */ uchar writable; /* can write back messages? */ uchar dirtyImp; /* .imp file needs to be written? */ uchar sendFlags; /* need flags update */ Qid qid; /* qid of fs mailbox */ Qid impQid; /* qid of .imp when last synched */ long mtime; /* file mtime when last read */ ulong max; /* maximum msgs->seq, same as number of messages */ ulong toldMax; /* last value sent to client */ ulong recent; /* number of recently received messaged */ ulong toldRecent; /* last value sent to client */ ulong uidnext; /* next uid value assigned to a message */ ulong uidvalidity; /* uid of mailbox */ Msg *msgs;};/* * fields of Msg->info */enum{ /* * read from upasfs */ IFrom, ITo, ICc, IReplyTo, IUnixDate, ISubject, IType, IDisposition, IFilename, IDigest, IBcc, IInReplyTo, /* aka internal date */ IDate, ISender, IMessageId, ILines, /* number of lines of raw body */ IMax};struct Header{ char *buf; /* header, including terminating \r\n */ ulong size; /* strlen(buf) */ ulong lines; /* number of \n characters in buf */ /* * pre-parsed mime headers */ MimeHdr *type; /* content-type */ MimeHdr *id; /* content-id */ MimeHdr *description; /* content-description */ MimeHdr *encoding; /* content-transfer-encoding */ MimeHdr *md5; /* content-md5 */ MimeHdr *disposition; /* content-disposition */ MimeHdr *language; /* content-language */};struct Msg{ Msg *next; Msg *prev; Msg *kids; Msg *parent; char *fsDir; /* box->fsDir of enclosing message */ Header head; /* message header */ Header mime; /* mime header from enclosing multipart spec */ int flags; uchar sendFlags; /* flags value needs to be sent to client */ uchar expunged; /* message actually expunged, but not yet reported to client */ uchar matched; /* search succeeded? */ uchar bogus; /* implies the message is invalid, ie contains nulls; see flags above */ ulong uid; /* imap unique identifier */ ulong seq; /* position in box; 1 is oldest */ ulong id; /* number of message directory in upas/fs */ char *fs; /* name of message directory */ char *efs; /* pointer after / in fs; enough space for file name */ ulong size; /* size of fs/rawbody, in bytes, with \r added before \n */ ulong lines; /* number of lines in rawbody */ char *iBuf; char *info[IMax]; /* all info about message */ char *unixDate; MAddr *unixFrom; MAddr *to; /* parsed out address lines */ MAddr *from; MAddr *replyTo; MAddr *sender; MAddr *cc; MAddr *bcc;};/* * pre-parsed header lines */struct MAddr{ char *personal; char *box; char *host; MAddr *next;};struct MimeHdr{ char *s; char *t; MimeHdr *next;};/* * mapping of integer & names */struct NamedInt{ char *name; int v;};/* * lock for all mail file operations */struct MbLock{ int fd;};/* * parse nodes for imap4rev1 protocol * * important: all of these items are allocated * in one can, so they can be tossed out at the same time. * this allows leakless parse error recovery by simply tossing the can away. * however, it means these structures cannot be mixed with the mailbox structures */typedef struct Fetch Fetch;typedef struct NList NList;typedef struct SList SList;typedef struct MsgSet MsgSet;typedef struct Store Store;typedef struct Search Search;/* * parse tree for fetch command */enum{ FEnvelope, FFlags, FInternalDate, FRfc822, FRfc822Head, FRfc822Size, FRfc822Text, FBodyStruct, FUid, FBody, /* BODY */ FBodySect, /* BODY [...] */ FBodyPeek, FMax};enum{ FPAll, FPHead, FPHeadFields, FPHeadFieldsNot, FPMime, FPText, FPMax};struct Fetch{ uchar op; /* F.* operator */ uchar part; /* FP.* subpart for body[] & body.peek[]*/ uchar partial; /* partial fetch? */ long start; /* partial fetch amounts */ long size; NList *sect; SList *hdrs; Fetch *next;};/* * status items */enum{ SMessages = 1 << 0, SRecent = 1 << 1, SUidNext = 1 << 2, SUidValidity = 1 << 3, SUnseen = 1 << 4,};/* * parse tree for store command */enum{ STFlags, STFlagsSilent, STMax};struct Store{ uchar sign; uchar op; int flags;};/* * parse tree for search command */enum{ SKNone, SKCharset, SKAll, SKAnswered, SKBcc, SKBefore, SKBody, SKCc, SKDeleted, SKDraft, SKFlagged, SKFrom, SKHeader, SKKeyword, SKLarger, SKNew, SKNot, SKOld, SKOn, SKOr, SKRecent, SKSeen, SKSentBefore, SKSentOn, SKSentSince, SKSet, SKSince, SKSmaller, SKSubject, SKText, SKTo, SKUid, SKUnanswered, SKUndeleted, SKUndraft, SKUnflagged, SKUnkeyword, SKUnseen, SKMax};struct Search{ int key; char *s; char *hdr; ulong num; int year; int mon; int mday; MsgSet *set; Search *left; Search *right; Search *next;};struct NList{ ulong n; NList *next;};struct SList{ char *s; SList *next;};struct MsgSet{ ulong from; ulong to; MsgSet *next;};struct Pair{ ulong start; ulong stop;};#include "bin.h"extern Bin *parseBin;extern Biobuf bout;extern Biobuf bin;extern char username[UserNameLen];extern char mboxDir[MboxNameLen];extern char *fetchPartNames[FPMax];extern char *site;extern char *remote;extern int debug;#include "fns.h"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -