summaryrefslogtreecommitdiffstats
path: root/tdeioslaves/imap4/mailheader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tdeioslaves/imap4/mailheader.cc')
-rw-r--r--tdeioslaves/imap4/mailheader.cc203
1 files changed, 203 insertions, 0 deletions
diff --git a/tdeioslaves/imap4/mailheader.cc b/tdeioslaves/imap4/mailheader.cc
new file mode 100644
index 000000000..c520b9094
--- /dev/null
+++ b/tdeioslaves/imap4/mailheader.cc
@@ -0,0 +1,203 @@
+/***************************************************************************
+ mailheader.cc - description
+ -------------------
+ begin : Tue Oct 24 2000
+ copyright : (C) 2000 by Sven Carstens
+ email : s.carstens@gmx.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "mailheader.h"
+#include "rfcdecoder.h"
+
+mailHeader::mailHeader ()
+{
+ toAdr.setAutoDelete (true);
+ ccAdr.setAutoDelete (true);
+ bccAdr.setAutoDelete (true);
+ setType ("text/plain");
+ gmt_offset = 0;
+}
+
+mailHeader::~mailHeader ()
+{
+}
+
+void
+mailHeader::addHdrLine (mimeHdrLine * inLine)
+{
+ mimeHdrLine *addLine = new mimeHdrLine (inLine);
+
+ const TQCString label(addLine->getLabel());
+ TQCString value(addLine->getValue());
+
+ if (!tqstricmp (label, "Return-Path")) {
+ returnpathAdr.parseAddress (value.data ());
+ goto out;
+ }
+ if (!tqstricmp (label, "Sender")) {
+ senderAdr.parseAddress (value.data ());
+ goto out;
+ }
+ if (!tqstricmp (label, "From")) {
+ fromAdr.parseAddress (value.data ());
+ goto out;
+ }
+ if (!tqstricmp (label, "Reply-To")) {
+ replytoAdr.parseAddress (value.data ());
+ goto out;
+ }
+ if (!tqstricmp (label, "To")) {
+ mailHeader::parseAddressList (value, &toAdr);
+ goto out;
+ }
+ if (!tqstricmp (label, "CC")) {
+ mailHeader::parseAddressList (value, &ccAdr);
+ goto out;
+ }
+ if (!tqstricmp (label, "BCC")) {
+ mailHeader::parseAddressList (value, &bccAdr);
+ goto out;
+ }
+ if (!tqstricmp (label, "Subject")) {
+ _subject = value.simplifyWhiteSpace();
+ goto out;
+ }
+ if (!tqstricmp (label.data (), "Date")) {
+ mDate = value;
+ goto out;
+ }
+ if (!tqstricmp (label.data (), "Message-ID")) {
+ int start = value.findRev ('<');
+ int end = value.findRev ('>');
+ if (start < end)
+ messageID = value.mid (start, end - start + 1);
+ else {
+ tqWarning("bad Message-ID");
+ /* messageID = value; */
+ }
+ goto out;
+ }
+ if (!tqstricmp (label.data (), "In-Reply-To")) {
+ int start = value.findRev ('<');
+ int end = value.findRev ('>');
+ if (start < end)
+ inReplyTo = value.mid (start, end - start + 1);
+ goto out;
+ }
+
+ // everything else is handled by mimeHeader
+ mimeHeader::addHdrLine (inLine);
+ delete addLine;
+ return;
+
+ out:
+// cout << label.data() << ": '" << value.data() << "'" << endl;
+
+ //need only to add this line if not handled by mimeHeader
+ originalHdrLines.append (addLine);
+}
+
+void
+mailHeader::outputHeader (mimeIO & useIO)
+{
+ static const TQCString __returnPath("Return-Path: ", 14);
+ static const TQCString __from ("From: ", 7);
+ static const TQCString __sender ("Sender: ", 9);
+ static const TQCString __replyTo ("Reply-To: ", 11);
+ static const TQCString __to ("To: ", 5);
+ static const TQCString __cc ("CC: ", 5);
+ static const TQCString __bcc ("BCC: ", 6);
+ static const TQCString __subject ("Subject: ", 10);
+ static const TQCString __messageId ("Message-ID: ", 13);
+ static const TQCString __inReplyTo ("In-Reply-To: ", 14);
+ static const TQCString __references("References: ", 13);
+ static const TQCString __date ("Date: ", 7);
+
+ if (!returnpathAdr.isEmpty())
+ useIO.outputMimeLine(__returnPath + returnpathAdr.getStr());
+ if (!fromAdr.isEmpty())
+ useIO.outputMimeLine(__from + fromAdr.getStr());
+ if (!senderAdr.isEmpty())
+ useIO.outputMimeLine(__sender + senderAdr.getStr());
+ if (!replytoAdr.isEmpty())
+ useIO.outputMimeLine(__replyTo + replytoAdr.getStr());
+
+ if (toAdr.count())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__to +
+ mailHeader::getAddressStr(&toAdr)));
+ if (ccAdr.count())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__cc +
+ mailHeader::getAddressStr(&ccAdr)));
+ if (bccAdr.count())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__bcc +
+ mailHeader::getAddressStr(&bccAdr)));
+ if (!_subject.isEmpty())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__subject + _subject));
+ if (!messageID.isEmpty())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__messageId + messageID));
+ if (!inReplyTo.isEmpty())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__inReplyTo + inReplyTo));
+ if (!references.isEmpty())
+ useIO.outputMimeLine(mimeHdrLine::truncateLine(__references + references));
+
+ if (!mDate.isEmpty())
+ useIO.outputMimeLine(__date + mDate);
+ mimeHeader::outputHeader(useIO);
+}
+
+int
+mailHeader::parseAddressList (const char *inCStr,
+ TQPtrList < mailAddress > *aList)
+{
+ int advance = 0;
+ int skip = 1;
+ char *aCStr = (char *) inCStr;
+
+ if (!aCStr || !aList)
+ return 0;
+ while (skip > 0)
+ {
+ mailAddress *aAddress = new mailAddress;
+ skip = aAddress->parseAddress (aCStr);
+ if (skip)
+ {
+ aCStr += skip;
+ if (skip < 0)
+ advance -= skip;
+ else
+ advance += skip;
+ aList->append (aAddress);
+ }
+ else
+ {
+ delete aAddress;
+ break;
+ }
+ }
+ return advance;
+}
+
+TQCString
+mailHeader::getAddressStr (TQPtrList < mailAddress > *aList)
+{
+ TQCString retVal;
+
+ TQPtrListIterator < mailAddress > it = TQPtrListIterator < mailAddress > (*aList);
+ while (it.current ())
+ {
+ retVal += it.current ()->getStr ();
+ ++it;
+ if (it.current ())
+ retVal += ", ";
+ }
+ return retVal;
+}