diff options
Diffstat (limited to 'contrib/sendmail/libmilter/docs/overview.html')
| -rw-r--r-- | contrib/sendmail/libmilter/docs/overview.html | 215 |
1 files changed, 0 insertions, 215 deletions
diff --git a/contrib/sendmail/libmilter/docs/overview.html b/contrib/sendmail/libmilter/docs/overview.html deleted file mode 100644 index b7e80dfdbed70..0000000000000 --- a/contrib/sendmail/libmilter/docs/overview.html +++ /dev/null @@ -1,215 +0,0 @@ -<HTML> -<HEAD> -<TITLE>Technical Overview</TITLE> -</HEAD> -<BODY> -<!-- -$Id: overview.html,v 1.19 2006/12/21 18:23:47 ca Exp $ ---> - -<H1>Technical Overview</H1> - -<H2>Contents</H2> - -<UL> - <LI><A HREF="#Initialization">Initialization</A> - <LI><A HREF="#ControlFlow">Control Flow</A> - <LI><A HREF="#Multithreading">Multithreading</A> - <LI><A HREF="#ResourceManagement">Resource Management</A> - <LI><A HREF="#SignalHandling">Signal Handling</A> -</UL> - -<H2><A NAME="Initialization">Initialization</A></H2> - -In addition to its own initialization, -libmilter expects a filter to initialize several parameters -before calling <A HREF="smfi_main.html">smfi_main</A>: -<UL> - <LI>The callbacks the filter wishes to be called, and the types of - message modification it intends to perform (required, see - <A HREF="smfi_register.html">smfi_register</A>). - - <LI>The socket address to be used when communicating with the MTA - (required, see <A HREF="smfi_setconn.html">smfi_setconn</A>). - - <LI>The number of seconds to wait for MTA connections before - timing out (optional, see - <A HREF="smfi_settimeout.html">smfi_settimeout</A>). -</UL> -<P> -If the filter fails to initialize libmilter, -or if one or more of the parameters it has passed are invalid, -a subsequent call to smfi_main will fail. - -<H2><A NAME="ControlFlow">Control Flow</A></H2> - -<P> -The following pseudocode describes the filtering process from the -perspective of a set of <CODE>N</CODE> MTA's, -each corresponding to a connection. -Callbacks are shown beside the processing stages in which they are invoked; -if no callbacks are defined for a particular stage, -that stage may be bypassed. -Though it is not shown, -processing may be aborted at any time during a message, -in which case the -<A HREF="xxfi_abort.html">xxfi_abort</A> callback is invoked and control -returns to <CODE>MESSAGE</CODE>. -<P> -<PRE> -For each of N connections -{ - For each filter - process connection/helo (<A HREF="xxfi_connect.html">xxfi_connect</A>, <A HREF="xxfi_helo.html">xxfi_helo</A>) -MESSAGE:For each message in this connection (sequentially) - { - For each filter - process sender (<A HREF="xxfi_envfrom.html">xxfi_envfrom</A>) - For each recipient - { - For each filter - process recipient (<A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A>) - } - For each filter - { - process DATA (<A HREF="xxfi_data.html">xxfi_data</A>) - For each header - process header (<A HREF="xxfi_header.html">xxfi_header</A>) - process end of headers (<A HREF="xxfi_eoh.html">xxfi_eoh</A>) - For each body block - process this body block (<A HREF="xxfi_body.html">xxfi_body</A>) - process end of message (<A HREF="xxfi_eom.html">xxfi_eom</A>) - } - } - For each filter - process end of connection (<A HREF="xxfi_close.html">xxfi_close</A>) -} -</PRE> - -<P>Note: Filters are contacted in order defined in config file.</P> - -<P> -To write a filter, a vendor supplies callbacks to process relevant -parts of a message transaction. -The library then controls all sequencing, threading, -and protocol exchange with the MTA. -<A HREF="#figure-3">Figure 3</A> outlines control flow for a filter -process, showing where different callbacks are invoked. -</P> - -<DIV ALIGN="center"><A NAME="figure-3"></A> -<TABLE border=1 cellspacing=0 cellpadding=2 width="70%"> -<TR bgcolor="#dddddd"><TH>SMTP Commands</TH><TH>Milter Callbacks</TH></TR> -<TR><TD>(open SMTP connection)</TD><TD>xxfi_connect</TD></TR> -<TR><TD>HELO ...</TD><TD>xxfi_helo</TD></TR> -<TR><TD>MAIL From: ...</TD><TD>xxfi_envfrom</TD></TR> -<TR><TD>RCPT To: ...</TD><TD>xxfi_envrcpt</TD></TR> -<TR><TD>[more RCPTs]</TD><TD>[xxfi_envrcpt]</TD></TR> -<TR><TD>DATA</TD><TD>xxfi_data</TD></TR> -<TR><TD>Header: ...</TD><TD>xxfi_header</TD></TR> -<TR><TD>[more headers]</TD><TD>[xxfi_header]</TD></TR> -<TR><TD> </TD><TD>xxfi_eoh</TD></TR> -<TR><TD>body... </TD><TD>xxfi_body</TD></TR> -<TR><TD>[more body...]</TD><TD>[xxfi_body]</TD></TR> -<TR><TD>.</TD><TD>xxfi_eom</TD></TR> -<TR><TD>QUIT</TD><TD>xxfi_close</TD></TR> -<TR><TD>(close SMTP connection)</TD><TD> </TD></TR> -</TABLE> -<B>Figure 3: Milter callbacks related to an SMTP transaction.</B> -</DIV> - -<P> -Note that although only a single message is shown above, multiple -messages may be sent in a single connection. -Note also that a message or connection may be aborted by -either the remote host or the MTA -at any point during the SMTP transaction. -f this occurs during a message (between the MAIL command and the final "."), -the filter's -<A HREF="xxfi_abort.html">xxfi_abort</A> routine will be called. -<A HREF="xxfi_close.html">xxfi_close</A> is called any time the -connection closes. - -<H2><A NAME="Multithreading">Multithreading</A></H2> - -<P> -A single filter process may handle any number of connections -simultaneously. -All filtering callbacks must therefore be reentrant, -and use some appropriate external synchronization methods to access -global data. -Furthermore, since there is not a one-to-one correspondence -between threads and connections -(N connections mapped onto M threads, M <= N), -connection-specific data must be accessed -through the handles provided by the Milter library. -The programmer cannot rely on library-supplied thread-specific data blocks -(e.g., <CODE>pthread_getspecific(3)</CODE>) to store connection-specific data. -See the API documentation for -<A HREF="smfi_setpriv.html">smfi_setpriv</A> and -<A HREF="smfi_getpriv.html">smfi_getpriv</A> for details. - -<H2><A NAME="ResourceManagement">Resource Management</A></H2> - -Since filters are likely to be long-lived, -and to handle many connections, -proper deallocation of per-connection resources is important. -The lifetime of a connection is bracketed by calls to the -callbacks <A HREF="xxfi_connect.html">xxfi_connect</A> and -<A HREF="xxfi_close.html">xxfi_close</A>. -Therefore connection-specific -resources (accessed via <A HREF="smfi_getpriv.html">smfi_getpriv</A> -and <A HREF="smfi_setpriv.html">smfi_setpriv</A>) may be allocated in -<A HREF="xxfi_connect.html">xxfi_connect</A>, -and should be freed in -<A HREF="xxfi_close.html">xxfi_close</A>. -For further information see -the <A HREF="api.html#conn-msg">discussion</A> of message- versus -connection-oriented routines. -In particular, -note that there is only one connection-specific data pointer per connection. -<P> - -Each message is bracketed by calls to -<A HREF="xxfi_envfrom.html">xxfi_envfrom</A> and -<A HREF="xxfi_eom.html">xxfi_eom</A> (or -<A HREF="xxfi_abort.html">xxfi_abort</A>), -implying that message-specific resources can be allocated -and reclaimed in these routines. -Since the messages in a connection are processed sequentially by each filter, -there will be only one active message associated with a given -connection and filter (and connection-private data block). -These resources must still be accessed through -<A HREF="smfi_getpriv.html">smfi_getpriv</A> and -<A HREF="smfi_setpriv.html">smfi_setpriv</A>, -and must be reclaimed in -<A HREF="xxfi_abort.html">xxfi_abort</A>. - -<H2><A NAME="SignalHandling">Signal Handling</A></H2> - -libmilter takes care of signal handling, -the filters are not influenced directly by signals. -There are basically two types of signal handlers: - -<OL> -<LI><TT>Stop</TT>: no new connections from the MTA will be accepted, -but existing connections are allowed to continue. -<LI><TT>Abort</TT>: all filters will be stopped as soon as the next -communication with the MTA happens. -</OL> - -Filters are not terminated asynchronously -(except by signals that can't be caught). -In the case of <TT>Abort</TT> the -<A HREF="xxfi_abort.html">xxfi_abort</A> callback is invoked. - -<HR size="1"> -<FONT size="-1"> -Copyright (c) 2000, 2001, 2003, 2006 Sendmail, Inc. and its suppliers. -All rights reserved. -<BR> -By using this file, you agree to the terms and conditions set -forth in the LICENSE. -</FONT> -</BODY> -</HTML> |
