Doc updates

This commit is contained in:
Stuart Gathman
2013-04-18 04:06:02 +00:00
parent 76424c7c3f
commit f28cab2d1c
2 changed files with 38 additions and 17 deletions
+14 -11
View File
@@ -7,30 +7,32 @@
# events include the initial connection from a MTA, the envelope sender and # events include the initial connection from a MTA, the envelope sender and
# recipients, the top level mail headers, and the message body. There are # recipients, the top level mail headers, and the message body. There are
# options to mangle all of these components of the message as it passes through # options to mangle all of these components of the message as it passes through
# the milter. # the %milter.
# #
# At the next level, the <code>Milter</code> module (note the case difference) # At the next level, the <code>Milter</code> module (note the case difference)
# provides a Python friendly object oriented wrapper for the low level API. To # provides a Python friendly object oriented wrapper for the low level API. To
# use the Milter module, an application registers a 'factory' to create an # use the Milter module, an application registers a 'factory' to create an
# object for each connection from a MTA to sendmail. These connection objects # object for each connection from a MTA to sendmail. These connection objects
# must provide methods corresponding to the libmilter callback events. # must provide methods corresponding to the libmilter event callbacks.
# #
# Each event method returns a code to tell sendmail whether to proceed with # Each callback method returns a code to tell sendmail whether to proceed with
# processing the message. This is a big advantage of milters over other mail # processing the message. This is a big advantage of milters over other mail
# filtering systems. Unwanted mail can be stopped in its tracks at the # filtering systems. Unwanted mail can be stopped in its tracks at the
# earliest possible point. # earliest possible point. The callback return codes are
# milter.CONTINUE, milter.REJECT, milter.DISCARD, milter.ACCEPT,
# milter.TEMPFAIL, milter.SKIP, milter.NOREPLY.
# #
# The <code>Milter.Base</code> class provides default implementations for # The Milter.Base class provides default implementations for
# event methods that do nothing, and also provides wrappers for the libmilter # event methods that do nothing, and also provides wrappers for the libmilter
# methods to mutate the message. It automatically negotiates with MTA # methods to mutate the message. It automatically negotiates with MTA
# which protocol steps need to be processed by the milter, based on # which protocol steps need to be processed by the %milter, based on
# which callback methods are overridden. # which callback methods are overridden.
# #
# The <code>Milter.Milter</code> class provides an alternate default # The Milter.Milter class provides an alternate default
# implementation that logs the main milter events, but otherwise does nothing. # implementation that logs the main milter callbacks, but otherwise does
# It is provided for compatibility. # nothing. It is provided for compatibility.
# #
# The <code>mime</code> module provides a wrapper for the Python email package # The mime module provides a wrapper for the Python email package
# that fixes some bugs, and simplifies modifying selected parts of a MIME # that fixes some bugs, and simplifies modifying selected parts of a MIME
# message. # message.
# #
@@ -50,4 +52,5 @@
# You may find the # You may find the
# <a href="http://docs.python.org/release/2.6.6/library/multiprocessing.html"> # <a href="http://docs.python.org/release/2.6.6/library/multiprocessing.html">
# multiprocessing</a> module useful. It can be a drop-in # multiprocessing</a> module useful. It can be a drop-in
# replacement for threading as illustrated in milter-template. # replacement for threading as illustrated in
# <a href="milter-template_8py-example.html">milter-template.py</a>.
+24 -6
View File
@@ -3,7 +3,10 @@
## @package milter ## @package milter
# #
# A thin wrapper around libmilter. # A thin wrapper around libmilter. Most users will not import
# milter directly, but will instead import Milter and subclass
# Milter.Base. This module gives you ultimate low level control
# from python.
# #
## Continue processing the current connection, message, or recipient. ## Continue processing the current connection, message, or recipient.
@@ -169,6 +172,16 @@ def set_exception_policy(code): pass
# xxfi_data</a> callback, called when the DATA # xxfi_data</a> callback, called when the DATA
# SMTP command is received. # SMTP command is received.
def register(name,negotiate=None,unknown=None,data=None): pass def register(name,negotiate=None,unknown=None,data=None): pass
## Attempt to create the socket used to communicate with the MTA.
# milter.opensocket() attempts to create the socket specified previously by a
# call to milter.setconn() which will be the interface between MTAs and the
# %milter. This allows the calling application to ensure that the socket can be
# created. If this is not called, milter.main() will do so implicitly.
# Calls <a href="https://www.milter.org/developers/api/smfi_opensocket">
# smfi_opensocket</a>. While not documented for libmilter, my experiments
# indicate that you must call register() before calling opensocket().
# @param rmsock Try to remove an existing unix domain socket if true.
def opensocket(rmsock): pass def opensocket(rmsock): pass
## Transfer control to libmilter. ## Transfer control to libmilter.
@@ -199,12 +212,17 @@ def setbacklog(n): pass
# unix, inet, or inet6 socket. By default, a unix domain socket # unix, inet, or inet6 socket. By default, a unix domain socket
# is used. It must not exist, # is used. It must not exist,
# and sendmail will throw warnings if, eg, the file is under a # and sendmail will throw warnings if, eg, the file is under a
# group or world writable directory. # group or world writable directory. milter.setconn() will not fail with
# an invalid socket - this will be detected only when calling milter.main()
# or milter.opensocket().
# @param s the socket address in proto:address format
# <pre> # <pre>
# setconn('unix:/var/run/pythonfilter') # milter.setconn('unix:/var/run/pythonfilter') # a named pipe
# setconn('inet:8800') # listen on ANY interface # milter.setconn('local:/var/run/pythonfilter') # a named pipe
# setconn('inet:7871@@publichost') # listen on a specific interface # milter.setconn('inet:8800') # listen on ANY interface
# setconn('inet6:8020') # milter.setconn('inet:7871@@publichost') # listen on a specific interface
# milter.setconn('inet6:8020')
# milter.setconn('inet6:8020@[2001:db8:1234::1]') # listen on specific IP
# </pre> # </pre>
def setconn(s): pass def setconn(s): pass