+
+#define QID ((SmtpOutMsg*)IO->Data)->MyQItem->MessageID
+#define N ((SmtpOutMsg*)IO->Data)->n
+#define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (SMTPClientDebugEnabled != 0))
+
+#define EVS_syslog(LEVEL, FORMAT, ...) \
+ DBGLOG(LEVEL) syslog(LEVEL, \
+ "SMTPC:IO[%ld]CC[%d]S[%ld][%ld] " FORMAT, \
+ IO->ID, CCID, QID, N, __VA_ARGS__)
+
+#define EVSM_syslog(LEVEL, FORMAT) \
+ DBGLOG(LEVEL) syslog(LEVEL, \
+ "SMTPC:IO[%ld]CC[%d]S[%ld][%ld] " FORMAT, \
+ IO->ID, CCID, QID, N)
+
+#define EVNCS_syslog(LEVEL, FORMAT, ...) \
+ DBGLOG(LEVEL) syslog(LEVEL, "SMTPC:IO[%ld]S[%ld][%ld] " FORMAT, \
+ IO->ID, QID, N, __VA_ARGS__)
+
+#define EVNCSM_syslog(LEVEL, FORMAT) \
+ DBGLOG(LEVEL) syslog(LEVEL, "SMTPC:IO[%ld]S[%ld][%ld] " FORMAT, \
+ IO->ID, QID, N)
+
+#define SMTPC_syslog(LEVEL, FORMAT, ...) \
+ DBGLOG(LEVEL) syslog(LEVEL, \
+ "SMTPCQ: " FORMAT, \
+ __VA_ARGS__)
+
+#define SMTPCM_syslog(LEVEL, FORMAT) \
+ DBGLOG(LEVEL) syslog(LEVEL, \
+ "SMTPCQ: " FORMAT)
+
+
+
+typedef enum __smtpstate {
+ eSTMPmxlookup,
+ eSTMPevaluatenext,
+ eSTMPalookup,
+ eSTMPaaaalookup,
+ eSTMPconnecting,
+ eSTMPsmtp,
+ eSTMPsmtpdata,
+ eSTMPsmtpdone,
+ eSTMPfinished,
+ eSTMPfailOne,
+ eSMTPFailTemporary,
+ eSMTPFailTotal
+} smtpstate;
+
+void SetSMTPState(AsyncIO *IO, smtpstate State);