summaryrefslogtreecommitdiffstats
path: root/tdeioslave/imap4/mimeheader.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeioslave/imap4/mimeheader.h')
-rw-r--r--tdeioslave/imap4/mimeheader.h337
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