]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/smtp/serv_smtpqueue.c
Re-Sort Cleanup of event io on shutdown
[citadel.git] / citadel / modules / smtp / serv_smtpqueue.c
index 2d406f2e348f71b8e84c113f56ccb80e15e50eb1..e9053981e1e28053bb94240d402f0b0d94074e6d 100644 (file)
@@ -161,16 +161,28 @@ void RemoveQItem(OneQueItem *MyQItem)
 void FreeMailQEntry(void *qv)
 {
        MailQEntry *Q = qv;
+/*
+       syslog(LOG_DEBUG, "---------------%s--------------", __FUNCTION__);
+       cit_backtrace();
+*/
        FreeStrBuf(&Q->Recipient);
        FreeStrBuf(&Q->StatusMessage);
+
+       memset(Q, 0, sizeof(MailQEntry));
        free(Q);
 }
 void FreeQueItem(OneQueItem **Item)
 {
+/*
+       syslog(LOG_DEBUG, "---------------%s--------------", __FUNCTION__);
+       cit_backtrace();
+*/
        DeleteHash(&(*Item)->MailQEntries);
        FreeStrBuf(&(*Item)->EnvelopeFrom);
        FreeStrBuf(&(*Item)->BounceTo);
+       FreeStrBuf(&(*Item)->SenderRoom);
        FreeURL(&(*Item)->URL);
+       memset(*Item, 0, sizeof(OneQueItem));
        free(*Item);
        Item = NULL;
 }
@@ -296,6 +308,11 @@ StrBuf *SerializeQueueItem(OneQueItem *MyQItem)
                StrBufAppendBuf(QMessage, MyQItem->EnvelopeFrom, 0);
        }
 
+       if (StrLength(MyQItem->SenderRoom) > 0) {
+               StrBufAppendBufPlain(QMessage, HKEY("\nsource_room|"), 0);
+               StrBufAppendBuf(QMessage, MyQItem->SenderRoom, 0);
+       }
+
        StrBufAppendBufPlain(QMessage, HKEY("\nretry|"), 0);
        StrBufAppendPrintf(QMessage, "%ld",
                           MyQItem->Retry);
@@ -364,6 +381,13 @@ void QItem_Handle_BounceTo(OneQueItem *Item, StrBuf *Line, const char **Pos)
        StrBufExtract_NextToken(Item->BounceTo, Line, Pos, '|');
 }
 
+void QItem_Handle_SenderRoom(OneQueItem *Item, StrBuf *Line, const char **Pos)
+{
+       if (Item->SenderRoom == NULL)
+               Item->SenderRoom = NewStrBufPlain(NULL, StrLength(Line));
+       StrBufExtract_NextToken(Item->SenderRoom, Line, Pos, '|');
+}
+
 void QItem_Handle_Recipient(OneQueItem *Item, StrBuf *Line, const char **Pos)
 {
        if (Item->Current == NULL)
@@ -555,6 +579,17 @@ void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt)
        StrBufAppendBuf(BounceMB, Msg, 0);
        FreeStrBuf(&Msg);
 
+       if (StrLength(MyQItem->SenderRoom) > 0)
+       {
+               StrBufAppendBufPlain(
+                       BounceMB,
+                       HKEY("The message was originaly posted in: "), 0);
+               StrBufAppendBuf(BounceMB, MyQItem->SenderRoom, 0);
+               StrBufAppendBufPlain(
+                       BounceMB,
+                       HKEY("\n"), 0);
+       }
+
        /* Attach the original message */
        StrBufAppendBufPlain(BounceMB, HKEY("--"), 0);
        StrBufAppendBuf(BounceMB, boundary, 0);
@@ -1033,11 +1068,11 @@ CTDL_MODULE_INIT(smtp_queu)
                Put(QItemHandlers, HKEY("attempted"), QItem_Handle_Attempted, reference_free_handler);
                Put(QItemHandlers, HKEY("remote"), QItem_Handle_Recipient, reference_free_handler);
                Put(QItemHandlers, HKEY("bounceto"), QItem_Handle_BounceTo, reference_free_handler);
+               Put(QItemHandlers, HKEY("source_room"), QItem_Handle_SenderRoom, reference_free_handler);
                Put(QItemHandlers, HKEY("submitted"), QItem_Handle_Submitted, reference_free_handler);
-
                smtp_init_spoolout();
 
-               CtdlRegisterCleanupHook(smtp_evq_cleanup);
+               CtdlRegisterEVCleanupHook(smtp_evq_cleanup);
 
                CtdlRegisterProtoHook(cmd_smtp, "SMTP", "SMTP utility commands");
                CtdlRegisterSessionHook(smtp_do_queue, EVT_TIMER);