3.8.3 MAIL_STREAM流

来源:互联网 发布:千与千寻 知乎 编辑:程序博客网 时间:2024/06/08 20:02

下面是VSTRING和VSTREAM应用的第二个场景:postfix的模块通信。

 

postfix的模块通信分为三种情况:模块与模块通信,模块与命令行程序通信,模块与文件系统通信。这三种通信方式被封装为MAIL_STREAM流,该流封装VSTREAM。相关实现在/global/mail_stream.c中:

  structMAIL_STREAM {   VSTREAM *stream;                            /*file or pipe or socket */   char   *queue;                         /* (initial) queue name*/   char   *id;                                  /* queue id */   MAIL_STREAM_FINISH_FN finish;  /*finish code */   MAIL_STREAM_CLOSE_FN close;             /*close stream */   char   *class;                            /* trigger class */   char   *service;                        /* trigger service */   int     mode;                           /* additionalpermissions */#ifdef DELAY_ACTION   int     delay;                            /* deferred delivery*/#endif   struct timeval ctime;                 /*creation time */};


         MAIL_STREAM流出了要包含“物理”VSTREAM指针(需要最终与文件系统交互的结构体都要包含VSTREAM指针,如qmgr模块的直接与MDA交互的QMGR_ENGRY结构体),还需要提供队列信息(queue,id),使用MAIL_STREAM的模块名(servie)和类型(class)等信息。
0 0