X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fsmtp%2Fserv_smtpeventclient.c;h=e85dfe411f1f96c2a90b6c4cd1cb66faf2dcc043;hb=ab5c8068bad6fe3134f11c4a930d75da3d26cbfe;hp=56deb4f5034f1785952ea0e6cf6ca4b6830bfdb9;hpb=b6b7232c3d43b56d6606eecd9ae84a396ba8ff25;p=citadel.git diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index 56deb4f50..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? */ @@ -237,6 +238,13 @@ eNextState FailOneAttempt(AsyncIO *IO) if (Msg->pCurrRelay != NULL) Msg->pCurrRelay = Msg->pCurrRelay->Next; + if ((Msg->pCurrRelay != NULL) && + !Msg->pCurrRelay->IsRelay && + Msg->MyQItem->HaveRelay) + { + EVS_syslog(LOG_DEBUG, "%s Aborting; last relay failed.\n", __FUNCTION__); + return eAbort; + } if (Msg->pCurrRelay == NULL) { EVS_syslog(LOG_DEBUG, "%s Aborting\n", __FUNCTION__); @@ -744,6 +752,28 @@ eNextState SMTP_C_Shutdown(AsyncIO *IO) EVS_syslog(LOG_DEBUG, "%s\n", __FUNCTION__); SmtpOutMsg *Msg = IO->Data; + switch (IO->NextState) { + case eSendDNSQuery: + case eReadDNSReply: + + /* todo: abort c-ares */ + case eConnect: + case eSendReply: + case eSendMore: + case eSendFile: + case eReadMessage: + case eReadMore: + case eReadPayload: + case eReadFile: + StopClientWatchers(IO, 1); + break; + case eDBQuery: + + break; + case eTerminateConnection: + case eAbort: + break; + } Msg->MyQEntry->Status = 3; StrBufPlain(Msg->MyQEntry->StatusMessage, HKEY("server shutdown during message submit."));