#ifndef __MAIL_IMAP4_H__ #define __MAIL_IMAP4_H__ #include "mail_global.h" #define MAILIMAP4_MODULE "[MAIL_IMAP4]" #define RESPONSE_FETCH_MAX_LEN 32 //取得FETCH响应第2个空格最大长度 #define CONT_TYPE_TEXT 1 #define CONT_TYPE_MESSAGE 2 #define CONT_TYPE_RFC822 3 #define CONT_TYPE_OTHER 4 //解析BODYSTRUCTURE一行时的过程状态 typedef enum { STAT_BLOCK_IDLE=0, STAT_BLOCK_START, STAT_BLOCK_PROC, STAT_BLOCK_END, }STAT_BODYSTRUCT_t; //multipart块所有的字段顺序 typedef enum { MULTI_SUBTYPE=0, MULTI_PARENTHESIS, //参数组合列表;从该字段往后都是扩展字段 MULTI_DISPOSITION, MULTI_LANGUAGE, MULTI_LOCATION, MULTI_NUM, }MULTI_FIELD_t; //非multipart块所有的字段顺序 typedef enum { NOTMUL_TYPE=0, NOTMUL_SUBTYPE, NOTMUL_PARENTHESIS, NOTMUL_ID, NOTMUL_DESCR, /*5*/ NOTMUL_ENCODE, NOTMUL_SIZE, NOTMUL_EVENLOP, //MESSAGE/RFC822独有,从该字段往后都是扩展字段 NOTMUL_BODYSTRUCT, //MESSAGE/RFC822独有 NOTMUL_LINES, //主类型NOTMUL_TYPE为"TEXT"或类型为MESSAGE/RFC822才有该字段; NOTMUL_MD5, NOTMUL_DISPOSITION, /*10*/ NOTMUL_LANGUAGE, NOTMUL_LOCATION, NOTMUL_NUM, }NOTMUL_FIELD_t; #define IMAP_OK_CMD_LEN 30 //IMAP协议FETCH响应结束的长度,如"B00964 OK Fetch completed" #define IMAP_LABEL_OK_MAX_LEN 100 //邮件命令编号从20开始 typedef enum IMAP_CMD_STATE { IMAP_CMD_ANS=20, IMAP_CMD_FETCH_ANS, //不需要进行复位的响应 IMAP_CMD_DATA_END, IMAP_CMD_MAYBE_END, //遇到")\r\n"的状态 IMAP_CMD_NOT_END, //判断上一次')'结束标记IMAP_CMD_MAYBE_END不是真正的结束 IMAP_CMD_DATA_CONTINUE, //按字节获取邮件的后续块 IMAP_CMD_DATA_BORDER, //来的是一个块的开始,是BODY内容 IMAP_CMD_DROP, //处理一个标号块时发现有附件名,回调业务层之后业务层给DROP IMAP_CMD_UNKNOWN, }IMAP_CMD_STATE_t; //为body/bodystructure解析设置的哈希节点 typedef struct __mime_item { stBufCache mime_header; //用于存储构造MIME头部 char charset[MAIL_MAX_CHARSET_LEN]; char filename_charset[MAIL_MAX_CHARSET_LEN]; char *attach_filename; char *boundary; int filename_len; int bound_len; int trans_enc; //传输编码 int is_multi; //是否是MULTIPART块 int thread_id; }mime_item_t; char imap4_entry_fun(struct streaminfo *a_tcp, void **pme, int thread_seq,const void *raw_pkt); void imap_free_htable_cb(void *data); int mail_identify_imap(struct streaminfo *a_tcp, char *payload, int payload_len, int thread_seq); #endif