X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fsmtp%2Fsmtp_clienthandlers.h;h=3cbcb6d4a39881083aaf5d503c1480e880171826;hb=0d7d457ca13abbbc077633edd900cf20f6552dda;hp=02120784ac306f86f0d0ce02de4e256b10576b94;hpb=9cb62d5470378a47be05d5d67d0b28de07386017;p=citadel.git diff --git a/citadel/modules/smtp/smtp_clienthandlers.h b/citadel/modules/smtp/smtp_clienthandlers.h index 02120784a..3cbcb6d4a 100644 --- a/citadel/modules/smtp/smtp_clienthandlers.h +++ b/citadel/modules/smtp/smtp_clienthandlers.h @@ -1,5 +1,24 @@ +/* + * + * Copyright (c) 1998-2012 by the citadel.org team + * + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + typedef enum _eSMTP_C_States { - eConnectMX, + eConnectMX, eEHLO, eHELO, eSMTPAuth, @@ -19,6 +38,8 @@ typedef struct _stmp_out_msg { long n; AsyncIO IO; long CXFlags; + int IDestructQueItem; + int nRemain; eSMTP_C_States State; @@ -38,11 +59,14 @@ typedef struct _stmp_out_msg { ParsedURL *Relay; ParsedURL *pCurrRelay; StrBuf *msgtext; + StrBuf *QMsgData; const char *envelope_from; + char user[1024]; char node[1024]; char name[1024]; char mailfrom[1024]; + long Flags; } SmtpOutMsg; @@ -60,13 +84,59 @@ const double SMTP_C_ConnTimeout; #define F_RELAY (1<<0) /* we have a Relay host configuration */ #define F_HAVE_FALLBACK (1<<1) /* we have a fallback host configuration */ #define F_FALLBACK (1<<2) -#define F_HAVE_MX (1<<3) /* we have a list of mx records to go through. */ +#define F_HAVE_MX (1<<3) /* we have a list of mx records to go through.*/ #define F_DIRECT (1<<4) /* no mx record found, trying direct connect. */ +extern int SMTPClientDebugEnabled; int smtp_resolve_recipients(SmtpOutMsg *SendMsg); #define QID ((SmtpOutMsg*)IO->Data)->MyQItem->MessageID #define N ((SmtpOutMsg*)IO->Data)->n -#define EVS_syslog(LEVEL, FORMAT, ...) syslog(LEVEL, "IO[%ld]S[%ld][%ld]" FORMAT, IO->ID, QID, N, __VA_ARGS__) -#define EVSM_syslog(LEVEL, FORMAT) syslog(LEVEL, "IO[%ld]S[%ld][%ld]" FORMAT, IO->ID, QID, 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);