Integrated the DKIM signer into serv_smtpclient, but disabled it
[citadel.git] / webcit / smtpqueue.c
index 0ce44e3281f6f169a1aa14dd760799525093475d..b5c750a311a1b4106a9072b8ae20f3e51db4996a 100644 (file)
@@ -3,6 +3,8 @@
  */
 
 #include "webcit.h"
+CtxType CTX_MAILQITEM = CTX_NONE;
+CtxType CTX_MAILQ_RCPT = CTX_NONE;
 HashList *QItemHandlers = NULL;
 
 
@@ -126,54 +128,54 @@ OneQueItem *DeserializeQueueItem(StrBuf *RawQItem, long QueMsgID)
 
 void tmplput_MailQID(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        StrBufAppendPrintf(Target, "%ld", Item->QueMsgID);;
 }
 void tmplput_MailQPayloadID(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        StrBufAppendPrintf(Target, "%ld", Item->MessageID);
 }
 void tmplput_MailQBounceTo(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        StrBufAppendTemplate(Target, TP, Item->BounceTo, 0);
 }
 void tmplput_MailQAttempted(StrBuf *Target, WCTemplputParams *TP)
 {
         char datebuf[64];
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
         webcit_fmt_date(datebuf, 64, Item->ReattemptWhen, DATEFMT_BRIEF);
         StrBufAppendBufPlain(Target, datebuf, -1, 0);
 }
 void tmplput_MailQSubmitted(StrBuf *Target, WCTemplputParams *TP)
 {
         char datebuf[64];
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
         webcit_fmt_date(datebuf, 64, Item->Submitted, DATEFMT_BRIEF);
         StrBufAppendBufPlain(Target, datebuf, -1, 0);
 }
 void tmplput_MailQEnvelopeFrom(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        StrBufAppendTemplate(Target, TP, Item->EnvelopeFrom, 0);
 }
 void tmplput_MailQSourceRoom(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        StrBufAppendTemplate(Target, TP, Item->SenderRoom, 0);
 }
 
 int Conditional_MailQ_HaveSourceRoom(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        return StrLength(Item->SenderRoom) > 0;
 }
 
 void tmplput_MailQRetry(StrBuf *Target, WCTemplputParams *TP)
 {
         char datebuf[64];
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
 
        if (Item->Retry == 0) {
                StrBufAppendBufPlain(Target, _("First Attempt pending"), -1, 0);
@@ -186,23 +188,23 @@ void tmplput_MailQRetry(StrBuf *Target, WCTemplputParams *TP)
 
 void tmplput_MailQRCPT(StrBuf *Target, WCTemplputParams *TP)
 {
-       MailQEntry *Entry = (MailQEntry*) CTX;
+       MailQEntry *Entry = (MailQEntry*) CTX(CTX_MAILQ_RCPT);
        StrBufAppendTemplate(Target, TP, Entry->Recipient, 0);
 }
 void tmplput_MailQRCPTStatus(StrBuf *Target, WCTemplputParams *TP)
 {
-       MailQEntry *Entry = (MailQEntry*) CTX;
+       MailQEntry *Entry = (MailQEntry*) CTX(CTX_MAILQ_RCPT);
        StrBufAppendPrintf(Target, "%ld", Entry->Status);
 }
 void tmplput_MailQStatusMsg(StrBuf *Target, WCTemplputParams *TP)
 {
-       MailQEntry *Entry = (MailQEntry*) CTX;
+       MailQEntry *Entry = (MailQEntry*) CTX(CTX_MAILQ_RCPT);
        StrBufAppendTemplate(Target, TP, Entry->StatusMessage, 0);
 }
 
 HashList *iterate_get_Recipients(StrBuf *Target, WCTemplputParams *TP)
 {
-       OneQueItem *Item = (OneQueItem*) CTX;
+       OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM);
        return Item->MailQEntries;
 }
 
@@ -250,6 +252,7 @@ void QItem_Handle_SenderRoom(OneQueItem *Item, StrBuf *Line, const char **Pos)
 
 void QItem_Handle_Recipient(OneQueItem *Item, StrBuf *Line, const char **Pos)
 {
+       const char *pch;
        if (Item->Current == NULL)
                NewMailQEntry(Item);
        if (Item->Current->Recipient == NULL)
@@ -257,6 +260,18 @@ void QItem_Handle_Recipient(OneQueItem *Item, StrBuf *Line, const char **Pos)
        StrBufExtract_NextToken(Item->Current->Recipient, Line, Pos, '|');
        Item->Current->Status = StrBufExtractNext_int(Line, Pos, '|');
        StrBufExtract_NextToken(Item->Current->StatusMessage, Line, Pos, '|');
+
+       pch = ChrPtr(Item->Current->StatusMessage);
+       while ((pch != NULL) && (*pch != '\0')) {
+               pch = strchr(pch, ';');
+               if (pch != NULL) {
+                       pch ++;
+                       if (*pch == ' ') {
+                               StrBufPeek(Item->Current->StatusMessage,
+                                          pch, -1, '\n');
+                       }
+               }
+       }
        Item->Current = NULL; // TODO: is this always right?
 }
 
@@ -281,19 +296,20 @@ void QItem_Handle_Attempted(OneQueItem *Item, StrBuf *Line, const char **Pos)
 
 
 
-
-
-
-
-void render_QUEUE(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+void render_QUEUE(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
 {
+       wc_mime_attachment *Mime = CTX(CTX_MIME_ATACH);
        WCTemplputParams SubTP;
+       OneQueItem* Context;
 
-       memset(&SubTP, 0, sizeof(WCTemplputParams));
-       SubTP.Filter.ContextType = CTX_MAILQITEM;
-       SubTP.Context = DeserializeQueueItem(Mime->Data, Mime->msgnum);
-       DoTemplate(HKEY("view_mailq_message"),NULL, &SubTP);
-       FreeQueItem ((OneQueItem**)&SubTP.Context);
+       Context = DeserializeQueueItem(Mime->Data, Mime->msgnum);
+       StackContext(TP, &SubTP, Context, CTX_MAILQITEM, 0, TP->Tokens);
+       {
+               DoTemplate(HKEY("view_mailq_message"), NULL, &SubTP);
+       }
+       UnStackContext(&SubTP);
+
+       FreeQueItem (&Context);
 }
 
 void
@@ -311,7 +327,10 @@ ServerStartModule_SMTP_QUEUE
 
 int qview_PrintPageHeader(SharedMessageStatus *Stat, void **ViewSpecific)
 {
-       output_headers(1, 1, 1, 0, 0, 0);
+       if (yesbstr("ListOnly"))
+               output_headers(1, 0, 0, 0, 0, 0);
+       else
+               output_headers(1, 1, 1, 0, 0, 0);
        return 0;
 }
 
@@ -333,7 +352,10 @@ int qview_GetParamsGetServerCall(SharedMessageStatus *Stat,
        else {
                snprintf(cmd, len, "MSGS ALL|0|1");
                snprintf(filter, flen, "SUBJ|QMSG");
-               DoTemplate(HKEY("view_mailq_header"), NULL, NULL);
+               if (yesbstr("ListOnly"))
+                       DoTemplate(HKEY("view_mailq_table"), NULL, NULL);
+               else
+                       DoTemplate(HKEY("view_mailq_header"), NULL, NULL);
                return 200;
        }
 }
@@ -351,7 +373,7 @@ int qview_LoadMsgFromServer(SharedMessageStatus *Stat,
        const StrBuf *Mime;
 
         /* Not (yet?) needed here? calview *c = (calview *) *ViewSpecific; */
-       read_message(WCC->WBuf, HKEY("view_mailq_message_bearer"), Msg->msgnum, NULL, &Mime);
+       read_message(WCC->WBuf, HKEY("view_mailq_message_bearer"), Msg->msgnum, NULL, &Mime, NULL);
 
         return 0;
 }
@@ -364,16 +386,23 @@ int qview_RenderView_or_Tail(SharedMessageStatus *Stat,
        wcsession *WCC = WC;
        WCTemplputParams SubTP;
 
-       if (GetCount(WCC->summ) == 0)
-               DoTemplate(HKEY("view_mailq_footer_empty"),NULL, &SubTP);
+       memset(&SubTP, 0, sizeof(WCTemplputParams));
+       if (yesbstr("ListOnly"))
+               DoTemplate(HKEY("view_mailq_footer_listonly"),NULL, &SubTP);
        else
-               DoTemplate(HKEY("view_mailq_footer"),NULL, &SubTP);
-       
+       {
+               if (GetCount(WCC->summ) == 0)
+                       DoTemplate(HKEY("view_mailq_footer_empty"),NULL, &SubTP);
+               else
+                       DoTemplate(HKEY("view_mailq_footer"),NULL, &SubTP);
+       }
+
        return 0;
 }
 int qview_Cleanup(void **ViewSpecific)
 {
-       wDumpContent(1);
+       
+       wDumpContent(yesbstr("ListOnly")?0:1);
        return 0;
 }
 
@@ -381,6 +410,8 @@ void
 InitModule_SMTP_QUEUE
 (void)
 {
+       RegisterCTX(CTX_MAILQITEM);
+       RegisterCTX(CTX_MAILQ_RCPT);
 
        RegisterQItemHandler(HKEY("msgid"),             QItem_Handle_MsgID);
        RegisterQItemHandler(HKEY("envelope_from"),     QItem_Handle_EnvelopeFrom);
@@ -398,7 +429,7 @@ InitModule_SMTP_QUEUE
        RegisterNamespace("MAILQ:SUBMITTED", 0, 0, tmplput_MailQSubmitted, NULL, CTX_MAILQITEM);
        RegisterNamespace("MAILQ:ENVELOPEFROM", 0, 1, tmplput_MailQEnvelopeFrom, NULL, CTX_MAILQITEM);
        RegisterNamespace("MAILQ:SRCROOM", 0, 1, tmplput_MailQSourceRoom, NULL, CTX_MAILQITEM);
-       RegisterConditional(HKEY("COND:MAILQ:HAVESRCROOM"), 0, Conditional_MailQ_HaveSourceRoom,  CTX_MAILQITEM);
+       RegisterConditional("COND:MAILQ:HAVESRCROOM", 0, Conditional_MailQ_HaveSourceRoom,  CTX_MAILQITEM);
        RegisterNamespace("MAILQ:RETRY", 0, 0, tmplput_MailQRetry, NULL, CTX_MAILQITEM);
 
        RegisterNamespace("MAILQ:RCPT:ADDR", 0, 1, tmplput_MailQRCPT, NULL, CTX_MAILQ_RCPT);
@@ -417,6 +448,7 @@ InitModule_SMTP_QUEUE
                NULL,
                qview_LoadMsgFromServer,
                qview_RenderView_or_Tail,
-               qview_Cleanup);
+               qview_Cleanup,
+               NULL);
 
 }