diff options
Diffstat (limited to 'tdeioslave/imap4/mimeheader.h')
-rw-r--r-- | tdeioslave/imap4/mimeheader.h | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/tdeioslave/imap4/mimeheader.h b/tdeioslave/imap4/mimeheader.h new file mode 100644 index 000000000..bc2fd2bcd --- /dev/null +++ b/tdeioslave/imap4/mimeheader.h @@ -0,0 +1,337 @@ +/*************************************************************************** + mimeheader.h - description + ------------------- + begin : Fri Oct 20 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. * + * * + ***************************************************************************/ + +#ifndef MIMEHEADER_H +#define MIMEHEADER_H + +#include <tqptrlist.h> +#include <tqdict.h> + +#include "mimehdrline.h" +#include "mimeio.h" +#include "rfcdecoder.h" + +/** + *@author Sven Carstens + */ + +class mimeHeader +{ +public: + mimeHeader (); + virtual ~ mimeHeader (); + + virtual void addHdrLine (mimeHdrLine *); + virtual void outputHeader (mimeIO &); + virtual void outputPart (mimeIO &); + + + TQCString outputParameter (TQDict < TQString > *); + + int parsePart (mimeIO &, const TQString&); + int parseBody (mimeIO &, TQCString &, const TQString&, bool mbox = false); + + // parse a header. returns true if it had a leading 'From ' line + bool parseHeader (mimeIO &); + + TQString getDispositionParm (const TQCString&); + void setDispositionParm (const TQCString&, const TQString&); + TQDictIterator < TQString > getDispositionIterator (); + + TQString getTypeParm (const TQCString&); + void setTypeParm (const TQCString&, const TQString&); + TQDictIterator < TQString > getTypeIterator (); + + // recursively serialize all important contents to the TQDataStream + void serialize(TQDataStream& stream); + + const TQCString& getType () + { + return contentType; + } + void setType (const TQCString & _str) + { + contentType = _str; + } + + const TQCString& getDescription () + { + return _contentDescription; + } + void setDescription (const TQCString & _str) + { + _contentDescription = _str; + } + + TQCString getDisposition () + { + return _contentDisposition; + } + void setDisposition (const TQCString & _str) + { + _contentDisposition = _str; + } + + TQCString getEncoding () + { + return contentEncoding; + } + void setEncoding (const TQCString & _str) + { + contentEncoding = _str; + } + + TQCString getMD5 () + { + return contentMD5; + } + void setMD5 (const TQCString & _str) + { + contentMD5 = _str; + } + + TQCString getID () + { + return contentID; + } + void setID (const TQCString & _str) + { + contentID = _str; + } + + unsigned long getLength () + { + return contentLength; + } + void setLength (unsigned long _len) + { + contentLength = _len; + } + + const TQString & getPartSpecifier () + { + return partSpecifier; + } + void setPartSpecifier (const TQString & _str) + { + partSpecifier = _str; + } + + TQPtrListIterator < mimeHdrLine > getOriginalIterator (); + TQPtrListIterator < mimeHdrLine > getAdditionalIterator (); + void setContent (const TQCString &aContent) + { + mimeContent = aContent; + } + TQCString getContent () + { + return mimeContent; + } + + TQCString getBody () + { + return preMultipartBody + postMultipartBody; + } + TQCString getPreBody () + { + return preMultipartBody; + } + void setPreBody (TQCString & inBody) + { + preMultipartBody = inBody; + } + + TQCString getPostBody () + { + return postMultipartBody; + } + void setPostBody (TQCString & inBody) + { + postMultipartBody = inBody; + contentLength = inBody.length (); + } + + mimeHeader *getNestedMessage () + { + return nestedMessage; + } + void setNestedMessage (mimeHeader * inPart, bool destroy = true) + { + if (nestedMessage && destroy) + delete nestedMessage; + nestedMessage = inPart; + } + +// mimeHeader *getNestedPart() { return nestedPart; }; + void addNestedPart (mimeHeader * inPart) + { + nestedParts.append (inPart); + } + TQPtrListIterator < mimeHeader > getNestedIterator () + { + return TQPtrListIterator < mimeHeader > (nestedParts); + } + + // clears all parts and deletes them from memory + void clearNestedParts () + { + nestedParts.clear (); + } + + // clear all parameters to content-type + void clearTypeParameters () + { + typeList.clear (); + } + + // clear all parameters to content-disposition + void clearDispositionParameters () + { + dispositionList.clear (); + } + + // return the specified body part or NULL + mimeHeader *bodyPart (const TQString &); + +#ifdef KMAIL_COMPATIBLE + ulong msgSize () + { + return contentLength; + } + uint numBodyParts () + { + return nestedParts.count (); + } + mimeHeader *bodyPart (int which, mimeHeader ** ret = NULL) + { + if (ret) + (*ret) = nestedParts.at (which); + return nestedParts.at (which); + } + void write (const TQString &) + { + } + TQString typeStr () + { + return TQString (contentType.left (contentType.find ('/'))); + } + void setTypeStr (const TQString & _str) + { + contentType = TQCString (_str.latin1 ()) + "/" + subtypeStr ().latin1 (); + } + TQString subtypeStr () + { + return TQString (contentType. + right (contentType.length () - contentType.find ('/') - + 1)); + } + void setSubtypeStr (const TQString & _str) + { + contentType = TQCString (typeStr ().latin1 ()) + "/" + _str.latin1 (); + } + TQString cteStr () + { + return TQString (getEncoding ()); + } + void setCteStr (const TQString & _str) + { + setEncoding (_str.latin1 ()); + } + TQString contentDisposition () + { + return TQString (_contentDisposition); + } + TQString body () + { + return TQString (postMultipartBody); + } + TQString charset () + { + return getTypeParm ("charset"); + } + TQString bodyDecoded (); + void setBodyEncoded (const TQByteArray &); + void setBodyEncodedBinary (const TQByteArray &); + TQByteArray bodyDecodedBinary (); + TQString name () + { + return TQString (getTypeParm ("name")); + } + void setName (const TQString & _str) + { + setTypeParm ("name", _str); + } + TQString fileName () + { + return TQString (getDispositionParm ("filename")); + } + TQString contentDescription () + { + return TQString (rfcDecoder::decodeRFC2047String (_contentDescription)); + } + void setContentDescription (const TQString & _str) + { + _contentDescription = rfcDecoder::encodeRFC2047String (_str).latin1 (); + } + TQString msgIdMD5 () + { + return TQString (contentMD5); + } + TQString iconName (); + TQString magicSetType (bool aAutoDecode = true); + TQString headerAsString (); + ulong size () + { + return 0; + } + void fromString (const TQByteArray &) + {; + } + void setContentDisposition (const TQString & _str) + { + setDisposition (_str.latin1 ()); + } +#endif + +protected: + static void addParameter (const TQCString&, TQDict < TQString > *); + static TQString getParameter (const TQCString&, TQDict < TQString > *); + static void setParameter (const TQCString&, const TQString&, TQDict < TQString > *); + + TQPtrList < mimeHdrLine > originalHdrLines; + +private: + TQPtrList < mimeHdrLine > additionalHdrLines; + TQDict < TQString > typeList; + TQDict < TQString > dispositionList; + TQCString contentType; + TQCString _contentDisposition; + TQCString contentEncoding; + TQCString _contentDescription; + TQCString contentID; + TQCString contentMD5; + unsigned long contentLength; + TQCString mimeContent; + TQCString preMultipartBody; + TQCString postMultipartBody; + mimeHeader *nestedMessage; + TQPtrList < mimeHeader > nestedParts; + TQString partSpecifier; + +}; + +#endif |