2 * Copyright 2012-2013 Samsung Electronics Co., Ltd
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
8 * http://floralicense.org/license/
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.
17 #ifndef MMS_PLUGIN_MIME_H
18 #define MMS_PLUGIN_MIME_H
20 #include "MmsPluginTypes.h"
22 #define MSG_CH_CR '\r'
23 #define MSG_CH_LF '\n'
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'
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 '>'
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--"
49 #define MSG_MMS_CH_EMAIL_AT '@'
52 /* character-set parameter value of content-type header field */
54 MSG_CHARSET_US_ASCII, //0
58 /* MIME character-set value */
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,
84 MSG_CHARSET_WINDOW_1251,
85 MSG_CHARSET_WINDOWS_1251, // same: WIN1251, WINDOW-1251, WINDOWS-1251
93 /* Content-Transfer-Encoding header field value */
99 MSG_ENCODING_QUOTE_PRINTABLE,
105 /* Content-Disposition header field value */
107 MSG_DISPOSITION_FORMDATA,
108 MSG_DISPOSITION_ATTACHMENT,
109 MSG_DISPOSITION_INLINE,
113 #define UNDEFINED_BINARY 0xFF
114 #define MSG_UNKNOWN_TYPE_STRING "unknown"
116 typedef enum _MimeMainType {
117 MIME_MAINTYPE_APPLICATION,
120 MIME_MAINTYPE_MESSAGE,
121 MIME_MAINTYPE_MULTIPART,
128 typedef enum _MimeAppType {
129 MIME_APPLICATION_NONE,
131 MIME_APPLICATION_CAMERA,
132 MIME_APPLICATION_VIDEORECORDER,
134 MIME_APPLICATION_IMAGEVIEWER,
135 MIME_APPLICATION_FLASHVIEWER,
136 MIME_APPLICATION_IMAGEEDITOR,
137 MIME_APPLICATION_THEMEVIEWER,
139 MIME_APPLICATION_SOUNDPLAYER,
140 MIME_APPLICATION_MEDIAPLAYER,
141 MIME_APPLICATION_VOICEMEMO,
143 MIME_APPLICATION_PICSELVIEWER,
145 MIME_APPLICATION_CONTACT,
146 MIME_APPLICATION_ORGANIZER,
152 typedef struct _MimeTable {
156 MimeType mime; /* index of mime type */
157 MimeType contentType; /* representative mime type */
159 MimeMainType mainType;
163 typedef struct _ExtTable {
168 /* MIME string table ID */
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,
189 /* MIME header field */
191 MSG_FIELD_RETURN_PATH,
192 MSG_FIELD_MESSAGE_ID,
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,
209 MSG_FIELD_RETURN_RECEIPT_TO, /* for Delivery confirm */
210 MSG_FIELD_DISPOSITION_NOTIFICATION_TO, /* for Read confirm */
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,
222 /* MIME header field parameter */
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
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,
240 /******************** API definition ************************/
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);
255 // Append the functions on MimeAppType
256 MimeAppType MimeGetAppTypeFromInt(MimeType mime);
257 MimeAppType MimeGetAppTypeFromString(const char *szMime);
258 MimeAppType MimeGetAppTypeFromExtString(const char *szExt);
260 // Append the functions returning index and content type
262 MimeType MimeGetContentTypeFromInt(MimeType mime);
263 MimeType MimeGetContentTypeFromString(const char *szMime);
264 MimeType MimeGetMimeTypeFromString(const char *szMime);
266 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr);
267 char *MimeGetMimeStringFromMimeInt(int mimeType);
269 char *MsgGetString(MsgHeaderField tableId, int code);
270 char *_MsgSkipWS3(char *s);
271 int _MsgGetCode(MsgHeaderField tableId, char *pStr);
273 #endif // MMS_PLUGIN_MIME_H