From: Wilfried Goesgens Date: Mon, 30 Jul 2012 20:35:53 +0000 (+0200) Subject: SMTP-Client: fix trigger when to send bounce messages X-Git-Tag: v8.20~279 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=ab5c8068bad6fe3134f11c4a930d75da3d26cbfe SMTP-Client: fix trigger when to send bounce messages - our trigger to evaluate whether to bounce a message used to be whether its still active. Instead that it has to be whether it was active and isn't active anymore. --- diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index 548f0b69a..e85dfe411 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -153,9 +153,10 @@ eNextState FinalizeMessageSend_DB(AsyncIO *IO) Msg->IDestructQueItem = DecreaseQReference(Msg->MyQItem); - Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem); + Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem, 0); if (Msg->MyQEntry->Active && + !Msg->MyQEntry->StillActive && CheckQEntryIsBounce(Msg->MyQEntry)) { /* are we casue for a bounce mail? */ diff --git a/citadel/modules/smtp/serv_smtpqueue.c b/citadel/modules/smtp/serv_smtpqueue.c index 3c4c2cb3e..a9ad37518 100644 --- a/citadel/modules/smtp/serv_smtpqueue.c +++ b/citadel/modules/smtp/serv_smtpqueue.c @@ -246,7 +246,7 @@ int CheckQEntryIsBounce(MailQEntry *ThisItem) return 0; } -int CountActiveQueueEntries(OneQueItem *MyQItem) +int CountActiveQueueEntries(OneQueItem *MyQItem, int before) { HashPos *It; long len; @@ -258,15 +258,20 @@ int CountActiveQueueEntries(OneQueItem *MyQItem) It = GetNewHashPos(MyQItem->MailQEntries, 0); while (GetNextHashPos(MyQItem->MailQEntries, It, &len, &Key, &vQE)) { + int Active; MailQEntry *ThisItem = vQE; if (CheckQEntryActive(ThisItem)) { ActiveDeliveries++; - ThisItem->Active = 1; + Active = 1; } else - ThisItem->Active = 0; + Active = 0; + if (before) + ThisItem->Active = Active; + else + ThisItem->StillActive = Active; } DeleteHashPos(&It); return ActiveDeliveries; @@ -902,7 +907,7 @@ void smtp_do_procmsg(long msgnum, void *userdata) { DeleteHashPos(&It); MyQItem->NotYetShutdownDeliveries = - MyQItem->ActiveDeliveries = CountActiveQueueEntries(MyQItem); + MyQItem->ActiveDeliveries = CountActiveQueueEntries(MyQItem, 1); /* failsafe against overload: * will we exceed the limit set? diff --git a/citadel/modules/smtp/smtpqueue.h b/citadel/modules/smtp/smtpqueue.h index 322e45efd..8efe13210 100644 --- a/citadel/modules/smtp/smtpqueue.h +++ b/citadel/modules/smtp/smtpqueue.h @@ -40,6 +40,7 @@ typedef struct _mailq_entry { int n; int Active; + int StillActive; }MailQEntry; typedef struct queueitem { @@ -76,7 +77,7 @@ int DecreaseQReference(OneQueItem *MyQItem); void DecreaseShutdownDeliveries(OneQueItem *MyQItem); int GetShutdownDeliveries(OneQueItem *MyQItem); void RemoveQItem(OneQueItem *MyQItem); -int CountActiveQueueEntries(OneQueItem *MyQItem); +int CountActiveQueueEntries(OneQueItem *MyQItem, int before); StrBuf *SerializeQueueItem(OneQueItem *MyQItem); void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt);