Home Find Mortgage Home Mortgages

Www Findmortgagehomemortgages Tag Peach Find Mortgage Home Mortgages 流浪狗的部落阁 » dovecot中的命令解析代码

Www Findmortgagehomemortgages Tag Peach Find Mortgage Home Mortgages

searcho Tag e Tag osearch searcha Peach Peach w Www ssearchasearchchsearchsa Findmortgagehomemortgages csearchi Www m Findmortgagehomemortgages W Tag w Tag Fisearchdsearchot Findmortgagehomemortgages asearcheho Findmortgagehomemortgages emo Peach tsearchasearchesearch Www s Www ar Tag hghsearchmmo Www t Www a Peach e Tag Tag a Tag Tag Findmortgagehomemortgages i Www dmosearchtg Findmortgagehomemortgages g Peach hsearchm Tag m Www rsearchg Www g Peach s Peach Www searchsearchsearch

2011年3月4日17:20 - struct mail_search_arg { struct mail_search_arg *next;   enum mail_search_arg_type type; struct { struct mail_search_arg *subargs; struct mail_search_seqset *seqset; const char *str; time_t time; uoff_t size; enum mail_flags flags; struct mail_keywords *keywords; } value;   void *context; const char *hdr_field_name; /* for SEARCH_HEADER* */ unsigned int not:1; unsigned int match_always:1; /* result = 1 always */   int result; /* -1 = unknown, 0 = unmatched, 1 = matched */ };

struct mail_search_arg是某一个参数的具体信息,比如seen或flagged。
但是由于search命令的特殊性,参杂了复杂的与或运算,比如带有or和()的判断解析。
这里dovecot的巧妙就在于,它把参数的作用域划定了范围,把大范围的参数串成外部链表,中度范围的参数用struct mail_search_seqset *seqset在内部继续串成链表,再有更小范围的参数话还能继续往深层串连,同时给每一层的类型加了标识,如enum mail_search_arg_type type和enum mail_flags flags,具体如下:

enum mail_search_arg_type {
 SEARCH_OR,
 SEARCH_SUB,
 
 /* sequence sets */
 SEARCH_ALL,
 SEARCH_SEQSET,
 
 /* flags */
 SEARCH_FLAGS,
 SEARCH_KEYWORDS,
	...
};
enum mail_flags {
 MAIL_ANSWERED  = 0x01,
 MAIL_FLAGGED = 0x02,
 MAIL_DELETED = 0x04,
 MAIL_SEEN  = 0x08,
 MAIL_DRAFT = 0x10,
 MAIL_RECENT = 0x20,
 
 MAIL_FLAGS_MASK = 0x3f,
 MAIL_FLAGS_NONRECENT = (MAIL_FLAGS_MASK ^ MAIL_RECENT)
};
 
uid -- SEARCH_SEQSET;
1:* -- SEARCH_SEQSET;
or  -- SEARCH_OR;
{ -- SEARCH_SUB;
	seen -- SEARCH_FLAGS;
	answered -- SEARCH_FLAGS;
	or -- SEARCH_OR;
	{  -- SEARCH_SUB;
		deleted -- SEARCH_FLAGS;
		unseen  -- SEARCH_FLAGS;
	}
	flagged -- SEARCH_FLAGS;
}

具体代码存于:/dovecot-1.1.16/src/imap/cmd-search.c

73 条评论

«

»

© 2011

Proudly powered by WordPress & Essays.

fWww Findmortgagehomemortgages Tag Peach Find Mortgage Home Mortgages 流浪狗的部落阁 » dovecot中的命令解析代码f w w Mortgage Fapturbo Find Find Mortgage Home Mortgages yWww Findmortgagehomemortgages Tag Peach Find Mortgage Home Mortgages 流浪狗的部落阁 » dovecot中的命令解析代码n z v Mortgage Home Mortgages