Create Milter on either connect or negotiate

This commit is contained in:
Stuart Gathman
2009-05-29 19:30:05 +00:00
parent 26b006455e
commit f8efbb23df
+9 -4
View File
@@ -213,10 +213,15 @@ class Milter(Base):
factory = Milter
def connectcallback(ctx,hostname,family,hostaddr):
def getpriv(ctx):
m = ctx.getpriv()
if not m: # if not already created
m = factory()
m._setctx(ctx)
return m.connect(hostname,family,hostaddr)
return m
def connectcallback(ctx,hostname,family,hostaddr):
return getpriv(ctx).connect(hostname,family,hostaddr)
def closecallback(ctx):
m = ctx.getpriv()
@@ -275,7 +280,7 @@ def runmilter(name,socketname,timeout = 0):
# The default flags set include everything
# milter.set_flags(milter.ADDHDRS)
milter.set_connect_callback(connectcallback)
milter.set_connect_callback(lambda ctx,h,f,i: getpriv(ctx).connect(h,f,i))
milter.set_helo_callback(lambda ctx, host: ctx.getpriv().hello(host))
# For envfrom and envrcpt, we would like to convert ESMTP parms to keyword
# parms, but then all existing users would have to include **kw to accept
@@ -296,7 +301,7 @@ def runmilter(name,socketname,timeout = 0):
milter.register(name,
data=lambda ctx: ctx.getpriv().data(),
unknown=lambda ctx,cmd: ctx.getpriv().unknown(cmd),
negotiate=lambda ctx,opt: ctx.getpriv().negotiate(opt)
negotiate=lambda ctx,opt: getpriv(ctx).negotiate(opt)
)
start_seq = _seq
try: