25 #include "mimehdrline.h"
28 #include <kimap/rfccodecs.h>
29 using namespace KIMAP;
42 virtual void outputHeader (
mimeIO &);
43 virtual void outputPart (
mimeIO &);
46 QByteArray outputParameter (QHash < QString, QString > &);
52 bool parseHeader (
mimeIO &);
54 QString getDispositionParm (
const QByteArray&);
55 void setDispositionParm (
const QByteArray&,
const QString&);
56 QHashIterator < QString, QString > getDispositionIterator ();
58 QString getTypeParm (
const QByteArray&);
59 void setTypeParm (
const QByteArray&,
const QString&);
60 QHashIterator < QString, QString > getTypeIterator ();
63 void serialize(QDataStream& stream);
65 const QByteArray& getType ()
69 void setType (
const QByteArray& _str)
74 const QByteArray& getDescription ()
76 return _contentDescription;
78 void setDescription(
const QByteArray& _str )
80 _contentDescription = _str;
83 const QByteArray& getDisposition ()
85 return _contentDisposition;
87 void setDisposition(
const QByteArray& _str )
89 _contentDisposition = _str;
92 const QByteArray& getEncoding ()
94 return _contentEncoding;
96 void setEncoding (
const QByteArray &_str )
98 _contentEncoding = _str;
101 const QByteArray& getMD5 ()
105 void setMD5 (
const QByteArray & _str)
110 const QByteArray& getID ()
114 void setID (
const QByteArray & _str)
119 unsigned long getLength ()
121 return contentLength;
123 void setLength (
unsigned long _len)
125 contentLength = _len;
128 const QString & getPartSpecifier ()
130 return partSpecifier;
132 void setPartSpecifier (
const QString & _str)
134 partSpecifier = _str;
137 QListIterator < mimeHdrLine *> getOriginalIterator ();
138 QListIterator < mimeHdrLine *> getAdditionalIterator ();
139 void setContent (
const QByteArray &aContent)
141 mimeContent = aContent;
143 QByteArray getContent ()
148 QByteArray getBody ()
150 return preMultipartBody + postMultipartBody;
152 QByteArray getPreBody ()
154 return preMultipartBody;
156 void setPreBody (QByteArray & inBody)
158 preMultipartBody = inBody;
161 QByteArray getPostBody ()
163 return postMultipartBody;
165 void setPostBody (QByteArray & inBody)
167 postMultipartBody = inBody;
168 contentLength = inBody.length ();
173 return nestedMessage;
175 void setNestedMessage (
mimeHeader * inPart,
bool destroy =
true)
177 if ( nestedMessage && destroy ) {
178 delete nestedMessage;
180 nestedMessage = inPart;
186 nestedParts.append( inPart );
188 QListIterator < mimeHeader *> getNestedIterator ()
190 return QListIterator < mimeHeader *> ( nestedParts );
194 void clearNestedParts ()
200 void clearTypeParameters ()
206 void clearDispositionParameters ()
208 dispositionList.clear ();
214 #ifdef KMAIL_COMPATIBLE
217 return contentLength;
221 return nestedParts.count();
226 ( *ret ) = nestedParts.at( which );
228 return nestedParts.at( which );
230 void write (
const QString &)
235 return QString( contentType.left( contentType.find(
'/' ) ) );
237 void setTypeStr (
const QString & _str)
239 contentType = QByteArray( _str.toLatin1() ) +
"/" + subtypeStr().toLatin1();
241 QString subtypeStr ()
243 return QString( contentType.right( contentType.length() - contentType.find(
'/' ) - 1 ) );
245 void setSubtypeStr (
const QString & _str)
247 contentType = QByteArray( typeStr().toLatin1() ) +
"/" + _str.toLatin1();
251 return QString( getEncoding() );
253 void setCteStr (
const QString & _str)
255 setEncoding( _str.toLatin1() );
257 QString contentDisposition ()
259 return QString( _contentDisposition );
263 return QString( postMultipartBody );
267 return getTypeParm(
"charset" );
269 QString bodyDecoded ();
270 void setBodyEncoded (
const QByteArray &);
271 void setBodyEncodedBinary (
const QByteArray &);
272 QByteArray bodyDecodedBinary ();
275 return QString( getTypeParm(
"name" ) );
277 void setName (
const QString & _str)
279 setTypeParm(
"name", _str );
283 return QString( getDispositionParm(
"filename" ) );
285 QString contentDescription ()
287 return QString( RfcCodecs::decodeRFC2047String( _contentDescription ) );
289 void setContentDescription (
const QString & _str)
291 _contentDescription = RfcCodecs::encodeRFC2047String( _str ).toLatin1();
295 return QString( contentMD5 );
298 QString magicSetType (
bool aAutoDecode =
true);
299 QString headerAsString ();
304 void fromString (
const QByteArray &)
307 void setContentDisposition (
const QString & _str)
309 setDisposition( _str.toLatin1() );
314 static void addParameter (
const QByteArray&, QHash < QString, QString > &);
315 static QString getParameter (
const QByteArray&, QHash < QString, QString > &);
316 static void setParameter (
const QByteArray&,
const QString&, QHash < QString, QString > &);
318 QList < mimeHdrLine *> originalHdrLines;
321 QList < mimeHdrLine *> additionalHdrLines;
322 QHash < QString, QString > typeList;
323 QHash < QString, QString > dispositionList;
324 QByteArray _contentType;
325 QByteArray _contentDisposition;
326 QByteArray _contentEncoding;
327 QByteArray _contentDescription;
328 QByteArray _contentID;
329 QByteArray _contentMD5;
330 unsigned int contentLength;
331 QByteArray mimeContent;
332 QByteArray preMultipartBody;
333 QByteArray postMultipartBody;
335 QList < mimeHeader *> nestedParts;
336 QString partSpecifier;