Modify flora license version.
[platform/core/messaging/msg-service.git] / plugin / mms_plugin / include / MmsPluginMIME.h
1 /*
2 * Copyright 2012-2013  Samsung Electronics Co., Ltd
3 *
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *    http://floralicense.org/license/
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #ifndef MMS_PLUGIN_MIME_H
18 #define MMS_PLUGIN_MIME_H
19
20 #include "MmsPluginTypes.h"
21
22 #define         MSG_CH_CR                                               '\r'
23 #define         MSG_CH_LF                                               '\n'
24 #define         MSG_CH_SP                                               ' '
25 #define         MSG_CH_TAB                                              '\t'
26 #define         MSG_CH_NULL                                             '\0'
27 #define         MSG_CH_COLON                                    ':'
28 #define         MSG_CH_SEMICOLON                                ';'
29 #define         MSG_CH_UNDERLINE                                '_'
30 #define         MSG_CH_COMMA                                    ','
31 #define         MSG_CH_BASE64_LOWER                             'b'
32 #define         MSG_CH_BASE64_UPPER                             'B'
33 #define         MSG_CH_QPRINT_LOWER                             'Q'
34 #define         MSG_CH_QPRINT_UPPER                             'q'
35
36 #define         MSG_CH_QUESTION                                 '?'
37 #define         MSG_CH_QUOT                                             '"'
38 #define         MSG_CH_EQUAL                                    '='
39 #define         MSG_CH_BRACKET_S                                '<'
40 #define         MSG_CH_BRACKET_E                                '>'
41
42 #define         MSG_STR_DEC_START                       "=?"
43 #define         MSG_STR_DEC_END                         "?="
44 #define         MSG_STR_CRLF                            "\r\n"
45 #define         MSG_END_OF_HEADER                       "\r\n\r\n"
46 #define         MSG_STR_DOUBLE_HYPEN            "--"
47 #define         MSG_STR_BOUNDARY_DEL            "\r\n--"
48
49 #define         MSG_MMS_CH_EMAIL_AT                     '@'
50
51
52 /* character-set parameter value of content-type header field */
53 enum {
54         MSG_CHARSET_US_ASCII,                   //0
55         MSG_CHARSET_UTF16,
56         MSG_CHARSET_USC2,
57         MSG_CHARSET_UTF8,
58         /* MIME character-set value */
59
60         MSG_CHARSET_ISO_2022_KR,
61         MSG_CHARSET_KS_C_5601_1987,
62         MSG_CHARSET_EUC_KR,     // KS_C5861-1992
63         MSG_CHARSET_ISO_2022_JP,
64         MSG_CHARSET_ISO_2022_JP_2,
65         MSG_CHARSET_ISO_8859_1,                 //Latin1
66         MSG_CHARSET_ISO_8859_2,
67         MSG_CHARSET_ISO_8859_3,
68         MSG_CHARSET_ISO_8859_4,
69         MSG_CHARSET_ISO_8859_5,
70         MSG_CHARSET_ISO_8859_6,
71         MSG_CHARSET_ISO_8859_6_E,
72         MSG_CHARSET_ISO_8859_6_I,
73         MSG_CHARSET_ISO_8859_7,
74         MSG_CHARSET_ISO_8859_8,
75         MSG_CHARSET_ISO_8859_8_I,
76         MSG_CHARSET_ISO_8859_9,
77         MSG_CHARSET_ISO_8859_10,
78         MSG_CHARSET_ISO_8859_15,
79         MSG_CHARSET_Shift_JIS,
80         MSG_CHARSET_EUC_JP,
81         MSG_CHARSET_GB2312,
82         MSG_CHARSET_BIG5,
83         MSG_CHARSET_WIN1251,
84         MSG_CHARSET_WINDOW_1251,
85         MSG_CHARSET_WINDOWS_1251, // same: WIN1251, WINDOW-1251, WINDOWS-1251
86         MSG_CHARSET_KOI8_R,
87         MSG_CHARSET_KOI8_U,
88
89         MSG_CHARSET_NUM,
90         MSG_CHARSET_UNKNOWN
91 };
92
93 /* Content-Transfer-Encoding header field value */
94 enum {
95         MSG_ENCODING_7BIT,
96         MSG_ENCODING_8BIT,
97         MSG_ENCODING_BINARY,
98         MSG_ENCODING_BASE64,
99         MSG_ENCODING_QUOTE_PRINTABLE,
100         MSG_ENCODING_NUM,
101         MSG_ENCODING_OTHER,
102 };
103
104
105 /* Content-Disposition header field value */
106 enum {
107         MSG_DISPOSITION_FORMDATA,
108         MSG_DISPOSITION_ATTACHMENT,
109         MSG_DISPOSITION_INLINE,
110         MSG_DISPOSITION_NUM
111 };
112
113 #define         UNDEFINED_BINARY        0xFF
114 #define         MSG_UNKNOWN_TYPE_STRING         "unknown"
115
116 typedef enum _MimeMainType {
117         MIME_MAINTYPE_APPLICATION,
118         MIME_MAINTYPE_AUDIO,
119         MIME_MAINTYPE_IMAGE,
120         MIME_MAINTYPE_MESSAGE,
121         MIME_MAINTYPE_MULTIPART,
122         MIME_MAINTYPE_TEXT,
123         MIME_MAINTYPE_VIDEO,
124         MIME_MAINTYPE_THEME,
125         MIME_MAINTYPE_ETC
126 } MimeMainType;
127
128 typedef enum _MimeAppType {
129         MIME_APPLICATION_NONE,
130
131         MIME_APPLICATION_CAMERA,
132         MIME_APPLICATION_VIDEORECORDER,
133
134         MIME_APPLICATION_IMAGEVIEWER,
135         MIME_APPLICATION_FLASHVIEWER,
136         MIME_APPLICATION_IMAGEEDITOR,
137         MIME_APPLICATION_THEMEVIEWER,
138
139         MIME_APPLICATION_SOUNDPLAYER,
140         MIME_APPLICATION_MEDIAPLAYER,
141         MIME_APPLICATION_VOICEMEMO,
142
143         MIME_APPLICATION_PICSELVIEWER,
144
145         MIME_APPLICATION_CONTACT,
146         MIME_APPLICATION_ORGANIZER,
147
148         MIME_APPLICATION_MAX
149 } MimeAppType;
150
151
152 typedef struct _MimeTable {
153         const char *szMIME;
154         const char *szExt;
155         bool bDownloadable;
156         MimeType mime;                  /* index of mime type */
157         MimeType contentType;   /* representative mime type */
158         MimeAppType appType;
159         MimeMainType mainType;
160         int binary;
161 } MimeTable;
162
163 typedef struct _ExtTable {
164         const char *szExt;
165         MimeType mimeType;
166 } ExtTable;
167
168 /* MIME string table ID */
169 typedef enum {
170         MSG_ENCODING,
171         MSG_DISPOSITION,
172         MSG_FIELD,
173         MSG_PARAM,
174         MSG_TYPE,
175         MSG_CHARSET,
176         MSG_ADDR_TYPE,
177 } MsgHeaderField;
178
179 typedef enum {
180         MSG_ADDR_TYPE_ERROR = -1,               // error return in Get method
181         MSG_ADDR_TYPE_PHONE = 0,
182         MSG_ADDR_TYPE_EMAIL = 1,
183         MSG_ADDR_TYPE_IPV4  = 2,
184         MSG_ADDR_TYPE_IPV6  = 3,
185         MSG_ADDR_TYPE_ALIAS = 4,
186         MSG_ADDR_TYPE_NUM   = 5,
187 } MsgAddrType;
188
189 /* MIME header field */
190 enum {
191         MSG_FIELD_RETURN_PATH,
192         MSG_FIELD_MESSAGE_ID,
193         MSG_FIELD_FROM,
194         MSG_FIELD_TO,
195         MSG_FIELD_CC,
196         MSG_FIELD_SUBJECT,
197         MSG_FIELD_DATE,
198         MSG_FIELD_MIME_VERSION,
199         MSG_FIELD_CONTENT_TYPE,
200         MSG_FIELD_CONTENT_TRANSFER_ENCODING,
201         MSG_FIELD_CONTENT_DISPOSITION, //If start param is given in multipart/related, this field will be ignored
202         MSG_FIELD_CONTENT_ID,
203         MSG_FIELD_CONTENT_LOCATION,
204         MSG_FIELD_CONTENT_NAME,
205         MSG_FIELD_CONTENT_DESCRIPTION,
206         MSG_FIELD_CONTENT_VENDOR,
207         MSG_FIELD_RIGHT_ISSUER,
208
209         MSG_FIELD_RETURN_RECEIPT_TO,                    /* for Delivery confirm */
210         MSG_FIELD_DISPOSITION_NOTIFICATION_TO,  /* for Read confirm */
211
212         MSG_FILED_CONTENT_REPLACE_POS,
213         MSG_FILED_CONTENT_REPLACE_SIZE,
214         MSG_FILED_CONTENT_REPLACE_INDEX,
215 #ifdef __SUPPORT_DRM__
216         MSG_FIELD_DRM_CONVERTED,
217 #endif
218         MSG_FIELD_NUM,
219         MSG_FIELD_UNKNOWN,
220 };
221
222 /* MIME header field parameter */
223 enum {
224         MSG_PARAM_CHARSET,
225         MSG_PARAM_NAME,
226         MSG_PARAM_FILENAME,
227         MSG_PARAM_TYPE,                 // only used as parameter of Content-Type: multipart/related
228         MSG_PARAM_START,                // Only if content-type is multipart/related
229         MSG_PARAM_START_INFO,   // Only if content-type is multipart/related
230         MSG_PARAM_BOUNDARY,
231         MSG_PARAM_REPORT_TYPE,  // only used as parameter of Content-Type: multipart/report; report-type=delivery-status;
232 #ifdef FEATURE_JAVA_MMS
233         MSG_PARAM_APPLICATION_ID,
234         MSG_PARAM_REPLY_TO_APPLICATION_ID,
235 #endif
236         MSG_PARAM_NUM,
237         MSG_PARAM_UNKNOWN,
238 };
239
240 /********************           API definition           ************************/
241
242 bool MimeIsDownloadableInt(MimeType mime);
243 bool MimeIsDownloadableString(const char *szMime);
244 char *MimeGetExtFromMimeInt(MimeType mime);
245 char *MimeGetExtFromMimeString(const char *szMime);
246 char *MimeGetMimeFromExtString(const char *szExt);
247 MimeType MimeGetMimeFromExtInt(const char *szExt);
248 MimeMainType MimeGetMainTypeInt(MimeType mime);
249 MimeMainType MimeGetMainTypeString(const char *szMime);
250 MimeType MimeGetMimeIntFromBi(int binCode);
251 char *MimeGetMimeStringFromBi(int binCode);
252 int MimeGetBinaryValueFromMimeInt(MimeType mime);
253 int MimeGetBinaryValueFromMimeString(const char *szMime);
254
255 // Append the functions on MimeAppType
256 MimeAppType MimeGetAppTypeFromInt(MimeType mime);
257 MimeAppType MimeGetAppTypeFromString(const char *szMime);
258 MimeAppType MimeGetAppTypeFromExtString(const char *szExt);
259
260 // Append the functions returning index and content type
261
262 MimeType MimeGetContentTypeFromInt(MimeType mime);
263 MimeType MimeGetContentTypeFromString(const char *szMime);
264 MimeType MimeGetMimeTypeFromString(const char *szMime);
265
266 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr);
267 char *MimeGetMimeStringFromMimeInt(int mimeType);
268
269 char *MsgGetString(MsgHeaderField tableId, int code);
270 char *_MsgSkipWS3(char *s);
271 int     _MsgGetCode(MsgHeaderField tableId, char *pStr);
272
273 #endif // MMS_PLUGIN_MIME_H