]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/smtp/serv_smtpqueue.c
SMTP: fix aggregation of fail stati for aide / bounce message.
[citadel.git] / citadel / modules / smtp / serv_smtpqueue.c
index 5b471127ed176d4060d13c7f2eac0beda927c50b..52433b90f3fe6e7629d9b11673f1e55fc53e4421 100644 (file)
@@ -194,7 +194,7 @@ void FreeMailQEntry(void *qv)
 */
        FreeStrBuf(&Q->Recipient);
        FreeStrBuf(&Q->StatusMessage);
-
+       FreeStrBuf(&Q->AllStatusMessages);
        memset(Q, 0, sizeof(MailQEntry));
        free(Q);
 }
@@ -385,7 +385,10 @@ StrBuf *SerializeQueueItem(OneQueItem *MyQItem)
                StrBufAppendBufPlain(QMessage, HKEY("|"), 0);
                StrBufAppendPrintf(QMessage, "%d", ThisItem->Status);
                StrBufAppendBufPlain(QMessage, HKEY("|"), 0);
-               StrBufAppendBuf(QMessage, ThisItem->StatusMessage, 0);
+               if (ThisItem->AllStatusMessages != NULL)
+                       StrBufAppendBuf(QMessage, ThisItem->AllStatusMessages, 0);
+               else
+                       StrBufAppendBuf(QMessage, ThisItem->StatusMessage, 0);
        }
        DeleteHashPos(&It);
        StrBufAppendBufPlain(QMessage, HKEY("\n"), 0);
@@ -515,7 +518,7 @@ StrBuf *smtp_load_msg(OneQueItem *MyQItem, int n, char **Author, char **Address)
 void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay)
 {
        static int seq = 0;
-
+       
        struct CtdlMessage *bmsg = NULL;
        StrBuf *boundary;
        StrBuf *Msg = NULL;
@@ -566,7 +569,10 @@ void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt, ParsedURL *Relay)
                        StrBufAppendBufPlain(Msg, HKEY(" "), 0);
                        StrBufAppendBuf(Msg, ThisItem->Recipient, 0);
                        StrBufAppendBufPlain(Msg, HKEY(": "), 0);
-                       StrBufAppendBuf(Msg, ThisItem->StatusMessage, 0);
+                       if (ThisItem->AllStatusMessages != NULL)
+                               StrBufAppendBuf(Msg, ThisItem->AllStatusMessages, 0);
+                       else
+                               StrBufAppendBuf(Msg, ThisItem->StatusMessage, 0);
                        StrBufAppendBufPlain(Msg, HKEY("\r\n"), 0);
                }
        }
@@ -826,7 +832,7 @@ void smtp_do_procmsg(long msgnum, void *userdata) {
        StrBuf *Msg =NULL;
 
        if (mynumsessions > max_sessions_for_outbound_smtp) {
-               SMTPC_syslog(LOG_DEBUG,
+               SMTPC_syslog(LOG_INFO,
                             "skipping because of num jobs %d > %d max_sessions_for_outbound_smtp",
                             mynumsessions,
                             max_sessions_for_outbound_smtp);
@@ -937,13 +943,23 @@ void smtp_do_procmsg(long msgnum, void *userdata) {
            (((MyQItem->ActiveDeliveries * 2)  < max_sessions_for_outbound_smtp)))
        {
                /* abort delivery for another time. */
-               SMTPC_syslog(LOG_DEBUG,
+               SMTPC_syslog(LOG_INFO,
                             "SMTP Queue: skipping because of num jobs %d + %ld > %d max_sessions_for_outbound_smtp",
                             mynumsessions,
                             MyQItem->ActiveDeliveries,
                             max_sessions_for_outbound_smtp);
 
-               FreeQueItem(&MyQItem);
+               It = GetNewHashPos(MyQItem->MailQEntries, 0);
+               pthread_mutex_lock(&ActiveQItemsLock);
+               {
+                       if (GetHashPosFromKey(ActiveQItems,
+                                             LKEY(MyQItem->MessageID),
+                                             It))
+                       {
+                               DeleteEntryFromHash(ActiveQItems, It);
+                       }
+               }
+               pthread_mutex_unlock(&ActiveQItemsLock);
 
                return;
        }
@@ -992,10 +1008,12 @@ void smtp_do_procmsg(long msgnum, void *userdata) {
                                                         n,
                                                         RelayUrls);
 
-                               if (KeepBuffers) HaveBuffers = 1;
+                               if (KeepBuffers) HaveBuffers++;
 
                                i++;
                        }
+                       if (Author != NULL) free (Author);
+                       if (Address != NULL) free (Address);
                        DeleteHashPos(&It);
 
                        return;
@@ -1032,7 +1050,7 @@ void smtp_do_procmsg(long msgnum, void *userdata) {
                                                         n,
                                                         RelayUrls);
 
-                               if (KeepBuffers) HaveBuffers = 1;
+                               if (KeepBuffers) HaveBuffers++;
 
                                i++;
                        }