update tizen source
[framework/messaging/msg-service.git] / plugin / mms_plugin / include / MmsPluginMIME.h
1 /*
2 *
3 * Copyright (c) 2000-2012 Samsung Electronics Co., Ltd. All Rights Reserved.
4 *
5 * This file is part of msg-service.
6 *
7 * Contact: Jaeyun Jeong <jyjeong@samsung.com>
8 *          Sangkoo Kim <sangkoo.kim@samsung.com>
9 *          Seunghwan Lee <sh.cat.lee@samsung.com>
10 *          SoonMin Jung <sm0415.jung@samsung.com>
11 *          Jae-Young Lee <jy4710.lee@samsung.com>
12 *          KeeBum Kim <keebum.kim@samsung.com>
13 *
14 * PROPRIETARY/CONFIDENTIAL
15 *
16 * This software is the confidential and proprietary information of
17 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
18 * disclose such Confidential Information and shall use it only in
19 * accordance with the terms of the license agreement you entered
20 * into with SAMSUNG ELECTRONICS.
21 *
22 * SAMSUNG make no representations or warranties about the suitability
23 * of the software, either express or implied, including but not limited
24 * to the implied warranties of merchantability, fitness for a particular
25 * purpose, or non-infringement. SAMSUNG shall not be liable for any
26 * damages suffered by licensee as a result of using, modifying or
27 * distributing this software or its derivatives.
28 *
29 */
30
31 #ifndef _UTY_MIME_H_
32 #define _UTY_MIME_H_
33
34 #include "MsgMmsTypes.h"
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif /* __cplusplus */
39
40 #define         MSG_CH_CR                                               '\r'
41 #define         MSG_CH_LF                                               '\n'
42 #define         MSG_CH_SP                                               ' '
43 #define         MSG_CH_TAB                                              '\t'
44 #define         MSG_CH_NULL                                             '\0'
45 #define         MSG_CH_COLON                                    ':'
46 #define         MSG_CH_SEMICOLON                                ';'
47 #define         MSG_CH_UNDERLINE                                '_'
48 #define         MSG_CH_COMMA                                    ','
49 #define         MSG_CH_BASE64_LOWER                             'b'
50 #define         MSG_CH_BASE64_UPPER                             'B'
51 #define         MSG_CH_QPRINT_LOWER                             'Q'
52 #define         MSG_CH_QPRINT_UPPER                             'q'
53
54 #define         MSG_CH_QUESTION                                 '?'
55 #define         MSG_CH_QUOT                                             '"'
56 #define         MSG_CH_EQUAL                                    '='
57 #define         MSG_CH_BRACKET_S                                '<'
58 #define         MSG_CH_BRACKET_E                                '>'
59
60 #define         MSG_STR_DEC_START                       "=?"
61 #define         MSG_STR_DEC_END                         "?="
62 #define         MSG_STR_CRLF                            "\r\n"
63 #define         MSG_END_OF_HEADER                       "\r\n\r\n"
64 #define         MSG_STR_DOUBLE_HYPEN            "--"
65 #define         MSG_STR_BOUNDARY_DEL            "\r\n--"
66
67 #define         MSG_MMS_STR_ADDR_DELIMETER      MSG_STR_ADDR_DELIMETER
68 #define         MSG_MMS_CH_ADDR_DELIMETER       MSG_CH_ADDR_DELIMETER
69 #define         MSG_MMS_CH_EMAIL_AT                     '@'
70
71
72 /* character-set parameter value of content-type header field */
73 enum {
74         MSG_CHARSET_US_ASCII,                   //0
75         MSG_CHARSET_UTF16,
76         MSG_CHARSET_USC2,
77         MSG_CHARSET_UTF8,
78         /* MIME character-set value */
79
80         MSG_CHARSET_ISO_2022_KR,
81         MSG_CHARSET_KS_C_5601_1987,
82         MSG_CHARSET_EUC_KR,     // KS_C5861-1992
83         MSG_CHARSET_ISO_2022_JP,
84         MSG_CHARSET_ISO_2022_JP_2,
85         MSG_CHARSET_ISO_8859_1,                 //Latin1
86         MSG_CHARSET_ISO_8859_2,
87         MSG_CHARSET_ISO_8859_3,
88         MSG_CHARSET_ISO_8859_4,
89         MSG_CHARSET_ISO_8859_5,
90         MSG_CHARSET_ISO_8859_6,
91         MSG_CHARSET_ISO_8859_6_E,
92         MSG_CHARSET_ISO_8859_6_I,
93         MSG_CHARSET_ISO_8859_7,
94         MSG_CHARSET_ISO_8859_8,
95         MSG_CHARSET_ISO_8859_8_I,
96         MSG_CHARSET_ISO_8859_9,
97         MSG_CHARSET_ISO_8859_10,
98         MSG_CHARSET_ISO_8859_15,
99         MSG_CHARSET_Shift_JIS,
100         MSG_CHARSET_EUC_JP,
101         MSG_CHARSET_GB2312,
102         MSG_CHARSET_BIG5,
103         MSG_CHARSET_WIN1251,
104         MSG_CHARSET_WINDOW_1251,
105         MSG_CHARSET_WINDOWS_1251, // same: WIN1251, WINDOW-1251, WINDOWS-1251
106         MSG_CHARSET_KOI8_R,
107         MSG_CHARSET_KOI8_U,
108
109         MSG_CHARSET_NUM,
110         MSG_CHARSET_UNKNOWN
111 };
112
113 /* Content-Transfer-Encoding header field value */
114 enum {
115         MSG_ENCODING_7BIT,
116         MSG_ENCODING_8BIT,
117         MSG_ENCODING_BINARY,
118         MSG_ENCODING_BASE64,
119         MSG_ENCODING_QUOTE_PRINTABLE,
120         MSG_ENCODING_NUM,
121         MSG_ENCODING_OTHER,
122 };
123
124
125 /* Content-Disposition header field value */
126 enum {
127         MSG_DISPOSITION_FORMDATA,
128         MSG_DISPOSITION_ATTACHMENT,
129         MSG_DISPOSITION_INLINE,
130         MSG_DISPOSITION_NUM
131 };
132
133 #define         UNDEFINED_BINARY        0xFF
134 #define         MSG_UNKNOWN_TYPE_STRING         "unknown"
135
136 typedef enum _MimeMainType {
137         MIME_MAINTYPE_APPLICATION,
138         MIME_MAINTYPE_AUDIO,
139         MIME_MAINTYPE_IMAGE,
140         MIME_MAINTYPE_MESSAGE,
141         MIME_MAINTYPE_MULTIPART,
142         MIME_MAINTYPE_TEXT,
143         MIME_MAINTYPE_VIDEO,
144         MIME_MAINTYPE_THEME,
145         MIME_MAINTYPE_ETC
146 } MimeMainType;
147
148 typedef enum _MimeAppType {
149         MIME_APPLICATION_NONE,
150
151         MIME_APPLICATION_CAMERA,
152         MIME_APPLICATION_VIDEORECORDER,
153
154         MIME_APPLICATION_IMAGEVIEWER,
155         MIME_APPLICATION_FLASHVIEWER,
156         MIME_APPLICATION_IMAGEEDITOR,
157         MIME_APPLICATION_THEMEVIEWER,
158
159         MIME_APPLICATION_SOUNDPLAYER,
160         MIME_APPLICATION_MEDIAPLAYER,
161         MIME_APPLICATION_VOICEMEMO,
162
163         MIME_APPLICATION_PICSELVIEWER,
164
165         MIME_APPLICATION_CONTACT,
166         MIME_APPLICATION_ORGANIZER,
167
168         MIME_APPLICATION_MAX
169 } MimeAppType;
170
171
172 typedef struct _MimeTable {
173         const char *szMIME;
174         const char *szExt;
175         bool bDownloadable;
176         MimeType mime;                  /* index of mime type */
177         MimeType contentType;   /* representative mime type */
178         MimeAppType appType;
179         MimeMainType mainType;
180         int binary;
181 } MimeTable;
182
183 typedef struct _ExtTable {
184         const char *szExt;
185         MimeType mimeType;
186 } ExtTable;
187
188 /* MIME string table ID */
189 typedef enum {
190         MSG_ENCODING,
191         MSG_DISPOSITION,
192         MSG_FIELD,
193         MSG_PARAM,
194         MSG_TYPE,
195         MSG_CHARSET,
196         MSG_ADDR_TYPE,
197 } MsgHeaderField;
198
199 typedef enum {
200         MSG_ADDR_TYPE_ERROR = -1,               // error return in Get method
201         MSG_ADDR_TYPE_PHONE = 0,
202         MSG_ADDR_TYPE_EMAIL = 1,
203         MSG_ADDR_TYPE_IPV4  = 2,
204         MSG_ADDR_TYPE_IPV6  = 3,
205         MSG_ADDR_TYPE_ALIAS = 4,
206         MSG_ADDR_TYPE_NUM   = 5,
207 } MsgAddrType;
208
209 /* MIME header field */
210 enum {
211         MSG_FIELD_RETURN_PATH,
212         MSG_FIELD_MESSAGE_ID,
213         MSG_FIELD_FROM,
214         MSG_FIELD_TO,
215         MSG_FIELD_CC,
216         MSG_FIELD_SUBJECT,
217         MSG_FIELD_DATE,
218         MSG_FIELD_MIME_VERSION,
219         MSG_FIELD_CONTENT_TYPE,
220         MSG_FIELD_CONTENT_TRANSFER_ENCODING,
221         MSG_FIELD_CONTENT_DISPOSITION, //If start param is given in multipart/related, this field will be ignored
222         MSG_FIELD_CONTENT_ID,
223         MSG_FIELD_CONTENT_LOCATION,
224         MSG_FIELD_CONTENT_NAME,
225         MSG_FIELD_CONTENT_DESCRIPTION,
226         MSG_FIELD_CONTENT_VENDOR,
227         MSG_FIELD_RIGHT_ISSUER,
228
229         MSG_FIELD_RETURN_RECEIPT_TO,                    /* for Delivery confirm */
230         MSG_FIELD_DISPOSITION_NOTIFICATION_TO,  /* for Read confirm */
231
232         MSG_FILED_CONTENT_REPLACE_POS,
233         MSG_FILED_CONTENT_REPLACE_SIZE,
234         MSG_FILED_CONTENT_REPLACE_INDEX,
235 #ifdef __SUPPORT_DRM__
236         MSG_FIELD_DRM_CONVERTED,
237 #endif
238         MSG_FIELD_NUM,
239         MSG_FIELD_UNKNOWN,
240 };
241
242 /* MIME header field parameter */
243 enum {
244         MSG_PARAM_CHARSET,
245         MSG_PARAM_NAME,
246         MSG_PARAM_FILENAME,
247         MSG_PARAM_TYPE,                 // only used as parameter of Content-Type: multipart/related
248         MSG_PARAM_START,                // Only if content-type is multipart/related
249         MSG_PARAM_START_INFO,   // Only if content-type is multipart/related
250         MSG_PARAM_BOUNDARY,
251         MSG_PARAM_REPORT_TYPE,  // only used as parameter of Content-Type: multipart/report; report-type=delivery-status;
252 #ifdef FEATURE_JAVA_MMS
253         MSG_PARAM_APPLICATION_ID,
254         MSG_PARAM_REPLY_TO_APPLICATION_ID,
255 #endif
256         MSG_PARAM_NUM,
257         MSG_PARAM_UNKNOWN,
258 };
259
260 /********************           API definition           ************************/
261
262 bool MimeIsDownloadableInt(MimeType mime);
263 bool MimeIsDownloadableString(const char *szMime);
264 char *MimeGetExtFromMimeInt(MimeType mime);
265 char *MimeGetExtFromMimeString(const char *szMime);
266 char *MimeGetMimeFromExtString(const char *szExt);
267 MimeType MimeGetMimeFromExtInt(const char *szExt);
268 MimeMainType MimeGetMainTypeInt(MimeType mime);
269 MimeMainType MimeGetMainTypeString(const char *szMime);
270 MimeType MimeGetMimeIntFromBi(int binCode);
271 char *MimeGetMimeStringFromBi(int binCode);
272 int MimeGetBinaryValueFromMimeInt(MimeType mime);
273 int MimeGetBinaryValueFromMimeString(const char *szMime);
274
275 // Append the functions on MimeAppType
276 MimeAppType MimeGetAppTypeFromInt(MimeType mime);
277 MimeAppType MimeGetAppTypeFromString(const char *szMime);
278 MimeAppType MimeGetAppTypeFromExtString(const char *szExt);
279
280 // Append the functions returning index and content type
281
282 MimeType MimeGetContentTypeFromInt(MimeType mime);
283 MimeType MimeGetContentTypeFromString(const char *szMime);
284 MimeType MimeGetMimeTypeFromString(const char *szMime);
285
286 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr);
287 char *MimeGetMimeStringFromMimeInt(int mimeType);
288
289 char *MsgGetString(MsgHeaderField tableId, int code);
290 char *_MsgSkipWS3(char *s);
291 int     _MsgGetCode(MsgHeaderField tableId, char *pStr);
292 #ifdef __cplusplus
293 }
294 #endif /* __cplusplus */
295
296 #endif // _UTY_MIME_H_
297
298