PTLib  Version 2.14.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mime.h
Go to the documentation of this file.
1 /*
2  * mime.h
3  *
4  * Multipurpose Internet Mail Extensions support classes.
5  *
6  * Portable Windows Library
7  *
8  * Copyright (c) 1993-2002 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Portable Windows Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Contributor(s): ______________________________________.
25  *
26  * $Revision: 26840 $
27  * $Author: rjongbloed $
28  * $Date: 2012-01-08 18:22:58 +1100 (Sun, 08 Jan 2012) $
29  */
30 
31 #ifndef PTLIB_PMIME_H
32 #define PTLIB_PMIME_H
33 
34 #ifdef P_USE_PRAGMA
35 #pragma interface
36 #endif
37 
38 #include <ptclib/cypher.h>
39 
40 
41 class PMultiPartList;
42 class PInternetProtocol;
43 
44 
46 // PMIMEInfo
47 
52 class PMIMEInfo : public PStringOptions
53 {
54  public:
55  PMIMEInfo() { }
56 
58  PMIMEInfo(
59  istream &strm
60  );
61  PMIMEInfo(
62  PInternetProtocol & socket
63  );
64  PMIMEInfo(
65  const PStringToString & dict
66  );
67  PMIMEInfo(
68  const PString & str
69  );
70 
71 
72  // Overrides from class PObject
76  virtual void PrintOn(
77  ostream &strm
78  ) const;
79 
83  virtual void ReadFrom(
84  istream &strm
85  );
86 
87 
88  // New functions for class.
94  PBoolean Read(
95  PInternetProtocol & socket
96  );
97 
103  PBoolean Write(
104  PInternetProtocol & socket
105  ) const;
106 
109  PString AsString() const;
110 
119  bool AddMIME(
120  const PString & line
121  );
122  bool AddMIME(
123  const PString & fieldName,
124  const PString & fieldValue
125  ) { return InternalAddMIME(fieldName, fieldValue); }
126  bool AddMIME(
127  const PMIMEInfo & mime
128  );
129 
130  virtual bool InternalAddMIME(
131  const PString & fieldName,
132  const PString & fieldValue
133  );
134 
165  const char * key,
166  PStringToString & info
167  ) const { return ParseComplex(GetString(key), info); }
169  const PString & key,
170  PStringToString & info
171  ) const { return ParseComplex(GetString(key), info); }
173  const PCaselessString & key,
174  PStringToString & info
175  ) const { return ParseComplex(GetString(key), info); }
177  const PCaselessString & (*key)(),
178  PStringToString & info
179  ) const { return ParseComplex(GetString(key), info); }
180 
182  static bool ParseComplex(
183  const PString & str,
184  PStringToString & info
185  );
186 
189  bool DecodeMultiPartList(
190  PMultiPartList & parts,
191  const PString & body,
192  const PCaselessString & key
193  ) const;
194 
198  PMultiPartList & parts,
199  const PString & body,
200  const PCaselessString & (*key)() = ContentTypeTag
201  ) const { return DecodeMultiPartList(parts, body, key()); }
202 
203 
204  static const PCaselessString & ContentTypeTag();
205  static const PCaselessString & ContentDispositionTag();
207  static const PCaselessString & ContentDescriptionTag();
208  static const PCaselessString & ContentIdTag();
209 
210  static const PCaselessString & TextPlain();
211 
212 
250  static void SetAssociation(
251  const PStringToString & allTypes,
252  PBoolean merge = true
253  );
254  static void SetAssociation(
255  const PString & fileType,
256  const PString & contentType
257  ) { GetContentTypes().SetAt(fileType, contentType); }
258 
266  static PString GetContentType(
267  const PString & fileType
268  );
269 
272  virtual ostream & PrintContents(
273  ostream & strm
274  ) const;
275 
276  private:
277  static PStringToString & GetContentTypes();
278 };
279 
280 
282 // PMultiPartInfo
283 
286 class PMultiPartInfo : public PObject
287 {
288  PCLASSINFO(PMultiPartInfo, PObject);
289  public:
293 };
294 
295 class PMultiPartList : public PList<PMultiPartInfo>
296 {
298  public:
300 
301  bool Decode(
302  const PString & body,
303  const PStringToString & contentInfo
304  );
305 };
306 
307 
308 #endif // PTLIB_PMIME_H
309 
310 
311 // End Of File ///////////////////////////////////////////////////////////////