X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fsmtp%2Fsmtpqueue.h;h=2bd4c2700f4921fbf3a61cb46c89386aee073f1e;hb=9e07e8e851dcb5758feacb349cbb94b15799d632;hp=0da68956184dcf1c0b5e0dd29006da1df5e3874e;hpb=2b1af802b6361c71b7d2376cc8b5812918beb47f;p=citadel.git diff --git a/citadel/modules/smtp/smtpqueue.h b/citadel/modules/smtp/smtpqueue.h index 0da689561..2bd4c2700 100644 --- a/citadel/modules/smtp/smtpqueue.h +++ b/citadel/modules/smtp/smtpqueue.h @@ -1,66 +1,86 @@ +/* + * + * 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 + */ + /*****************************************************************************/ /* SMTP CLIENT (Queue Management) STUFF */ /*****************************************************************************/ -typedef struct ParsedURL ParsedURL; -struct ParsedURL { - StrBuf *URL; - unsigned Port; - const char *Host; - const char *User; - const char *Pass; - const char *LocalPart; - int IsIP; - int af; - struct hostent *HEnt; - struct in6_addr Addr; - ParsedURL *Next; -}; - - #define MaxAttempts 15 -typedef struct _delivery_attempt { - time_t when; - time_t retry; -}DeliveryAttempt; +extern const unsigned short DefaultMXPort; typedef struct _mailq_entry { - DeliveryAttempt Attempts[MaxAttempts]; - int nAttempts; StrBuf *Recipient; StrBuf *StatusMessage; + StrBuf *AllStatusMessages; int Status; /**< * 0 = No delivery has yet been attempted * 2 = Delivery was successful + * 3 = Transient error like connection problem. Try next remote if available. * 4 = A transient error was experienced ... try again later * 5 = Delivery to this address failed permanently. The error message - * should be placed in the fourth field so that a bounce message may + * should be placed in the fourth field so that a bounce message may * be generated. */ int n; int Active; + int StillActive; + int nAttempt; }MailQEntry; typedef struct queueitem { + long SendBounceMail; long MessageID; long QueMsgID; long Submitted; int FailNow; HashList *MailQEntries; - MailQEntry *Current; /* copy of the currently parsed item in the MailQEntries list; if null add a new one. */ - DeliveryAttempt LastAttempt; +/* copy of the currently parsed item in the MailQEntries list; + * if null add a new one. + */ + MailQEntry *Current; + time_t ReattemptWhen; + time_t Retry; + long ActiveDeliveries; + long NotYetShutdownDeliveries; StrBuf *EnvelopeFrom; StrBuf *BounceTo; + StrBuf *SenderRoom; ParsedURL *URL; + ParsedURL *FallBackHost; + int HaveRelay; } OneQueItem; + typedef void (*QItemHandler)(OneQueItem *Item, StrBuf *Line, const char **Pos); -int DecreaseQReference(OneQueItem *MyQItem); -void RemoveQItem(OneQueItem *MyQItem); -int CountActiveQueueEntries(OneQueItem *MyQItem); + +typedef struct __QItemHandlerStruct { + QItemHandler H; +} QItemHandlerStruct; +int DecreaseQReference(OneQueItem *MyQItem); +void DecreaseShutdownDeliveries(OneQueItem *MyQItem); +int GetShutdownDeliveries(OneQueItem *MyQItem); +void RemoveQItem(OneQueItem *MyQItem); +int CountActiveQueueEntries(OneQueItem *MyQItem, int before); StrBuf *SerializeQueueItem(OneQueItem *MyQItem); +void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay); -void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt); +int CheckQEntryIsBounce(MailQEntry *ThisItem);