Changes to Supersink include a bug fix for a timeout issue with Platinum, plus new features. SuperSink now has a setup file. Run Setup /? to see the options. It automatically detects what processor you're running on (Intel and Alpha only) and installs the correct files. New features: 1. Perfmon counters for messages, recipients, and connections (and their per-second rates) have been added. 2. SuperSink now logs startup/shutdown information to the Event Log, and is configurable to log message summaries (from, to, size). Summary logging is controlled via the Control - Log menu. 3. EHLO announcements You can specify what EHLO reports back to the sending server. I currently support these extensions: AUTH ETRN DSN SIZE MIME You can also define your own EHLO announcements. You can add as many private extensions as you want, so long as they don't have comma's in them. Any entry is just added to the list of advertisements. 4. Returning specific errors A new feature is the ability on a MAIL FROM or RCPT TO that will return a user-defined error string. This feature, currently called 'nuke', is enabled by a registry value under (you guessed it!) HKCU/Software/Microsoft/Supersink: Use Nuke List, REG_DWORD, 1 to turn on Nuke File, REG_DWORD, filename (default is nuke.ini). The nuke.ini file is divided into sections: [InstanceX], where X = 1, 2, 3, or 4 [Mail], starts the MAIL FROM section [Rcpt], starts the RCPT TO section under [Mail] and [Rcpt] you add in the name of the address, followed by the 3-digit number of the message and the string, thus the format is: user@domain, 451 My error A sample nuke.ini file is on the install point. Currently the search function does not distinguish between domains and users, thus having "user, 500 error" will match the string "user" anywhere (address or domain), while putting in "user@, 500 error" will match any address "user" going to any domain. Likewise, setting "@domain, 550 error" will match any address going to that domain. The search will probably get more precise later on. Currently there is no checking for valid format on the return string, this too will change. Bug fixes: 1. BIG bug fix! Crashing bug fix! I was passing a pointer between threads, and this is very very bad when the pointer is no longer valid but is still hanging around. This caused random crashing all over the place. Now I pass an index into a map instead, this is the way I should have done it originally. 2. Exchange Platinum would send an x-header that had a null in it, I would interpret that as end-of-string. This only would be a problem if the message all fit into one packet and the message had nulls in it. It took a while to find, but I nailed it.