kioslaves
mailheader.ccGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mailheader.h"
00019 #include "rfcdecoder.h"
00020
00021 mailHeader::mailHeader ()
00022 {
00023 toAdr.setAutoDelete (true);
00024 ccAdr.setAutoDelete (true);
00025 bccAdr.setAutoDelete (true);
00026 setType ("text/plain");
00027 gmt_offset = 0;
00028 }
00029
00030 mailHeader::~mailHeader ()
00031 {
00032 }
00033
00034 void
00035 mailHeader::addHdrLine (mimeHdrLine * inLine)
00036 {
00037 mimeHdrLine *addLine = new mimeHdrLine (inLine);
00038
00039 const QCString label(addLine->getLabel());
00040 const QCString value(addLine->getValue());
00041
00042 if (!qstricmp (label, "Return-Path")) {
00043 returnpathAdr.parseAddress (value.data ());
00044 goto out;
00045 }
00046 if (!qstricmp (label, "Sender")) {
00047 senderAdr.parseAddress (value.data ());
00048 goto out;
00049 }
00050 if (!qstricmp (label, "From")) {
00051 fromAdr.parseAddress (value.data ());
00052 goto out;
00053 }
00054 if (!qstricmp (label, "Reply-To")) {
00055 replytoAdr.parseAddress (value.data ());
00056 goto out;
00057 }
00058 if (!qstricmp (label, "To")) {
00059 mailHeader::parseAddressList (value, &toAdr);
00060 goto out;
00061 }
00062 if (!qstricmp (label, "CC")) {
00063 mailHeader::parseAddressList (value, &ccAdr);
00064 goto out;
00065 }
00066 if (!qstricmp (label, "BCC")) {
00067 mailHeader::parseAddressList (value, &bccAdr);
00068 goto out;
00069 }
00070 if (!qstricmp (label, "Subject")) {
00071 _subject = value.simplifyWhiteSpace();
00072 goto out;
00073 }
00074 if (!qstricmp (label.data (), "Date")) {
00075 mDate = value;
00076 goto out;
00077 }
00078 if (!qstricmp (label.data (), "Message-ID")) {
00079 int start = value.findRev ('<');
00080 int end = value.findRev ('>');
00081 if (start < end)
00082 messageID = value.mid (start, end - start + 1);
00083 else {
00084 qWarning("bad Message-ID");
00085
00086 }
00087 goto out;
00088 }
00089 if (!qstricmp (label.data (), "In-Reply-To")) {
00090 int start = value.findRev ('<');
00091 int end = value.findRev ('>');
00092 if (start < end)
00093 inReplyTo = value.mid (start, end - start + 1);
00094 goto out;
00095 }
00096
00097
00098 mimeHeader::addHdrLine (inLine);
00099 delete addLine;
00100 return;
00101
00102 out:
00103
00104
00105
00106 originalHdrLines.append (addLine);
00107 }
00108
00109 void
00110 mailHeader::outputHeader (mimeIO & useIO)
00111 {
00112 static const QCString __returnPath("Return-Path: ", 14);
00113 static const QCString __from ("From: ", 7);
00114 static const QCString __sender ("Sender: ", 9);
00115 static const QCString __replyTo ("Reply-To: ", 11);
00116 static const QCString __to ("To: ", 5);
00117 static const QCString __cc ("CC: ", 5);
00118 static const QCString __bcc ("BCC: ", 6);
00119 static const QCString __subject ("Subject: ", 10);
00120 static const QCString __messageId ("Message-ID: ", 13);
00121 static const QCString __inReplyTo ("In-Reply-To: ", 14);
00122 static const QCString __references("References: ", 13);
00123 static const QCString __date ("Date: ", 7);
00124
00125 if (!returnpathAdr.isEmpty())
00126 useIO.outputMimeLine(__returnPath + returnpathAdr.getStr());
00127 if (!fromAdr.isEmpty())
00128 useIO.outputMimeLine(__from + fromAdr.getStr());
00129 if (!senderAdr.isEmpty())
00130 useIO.outputMimeLine(__sender + senderAdr.getStr());
00131 if (!replytoAdr.isEmpty())
00132 useIO.outputMimeLine(__replyTo + replytoAdr.getStr());
00133
00134 if (toAdr.count())
00135 useIO.outputMimeLine(mimeHdrLine::truncateLine(__to +
00136 mailHeader::getAddressStr(&toAdr)));
00137 if (ccAdr.count())
00138 useIO.outputMimeLine(mimeHdrLine::truncateLine(__cc +
00139 mailHeader::getAddressStr(&ccAdr)));
00140 if (bccAdr.count())
00141 useIO.outputMimeLine(mimeHdrLine::truncateLine(__bcc +
00142 mailHeader::getAddressStr(&bccAdr)));
00143 if (!_subject.isEmpty())
00144 useIO.outputMimeLine(mimeHdrLine::truncateLine(__subject + _subject));
00145 if (!messageID.isEmpty())
00146 useIO.outputMimeLine(mimeHdrLine::truncateLine(__messageId + messageID));
00147 if (!inReplyTo.isEmpty())
00148 useIO.outputMimeLine(mimeHdrLine::truncateLine(__inReplyTo + inReplyTo));
00149 if (!references.isEmpty())
00150 useIO.outputMimeLine(mimeHdrLine::truncateLine(__references + references));
00151
00152 if (!mDate.isEmpty())
00153 useIO.outputMimeLine(__date + mDate);
00154 mimeHeader::outputHeader(useIO);
00155 }
00156
00157 int
00158 mailHeader::parseAddressList (const char *inCStr,
00159 QPtrList < mailAddress > *aList)
00160 {
00161 int advance = 0;
00162 int skip = 1;
00163 char *aCStr = (char *) inCStr;
00164
00165 if (!aCStr || !aList)
00166 return 0;
00167 while (skip > 0)
00168 {
00169 mailAddress *aAddress = new mailAddress;
00170 skip = aAddress->parseAddress (aCStr);
00171 if (skip)
00172 {
00173 aCStr += skip;
00174 if (skip < 0)
00175 advance -= skip;
00176 else
00177 advance += skip;
00178 aList->append (aAddress);
00179 }
00180 else
00181 {
00182 delete aAddress;
00183 break;
00184 }
00185 }
00186 return advance;
00187 }
00188
00189 QCString
00190 mailHeader::getAddressStr (QPtrList < mailAddress > *aList)
00191 {
00192 QCString retVal;
00193
00194 QPtrListIterator < mailAddress > it = QPtrListIterator < mailAddress > (*aList);
00195 while (it.current ())
00196 {
00197 retVal += it.current ()->getStr ();
00198 ++it;
00199 if (it.current ())
00200 retVal += ", ";
00201 }
00202 return retVal;
00203 }
|