⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imap4d.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 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 + -