5.8.2 格式处理流程
2016-04-07 14:32
148 查看
cleanup_service先调用cleanup_open初始化CLEANUP_STATE结构体,我们来看一下queue_name和handle字段的初始化:
state->queue_name= mystrdup(MAIL_QUEUE_INCOMING);
state->handle= mail_stream_file(state->queue_name,MAIL_CLASS_PUBLIC, var_queue_service,0);
MAIL_QUEUE_INCOMING宏即字符串“incoming”,cleanup模块将数据直接放入incoming队列中。handle字段为3.8.3中的MAIL_STREAM流,这里cleanup模块与文件系统交互,所以使用mail_stream_file生成流。而mail_stream_file不只会打开文件流,还通过cleanup_service->cleanup_open->mail_stream_file->mail_stream_finish_file->mail_trigger->fifo_trigger的调用链完成了触发qmgr模块的工作。这个“触发”向qmgr模块写入了宏TRIGGER_REQ_WAKEUP:
mail_trigger(info->class,info->service, wakeup, sizeof(wakeup));
第三个参数wakeup即
static charwakeup[] = {TRIGGER_REQ_WAKEUP};
#defineTRIGGER_REQ_WAKEUP 'W' /* wakeup */
qmgr模块的回调函数qmgr_trigger_event对这个情况不处理,即qmgr模块回调函数qmgr_trigger_event的
caseTRIGGER_REQ_WAKEUP:
处理项为空。
cleanup_service接着调用回调函数cleanup_envelope_process重写邮件:
CLEANUP_RECORD(state,type, vstring_str(buf), VSTRING_LEN(buf));
该宏执行对邮件文本格式化的回调函数:
#defineCLEANUP_RECORD(s, t, b, l) ((s)->action((s),(t), (b), (l)))
cleanup_envelope_process调用cleanup_addr_recipient,cleanup_addr_sender,cleanup_message_headerbody等函数分别对发件人、收件人、邮件正文进行重写。
state->queue_name= mystrdup(MAIL_QUEUE_INCOMING);
state->handle= mail_stream_file(state->queue_name,MAIL_CLASS_PUBLIC, var_queue_service,0);
MAIL_QUEUE_INCOMING宏即字符串“incoming”,cleanup模块将数据直接放入incoming队列中。handle字段为3.8.3中的MAIL_STREAM流,这里cleanup模块与文件系统交互,所以使用mail_stream_file生成流。而mail_stream_file不只会打开文件流,还通过cleanup_service->cleanup_open->mail_stream_file->mail_stream_finish_file->mail_trigger->fifo_trigger的调用链完成了触发qmgr模块的工作。这个“触发”向qmgr模块写入了宏TRIGGER_REQ_WAKEUP:
mail_trigger(info->class,info->service, wakeup, sizeof(wakeup));
第三个参数wakeup即
static charwakeup[] = {TRIGGER_REQ_WAKEUP};
#defineTRIGGER_REQ_WAKEUP 'W' /* wakeup */
qmgr模块的回调函数qmgr_trigger_event对这个情况不处理,即qmgr模块回调函数qmgr_trigger_event的
caseTRIGGER_REQ_WAKEUP:
处理项为空。
cleanup_service接着调用回调函数cleanup_envelope_process重写邮件:
CLEANUP_RECORD(state,type, vstring_str(buf), VSTRING_LEN(buf));
该宏执行对邮件文本格式化的回调函数:
#defineCLEANUP_RECORD(s, t, b, l) ((s)->action((s),(t), (b), (l)))
cleanup_envelope_process调用cleanup_addr_recipient,cleanup_addr_sender,cleanup_message_headerbody等函数分别对发件人、收件人、邮件正文进行重写。
相关文章推荐
- mysql开启和使用事件、与服务器重启mysql错误
- ef 高级操作
- 2014新版12306接口分析
- 自定义控件给子View分配点击事件
- Android 获得联系人并排序
- Spring分布式事务实现
- 创建procedure (SQL存储过程的介绍, 建立和使用方法)
- Eclipse快捷键大全,导包快捷键:ctrl+Shift+/
- tomcat+java的web程序持续占cpu问题调试
- Ruby最佳实践--不要rescue Exception,rescue StandardError
- 运动会
- 超越线程池:Java并发并没有你想的那么糟糕
- SSH安全设置
- iOS:状态栏提示控件的实现原理
- ionic新建项目
- VS2013的一个bug
- Python一日一练09----奇偶排序
- bitmaps位图和mask掩码常用操作
- 解决android 5.0 webview不能加载http与https混合内容的问题
- Unity脚本获取内存和FPS