#include "webserver.h"
#include "groupdav.h"
+
+
+inline void CheckConvertBufs(struct wcsession *WCC)
+{
+ if (WCC->ConvertBuf1 == NULL)
+ WCC->ConvertBuf1 = NewStrBuf();
+ if (WCC->ConvertBuf2 == NULL)
+ WCC->ConvertBuf2 = NewStrBuf();
+}
+
/*
* message index functions
*/
void examine_from(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->from);
Msg->from = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->from, HdrLine, WC->DefaultCharset, FoundCharset);
+ StrBuf_RFC822_2_Utf8(Msg->from,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
void tmplput_MAIL_SUMM_FROM(StrBuf *Target, WCTemplputParams *TP)
{
void examine_subj(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->subj);
Msg->subj = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->subj, HdrLine, WC->DefaultCharset, FoundCharset);
+ StrBuf_RFC822_2_Utf8(Msg->subj,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
void tmplput_MAIL_SUMM_SUBJECT(StrBuf *Target, WCTemplputParams *TP)
{
void examine_msgn(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->reply_inreplyto);
Msg->reply_inreplyto = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->reply_inreplyto, HdrLine, WC->DefaultCharset, FoundCharset);
+ StrBuf_RFC822_2_Utf8(Msg->reply_inreplyto,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
void tmplput_MAIL_SUMM_INREPLYTO(StrBuf *Target, WCTemplputParams *TP)
{
int Conditional_MAIL_SUMM_UNREAD(StrBuf *Target, WCTemplputParams *TP)
{
message_summary *Msg = (message_summary*) CTX;
- return Msg->is_new != 0;
+ return (Msg->Flags & MSGFLAG_READ) != 0;
}
void examine_wefw(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->reply_references);
Msg->reply_references = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->reply_references, HdrLine, WC->DefaultCharset, FoundCharset);
+ StrBuf_RFC822_2_Utf8(Msg->reply_references,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
void tmplput_MAIL_SUMM_REFIDS(StrBuf *Target, WCTemplputParams *TP)
{
void examine_cccc(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->cccc);
Msg->cccc = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->cccc, HdrLine, WC->DefaultCharset, FoundCharset);
+ 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) {
void examine_rcpt(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->to);
Msg->to = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->to, HdrLine, WC->DefaultCharset, FoundCharset);
+ 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) {
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;
Mime->Name = NewStrBuf();
StrBufExtract_NextToken(Buf, HdrLine, &Ptr, '|');
- StrBuf_RFC822_to_Utf8(Mime->Name, Buf, WC->DefaultCharset, FoundCharset);
+ 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_to_Utf8(Mime->FileName, Buf, WC->DefaultCharset, FoundCharset);
+ StrBuf_RFC822_2_Utf8(Mime->FileName,
+ Buf,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
StrBufTrim(Mime->FileName);
Mime->PartNum = NewStrBuf();
void *vMimeRenderer;
/* just print the root-node */
- if ((Mime->level == 1) &&
+ if ((Mime->level >= 1) &&
GetHash(MimeRenderHandler, SKEY(Mime->ContentType), &vMimeRenderer) &&
vMimeRenderer != NULL)
{
Msg->Submessages = NewHash(1,NULL);
Put(Msg->Submessages, SKEY(Mime->PartNum), Mime, reference_free_handler);
}
- else if ((Mime->level == 1) &&
+ 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) &&
+ else if ((Mime->level >= 1) &&
(StrLength(Mime->ContentType) > 0) &&
( (!strcasecmp(ChrPtr(Mime->Disposition), "attachment"))
|| (!strcasecmp(ChrPtr(Mime->Disposition), "inline"))
void examine_hnod(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
FreeStrBuf(&Msg->hnod);
Msg->hnod = NewStrBufPlain(NULL, StrLength(HdrLine));
- StrBuf_RFC822_to_Utf8(Msg->hnod, HdrLine, WC->DefaultCharset, FoundCharset);
+ StrBuf_RFC822_2_Utf8(Msg->hnod,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
void tmplput_MAIL_SUMM_H_NODE(StrBuf *Target, WCTemplputParams *TP)
{
Hdr = (headereval*)vHdr;
Hdr->evaluator(Msg, Value, FoundCharset);
}
- else lprintf(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token));
+ else syslog(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token));
}
FreeStrBuf(&Token);
FreeStrBuf(&Value);
else {
ctdl_iconv_open("UTF-8", ChrPtr(cs), &ic);
if (ic == (iconv_t)(-1) ) {
- lprintf(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n",
+ syslog(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n",
__FILE__, __LINE__, ChrPtr(Mime->Charset), strerror(errno));
}
}
if (i > 0) StrBufCutLeft(Line, i);
if (StrLength(Line) == 0) {
- StrBufAppendBufPlain(Target, HKEY("<tt></tt><br />\n"), 0);
+ StrBufAppendBufPlain(Target, HKEY("<tt></tt><br>\n"), 0);
continue;
}
UrlizeText(Line1, Line, Line2);
StrEscAppend(Target, Line1, NULL, 0, 0);
- StrBufAppendBufPlain(Target, HKEY("</tt><br />\n"), 0);
+ StrBufAppendBufPlain(Target, HKEY("</tt><br>\n"), 0);
bn = bq;
}
while ((BufPtr != StrBufNOTNULL) &&
for (i = 0; i < bn; i++)
StrBufAppendBufPlain(Target, HKEY("</blockquote>"), 0);
- StrBufAppendBufPlain(Target, HKEY("</i><br />"), 0);
+ StrBufAppendBufPlain(Target, HKEY("</i><br>"), 0);
#ifdef HAVE_ICONV
if (ic != (iconv_t)(-1) ) {
iconv_close(ic);
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);
+ StrBufAppendBufPlain(Mime->Data, HKEY("<br>\n"), 0);
}
StrBuf *ConversionBuffer)
{
wcsession *WCC = WC;
+ long len;
+ long totallen;
+
+ CheckConvertBufs(WCC);
- Msg->from = NewStrBufPlain(NULL, StrLength(Line));
- StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
- if (StrLength(ConversionBuffer) != 0) {
+ totallen = StrLength(Line);
+ Msg->from = NewStrBufPlain(NULL, totallen);
+ len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
+ if (len > 0) {
/* Handle senders with RFC2047 encoding */
- StrBuf_RFC822_to_Utf8(Msg->from, ConversionBuffer, WCC->DefaultCharset, NULL);
+ StrBuf_RFC822_2_Utf8(Msg->from,
+ ConversionBuffer,
+ WCC->DefaultCharset,
+ NULL,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
/* node name */
- StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
- if ((StrLength(ConversionBuffer) !=0 ) &&
- ( ((WCC->CurRoom.QRFlags & QR_NETWORK)
+ 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))))))))
{
* StrBufExtract_token(Msg->inetaddr, Line, 4, '|');
*/
StrBufSkip_NTokenS(Line, pos, '|', 1);
- Msg->subj = NewStrBufPlain(NULL, StrLength(Line));
+ Msg->subj = NewStrBufPlain(NULL, totallen);
FlushStrBuf(ConversionBuffer);
/* we assume the subject is the last parameter inside of the list;
* on tokenizer chars inside of the subjects
StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
*/
+ len = 0;
if (*pos != StrBufNOTNULL) {
- StrBufPlain(ConversionBuffer, *pos,
- StrLength(Line) - (*pos - ChrPtr(Line)));
+ len = totallen - (*pos - ChrPtr(Line));
+ StrBufPlain(ConversionBuffer, *pos, len);
*pos = StrBufNOTNULL;
- if ((StrLength(ConversionBuffer) > 0) &&
- (*(ChrPtr(ConversionBuffer) +
- StrLength(ConversionBuffer) - 1) == '|'))
+ if ((len > 0) &&
+ (*(ChrPtr(ConversionBuffer) + len - 1) == '|'))
StrBufCutRight(ConversionBuffer, 1);
}
- if (StrLength(ConversionBuffer) == 0)
+ if (len == 0)
StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0);
else {
- StrBuf_RFC822_to_Utf8(Msg->subj, ConversionBuffer, WCC->DefaultCharset, NULL);
+ StrBuf_RFC822_2_Utf8(Msg->subj,
+ ConversionBuffer,
+ WCC->DefaultCharset,
+ NULL,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
}
return 1;
(wcsession *sess)
{
DeleteHash(&sess->attachments);
+ FreeStrBuf(&sess->ConvertBuf1);
+ FreeStrBuf(&sess->ConvertBuf2);
}