Back to index

webcit  8.12-dfsg
Functions | Variables
msg_renderers.c File Reference
#include "webcit.h"
#include "webserver.h"
#include "dav.h"

Go to the source code of this file.

Functions

void CheckConvertBufs (struct wcsession *WCC)
void DestroyMimeParts (wc_mime_attachment *Mime)
void DestroyMime (void *vMime)
void DestroyMessageSummary (void *vMsg)
void RegisterMsgHdr (const char *HeaderName, long HdrNLen, ExamineMsgHeaderFunc evaluator, int type)
void RegisterMimeRenderer (const char *HeaderName, long HdrNLen, RenderMimeFunc MimeRenderer, int InlineRenderable, int Priority)
 function to register the availability to render a specific message
int longcmp_r (const void *s1, const void *s2)
int qlongcmp_r (const void *s1, const void *s2)
int summcmp_subj (const void *s1, const void *s2)
int summcmp_rsubj (const void *s1, const void *s2)
int groupchange_subj (const void *s1, const void *s2)
int summcmp_sender (const void *s1, const void *s2)
int summcmp_rsender (const void *s1, const void *s2)
int groupchange_sender (const void *s1, const void *s2)
int summcmp_date (const void *s1, const void *s2)
int summcmp_rdate (const void *s1, const void *s2)
int groupchange_date (const void *s1, const void *s2)
void examine_pref (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_suff (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_path (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_content_encoding (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_nhdr (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
int Conditional_ANONYMOUS_MESSAGE (StrBuf *Target, WCTemplputParams *TP)
void examine_type (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_from (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_FROM (StrBuf *Target, WCTemplputParams *TP)
void examine_subj (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_SUBJECT (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_SUBJECT (StrBuf *Target, WCTemplputParams *TP)
void examine_msgn (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_INREPLYTO (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_UNREAD (StrBuf *Target, WCTemplputParams *TP)
void examine_wefw (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_REFIDS (StrBuf *Target, WCTemplputParams *TP)
void examine_cccc (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_CCCC (StrBuf *Target, WCTemplputParams *TP)
void examine_room (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_ORGROOM (StrBuf *Target, WCTemplputParams *TP)
void examine_rfca (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_RFCA (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_RFCA (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_CCCC (StrBuf *Target, WCTemplputParams *TP)
void examine_node (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_OTHERNODE (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_OTHERNODE (StrBuf *Target, WCTemplputParams *TP)
void examine_rcpt (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_TO (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_TO (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_SUBJ (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_SUMM_ALLRCPT (StrBuf *Target, WCTemplputParams *TP)
void tmplput_SUMM_COUNT (StrBuf *Target, WCTemplputParams *TP)
HashList * iterate_get_mailsumm_All (StrBuf *Target, WCTemplputParams *TP)
void examine_time (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_DATE_BRIEF (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_SUMM_EUID (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_SUMM_DATE_FULL (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_SUMM_DATE_NO (StrBuf *Target, WCTemplputParams *TP)
void render_MAIL (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void render_MIME_VCard (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void render_MIME_VNote (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void render_MIME_ICS (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void examine_mime_part (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void evaluate_mime_part (message_summary *Msg, wc_mime_attachment *Mime)
void tmplput_MAIL_SUMM_NATTACH (StrBuf *Target, WCTemplputParams *TP)
void examine_hnod (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_H_NODE (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_SUMM_H_NODE (StrBuf *Target, WCTemplputParams *TP)
void examine_text (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_msg4_partnum (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_content_lengh (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void examine_content_type (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_N (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_SUMM_PERMALINK (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_MIME_ALL (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_MIME_SUBMESSAGES (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_MIME_ATTACHLINKS (StrBuf *Target, WCTemplputParams *TP)
int Conditional_MAIL_MIME_ATTACH (StrBuf *Target, WCTemplputParams *TP)
void tmplput_QUOTED_MAIL_BODY (StrBuf *Target, WCTemplputParams *TP)
void tmplput_EDIT_MAIL_BODY (StrBuf *Target, WCTemplputParams *TP)
void tmplput_EDIT_WIKI_BODY (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_BODY (StrBuf *Target, WCTemplputParams *TP)
void render_MAIL_variformat (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void render_MAIL_text_plain (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void render_MAIL_html (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
void render_MAIL_UNKNOWN (wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
HashList * iterate_get_mime_All (StrBuf *Target, WCTemplputParams *TP)
HashList * iterate_get_mime_Submessages (StrBuf *Target, WCTemplputParams *TP)
HashList * iterate_get_mime_AttachLinks (StrBuf *Target, WCTemplputParams *TP)
HashList * iterate_get_mime_Attachments (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_Name (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_FileName (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_PartNum (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_MsgNum (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_Disposition (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_ContentType (StrBuf *Target, WCTemplputParams *TP)
void examine_charset (message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MIME_Charset (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_Data (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_LoadData (StrBuf *Target, WCTemplputParams *TP)
void tmplput_MIME_Length (StrBuf *Target, WCTemplputParams *TP)
HashList * iterate_get_registered_Attachments (StrBuf *Target, WCTemplputParams *TP)
void get_registered_Attachments_Count (StrBuf *Target, WCTemplputParams *TP)
void servcmd_do_search (char *buf, long bufsize)
void servcmd_headers (char *buf, long bufsize)
void servcmd_readfwd (char *buf, long bufsize)
void servcmd_readgt (char *buf, long bufsize)
void servcmd_readlt (char *buf, long bufsize)
void servcmd_readnew (char *buf, long bufsize)
void servcmd_readold (char *buf, long bufsize)
int ParseMessageListHeaders_Detail (StrBuf *Line, const char **pos, message_summary *Msg, StrBuf *ConversionBuffer)
int mailview_GetParamsGetServerCall (SharedMessageStatus *Stat, void **ViewSpecific, long oper, char *cmd, long len, char *filter, long flen)
int mailview_Cleanup (void **ViewSpecific)
int json_GetParamsGetServerCall (SharedMessageStatus *Stat, void **ViewSpecific, long oper, char *cmd, long len, char *filter, long flen)
int json_MessageListHdr (SharedMessageStatus *Stat, void **ViewSpecific)
int json_RenderView_or_Tail (SharedMessageStatus *Stat, void **ViewSpecific, long oper)
int json_Cleanup (void **ViewSpecific)
void InitModule_MSGRENDERERS (void)
void InitModule2_MSGRENDERERS (void)
void ServerStartModule_MSGRENDERERS (void)
void ServerShutdownModule_MSGRENDERERS (void)
void SessionDestroyModule_MSGRENDERERS (wcsession *sess)

Variables

const long DAYSECONDS = 24 * 60 * 60
readloop_struct rlid []

Function Documentation

void CheckConvertBufs ( struct wcsession WCC) [inline]

Definition at line 7 of file msg_renderers.c.

{
       if (WCC->ConvertBuf1 == NULL)
              WCC->ConvertBuf1 = NewStrBuf();
       if (WCC->ConvertBuf2 == NULL)
              WCC->ConvertBuf2 = NewStrBuf();
}

Here is the caller graph for this function:

int Conditional_ANONYMOUS_MESSAGE ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 248 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return Msg->nhdr != 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_MIME_ALL ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 880 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return GetCount(Msg->Attachments) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_MIME_ATTACH ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 898 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return GetCount(Msg->AllAttach) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_MIME_ATTACHLINKS ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 892 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return GetCount(Msg->AttachLinks) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_MIME_SUBMESSAGES ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 886 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return GetCount(Msg->Submessages) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_CCCC ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 426 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return StrLength(Msg->cccc) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_H_NODE ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 782 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return StrLength(Msg->hnod) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_OTHERNODE ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 449 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return StrLength(Msg->OtherNode) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_RFCA ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 421 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return StrLength(Msg->Rfca) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_SUBJ ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 486 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return StrLength(Msg->subj) != 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_SUBJECT ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 313 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;


       return StrLength(Msg->subj) > 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_TO ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 481 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return StrLength(Msg->to) != 0;
}

Here is the caller graph for this function:

int Conditional_MAIL_SUMM_UNREAD ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 342 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return (Msg->Flags & MSGFLAG_READ) != 0;
}

Here is the caller graph for this function:

void DestroyMessageSummary ( void *  vMsg)

Definition at line 38 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) vMsg;

       FreeStrBuf(&Msg->from);
       FreeStrBuf(&Msg->to);
       FreeStrBuf(&Msg->subj);
       FreeStrBuf(&Msg->reply_inreplyto);
       FreeStrBuf(&Msg->reply_references);
       FreeStrBuf(&Msg->cccc);
       FreeStrBuf(&Msg->hnod);
       FreeStrBuf(&Msg->AllRcpt);
       FreeStrBuf(&Msg->Room);
       FreeStrBuf(&Msg->Rfca);
       FreeStrBuf(&Msg->OtherNode);

       DeleteHash(&Msg->Attachments);     /* list of Attachments */
       DeleteHash(&Msg->Submessages);
       DeleteHash(&Msg->AttachLinks);
       DeleteHash(&Msg->AllAttach);
       free(Msg);
}

Here is the caller graph for this function:

void DestroyMime ( void *  vMime)

Definition at line 31 of file msg_renderers.c.

{
       wc_mime_attachment *Mime = (wc_mime_attachment*)vMime;
       DestroyMimeParts(Mime);
       free(Mime);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 20 of file msg_renderers.c.

{
       FreeStrBuf(&Mime->Name);
       FreeStrBuf(&Mime->FileName);
       FreeStrBuf(&Mime->PartNum);
       FreeStrBuf(&Mime->Disposition);
       FreeStrBuf(&Mime->ContentType);
       FreeStrBuf(&Mime->Charset);
       FreeStrBuf(&Mime->Data);
}

Here is the caller graph for this function:

Definition at line 716 of file msg_renderers.c.

{
       void *vMimeRenderer;

       /* just print the root-node */
       if ((Mime->level >= 1) &&
           GetHash(MimeRenderHandler, SKEY(Mime->ContentType), &vMimeRenderer) &&
           vMimeRenderer != NULL)
       {
              Mime->Renderer = (RenderMimeFuncStruct*) vMimeRenderer;
              if (Msg->Submessages == NULL)
                     Msg->Submessages = NewHash(1,NULL);
              Put(Msg->Submessages, SKEY(Mime->PartNum), Mime, reference_free_handler);
       }
       else if ((Mime->level >= 1) &&
               (!strcasecmp(ChrPtr(Mime->Disposition), "inline"))
               && (!strncasecmp(ChrPtr(Mime->ContentType), "image/", 6)) ){
              if (Msg->AttachLinks == NULL)
                     Msg->AttachLinks = NewHash(1,NULL);
              Put(Msg->AttachLinks, SKEY(Mime->PartNum), Mime, reference_free_handler);
       }
       else if ((Mime->level >= 1) &&
               (StrLength(Mime->ContentType) > 0) &&
                ( (!strcasecmp(ChrPtr(Mime->Disposition), "attachment")) 
                  || (!strcasecmp(ChrPtr(Mime->Disposition), "inline"))
                  || (!strcasecmp(ChrPtr(Mime->Disposition), ""))))
       {             
              if (Msg->AttachLinks == NULL)
                     Msg->AttachLinks = NewHash(1,NULL);
              Put(Msg->AttachLinks, SKEY(Mime->PartNum), Mime, reference_free_handler);
              if ((strcasecmp(ChrPtr(Mime->ContentType), "application/octet-stream") == 0) && 
                  (StrLength(Mime->FileName) > 0)) {
                     FlushStrBuf(Mime->ContentType);
                     StrBufAppendBufPlain(Mime->ContentType,
                                        GuessMimeByFilename(SKEY(Mime->FileName)),
                                        -1, 0);
              }
       }
}

Here is the caller graph for this function:

void examine_cccc ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 369 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->cccc);
       Msg->cccc = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->cccc, 
                          HdrLine, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
       if (Msg->AllRcpt == NULL)
              Msg->AllRcpt = NewStrBufPlain(NULL, StrLength(HdrLine));
       if (StrLength(Msg->AllRcpt) > 0) {
              StrBufAppendBufPlain(Msg->AllRcpt, HKEY(", "), 0);
       }
       StrBufAppendBuf(Msg->AllRcpt, Msg->cccc, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_charset ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 1185 of file msg_renderers.c.

{
       Msg->MsgBody->Charset = NewStrBufDup(HdrLine);
}

Here is the caller graph for this function:

void examine_content_encoding ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 237 of file msg_renderers.c.

{
/* TODO: do we care? */
}

Here is the caller graph for this function:

void examine_content_lengh ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 804 of file msg_renderers.c.

{
       Msg->MsgBody->length = StrTol(HdrLine);
       Msg->MsgBody->size_known = 1;
}

Here is the caller graph for this function:

void examine_content_type ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 810 of file msg_renderers.c.

{
       void *vHdr;
       headereval *Hdr;
       StrBuf *Token;
       StrBuf *Value;
       const char* sem;
       const char *eq;
       int len;
       StrBufTrim(HdrLine);
       Msg->MsgBody->ContentType = NewStrBufDup(HdrLine);
       sem = strchr(ChrPtr(HdrLine), ';');

       if (sem != NULL) {
              Token = NewStrBufPlain(NULL, StrLength(HdrLine));
              Value = NewStrBufPlain(NULL, StrLength(HdrLine));
              len = sem - ChrPtr(HdrLine);
              StrBufCutAt(Msg->MsgBody->ContentType, len, NULL);
              while (sem != NULL) {
                     while (isspace(*(sem + 1)))
                            sem ++;
                     StrBufCutLeft(HdrLine, sem - ChrPtr(HdrLine));
                     sem = strchr(ChrPtr(HdrLine), ';');
                     if (sem != NULL)
                            len = sem - ChrPtr(HdrLine);
                     else
                            len = StrLength(HdrLine);
                     FlushStrBuf(Token);
                     FlushStrBuf(Value);
                     StrBufAppendBufPlain(Token, ChrPtr(HdrLine), len, 0);
                     eq = strchr(ChrPtr(Token), '=');
                     if (eq != NULL) {
                            len = eq - ChrPtr(Token);
                            StrBufAppendBufPlain(Value, eq + 1, StrLength(Token) - len - 1, 0); 
                            StrBufCutAt(Token, len, NULL);
                            StrBufTrim(Value);
                     }
                     StrBufTrim(Token);

                     if (GetHash(MsgHeaderHandler, SKEY(Token), &vHdr) &&
                         (vHdr != NULL)) {
                            Hdr = (headereval*)vHdr;
                            Hdr->evaluator(Msg, Value, FoundCharset);
                     }
                     else syslog(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token));
              }
              FreeStrBuf(&Token);
              FreeStrBuf(&Value);
       }
}

Here is the caller graph for this function:

void examine_from ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 260 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->from);
       Msg->from = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->from, 
                          HdrLine, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_hnod ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 763 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->hnod);
       Msg->hnod = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->hnod, 
                          HdrLine, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_mime_part ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 636 of file msg_renderers.c.

{
       const char *Ptr = NULL;
       wc_mime_attachment *Mime;
       StrBuf *Buf;
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);      
       Mime = (wc_mime_attachment*) malloc(sizeof(wc_mime_attachment));
       memset(Mime, 0, sizeof(wc_mime_attachment));
       Mime->msgnum = Msg->msgnum;
       Buf = NewStrBuf();

       Mime->Name = NewStrBuf();
       StrBufExtract_NextToken(Buf, HdrLine, &Ptr, '|');
       StrBuf_RFC822_2_Utf8(Mime->Name, 
                          Buf, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
       StrBufTrim(Mime->Name);

       StrBufExtract_NextToken(Buf, HdrLine, &Ptr, '|');
       Mime->FileName = NewStrBuf();
       StrBuf_RFC822_2_Utf8(Mime->FileName, 
                          Buf, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
       StrBufTrim(Mime->FileName);

       Mime->PartNum = NewStrBuf();
       StrBufExtract_NextToken(Mime->PartNum, HdrLine, &Ptr, '|');
       StrBufTrim(Mime->PartNum);
       if (strchr(ChrPtr(Mime->PartNum), '.') != NULL) 
              Mime->level = 2;
       else
              Mime->level = 1;

       Mime->Disposition = NewStrBuf();
       StrBufExtract_NextToken(Mime->Disposition, HdrLine, &Ptr, '|');

       Mime->ContentType = NewStrBuf();
       StrBufExtract_NextToken(Mime->ContentType, HdrLine, &Ptr, '|');
       StrBufTrim(Mime->ContentType);
       StrBufLowerCase(Mime->ContentType);
       if (!strcmp(ChrPtr(Mime->ContentType), "application/octet-stream")) {
              StrBufPlain(Mime->ContentType, 
                         GuessMimeByFilename(SKEY(Mime->FileName)), -1);
       }

       Mime->length = StrBufExtractNext_int(HdrLine, &Ptr, '|');

       StrBufSkip_NTokenS(HdrLine, &Ptr, '|', 1);  /* cbid?? */

       Mime->Charset = NewStrBuf();
       StrBufExtract_NextToken(Mime->Charset, HdrLine, &Ptr, '|');


       if ( (StrLength(Mime->FileName) == 0) && (StrLength(Mime->Name) > 0) ) {
              StrBufAppendBuf(Mime->FileName, Mime->Name, 0);
       }

       if (StrLength(Msg->PartNum) > 0) {
              StrBuf *tmp;
              StrBufPrintf(Buf, "%s.%s", ChrPtr(Msg->PartNum), ChrPtr(Mime->PartNum));
              tmp = Mime->PartNum;
              Mime->PartNum = Buf;
              Buf = tmp;
       }

       if (Msg->AllAttach == NULL)
              Msg->AllAttach = NewHash(1,NULL);
       Put(Msg->AllAttach, SKEY(Mime->PartNum), Mime, DestroyMime);
       FreeStrBuf(&Buf);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_msg4_partnum ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 798 of file msg_renderers.c.

{
       Msg->MsgBody->PartNum = NewStrBufDup(HdrLine);
       StrBufTrim(Msg->MsgBody->PartNum);
}

Here is the caller graph for this function:

void examine_msgn ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 322 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->reply_inreplyto);
       Msg->reply_inreplyto = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->reply_inreplyto, 
                          HdrLine, 
                          WCC->DefaultCharset,
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_nhdr ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 242 of file msg_renderers.c.

{
       Msg->nhdr = 0;
       if (!strncasecmp(ChrPtr(HdrLine), "yes", 8))
              Msg->nhdr = 1;
}

Here is the caller graph for this function:

void examine_node ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 432 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       if ( (StrLength(HdrLine) > 0) &&
            ((WC->CurRoom.QRFlags & QR_NETWORK)
             || ((strcasecmp(ChrPtr(HdrLine), ChrPtr(WCC->serv_info->serv_nodename))
                 && (strcasecmp(ChrPtr(HdrLine), ChrPtr(WCC->serv_info->serv_fqdn))))))) {
              FreeStrBuf(&Msg->OtherNode);
              Msg->OtherNode = NewStrBufDup(HdrLine);
       }
}

Here is the caller graph for this function:

void examine_path ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 236 of file msg_renderers.c.

{return;}

Here is the caller graph for this function:

void examine_pref ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 234 of file msg_renderers.c.

{return;}

Here is the caller graph for this function:

void examine_rcpt ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 456 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->to);
       Msg->to = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->to, 
                          HdrLine, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
       if (Msg->AllRcpt == NULL)
              Msg->AllRcpt = NewStrBufPlain(NULL, StrLength(HdrLine));
       if (StrLength(Msg->AllRcpt) > 0) {
              StrBufAppendBufPlain(Msg->AllRcpt, HKEY(", "), 0);
       }
       StrBufAppendBuf(Msg->AllRcpt, Msg->to, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_rfca ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 411 of file msg_renderers.c.

{
       FreeStrBuf(&Msg->Rfca);
       Msg->Rfca = NewStrBufDup(HdrLine);
}

Here is the caller graph for this function:

void examine_room ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 396 of file msg_renderers.c.

{
       if ((StrLength(HdrLine) > 0) &&
           (strcasecmp(ChrPtr(HdrLine), ChrPtr(WC->CurRoom.name)))) {
              FreeStrBuf(&Msg->Room);
              Msg->Room = NewStrBufDup(HdrLine);        
       }
}

Here is the caller graph for this function:

void examine_subj ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 280 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->subj);
       Msg->subj = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->subj, 
                          HdrLine, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void examine_suff ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 235 of file msg_renderers.c.

{return;}

Here is the caller graph for this function:

void examine_text ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 790 of file msg_renderers.c.

{
       if (Msg->MsgBody->Data == NULL)
              Msg->MsgBody->Data = NewStrBufPlain(NULL, SIZ);
       else
              FlushStrBuf(Msg->MsgBody->Data);
}

Here is the caller graph for this function:

void examine_time ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 508 of file msg_renderers.c.

{
       Msg->date = StrTol(HdrLine);
}

Here is the caller graph for this function:

void examine_type ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 254 of file msg_renderers.c.

{
       Msg->format_type = StrToi(HdrLine);
                     
}

Here is the caller graph for this function:

void examine_wefw ( message_summary Msg,
StrBuf *  HdrLine,
StrBuf *  FoundCharset 
)

Definition at line 348 of file msg_renderers.c.

{
       wcsession *WCC = WC;

       CheckConvertBufs(WCC);
       FreeStrBuf(&Msg->reply_references);
       Msg->reply_references = NewStrBufPlain(NULL, StrLength(HdrLine));
       StrBuf_RFC822_2_Utf8(Msg->reply_references, 
                          HdrLine, 
                          WCC->DefaultCharset, 
                          FoundCharset,
                          WCC->ConvertBuf1,
                          WCC->ConvertBuf2);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void get_registered_Attachments_Count ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1245 of file msg_renderers.c.

{
       StrBufAppendPrintf(Target, "%ld", GetCount (WC->attachments));
}

Here is the caller graph for this function:

int groupchange_date ( const void *  s1,
const void *  s2 
)

Definition at line 221 of file msg_renderers.c.

                                                     {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)s1;
       summ2 = (message_summary *)s2;

       return (summ1->date % DAYSECONDS) != (summ2->date %DAYSECONDS);
}

Here is the caller graph for this function:

int groupchange_sender ( const void *  s1,
const void *  s2 
)

Definition at line 177 of file msg_renderers.c.

                                                       {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)s1;
       summ2 = (message_summary *)s2;
       return strcasecmp(ChrPtr(summ2->from), ChrPtr(summ1->from)) != 0;

}

Here is the caller graph for this function:

int groupchange_subj ( const void *  s1,
const void *  s2 
)

Definition at line 142 of file msg_renderers.c.

                                                     {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)s1;
       summ2 = (message_summary *)s2;
       return ChrPtr(summ2->subj)[0] != ChrPtr(summ1->subj)[0];
}

Here is the caller graph for this function:

void InitModule2_MSGRENDERERS ( void  )

Definition at line 1609 of file msg_renderers.c.

{
       /* and finalize the anouncement to the server... */
       CreateMimeStr();
}

Here is the call graph for this function:

Here is the caller graph for this function:

void InitModule_MSGRENDERERS ( void  )

Definition at line 1454 of file msg_renderers.c.

{
       RegisterReadLoopHandlerset(
              VIEW_MAILBOX,
              mailview_GetParamsGetServerCall,
              NULL, /* TODO: is this right? */
              NULL,
              ParseMessageListHeaders_Detail,
              NULL,
              NULL,
              mailview_Cleanup);

       RegisterReadLoopHandlerset(
              VIEW_JSON_LIST,
              json_GetParamsGetServerCall,
              json_MessageListHdr,
              NULL, /* TODO: is this right? */
              ParseMessageListHeaders_Detail,
              NULL,
              json_RenderView_or_Tail,
              json_Cleanup);

       RegisterSortFunc(HKEY("date"), 
                      NULL, 0,
                      summcmp_date,
                      summcmp_rdate,
                      groupchange_date,
                      CTX_MAILSUM);
       RegisterSortFunc(HKEY("subject"), 
                      NULL, 0,
                      summcmp_subj,
                      summcmp_rsubj,
                      groupchange_subj,
                      CTX_MAILSUM);
       RegisterSortFunc(HKEY("sender"),
                      NULL, 0,
                      summcmp_sender,
                      summcmp_rsender,
                      groupchange_sender,
                      CTX_MAILSUM);

       RegisterNamespace("SUMM:COUNT", 0, 0, tmplput_SUMM_COUNT, NULL, CTX_NONE);
       /* iterate over all known mails in WC->summ */
       RegisterIterator("MAIL:SUMM:MSGS", 0, NULL, iterate_get_mailsumm_All,
                      NULL,NULL, CTX_MAILSUM, CTX_NONE, IT_NOFLAG);

       RegisterNamespace("MAIL:SUMM:EUID", 0, 1, tmplput_MAIL_SUMM_EUID, NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:DATEBRIEF", 0, 0, tmplput_MAIL_SUMM_DATE_BRIEF, NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:DATEFULL", 0, 0, tmplput_MAIL_SUMM_DATE_FULL, NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:DATENO",  0, 0, tmplput_MAIL_SUMM_DATE_NO,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:N",       0, 0, tmplput_MAIL_SUMM_N,        NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:PERMALINK", 0, 0, tmplput_MAIL_SUMM_PERMALINK, NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:FROM",    0, 2, tmplput_MAIL_SUMM_FROM,     NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:TO",      0, 2, tmplput_MAIL_SUMM_TO,       NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:SUBJECT", 0, 4, tmplput_MAIL_SUMM_SUBJECT,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:NTATACH", 0, 0, tmplput_MAIL_SUMM_NATTACH,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:CCCC", 0, 2, tmplput_MAIL_SUMM_CCCC, NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:H_NODE", 0, 2, tmplput_MAIL_SUMM_H_NODE,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:ALLRCPT", 0, 2, tmplput_MAIL_SUMM_ALLRCPT,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:ORGROOM", 0, 2, tmplput_MAIL_SUMM_ORGROOM,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:RFCA", 0, 2, tmplput_MAIL_SUMM_RFCA, NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:OTHERNODE", 2, 0, tmplput_MAIL_SUMM_OTHERNODE,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:REFIDS", 0, 1, tmplput_MAIL_SUMM_REFIDS,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:SUMM:INREPLYTO", 0, 2, tmplput_MAIL_SUMM_INREPLYTO,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:BODY", 0, 2, tmplput_MAIL_BODY,  NULL, CTX_MAILSUM);
       RegisterNamespace("MAIL:QUOTETEXT", 1, 2, tmplput_QUOTED_MAIL_BODY,  NULL, CTX_NONE);
       RegisterNamespace("MAIL:EDITTEXT", 1, 2, tmplput_EDIT_MAIL_BODY,  NULL, CTX_NONE);
       RegisterNamespace("MAIL:EDITWIKI", 1, 2, tmplput_EDIT_WIKI_BODY,  NULL, CTX_NONE);
       RegisterConditional(HKEY("COND:MAIL:SUMM:RFCA"), 0, Conditional_MAIL_SUMM_RFCA,  CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:SUMM:CCCC"), 0, Conditional_MAIL_SUMM_CCCC,  CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:SUMM:UNREAD"), 0, Conditional_MAIL_SUMM_UNREAD, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:SUMM:H_NODE"), 0, Conditional_MAIL_SUMM_H_NODE, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:SUMM:OTHERNODE"), 0, Conditional_MAIL_SUMM_OTHERNODE, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:SUMM:SUBJECT"), 0, Conditional_MAIL_SUMM_SUBJECT, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:ANON"), 0, Conditional_ANONYMOUS_MESSAGE, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:TO"), 0, Conditional_MAIL_SUMM_TO, CTX_MAILSUM);       
       RegisterConditional(HKEY("COND:MAIL:SUBJ"), 0, Conditional_MAIL_SUMM_SUBJ, CTX_MAILSUM);   

       /* do we have mimetypes to iterate over? */
       RegisterConditional(HKEY("COND:MAIL:MIME:ATTACH"), 0, Conditional_MAIL_MIME_ALL, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:MIME:ATTACH:SUBMESSAGES"), 0, Conditional_MAIL_MIME_SUBMESSAGES, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:MIME:ATTACH:LINKS"), 0, Conditional_MAIL_MIME_ATTACHLINKS, CTX_MAILSUM);
       RegisterConditional(HKEY("COND:MAIL:MIME:ATTACH:ATT"), 0, Conditional_MAIL_MIME_ATTACH, CTX_MAILSUM);
       RegisterIterator("MAIL:MIME:ATTACH", 0, NULL, iterate_get_mime_All, 
                      NULL, NULL, CTX_MIME_ATACH, CTX_MAILSUM, IT_NOFLAG);
       RegisterIterator("MAIL:MIME:ATTACH:SUBMESSAGES", 0, NULL, iterate_get_mime_Submessages, 
                      NULL, NULL, CTX_MIME_ATACH, CTX_MAILSUM, IT_NOFLAG);
       RegisterIterator("MAIL:MIME:ATTACH:LINKS", 0, NULL, iterate_get_mime_AttachLinks, 
                      NULL, NULL, CTX_MIME_ATACH, CTX_MAILSUM, IT_NOFLAG);
       RegisterIterator("MAIL:MIME:ATTACH:ATT", 0, NULL, iterate_get_mime_Attachments, 
                      NULL, NULL, CTX_MIME_ATACH, CTX_MAILSUM, IT_NOFLAG);

       /* Parts of a mime attachent */
       RegisterNamespace("MAIL:MIME:NAME", 0, 2, tmplput_MIME_Name, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:FILENAME", 0, 2, tmplput_MIME_FileName, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:PARTNUM", 0, 2, tmplput_MIME_PartNum, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:MSGNUM", 0, 2, tmplput_MIME_MsgNum, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:DISPOSITION", 0, 2, tmplput_MIME_Disposition, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:CONTENTTYPE", 0, 2, tmplput_MIME_ContentType, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:CHARSET", 0, 2, tmplput_MIME_Charset, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:LENGTH", 0, 2, tmplput_MIME_Length, NULL, CTX_MIME_ATACH);
       RegisterNamespace("MAIL:MIME:DATA", 0, 2, tmplput_MIME_Data, NULL, CTX_MIME_ATACH);
       /* load the actual attachment into WC->attachments; no output!!! */
       RegisterNamespace("MAIL:MIME:LOADDATA", 0, 0, tmplput_MIME_LoadData, NULL, CTX_MIME_ATACH);

       /* iterate the WC->attachments; use the above tokens for their contents */
       RegisterIterator("MSG:ATTACHNAMES", 0, NULL, iterate_get_registered_Attachments, 
                      NULL, NULL, CTX_MIME_ATACH, CTX_NONE, IT_NOFLAG);

       RegisterNamespace("MSG:NATTACH", 0, 0, get_registered_Attachments_Count,  NULL, CTX_NONE);

       /* mime renderers translate an attachment into webcit viewable html text */
       RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 0, 150);
       RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300);
       RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard, 1, 201);
       RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard, 1, 200);
       RegisterMimeRenderer(HKEY("text/calendar"), render_MIME_ICS, 1, 501);
       RegisterMimeRenderer(HKEY("application/ics"), render_MIME_ICS, 1, 500);
       RegisterMimeRenderer(HKEY("text/x-citadel-variformat"), render_MAIL_variformat, 1, 2);
       RegisterMimeRenderer(HKEY("text/plain"), render_MAIL_text_plain, 1, 3);
       RegisterMimeRenderer(HKEY("text"), render_MAIL_text_plain, 1, 1);
       RegisterMimeRenderer(HKEY("text/html"), render_MAIL_html, 1, 100);
       RegisterMimeRenderer(HKEY(""), render_MAIL_UNKNOWN, 0, 0);

       /* these headers are citserver replies to MSG4 and friends. one evaluator for each */
       RegisterMsgHdr(HKEY("nhdr"), examine_nhdr, 0);
       RegisterMsgHdr(HKEY("type"), examine_type, 0);
       RegisterMsgHdr(HKEY("from"), examine_from, 0);
       RegisterMsgHdr(HKEY("subj"), examine_subj, 0);
       RegisterMsgHdr(HKEY("msgn"), examine_msgn, 0);
       RegisterMsgHdr(HKEY("wefw"), examine_wefw, 0);
       RegisterMsgHdr(HKEY("cccc"), examine_cccc, 0);
       RegisterMsgHdr(HKEY("hnod"), examine_hnod, 0);
       RegisterMsgHdr(HKEY("room"), examine_room, 0);
       RegisterMsgHdr(HKEY("rfca"), examine_rfca, 0);
       RegisterMsgHdr(HKEY("node"), examine_node, 0);
       RegisterMsgHdr(HKEY("rcpt"), examine_rcpt, 0);
       RegisterMsgHdr(HKEY("time"), examine_time, 0);
       RegisterMsgHdr(HKEY("part"), examine_mime_part, 0);
       RegisterMsgHdr(HKEY("text"), examine_text, 1);
       /* these are the content-type headers we get infront of a message; put it into the same hash since it doesn't clash. */
       RegisterMsgHdr(HKEY("X-Citadel-MSG4-Partnum"), examine_msg4_partnum, 0);
       RegisterMsgHdr(HKEY("Content-type"), examine_content_type, 0);
       RegisterMsgHdr(HKEY("Content-length"), examine_content_lengh, 0);
       RegisterMsgHdr(HKEY("Content-transfer-encoding"), examine_content_encoding, 0); /* do we care? */
       RegisterMsgHdr(HKEY("charset"), examine_charset, 0);

       /* Don't care about these... */
       RegisterMsgHdr(HKEY("pref"), examine_pref, 0);
       RegisterMsgHdr(HKEY("suff"), examine_suff, 0);
       RegisterMsgHdr(HKEY("path"), examine_path, 0);
}

Here is the caller graph for this function:

HashList* iterate_get_mailsumm_All ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 504 of file msg_renderers.c.

{
       return WC->summ;
}

Here is the caller graph for this function:

HashList* iterate_get_mime_All ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1128 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return Msg->Attachments;
}

Here is the caller graph for this function:

HashList* iterate_get_mime_AttachLinks ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1138 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return Msg->AttachLinks;
}

Here is the caller graph for this function:

HashList* iterate_get_mime_Attachments ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1143 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return Msg->AllAttach;
}

Here is the caller graph for this function:

HashList* iterate_get_mime_Submessages ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1133 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       return Msg->Submessages;
}

Here is the caller graph for this function:

HashList* iterate_get_registered_Attachments ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1240 of file msg_renderers.c.

{
       return WC->attachments;
}

Here is the caller graph for this function:

int json_Cleanup ( void **  ViewSpecific)

Definition at line 1441 of file msg_renderers.c.

{
       /* Note: wDumpContent() will output one additional </div> tag. */
       /* We ought to move this out into template */
       end_burst();

       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int json_GetParamsGetServerCall ( SharedMessageStatus Stat,
void **  ViewSpecific,
long  oper,
char *  cmd,
long  len,
char *  filter,
long  flen 
)

Definition at line 1393 of file msg_renderers.c.

{
       Stat->defaultsortorder = 2;
       Stat->sortit = 1;
       Stat->load_seen = 1;
       /* Generally using maxmsgs|startmsg is not required
          in mailbox view, but we have a 'safemode' for clients
          (*cough* Exploder) that simply can't handle too many */
       if (havebstr("maxmsgs"))  Stat->maxmsgs  = ibstr("maxmsgs");
       else                      Stat->maxmsgs  = 9999999;
       if (havebstr("startmsg")) Stat->startmsg = lbstr("startmsg");
       snprintf(cmd, len, "MSGS %s|%s||1",
               (oper == do_search) ? "SEARCH" : "ALL",
               (oper == do_search) ? bstr("query") : ""
              );

       return 200;
}

Here is the caller graph for this function:

int json_MessageListHdr ( SharedMessageStatus Stat,
void **  ViewSpecific 
)

Definition at line 1417 of file msg_renderers.c.

{
       /* TODO: make a generic function */
       hprintf("HTTP/1.1 200 OK\r\n");
       hprintf("Content-type: application/json; charset=utf-8\r\n");
       hprintf("Server: %s / %s\r\n", PACKAGE_STRING, ChrPtr(WC->serv_info->serv_software));
       hprintf("Connection: close\r\n");
       hprintf("Pragma: no-cache\r\nCache-Control: no-store\r\nExpires:-1\r\n");
       begin_burst();
       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int json_RenderView_or_Tail ( SharedMessageStatus Stat,
void **  ViewSpecific,
long  oper 
)

Definition at line 1429 of file msg_renderers.c.

{
       WCTemplputParams SubTP;

       memset(&SubTP, 0, sizeof(WCTemplputParams));
       DoTemplate(HKEY("mailsummary_json"),NULL, &SubTP);
       
       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int longcmp_r ( const void *  s1,
const void *  s2 
)

Definition at line 91 of file msg_renderers.c.

                                              {
       long l1;
       long l2;

       l1 = *(long *)GetSearchPayload(s1);
       l2 = *(long *)GetSearchPayload(s2);

       if (l1 > l2) return(-1);
       if (l1 < l2) return(+1);
       return(0);
}
int mailview_Cleanup ( void **  ViewSpecific)

Definition at line 1383 of file msg_renderers.c.

{
       /* Note: wDumpContent() will output one additional </div> tag. */
       /* We ought to move this out into template */
       wDumpContent(1);

       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int mailview_GetParamsGetServerCall ( SharedMessageStatus Stat,
void **  ViewSpecific,
long  oper,
char *  cmd,
long  len,
char *  filter,
long  flen 
)

Definition at line 1370 of file msg_renderers.c.

{
       DoTemplate(HKEY("msg_listview"),NULL,&NoCtx);

       return 200;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int ParseMessageListHeaders_Detail ( StrBuf *  Line,
const char **  pos,
message_summary Msg,
StrBuf *  ConversionBuffer 
)

Definition at line 1298 of file msg_renderers.c.

{
       wcsession *WCC = WC;
       long len;
       long totallen;

       CheckConvertBufs(WCC);

       totallen = StrLength(Line);
       Msg->from = NewStrBufPlain(NULL, totallen);
       len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
       if (len > 0) {
              /* Handle senders with RFC2047 encoding */
              StrBuf_RFC822_2_Utf8(Msg->from, 
                                 ConversionBuffer, 
                                 WCC->DefaultCharset, 
                                 NULL, 
                                 WCC->ConvertBuf1,
                                 WCC->ConvertBuf2);
       }
                     
       /* node name */
       len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
       if ((len > 0 ) &&
           ( ((WCC->CurRoom.QRFlags & QR_NETWORK)
              || ((strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_nodename))
                  && (strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_fqdn))))))))
       {
              StrBufAppendBufPlain(Msg->from, HKEY(" @ "), 0);
              StrBufAppendBuf(Msg->from, ConversionBuffer, 0);
       }

       /* Internet address (not used)
        *     StrBufExtract_token(Msg->inetaddr, Line, 4, '|');
        */
       StrBufSkip_NTokenS(Line, pos, '|', 1);
       Msg->subj = NewStrBufPlain(NULL, totallen);

       FlushStrBuf(ConversionBuffer);
       /* we assume the subject is the last parameter inside of the list; 
        * thus we don't use the tokenizer to fetch it, since it will hick up 
        * on tokenizer chars inside of the subjects
       StrBufExtract_NextToken(ConversionBuffer,  Line, pos, '|');
       */
       len = 0;
       if (*pos != StrBufNOTNULL) {
              len = totallen - (*pos - ChrPtr(Line));
              StrBufPlain(ConversionBuffer, *pos, len);
              *pos = StrBufNOTNULL;
              if ((len > 0) &&
                  (*(ChrPtr(ConversionBuffer) + len - 1) == '|'))
                     StrBufCutRight(ConversionBuffer, 1);
       }

       if (len == 0)
              StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0);
       else {
              StrBuf_RFC822_2_Utf8(Msg->subj, 
                                 ConversionBuffer, 
                                 WCC->DefaultCharset, 
                                 NULL,
                                 WCC->ConvertBuf1,
                                 WCC->ConvertBuf2);
       }

       return 1;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int qlongcmp_r ( const void *  s1,
const void *  s2 
)

Definition at line 106 of file msg_renderers.c.

                                               {
       long l1 = (long) s1;
       long l2 = (long) s2;

       if (l1 > l2) return(-1);
       if (l1 < l2) return(+1);
       return(0);
}
void RegisterMimeRenderer ( const char *  HeaderName,
long  HdrNLen,
RenderMimeFunc  MimeRenderer,
int  InlineRenderable,
int  Priority 
)

function to register the availability to render a specific message

Parameters:
HeaderNameMimetype we know howto display
HdrNLenlength...
InlineRenderableShould we announce to citserver that we want to receive these mimeparts immediately?
Priorityif multipart/alternative; which mimepart/Renderer should be prefered? (only applies if InlineRenderable)

Definition at line 72 of file msg_renderers.c.

{
       RenderMimeFuncStruct *f;

       f = (RenderMimeFuncStruct*) malloc(sizeof(RenderMimeFuncStruct));
       f->f = MimeRenderer;
       Put(MimeRenderHandler, HeaderName, HdrNLen, f, NULL);
       if (InlineRenderable)
              RegisterEmbeddableMimeType(HeaderName, HdrNLen, 10000 - Priority);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void RegisterMsgHdr ( const char *  HeaderName,
long  HdrNLen,
ExamineMsgHeaderFunc  evaluator,
int  type 
)

Definition at line 63 of file msg_renderers.c.

{
       headereval *ev;
       ev = (headereval*) malloc(sizeof(headereval));
       ev->evaluator = evaluator;
       ev->Type = type;
       Put(MsgHeaderHandler, HeaderName, HdrNLen, ev, NULL);
}

Here is the caller graph for this function:

void render_MAIL ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 542 of file msg_renderers.c.

{
       const StrBuf *TemplateMime;

       if (Mime->Data == NULL) 
              Mime->Data = NewStrBufPlain(NULL, Mime->length);
       else 
              FlushStrBuf(Mime->Data);
       read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, Mime->PartNum, &TemplateMime);
/*
       if ( (!IsEmptyStr(mime_submessages)) && (!section[0]) ) {
              for (i=0; i<num_tokens(mime_submessages, '|'); ++i) {
                     extract_token(buf, mime_submessages, i, '|', sizeof buf);
                     / ** use printable_view to suppress buttons * /
                     wc_printf("<blockquote>");
                     read_message(Mime->msgnum, 1, ChrPtr(Mime->Section));
                     wc_printf("</blockquote>");
              }
       }
*/
}

Here is the call graph for this function:

Here is the caller graph for this function:

void render_MAIL_html ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 1100 of file msg_renderers.c.

{
       StrBuf *Buf;

       if (StrLength(Mime->Data) == 0)
              return;

       Buf = NewStrBufPlain(NULL, StrLength(Mime->Data));

       /* HTML is fun, but we've got to strip it first */
       output_html(ChrPtr(Mime->Charset), 
                  (WC->CurRoom.view == VIEW_WIKI ? 1 : 0), 
                  Mime->msgnum,
                  Mime->Data, Buf);
       FreeStrBuf(&Mime->Data);
       Mime->Data = Buf;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void render_MAIL_text_plain ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 970 of file msg_renderers.c.

{
       const char *ptr, *pte;
       const char *BufPtr = NULL;
       StrBuf *Line;
       StrBuf *Line1;
       StrBuf *Line2;
       StrBuf *Target;
       long Linecount;
       long nEmptyLines;
       int bn = 0;
       int bq = 0;
       int i;
       long len;
#ifdef HAVE_ICONV
       StrBuf *cs = NULL;
       int ConvertIt = 1;
       iconv_t ic = (iconv_t)(-1) ;
#endif

       if ((StrLength(Mime->Data) == 0) && (Mime->length > 0)) {
              FreeStrBuf(&Mime->Data);
              MimeLoadData(Mime);
       }

#ifdef HAVE_ICONV
       if (ConvertIt) {
              if (StrLength(Mime->Charset) != 0)
                     cs = Mime->Charset;
              else if (StrLength(FoundCharset) > 0)
                     cs = FoundCharset;
              else if (StrLength(WC->DefaultCharset) > 0)
                     cs = WC->DefaultCharset;
              if (cs == NULL) {
                     ConvertIt = 0;
              }
              else if (!strcasecmp(ChrPtr(cs), "utf-8")) {
                     ConvertIt = 0;
              }
              else if (!strcasecmp(ChrPtr(cs), "us-ascii")) {
                     ConvertIt = 0;
              }
              else {
                     ctdl_iconv_open("UTF-8", ChrPtr(cs), &ic);
                     if (ic == (iconv_t)(-1) ) {
                            syslog(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n",
                                   __FILE__, __LINE__, ChrPtr(Mime->Charset), strerror(errno));
                     }
              }
       }
#endif
       Line = NewStrBufPlain(NULL, SIZ);
       Line1 = NewStrBufPlain(NULL, SIZ);
       Line2 = NewStrBufPlain(NULL, SIZ);
       Target = NewStrBufPlain(NULL, StrLength(Mime->Data));
       Linecount = 0;
       nEmptyLines = 0;
       if (StrLength(Mime->Data) > 0) 
              do 
              {
                     StrBufSipLine(Line, Mime->Data, &BufPtr);
                     bq = 0;
                     i = 0;
                     ptr = ChrPtr(Line);
                     len = StrLength(Line);
                     pte = ptr + len;
              
                     while ((ptr < pte) &&
                            ((*ptr == '>') ||
                            isspace(*ptr)))
                     {
                            if (*ptr == '>')
                                   bq++;
                            ptr ++;
                            i++;
                     }
                     if (i > 0) StrBufCutLeft(Line, i);
              
                     if (StrLength(Line) == 0) {
                            if (Linecount == 0)
                                   continue;
                            StrBufAppendBufPlain(Target, HKEY("<tt></tt><br>\n"), 0);

                            nEmptyLines ++;
                            continue;
                     }
                     nEmptyLines = 0;
                     for (i = bn; i < bq; i++)                        
                            StrBufAppendBufPlain(Target, HKEY("<blockquote>"), 0);
                     for (i = bq; i < bn; i++)                        
                            StrBufAppendBufPlain(Target, HKEY("</blockquote>"), 0);
#ifdef HAVE_ICONV
                     if (ConvertIt) {
                            StrBufConvert(Line, Line1, &ic);
                     }
#endif
                     StrBufAppendBufPlain(Target, HKEY("<tt>"), 0);
                     UrlizeText(Line1, Line, Line2);

                     StrEscAppend(Target, Line1, NULL, 0, 0);
                     StrBufAppendBufPlain(Target, HKEY("</tt><br>\n"), 0);
                     bn = bq;
                     Linecount ++;
              }
       while ((BufPtr != StrBufNOTNULL) &&
              (BufPtr != NULL));

       if (nEmptyLines > 0)
              StrBufCutRight(Target, nEmptyLines * (sizeof ("<tt></tt><br>\n") - 1));
       for (i = 0; i < bn; i++)                         
              StrBufAppendBufPlain(Target, HKEY("</blockquote>"), 0);

       StrBufAppendBufPlain(Target, HKEY("</i><br>"), 0);
#ifdef HAVE_ICONV
       if (ic != (iconv_t)(-1) ) {
              iconv_close(ic);
       }
#endif

       FreeStrBuf(&Mime->Data);
       Mime->Data = Target;
       FlushStrBuf(Mime->ContentType);
       StrBufAppendBufPlain(Mime->ContentType, HKEY("text/html"), 0);
       FlushStrBuf(Mime->Charset);
       StrBufAppendBufPlain(Mime->Charset, HKEY("UTF-8"), 0);
       FreeStrBuf(&Line);
       FreeStrBuf(&Line1);
       FreeStrBuf(&Line2);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void render_MAIL_UNKNOWN ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 1118 of file msg_renderers.c.

{
       /* Unknown weirdness */
       FlushStrBuf(Mime->Data);
       StrBufAppendBufPlain(Mime->Data, _("I don't know how to display "), -1, 0);
       StrBufAppendBuf(Mime->Data, Mime->ContentType, 0);
       StrBufAppendBufPlain(Mime->Data, HKEY("<br>\n"), 0);
}

Here is the caller graph for this function:

void render_MAIL_variformat ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 961 of file msg_renderers.c.

{
       /* Messages in legacy Citadel variformat get handled thusly... */
       StrBuf *Target = NewStrBufPlain(NULL, StrLength(Mime->Data));
       FmOut(Target, "JUSTIFY", Mime->Data);
       FreeStrBuf(&Mime->Data);
       Mime->Data = Target;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void render_MIME_ICS ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 624 of file msg_renderers.c.

{
       if (StrLength(Mime->Data) == 0) {
              MimeLoadData(Mime);
       }
       if (StrLength(Mime->Data) > 0) {
              cal_process_attachment(Mime);
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void render_MIME_VCard ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

If it's my vCard I can edit it

Definition at line 564 of file msg_renderers.c.

{
       wcsession *WCC = WC;
       if (StrLength(Mime->Data) == 0)
              MimeLoadData(Mime);
       if (StrLength(Mime->Data) > 0) {
              StrBuf *Buf;
              Buf = NewStrBuf();
              if (   (!strcasecmp(ChrPtr(WCC->CurRoom.name), USERCONFIGROOM))
                     || (!strcasecmp(&(ChrPtr(WCC->CurRoom.name)[11]), USERCONFIGROOM))
                     || (WC->CurRoom.view == VIEW_ADDRESSBOOK)
                     ) {
                     StrBufAppendPrintf(Buf, "<a href=\"edit_vcard?msgnum=%ld?partnum=%s\">",
                            Mime->msgnum, ChrPtr(Mime->PartNum));
                     StrBufAppendPrintf(Buf, "[%s]</a>", _("edit"));
              }

              /* In all cases, display the full card */
              display_vcard(Buf, Mime, 0, 1, NULL, -1);
              FreeStrBuf(&Mime->Data);
              Mime->Data = Buf;
       }

}

Here is the call graph for this function:

Here is the caller graph for this function:

void render_MIME_VNote ( wc_mime_attachment Mime,
StrBuf *  RawData,
StrBuf *  FoundCharset 
)

Definition at line 590 of file msg_renderers.c.

{
       if (StrLength(Mime->Data) == 0)
              MimeLoadData(Mime);
       if (StrLength(Mime->Data) > 0) {
              struct vnote *v;
              StrBuf *Buf;
              char *vcard;

              Buf = NewStrBuf();
              vcard = SmashStrBuf(&Mime->Data);
              v = vnote_new_from_str(vcard);
              free (vcard);
              if (v) {
                     WCTemplputParams TP;
                     
                     memset(&TP, 0, sizeof(WCTemplputParams));
                     TP.Filter.ContextType = CTX_VNOTE;
                     TP.Context = v;
                     DoTemplate(HKEY("mail_vnoteitem"),
                               Buf, &TP);
                     
                     vnote_free(v);
                     Mime->Data = Buf;
              }
              else {
                     if (Mime->Data == NULL)
                            Mime->Data = NewStrBuf();
                     else
                            FlushStrBuf(Mime->Data);
              }
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void servcmd_do_search ( char *  buf,
long  bufsize 
)

Definition at line 1250 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS SEARCH|%s", bstr("query"));
}
void servcmd_headers ( char *  buf,
long  bufsize 
)

Definition at line 1255 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS ALL");
}
void servcmd_readfwd ( char *  buf,
long  bufsize 
)

Definition at line 1260 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS ALL");
}
void servcmd_readgt ( char *  buf,
long  bufsize 
)

Definition at line 1265 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS GT|%s", bstr("gt"));
}
void servcmd_readlt ( char *  buf,
long  bufsize 
)

Definition at line 1270 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS LT|%s", bstr("lt"));
}
void servcmd_readnew ( char *  buf,
long  bufsize 
)

Definition at line 1275 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS NEW");
}
void servcmd_readold ( char *  buf,
long  bufsize 
)

Definition at line 1280 of file msg_renderers.c.

{
       snprintf(buf, bufsize, "MSGS OLD");
}

Definition at line 1625 of file msg_renderers.c.

{
       DeleteHash(&MsgHeaderHandler);
       DeleteHash(&MimeRenderHandler);
       DeleteHash(&ReadLoopHandler);
}

Here is the caller graph for this function:

Definition at line 1616 of file msg_renderers.c.

{
       MsgHeaderHandler = NewHash(1, NULL);
       MimeRenderHandler = NewHash(1, NULL);
       ReadLoopHandler = NewHash(1, NULL);
}

Here is the caller graph for this function:

Definition at line 1636 of file msg_renderers.c.

{
       DeleteHash(&sess->attachments);
       FreeStrBuf(&sess->ConvertBuf1);
       FreeStrBuf(&sess->ConvertBuf2);
}

Here is the caller graph for this function:

int summcmp_date ( const void *  s1,
const void *  s2 
)

Definition at line 190 of file msg_renderers.c.

                                                 {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)GetSearchPayload(s1);
       summ2 = (message_summary *)GetSearchPayload(s2);

       if (summ1->date < summ2->date) return -1;
       else if (summ1->date > summ2->date) return +1;
       else return 0;
}

Here is the caller graph for this function:

int summcmp_rdate ( const void *  s1,
const void *  s2 
)

Definition at line 205 of file msg_renderers.c.

                                                  {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)GetSearchPayload(s1);
       summ2 = (message_summary *)GetSearchPayload(s2);

       if (summ1->date < summ2->date) return +1;
       else if (summ1->date > summ2->date) return -1;
       else return 0;
}

Here is the caller graph for this function:

int summcmp_rsender ( const void *  s1,
const void *  s2 
)

Definition at line 166 of file msg_renderers.c.

                                                    {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)GetSearchPayload(s1);
       summ2 = (message_summary *)GetSearchPayload(s2);
       return strcasecmp(ChrPtr(summ2->from), ChrPtr(summ1->from));
}

Here is the caller graph for this function:

int summcmp_rsubj ( const void *  s1,
const void *  s2 
)

Definition at line 131 of file msg_renderers.c.

                                                  {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)GetSearchPayload(s1);
       summ2 = (message_summary *)GetSearchPayload(s2);
       return strcasecmp(ChrPtr(summ2->subj), ChrPtr(summ1->subj));
}

Here is the caller graph for this function:

int summcmp_sender ( const void *  s1,
const void *  s2 
)

Definition at line 154 of file msg_renderers.c.

                                                   {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)GetSearchPayload(s1);
       summ2 = (message_summary *)GetSearchPayload(s2);
       return strcasecmp(ChrPtr(summ1->from), ChrPtr(summ2->from));
}

Here is the caller graph for this function:

int summcmp_subj ( const void *  s1,
const void *  s2 
)

Definition at line 119 of file msg_renderers.c.

                                                 {
       message_summary *summ1;
       message_summary *summ2;
       
       summ1 = (message_summary *)GetSearchPayload(s1);
       summ2 = (message_summary *)GetSearchPayload(s2);
       return strcasecmp(ChrPtr(summ1->subj), ChrPtr(summ2->subj));
}

Here is the caller graph for this function:

void tmplput_EDIT_MAIL_BODY ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 917 of file msg_renderers.c.

{
       const StrBuf *Mime;
        long MsgNum;
       StrBuf *Buf;

       MsgNum = LBstr(TKEY(0));
       Buf = NewStrBuf();
       read_message(Buf, HKEY("view_message_edit"), MsgNum, NULL, &Mime);
       StrBufAppendTemplate(Target, TP, Buf, 1);
       FreeStrBuf(&Buf);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_EDIT_WIKI_BODY ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 930 of file msg_renderers.c.

{
       const StrBuf *Mime;
        long msgnum;
       StrBuf *Buf;

       /* Insert the existing content of the wiki page into the editor.  But we only want
        * to do this the first time -- if the user is uploading an attachment we don't want
        * to do it again.
        */
       if (!havebstr("attach_button")) {
              char *wikipage = strdup(bstr("page"));
              str_wiki_index(wikipage);
              msgnum = locate_message_by_uid(wikipage);
              free(wikipage);
              if (msgnum >= 0L) {
                     Buf = NewStrBuf();
                     read_message(Buf, HKEY("view_message_wikiedit"), msgnum, NULL, &Mime);
                     StrBufAppendTemplate(Target, TP, Buf, 1);
                     FreeStrBuf(&Buf);
              }
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_BODY ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 954 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->MsgBody->Data, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_ALLRCPT ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 491 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->AllRcpt, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_CCCC ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 389 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->cccc, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_DATE_BRIEF ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 513 of file msg_renderers.c.

{
       char datebuf[64];
       message_summary *Msg = (message_summary*) CTX;
       webcit_fmt_date(datebuf, 64, Msg->date, DATEFMT_BRIEF);
       StrBufAppendBufPlain(Target, datebuf, -1, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_DATE_FULL ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 527 of file msg_renderers.c.

{
       char datebuf[64];
       message_summary *Msg = (message_summary*) CTX;
       webcit_fmt_date(datebuf, 64, Msg->date, DATEFMT_FULL);
       StrBufAppendBufPlain(Target, datebuf, -1, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_DATE_NO ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 534 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendPrintf(Target, "%ld", Msg->date, 0);
}

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_EUID ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 521 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->euid, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_FROM ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 274 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->from, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_H_NODE ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 777 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->hnod, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_INREPLYTO ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 336 of file msg_renderers.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_N ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 861 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendPrintf(Target, "%ld", Msg->msgnum);
}

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_NATTACH ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 756 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendPrintf(Target, "%ld", GetCount(Msg->Attachments));
}

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_ORGROOM ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 404 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->Room, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_OTHERNODE ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 444 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->OtherNode, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_PERMALINK ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 868 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       char perma_link[1024];

       strcpy(perma_link, "/readfwd?go=");
       urlesc(&perma_link[12], sizeof(perma_link) - 12, (char *)ChrPtr(WC->CurRoom.name) );
       sprintf(&perma_link[strlen(perma_link)], "?start_reading_at=%ld#%ld", Msg->msgnum, Msg->msgnum);
       StrBufAppendPrintf(Target, "%s", perma_link);
}

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_REFIDS ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 362 of file msg_renderers.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_RFCA ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 416 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->Rfca, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_SUBJECT ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 294 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;

       if (TP->Tokens->nParameters == 4)
       {
              const char *pch;
              long len;
              
              GetTemplateTokenString(Target, TP, 3, &pch, &len);
              if ((len > 0)&&
                  (strstr(ChrPtr(Msg->subj), pch) == NULL))
              {
                     GetTemplateTokenString(Target, TP, 2, &pch, &len);
                     StrBufAppendBufPlain(Target, pch, len, 0);
              }
       }
       StrBufAppendTemplate(Target, TP, Msg->subj, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MAIL_SUMM_TO ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 476 of file msg_renderers.c.

{
       message_summary *Msg = (message_summary*) CTX;
       StrBufAppendTemplate(Target, TP, Msg->to, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_Charset ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1190 of file msg_renderers.c.

{
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       StrBufAppendTemplate(Target, TP, mime->Charset, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_ContentType ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1179 of file msg_renderers.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_Data ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1196 of file msg_renderers.c.

{
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       if (mime->Renderer != NULL)
              mime->Renderer->f(mime, NULL, NULL);
       StrBufAppendTemplate(Target, TP, mime->Data, 0);
       /* TODO: check whether we need to load it now? */
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_Disposition ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1173 of file msg_renderers.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_FileName ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1155 of file msg_renderers.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_Length ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1234 of file msg_renderers.c.

{
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       StrBufAppendPrintf(Target, "%ld", mime->length);
}

Here is the caller graph for this function:

void tmplput_MIME_LoadData ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1205 of file msg_renderers.c.

{
       wcsession *WCC = WC; 
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       wc_mime_attachment *att;
       
       if (( (!strcasecmp(ChrPtr(mime->Disposition), "inline"))||
             (!strcasecmp(ChrPtr(mime->Disposition), "attachment"))) && 
           (strcasecmp(ChrPtr(mime->ContentType), "application/ms-tnef")!=0))
       {
              
              int n;
              char N[64];
              /* steal this mime part... */
              att = malloc(sizeof(wc_mime_attachment));
              memcpy(att, mime, sizeof(wc_mime_attachment));
              memset(mime, 0, sizeof(wc_mime_attachment));

              if (att->Data == NULL) 
                     MimeLoadData(att);

              if (WCC->attachments == NULL)
                     WCC->attachments = NewHash(1, NULL);
              /* And add it to the list. */
              n = snprintf(N, sizeof N, "%d", GetCount(WCC->attachments) + 1);
              Put(WCC->attachments, N, n, att, DestroyMime);
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_MsgNum ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1167 of file msg_renderers.c.

{
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       StrBufAppendPrintf(Target, "%ld", mime->msgnum);
}

Here is the caller graph for this function:

void tmplput_MIME_Name ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1149 of file msg_renderers.c.

{
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       StrBufAppendTemplate(Target, TP, mime->Name, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_MIME_PartNum ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 1161 of file msg_renderers.c.

{
       wc_mime_attachment *mime = (wc_mime_attachment*) CTX;
       StrBufAppendTemplate(Target, TP, mime->PartNum, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_QUOTED_MAIL_BODY ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 904 of file msg_renderers.c.

{
       const StrBuf *Mime;
        long MsgNum;
       StrBuf *Buf;

       MsgNum = LBstr(TKEY(0));
       Buf = NewStrBuf();
       read_message(Buf, HKEY("view_message_replyquote"), MsgNum, NULL, &Mime);
       StrBufAppendTemplate(Target, TP, Buf, 1);
       FreeStrBuf(&Buf);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void tmplput_SUMM_COUNT ( StrBuf *  Target,
WCTemplputParams TP 
)

Definition at line 499 of file msg_renderers.c.

{
       StrBufAppendPrintf(Target, "%d", GetCount( WC->summ));
}

Here is the caller graph for this function:


Variable Documentation

const long DAYSECONDS = 24 * 60 * 60

Definition at line 220 of file msg_renderers.c.

Initial value:
 {
       { {HKEY("do_search")},      servcmd_do_search    },
       { {HKEY("headers")}, servcmd_headers             },
       { {HKEY("readfwd")}, servcmd_readfwd             },
       { {HKEY("readnew")}, servcmd_readnew             },
       { {HKEY("readold")}, servcmd_readold             },
       { {HKEY("readgt")},  servcmd_readgt              },
       { {HKEY("readlt")},  servcmd_readlt              }
}

Definition at line 1287 of file msg_renderers.c.