From stuart at bmsi.com Thu May 21 22:14:28 2009 From: stuart at bmsi.com (Stuart D. Gathman) Date: Thu, 21 May 2009 22:14:28 -0400 (EDT) Subject: [Pymilter] Request for comment: Support new callbacks Message-ID: Request for comment I added experimental support in CVS for the 3 new callbacks: unknown, data, negotiate. I haven't liked the milter.set_xxx_callback(callable) API. For these new callbacks, I added keyword parameters to register: milter.register('myfilter',unknown=doUnknown,data=doData) If not set, the callbacks of course take the default action. This probably won't affect too many people since they generally use Milter.runmilter(). I would like to deprecate the set_xxx_callback methods and make all the callbacks settable via keyword args to register. Other ideas for specifying callbacks: pass a data class or dict with callbacks to register. The negotiate callback needs more work. For instance, if the python code does nothing with the current version and a recent sendmail, then no further callbacks will be called! (Because all the available SMFIP_NR_* and SMFIP_NO* flags will be copied.) Maybe this is reasonable, however, since the default action is to return SMFIS_ALL_OPTS, and presumably if you define negotiate callback, you know what you are doing. I would like the Milter class to be able to detect which callback member functions are not overridden, and set the SMFIP_NO* flags accordingly. I may be confused about how the flags are used. It seems weird that you have to carefully clear the SMFIP_NR and SMFIP_NO flags while leaving other flags intact in the protocol flag word. This will take some experimenting. Perhaps I should change to python negotiate API to take an input tuple and output list, with the list initialized to reasonable defaults by the C code. -- Stuart D. Gathman Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154 "Confutatis maledictis, flammis acribus addictis" - background song for a Microsoft sponsored "Where do you want to go from here?" commercial.