X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fsmtp%2Fsmtpqueue.h;h=8efe13210834fa6afb59af300ccac9484eab8739;hb=ab5c8068bad6fe3134f11c4a930d75da3d26cbfe;hp=023b479caf285c2c2d2f3796acc58c48675771ee;hpb=4671b9b8d5e66524de96f07239671db504a6e02a;p=citadel.git diff --git a/citadel/modules/smtp/smtpqueue.h b/citadel/modules/smtp/smtpqueue.h index 023b479ca..8efe13210 100644 --- a/citadel/modules/smtp/smtpqueue.h +++ b/citadel/modules/smtp/smtpqueue.h @@ -1,49 +1,84 @@ +/* + * + * 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 */ /*****************************************************************************/ #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; 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; }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); -void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt); +int CheckQEntryIsBounce(MailQEntry *ThisItem);