X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Fsmtpqueue.c;h=b5c750a311a1b4106a9072b8ae20f3e51db4996a;hp=7168d6fa4fae75dd68a053c637ae546f153ed602;hb=5d2d3f4eea91c74af93c735bff7ad9955b466181;hpb=9f8e0bd23ce7dde31156b634f3a66bf234b11927 diff --git a/webcit/smtpqueue.c b/webcit/smtpqueue.c index 7168d6fa4..b5c750a31 100644 --- a/webcit/smtpqueue.c +++ b/webcit/smtpqueue.c @@ -1,4 +1,3 @@ - /* * Display the outbound SMTP queue */ @@ -14,7 +13,6 @@ typedef struct _mailq_entry { StrBuf *Recipient; StrBuf *StatusMessage; int Status; - /**< * 0 = No delivery has yet been attempted * 2 = Delivery was successful @@ -27,7 +25,7 @@ typedef struct _mailq_entry { int n; int Active; -} MailQEntry; +}MailQEntry; typedef struct queueitem { long MessageID; @@ -35,7 +33,6 @@ typedef struct queueitem { long Submitted; int FailNow; HashList *MailQEntries; - /* copy of the currently parsed item in the MailQEntries list; * if null add a new one. */ @@ -52,25 +49,28 @@ typedef struct queueitem { } OneQueItem; -typedef void (*QItemHandler)(OneQueItem * Item, StrBuf * Line, const char **Pos); +typedef void (*QItemHandler)(OneQueItem *Item, StrBuf *Line, const char **Pos); typedef struct __QItemHandlerStruct { QItemHandler H; } QItemHandlerStruct; -void RegisterQItemHandler(const char *Key, long Len, QItemHandler H) { - QItemHandlerStruct *HS = (QItemHandlerStruct *) malloc(sizeof(QItemHandlerStruct)); +void RegisterQItemHandler(const char *Key, long Len, QItemHandler H) +{ + QItemHandlerStruct *HS = (QItemHandlerStruct*)malloc(sizeof(QItemHandlerStruct)); HS->H = H; Put(QItemHandlers, Key, Len, HS, NULL); } -void FreeMailQEntry(void *qv) { +void FreeMailQEntry(void *qv) +{ MailQEntry *Q = qv; FreeStrBuf(&Q->Recipient); FreeStrBuf(&Q->StatusMessage); free(Q); } -void FreeQueItem(OneQueItem ** Item) { +void FreeQueItem(OneQueItem **Item) +{ DeleteHash(&(*Item)->MailQEntries); FreeStrBuf(&(*Item)->EnvelopeFrom); FreeStrBuf(&(*Item)->BounceTo); @@ -79,18 +79,20 @@ void FreeQueItem(OneQueItem ** Item) { free(*Item); Item = NULL; } -void HFreeQueItem(void *Item) { - FreeQueItem((OneQueItem **) & Item); +void HFreeQueItem(void *Item) +{ + FreeQueItem((OneQueItem**)&Item); } -OneQueItem *DeserializeQueueItem(StrBuf * RawQItem, long QueMsgID) { +OneQueItem *DeserializeQueueItem(StrBuf *RawQItem, long QueMsgID) +{ OneQueItem *Item; const char *pLine = NULL; StrBuf *Line; StrBuf *Token; - - Item = (OneQueItem *) malloc(sizeof(OneQueItem)); + + Item = (OneQueItem*)malloc(sizeof(OneQueItem)); memset(Item, 0, sizeof(OneQueItem)); Item->Retry = 0; Item->MessageID = -1; @@ -103,69 +105,77 @@ OneQueItem *DeserializeQueueItem(StrBuf * RawQItem, long QueMsgID) { void *vHandler; StrBufExtract_NextToken(Line, RawQItem, &pLine, '\n'); - if (StrLength(Line) == 0) - continue; + if (StrLength(Line) == 0) continue; StrBufExtract_NextToken(Token, Line, &pItemPart, '|'); - if (GetHash(QItemHandlers, SKEY(Token), &vHandler)) { + if (GetHash(QItemHandlers, SKEY(Token), &vHandler)) + { QItemHandlerStruct *HS; - HS = (QItemHandlerStruct *) vHandler; + HS = (QItemHandlerStruct*) vHandler; HS->H(Item, Line, &pItemPart); } } FreeStrBuf(&Line); FreeStrBuf(&Token); - /* Put(ActiveQItems, LKEY(Item->MessageID), Item, HFreeQueItem); -*/ +*/ return Item; } -void tmplput_MailQID(StrBuf * Target, WCTemplputParams * TP) { - OneQueItem *Item = (OneQueItem *) CTX(CTX_MAILQITEM); +void tmplput_MailQID(StrBuf *Target, WCTemplputParams *TP) +{ + OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM); StrBufAppendPrintf(Target, "%ld", Item->QueMsgID);; } -void tmplput_MailQPayloadID(StrBuf * Target, WCTemplputParams * TP) { - OneQueItem *Item = (OneQueItem *) CTX(CTX_MAILQITEM); +void tmplput_MailQPayloadID(StrBuf *Target, WCTemplputParams *TP) +{ + OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM); StrBufAppendPrintf(Target, "%ld", Item->MessageID); } -void tmplput_MailQBounceTo(StrBuf * Target, WCTemplputParams * TP) { - OneQueItem *Item = (OneQueItem *) CTX(CTX_MAILQITEM); +void tmplput_MailQBounceTo(StrBuf *Target, WCTemplputParams *TP) +{ + 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(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(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(CTX_MAILQITEM); +void tmplput_MailQAttempted(StrBuf *Target, WCTemplputParams *TP) +{ + char datebuf[64]; + 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(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(CTX_MAILQITEM); StrBufAppendTemplate(Target, TP, Item->EnvelopeFrom, 0); } -void tmplput_MailQSourceRoom(StrBuf * Target, WCTemplputParams * TP) { - OneQueItem *Item = (OneQueItem *) CTX(CTX_MAILQITEM); +void tmplput_MailQSourceRoom(StrBuf *Target, WCTemplputParams *TP) +{ + OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM); StrBufAppendTemplate(Target, TP, Item->SenderRoom, 0); } -int Conditional_MailQ_HaveSourceRoom(StrBuf * Target, WCTemplputParams * TP) { - OneQueItem *Item = (OneQueItem *) CTX(CTX_MAILQITEM); +int Conditional_MailQ_HaveSourceRoom(StrBuf *Target, WCTemplputParams *TP) +{ + 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(CTX_MAILQITEM); +void tmplput_MailQRetry(StrBuf *Target, WCTemplputParams *TP) +{ + char datebuf[64]; + OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM); if (Item->Retry == 0) { StrBufAppendBufPlain(Target, _("First Attempt pending"), -1, 0); @@ -176,64 +186,77 @@ void tmplput_MailQRetry(StrBuf * Target, WCTemplputParams * TP) { } } -void tmplput_MailQRCPT(StrBuf * Target, WCTemplputParams * TP) { - MailQEntry *Entry = (MailQEntry *) CTX(CTX_MAILQ_RCPT); +void tmplput_MailQRCPT(StrBuf *Target, WCTemplputParams *TP) +{ + MailQEntry *Entry = (MailQEntry*) CTX(CTX_MAILQ_RCPT); StrBufAppendTemplate(Target, TP, Entry->Recipient, 0); } -void tmplput_MailQRCPTStatus(StrBuf * Target, WCTemplputParams * TP) { - MailQEntry *Entry = (MailQEntry *) CTX(CTX_MAILQ_RCPT); +void tmplput_MailQRCPTStatus(StrBuf *Target, WCTemplputParams *TP) +{ + MailQEntry *Entry = (MailQEntry*) CTX(CTX_MAILQ_RCPT); StrBufAppendPrintf(Target, "%ld", Entry->Status); } -void tmplput_MailQStatusMsg(StrBuf * Target, WCTemplputParams * TP) { - MailQEntry *Entry = (MailQEntry *) CTX(CTX_MAILQ_RCPT); +void tmplput_MailQStatusMsg(StrBuf *Target, WCTemplputParams *TP) +{ + 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(CTX_MAILQITEM); +HashList *iterate_get_Recipients(StrBuf *Target, WCTemplputParams *TP) +{ + OneQueItem *Item = (OneQueItem*) CTX(CTX_MAILQITEM); return Item->MailQEntries; } -void NewMailQEntry(OneQueItem * Item) { - Item->Current = (MailQEntry *) malloc(sizeof(MailQEntry)); +void NewMailQEntry(OneQueItem *Item) +{ + Item->Current = (MailQEntry*) malloc(sizeof(MailQEntry)); memset(Item->Current, 0, sizeof(MailQEntry)); if (Item->MailQEntries == NULL) Item->MailQEntries = NewHash(1, Flathash); Item->Current->StatusMessage = NewStrBuf(); Item->Current->n = GetCount(Item->MailQEntries); - Put(Item->MailQEntries, IKEY(Item->Current->n), Item->Current, FreeMailQEntry); + Put(Item->MailQEntries, + IKEY(Item->Current->n), + Item->Current, + FreeMailQEntry); } -void QItem_Handle_MsgID(OneQueItem * Item, StrBuf * Line, const char **Pos) { +void QItem_Handle_MsgID(OneQueItem *Item, StrBuf *Line, const char **Pos) +{ Item->MessageID = StrBufExtractNext_long(Line, Pos, '|'); } -void QItem_Handle_EnvelopeFrom(OneQueItem * Item, StrBuf * Line, const char **Pos) { +void QItem_Handle_EnvelopeFrom(OneQueItem *Item, StrBuf *Line, const char **Pos) +{ if (Item->EnvelopeFrom == NULL) Item->EnvelopeFrom = NewStrBufPlain(NULL, StrLength(Line)); StrBufExtract_NextToken(Item->EnvelopeFrom, Line, Pos, '|'); } -void QItem_Handle_BounceTo(OneQueItem * Item, StrBuf * Line, const char **Pos) { +void QItem_Handle_BounceTo(OneQueItem *Item, StrBuf *Line, const char **Pos) +{ if (Item->BounceTo == NULL) Item->BounceTo = NewStrBufPlain(NULL, StrLength(Line)); StrBufExtract_NextToken(Item->BounceTo, Line, Pos, '|'); } -void QItem_Handle_SenderRoom(OneQueItem * Item, StrBuf * Line, const char **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) { +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) - Item->Current->Recipient = NewStrBufPlain(NULL, StrLength(Line)); + Item->Current->Recipient=NewStrBufPlain(NULL, StrLength(Line)); StrBufExtract_NextToken(Item->Current->Recipient, Line, Pos, '|'); Item->Current->Status = StrBufExtractNext_int(Line, Pos, '|'); StrBufExtract_NextToken(Item->Current->StatusMessage, Line, Pos, '|'); @@ -242,37 +265,42 @@ void QItem_Handle_Recipient(OneQueItem * Item, StrBuf * Line, const char **Pos) while ((pch != NULL) && (*pch != '\0')) { pch = strchr(pch, ';'); if (pch != NULL) { - pch++; + pch ++; if (*pch == ' ') { - StrBufPeek(Item->Current->StatusMessage, pch, -1, '\n'); + StrBufPeek(Item->Current->StatusMessage, + pch, -1, '\n'); } } } - Item->Current = NULL; // TODO: is this always right? + Item->Current = NULL; // TODO: is this always right? } -void QItem_Handle_retry(OneQueItem * Item, StrBuf * Line, const char **Pos) { +void QItem_Handle_retry(OneQueItem *Item, StrBuf *Line, const char **Pos) +{ Item->Retry = StrBufExtractNext_int(Line, Pos, '|'); } -void QItem_Handle_Submitted(OneQueItem * Item, StrBuf * Line, const char **Pos) { +void QItem_Handle_Submitted(OneQueItem *Item, StrBuf *Line, const char **Pos) +{ Item->Submitted = atol(*Pos); } -void QItem_Handle_Attempted(OneQueItem * Item, StrBuf * Line, const char **Pos) { +void QItem_Handle_Attempted(OneQueItem *Item, StrBuf *Line, const char **Pos) +{ Item->ReattemptWhen = StrBufExtractNext_int(Line, Pos, '|'); } -void render_QUEUE(StrBuf * Target, WCTemplputParams * TP, StrBuf * FoundCharset) { +void render_QUEUE(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset) +{ wc_mime_attachment *Mime = CTX(CTX_MIME_ATACH); WCTemplputParams SubTP; - OneQueItem *Context; + OneQueItem* Context; Context = DeserializeQueueItem(Mime->Data, Mime->msgnum); StackContext(TP, &SubTP, Context, CTX_MAILQITEM, 0, TP->Tokens); @@ -281,18 +309,24 @@ void render_QUEUE(StrBuf * Target, WCTemplputParams * TP, StrBuf * FoundCharset) } UnStackContext(&SubTP); - FreeQueItem(&Context); + FreeQueItem (&Context); } -void ServerShutdownModule_SMTP_QUEUE(void) { +void +ServerShutdownModule_SMTP_QUEUE +(void) +{ DeleteHash(&QItemHandlers); } - -void ServerStartModule_SMTP_QUEUE(void) { +void +ServerStartModule_SMTP_QUEUE +(void) +{ QItemHandlers = NewHash(0, NULL); } -int qview_PrintPageHeader(SharedMessageStatus * Stat, void **ViewSpecific) { +int qview_PrintPageHeader(SharedMessageStatus *Stat, void **ViewSpecific) +{ if (yesbstr("ListOnly")) output_headers(1, 0, 0, 0, 0, 0); else @@ -300,9 +334,16 @@ int qview_PrintPageHeader(SharedMessageStatus * Stat, void **ViewSpecific) { return 0; } -int qview_GetParamsGetServerCall(SharedMessageStatus * Stat, - void **ViewSpecific, long oper, char *cmd, long len, char *filter, long flen) { - if (!WC->is_aide) { +int qview_GetParamsGetServerCall(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper, + char *cmd, + long len, + char *filter, + long flen) +{ + if (!WC->is_aide) + { DoTemplate(HKEY("aide_required"), NULL, NULL); end_burst(); @@ -322,51 +363,64 @@ int qview_GetParamsGetServerCall(SharedMessageStatus * Stat, /* * Display task view */ -int qview_LoadMsgFromServer(SharedMessageStatus * Stat, void **ViewSpecific, message_summary * Msg, int is_new, int i) { +int qview_LoadMsgFromServer(SharedMessageStatus *Stat, + void **ViewSpecific, + message_summary* Msg, + int is_new, + int i) +{ wcsession *WCC = WC; const StrBuf *Mime; - /* Not (yet?) needed here? calview *c = (calview *) *ViewSpecific; */ + /* Not (yet?) needed here? calview *c = (calview *) *ViewSpecific; */ read_message(WCC->WBuf, HKEY("view_mailq_message_bearer"), Msg->msgnum, NULL, &Mime, NULL); - return 0; + return 0; } -int qview_RenderView_or_Tail(SharedMessageStatus * Stat, void **ViewSpecific, long oper) { +int qview_RenderView_or_Tail(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper) +{ wcsession *WCC = WC; WCTemplputParams SubTP; memset(&SubTP, 0, sizeof(WCTemplputParams)); if (yesbstr("ListOnly")) - DoTemplate(HKEY("view_mailq_footer_listonly"), NULL, &SubTP); - else { + DoTemplate(HKEY("view_mailq_footer_listonly"),NULL, &SubTP); + else + { if (GetCount(WCC->summ) == 0) - DoTemplate(HKEY("view_mailq_footer_empty"), NULL, &SubTP); + DoTemplate(HKEY("view_mailq_footer_empty"),NULL, &SubTP); else - DoTemplate(HKEY("view_mailq_footer"), NULL, &SubTP); + DoTemplate(HKEY("view_mailq_footer"),NULL, &SubTP); } return 0; } -int qview_Cleanup(void **ViewSpecific) { - - wDumpContent(yesbstr("ListOnly") ? 0 : 1); +int qview_Cleanup(void **ViewSpecific) +{ + + wDumpContent(yesbstr("ListOnly")?0:1); return 0; } -void InitModule_SMTP_QUEUE(void) { +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); - RegisterQItemHandler(HKEY("retry"), QItem_Handle_retry); - RegisterQItemHandler(HKEY("attempted"), QItem_Handle_Attempted); - RegisterQItemHandler(HKEY("remote"), QItem_Handle_Recipient); - RegisterQItemHandler(HKEY("bounceto"), QItem_Handle_BounceTo); - RegisterQItemHandler(HKEY("source_room"), QItem_Handle_SenderRoom); - RegisterQItemHandler(HKEY("submitted"), QItem_Handle_Submitted); + RegisterQItemHandler(HKEY("msgid"), QItem_Handle_MsgID); + RegisterQItemHandler(HKEY("envelope_from"), QItem_Handle_EnvelopeFrom); + RegisterQItemHandler(HKEY("retry"), QItem_Handle_retry); + RegisterQItemHandler(HKEY("attempted"), QItem_Handle_Attempted); + RegisterQItemHandler(HKEY("remote"), QItem_Handle_Recipient); + RegisterQItemHandler(HKEY("bounceto"), QItem_Handle_BounceTo); + RegisterQItemHandler(HKEY("source_room"), QItem_Handle_SenderRoom); + RegisterQItemHandler(HKEY("submitted"), QItem_Handle_Submitted); RegisterMimeRenderer(HKEY("application/x-citadel-delivery-list"), render_QUEUE, 1, 9000); RegisterNamespace("MAILQ:ID", 0, 0, tmplput_MailQID, NULL, CTX_MAILQITEM); RegisterNamespace("MAILQ:PAYLOAD:ID", 0, 0, tmplput_MailQPayloadID, NULL, CTX_MAILQITEM); @@ -375,17 +429,26 @@ void InitModule_SMTP_QUEUE(void) { 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("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); RegisterNamespace("MAILQ:RCPT:STATUS", 0, 0, tmplput_MailQRCPTStatus, NULL, CTX_MAILQ_RCPT); RegisterNamespace("MAILQ:RCPT:STATUSMSG", 0, 1, tmplput_MailQStatusMsg, NULL, CTX_MAILQ_RCPT); - RegisterIterator("MAILQ:RCPT", 0, NULL, iterate_get_Recipients, NULL, NULL, CTX_MAILQ_RCPT, CTX_MAILQITEM, IT_NOFLAG); + RegisterIterator("MAILQ:RCPT", 0, NULL, iterate_get_Recipients, + NULL, NULL, CTX_MAILQ_RCPT, CTX_MAILQITEM, IT_NOFLAG); - RegisterReadLoopHandlerset(VIEW_QUEUE, qview_GetParamsGetServerCall, qview_PrintPageHeader, NULL, /* TODO: is this right? */ - NULL, qview_LoadMsgFromServer, qview_RenderView_or_Tail, qview_Cleanup, NULL); + RegisterReadLoopHandlerset( + VIEW_QUEUE, + qview_GetParamsGetServerCall, + qview_PrintPageHeader, + NULL, /* TODO: is this right? */ + NULL, + qview_LoadMsgFromServer, + qview_RenderView_or_Tail, + qview_Cleanup, + NULL); }