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.
19 #include "MmsPluginMIME.h"
20 #include "MmsPluginDebug.h"
21 #include "MmsPluginSmil.h"
29 static const char *szMsgField[MSG_FIELD_NUM] =
40 "Content-Transfer-Encoding",
41 "Content-Disposition", //If start param is given in multipart/related, this field will be ignored
42 "Content-ID", //for start part of multipart/related body
45 "Content-Description",
48 "Return-Receipt-To", /* Delivery confirm */
49 "Disposition-Notification-To", /* Read confirm */
55 /* MIME header field parameter */
56 static const char *szMsgParam[MSG_PARAM_NUM] =
61 "type", //Only if content-type is multipart/related,
62 "start", //Only if content-type is multipart/related
63 "start-info", //Only if content-type is multipart/related
65 "report-type", // only used as parameter of Content-Type: multipart/report; report-type=delivery-status;
66 #ifdef FEATURE_JAVA_MMS
67 "Application-ID", //laconic_javaParamFix
68 "Reply-To-Application-ID", //laconic_javaParamFix
72 /* Content-Transfer-Encoding header value */
73 static const char *szMsgEncoding[MSG_ENCODING_NUM] =
82 /* Content-Disposition header value */
83 static const char *szMsgDisposition[MSG_DISPOSITION_NUM] =
90 static const char *szMsgAddrType[MSG_ADDR_TYPE_NUM] =
99 /* character-set value */
100 static const char *szMsgCharset [MSG_CHARSET_NUM] =
106 /* MIME character-set value */
139 /************************************************** MIME definition ***************************************************/
140 static const MimeTable mimeTable[] = {
142 {"*/*", "", false, MIME_ASTERISK, MIME_ASTERISK, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
145 {"application/xml", "", false, MIME_APPLICATION_XML, MIME_APPLICATION_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x27 },
146 {"application/wml+xml", "", false, MIME_APPLICATION_WML_XML, MIME_APPLICATION_WML_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x3c },
147 {"application/xhtml+xml", "xhtml", false, MIME_APPLICATION_XHTML_XML, MIME_APPLICATION_XHTML_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x3b },
148 {"application/java-vm", "", false, MIME_APPLICATION_JAVA_VM, MIME_APPLICATION_JAVA_VM, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x11 },
149 {"application/smil", "smil", true, MIME_APPLICATION_SMIL, MIME_APPLICATION_SMIL, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
150 {"application/java-archive", "jar", true, MIME_APPLICATION_JAVA_ARCHIVE, MIME_APPLICATION_JAVA_ARCHIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
151 {"application/java", "jar", true, MIME_APPLICATION_JAVA, MIME_APPLICATION_JAVA, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
152 {"application/octet-stream", "", false, MIME_APPLICATION_OCTET_STREAM, MIME_APPLICATION_OCTET_STREAM, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
153 {"application/studiom", "smp", true, MIME_APPLICATION_STUDIOM, MIME_APPLICATION_STUDIOM, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
154 {"application/funMedia", "smp", true, MIME_APPLICATION_FUNMEDIA, MIME_APPLICATION_FUNMEDIA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
155 {"application/msword", "doc", true, MIME_APPLICATION_MSWORD, MIME_APPLICATION_MSWORD, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
156 {"application/pdf", "pdf", true, MIME_APPLICATION_PDF, MIME_APPLICATION_PDF, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
157 {"application/sdp", "sdp", true, MIME_APPLICATION_SDP, MIME_APPLICATION_SDP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
158 {"application/ram", "ram", true, MIME_APPLICATION_RAM, MIME_APPLICATION_RAM, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
159 {"application/*", "", false, MIME_APPLICATION_ASTERIC, MIME_APPLICATION_ASTERIC, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x10 },
162 {"application/vnd.wap.xhtml+xml", "", false, MIME_APPLICATION_VND_WAP_XHTMLXML, MIME_APPLICATION_VND_WAP_XHTMLXML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x45 },
163 {"application/vnd.wap.wmlc", "", false, MIME_APPLICATION_VND_WAP_WMLC, MIME_APPLICATION_VND_WAP_WMLC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x14 },
164 {"application/vnd.wap.wmlscriptc", "", false, MIME_APPLICATION_VND_WAP_WMLSCRIPTC, MIME_APPLICATION_VND_WAP_WMLSCRIPTC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x15 },
165 {"application/vnd.wap.wta-eventc", "", false, MIME_APPLICATION_VND_WAP_WTA_EVENTC, MIME_APPLICATION_VND_WAP_WTA_EVENTC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x16 },
166 {"application/vnd.wap.uaprof", "", false, MIME_APPLICATION_VND_WAP_UAPROF, MIME_APPLICATION_VND_WAP_UAPROF, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x17 },
167 {"application/vnd.wap.sic", "", false, MIME_APPLICATION_VND_WAP_SIC, MIME_APPLICATION_VND_WAP_SIC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2e },
168 {"application/vnd.wap.slc", "", false, MIME_APPLICATION_VND_WAP_SLC, MIME_APPLICATION_VND_WAP_SLC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x30 },
169 {"application/vnd.wap.coc", "", false, MIME_APPLICATION_VND_WAP_COC, MIME_APPLICATION_VND_WAP_COC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x32 },
170 {"application/vnd.wap.sia", "", false, MIME_APPLICATION_VND_WAP_SIA, MIME_APPLICATION_VND_WAP_SIA, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x34 },
171 {"application/vnd.wap,connectivity-wbxml", "", false, MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML, MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
172 {"application/vnd.wap.multipart.form-data", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA, MIME_MULTIPART_FORM_DATA, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x24 },
173 {"application/vnd.wap.multipart.byteranges", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES, MIME_MULTIPART_BYTERANGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x25 },
174 {"application/vnd.wap.multipart.mixed", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_MIXED, MIME_MULTIPART_MIXED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x23 },
175 {"application/vnd.wap.multipart.related", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_RELATED, MIME_MULTIPART_RELATED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x33 },
176 {"application/vnd.wap.multipart.alternative", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE, MIME_MULTIPART_ALTERNATIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x26 },
177 {"application/vnd.wap.multipart.*", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC, MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x22 },
178 {"application/vnd.wap.wbxml", "", false, MIME_APPLICATION_VND_WAP_WBXML, MIME_APPLICATION_VND_WAP_WBXML, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x29 },
179 {"application/vnd.oma.dd+xml", "dd", true, MIME_APPLICATION_VND_OMA_DD_XML, MIME_APPLICATION_VND_OMA_DD_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x47 },
180 {"application/vnd.oma.drm.message", "dm", true, MIME_APPLICATION_VND_OMA_DRM_MESSAGE, MIME_APPLICATION_VND_OMA_DRM_MESSAGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x48 },
181 {"application/vnd.oma.drm.content", "dcf", true, MIME_APPLICATION_VND_OMA_DRM_CONTENT, MIME_APPLICATION_VND_OMA_DRM_CONTENT, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x49 },
182 {"application/vnd.oma.drm.rights+xml", "ro", true, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x4a },
183 {"application/vnd.oma.drm.rights+wbxml", "ro", true, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x4b },
184 {"application/vnd.oma.drm.ro+xml", "oro", true, MIME_APPLICATION_VND_OMA_DRM_RO_XML, MIME_APPLICATION_VND_OMA_DRM_RO_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x4b },
185 {"application/vnd.oma.drm.dcf", "odf", true, MIME_APPLICATION_VND_OMA_DRM_DCF, MIME_APPLICATION_VND_OMA_DRM_DCF, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x4b },
186 {"application/vnd.oma.drm.roap-pdu+xml", "xml", true, MIME_APPLICATION_VND_OMA_ROAPPDU_XML, MIME_APPLICATION_VND_OMA_ROAPPDU_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x4b },
187 {"application/vnd.oma.drm.roap-trigger+xml", "xml", true, MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML, MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x4b },
188 {"application/vnd.smaf", "mmf", true, MIME_APPLICATION_VND_SMAF, MIME_APPLICATION_X_SMAF, MIME_APPLICATION_SOUNDPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
189 {"application/vnd.rn-realmedia", "rm", true, MIME_APPLICATION_VND_RN_REALMEDIA, MIME_APPLICATION_VND_RN_REALMEDIA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
190 {"application/vnd.sun.j2me.java-archive", "jar", true, MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE, MIME_APPLICATION_JAVA_ARCHIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
191 {"application/vnd.samsung.theme", "thm", true, MIME_APPLICATION_VND_SAMSUNG_THEME, MIME_APPLICATION_VND_SAMSUNG_THEME, MIME_APPLICATION_THEMEVIEWER, MIME_MAINTYPE_THEME, UNDEFINED_BINARY },
192 {"application/vnd.ms-excel", "xls", true, MIME_APPLICATION_VND_EXCEL, MIME_APPLICATION_X_EXCEL, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
193 {"application/vnd.ms-powerpoint", "ppt", true, MIME_APPLICATION_VND_POWERPOINT, MIME_APPLICATION_VND_POWERPOINT, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
194 {"applcation/vnd.ms-word", "doc", true, MIME_APPLICATION_VND_MSWORD, MIME_APPLICATION_MSWORD, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
197 {"application/x-hdmlc", "", false, MIME_APPLICATION_X_HDMLC, MIME_APPLICATION_X_HDMLC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x13 },
198 {"application/x-x968-user-cert", "", false, MIME_APPLICATION_X_X968_USERCERT, MIME_APPLICATION_X_X968_USERCERT, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2c },
199 {"application/x-www-form-urlencoded", "", false, MIME_APPLICATION_X_WWW_FORM_URLENCODED, MIME_APPLICATION_X_WWW_FORM_URLENCODED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x12 },
200 {"application/x-smaf", "mmf", true, MIME_APPLICATION_X_SMAF, MIME_APPLICATION_X_SMAF, MIME_APPLICATION_SOUNDPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
201 {"application/x-shockwave-flash", "swf", true, MIME_APPLICATION_X_FLASH, MIME_APPLICATION_X_FLASH, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
202 {"application/x-msexcel", "xls", true, MIME_APPLICATION_X_EXCEL, MIME_APPLICATION_X_EXCEL, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
203 {"application/x-mspowerpoint", "ppt", true, MIME_APPLICATION_X_POWERPOINT, MIME_APPLICATION_X_POWERPOINT, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
207 {"audio/basic", "snd"/*,au"*/, false, MIME_AUDIO_BASIC, MIME_AUDIO_BASIC, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
208 {"audio/mpeg", "mp3", true, MIME_AUDIO_MPEG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
209 {"audio/mp3", "mp3", true, MIME_AUDIO_MP3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
210 {"audio/mpg3", "mp3", true, MIME_AUDIO_MPG3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
211 {"audio/mpeg3", "mp3", true, MIME_AUDIO_MPEG3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
212 {"audio/mpg", "mp3", true, MIME_AUDIO_MPG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
213 {"audio/aac", "aac", true, MIME_AUDIO_AAC, MIME_AUDIO_AAC, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
214 {"audio/g72", "aac", true, MIME_AUDIO_G72, MIME_AUDIO_AAC, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
215 {"audio/amr", "amr", true, MIME_AUDIO_AMR, MIME_AUDIO_AMR, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
216 {"audio/amr-wb", "amr", true, MIME_AUDIO_AMR_WB, MIME_AUDIO_AMR_WB, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
217 {"audio/mmf", "mmf", true, MIME_AUDIO_MMF, MIME_AUDIO_MMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
218 {"audio/smaf", "mmf", true, MIME_AUDIO_SMAF, MIME_AUDIO_SMAF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
219 {"audio/iMelody", "imy", true, MIME_AUDIO_IMELODY, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
220 {"audio/imelody", "imy", true, MIME_AUDIO_IMELODY2, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
221 {"audio/melody", "imy", true, MIME_AUDIO_MELODY, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
222 {"audio/mid", "mid", true, MIME_AUDIO_MID, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
223 {"audio/midi", "mid"/*,midi"*/, true, MIME_AUDIO_MIDI, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
224 {"audio/sp-midi", "spm"/*,midi"*/, true, MIME_AUDIO_SP_MIDI, MIME_AUDIO_SP_MIDI, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
225 {"audio/wave", "wav", true, MIME_AUDIO_WAVE, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
226 {"audio/wav", "wav", true, MIME_AUDIO_WAV, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
227 {"audio/3gpp", "3gp", true, MIME_AUDIO_3GPP, MIME_AUDIO_3GPP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
228 {"audio/mp4", "mp4", true, MIME_AUDIO_MP4, MIME_AUDIO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
229 {"audio/MP4A-LATM", "mp4", true, MIME_AUDIO_MP4A_LATM, MIME_AUDIO_MP4A_LATM, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
230 {"audio/m4a", "m4a", true, MIME_AUDIO_M4A, MIME_AUDIO_M4A, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
231 {"audio/mpeg4", "mp4", true, MIME_AUDIO_MPEG4, MIME_AUDIO_MPEG4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
232 {"audio/wma", "wma", true, MIME_AUDIO_WMA, MIME_AUDIO_WMA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
233 {"audio/xmf", "xmf", true, MIME_AUDIO_XMF, MIME_AUDIO_XMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
234 {"audio/imy", "imy", true, MIME_AUDIO_IMY, MIME_AUDIO_IMY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
235 {"audio/mobile-xmf", "mxmf", true, MIME_AUDIO_MOBILE_XMF, MIME_AUDIO_XMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
238 {"audio/vnd.rn-realaudio", "rm"/*,ram,ra"*/, true, MIME_AUDIO_VND_RN_REALAUDIO, MIME_AUDIO_VND_RN_REALAUDIO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
241 {"audio/x-mpeg", "mp3", true, MIME_AUDIO_X_MPEG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
242 {"audio/x-mp3", "mp3", true, MIME_AUDIO_X_MP3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
243 {"audio/x-mpeg3", "mp3", true, MIME_AUDIO_X_MPEG3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
244 {"audio/x-mpg", "mp3", true, MIME_AUDIO_X_MPG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
245 {"audio/x-amr", "amr", true, MIME_AUDIO_X_AMR, MIME_AUDIO_AMR, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
246 {"audio/x-mmf", "mmf", true, MIME_AUDIO_X_MMF, MIME_AUDIO_MMF, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
247 {"audio/x-smaf", "mmf", true, MIME_AUDIO_X_SMAF, MIME_AUDIO_SMAF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
248 {"audio/x-iMelody", "imy", true, MIME_AUDIO_X_IMELODY, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
249 {"audio/x-midi", "mid"/*,midi"*/, true, MIME_AUDIO_X_MIDI, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
250 {"audio/x-mpegaudio", "mp3", true, MIME_AUDIO_X_MPEGAUDIO, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
251 {"audio/x-pn-realaudio", "ra"/*,ram,ra"*/, true, MIME_AUDIO_X_PN_REALAUDIO, MIME_AUDIO_VND_RN_REALAUDIO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
252 {"audio/x-pn-multirate-realaudio", "rm"/*,ram,ra"*/, true, MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO, MIME_AUDIO_VND_RN_REALAUDIO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
253 {"audio/x-pn-multirate-realaudio-live", "rm"/*,ram,ra"*/, true, MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE, MIME_AUDIO_VND_RN_REALAUDIO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
254 {"audio/x-wave", "wav", true, MIME_AUDIO_X_WAVE, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
255 {"audio/x-wav", "wav", true, MIME_AUDIO_X_WAV, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
256 {"audio/x-ms-wma", "wma", true, MIME_AUDIO_X_MS_WMA, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
257 {"audio/x-mid", "mid", true, MIME_AUDIO_X_MID, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
258 {"audio/x-ms-asf", "asf", true, MIME_AUDIO_X_MS_ASF, MIME_AUDIO_X_MS_ASF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
259 {"audio/x-xmf", "xmf", true, MIME_AUDIO_X_XMF, MIME_AUDIO_XMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
262 {"image/gif", "gif", false, MIME_IMAGE_GIF, MIME_IMAGE_GIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x1d },
263 {"image/jpeg", "jpg"/*,jpeg,jpe,jpz"*/, false, MIME_IMAGE_JPEG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x1e },
264 {"image/jpg", "jpg", false, MIME_IMAGE_JPG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
265 {"image/tiff", "tif"/*,tiff"*/, false, MIME_IMAGE_TIFF, MIME_IMAGE_TIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x1f },
266 {"image/tif", "tif", false, MIME_IMAGE_TIF, MIME_IMAGE_TIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
267 {"image/png", "png"/*,pnz"*/, false, MIME_IMAGE_PNG, MIME_IMAGE_PNG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x20 },
268 {"image/wbmp", "wbmp", false, MIME_IMAGE_WBMP, MIME_IMAGE_WBMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
269 {"image/pjpeg", "jpg", false, MIME_IMAGE_PJPEG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
270 {"image/bmp", "bmp", false, MIME_IMAGE_BMP, MIME_IMAGE_BMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
271 {"image/svg+xml", "svg", false, MIME_IMAGE_SVG, MIME_IMAGE_SVG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
272 {"image/svg-xml", "svg", false, MIME_IMAGE_SVG1, MIME_IMAGE_SVG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
275 {"image/vnd.wap.wbmp", "wbmp", false, MIME_IMAGE_VND_WAP_WBMP, MIME_IMAGE_WBMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x21 },
276 {"image/vnd.tmo.my5-gif", "gif", false, MIME_IMAGE_VND_TMO_GIF, MIME_IMAGE_GIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
277 {"image/vnd.tmo.my5-jpg", "jpg", false, MIME_IMAGE_VND_TMO_JPG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
280 {"image/x-bmp", "bmp", false, MIME_IMAGE_X_BMP, MIME_IMAGE_BMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
283 {"message/rfc822", "elm", false, MIME_MESSAGE_RFC822, MIME_MESSAGE_RFC822, MIME_APPLICATION_NONE, MIME_MAINTYPE_MESSAGE, UNDEFINED_BINARY },
286 {"multipart/mixed", "", false, MIME_MULTIPART_MIXED, MIME_MULTIPART_MIXED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0c },
287 {"multipart/related", "", false, MIME_MULTIPART_RELATED, MIME_MULTIPART_RELATED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
288 {"multipart/alternative", "", false, MIME_MULTIPART_ALTERNATIVE, MIME_MULTIPART_ALTERNATIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0f },
289 {"multipart/form-data", "", false, MIME_MULTIPART_FORM_DATA, MIME_MULTIPART_FORM_DATA, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0d },
290 {"multipart/byterange", "", false, MIME_MULTIPART_BYTERANGE, MIME_MULTIPART_BYTERANGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0e },
291 {"multipart/report", "", false, MIME_MULTIPART_REPORT, MIME_MULTIPART_REPORT, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
292 {"multipart/voice-message", "", false, MIME_MULTIPART_VOICE_MESSAGE, MIME_MULTIPART_VOICE_MESSAGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
295 {"text/txt", "txt", false, MIME_TEXT_TXT, MIME_TEXT_TXT, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
296 {"text/html", "html"/*,htm"*/, false, MIME_TEXT_HTML, MIME_TEXT_HTML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x02 },
297 {"text/plain", "txt"/*,vbm,url"*/, false, MIME_TEXT_PLAIN, MIME_TEXT_PLAIN, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_TEXT, 0x03 },
298 {"text/css", "", false, MIME_TEXT_CSS, MIME_TEXT_CSS, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x3d },
299 {"text/xml", "", false, MIME_TEXT_XML, MIME_TEXT_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x28 },
300 {"text/iMelody", "imy", true, MIME_TEXT_IMELODY, MIME_TEXT_IMELODY, MIME_APPLICATION_SOUNDPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
303 {"text/vnd.wap.wmlscript", "", false, MIME_TEXT_VND_WAP_WMLSCRIPT, MIME_TEXT_VND_WAP_WMLSCRIPT, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x09 },
304 {"text/vnd.wap.wml", "wml", false, MIME_TEXT_VND_WAP_WML, MIME_TEXT_VND_WAP_WML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x08 },
305 {"text/vnd.wap.wta-event", "", false, MIME_TEXT_VND_WAP_WTA_EVENT, MIME_TEXT_VND_WAP_WTA_EVENT, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x0a },
306 {"text/vnd.wap.connectivity-xml", "", false, MIME_TEXT_VND_WAP_CONNECTIVITY_XML, MIME_TEXT_VND_WAP_CONNECTIVITY_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x35 },
307 {"text/vnd.wap.si", "", false, MIME_TEXT_VND_WAP_SI, MIME_TEXT_VND_WAP_SI, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2d },
308 {"text/vnd.wap.sl", "", false, MIME_TEXT_VND_WAP_SL, MIME_TEXT_VND_WAP_SL, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2f },
309 {"text/vnd.wap.co", "", false, MIME_TEXT_VND_WAP_CO, MIME_TEXT_VND_WAP_CO, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x31 },
310 {"text/vnd.sun.j2me.app-descriptor", "jad", true, MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR, MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
314 {"text/x-hdml", "", false, MIME_TEXT_X_HDML, MIME_TEXT_X_HDML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x04 },
315 {"text/x-vCalendar", "vcs", true, MIME_TEXT_X_VCALENDAR, MIME_TEXT_X_VCALENDAR, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x06 },
316 {"text/x-vCard", "vcf", true, MIME_TEXT_X_VCARD, MIME_TEXT_X_VCARD, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x07 },
317 {"text/x-iMelody", "imy", true, MIME_TEXT_X_IMELODY, MIME_TEXT_X_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
318 {"text/x-imelody", "imy", true, MIME_TEXT_X_IMELODY2, MIME_TEXT_X_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
319 {"text/x-vnote", "vnt", true, MIME_TEXT_X_VNOTE, MIME_TEXT_X_VNOTE, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
322 {"video/mpeg4", "mp4", true, MIME_VIDEO_MPEG4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
323 {"video/mp4", "mp4", true, MIME_VIDEO_MP4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
324 {"video/h263", "3gp"/*,3gpp,mp4"*/,true, MIME_VIDEO_H263, MIME_VIDEO_H263, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
325 {"video/3gpp", "3gp"/*,3gpp"*/, true, MIME_VIDEO_3GPP, MIME_VIDEO_3GPP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
326 {"video/3gp", "3gp"/*,3gpp"*/, true, MIME_VIDEO_3GP, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
327 {"video/avi", "avi", false, MIME_VIDEO_AVI, MIME_VIDEO_AVI, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
328 {"video/sdp", "sdp", true, MIME_VIDEO_SDP, MIME_APPLICATION_SDP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
329 {"video/mp4v-es", "3gp", true, MIME_VIDEO_MP4_ES, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
330 {"video/mpeg", "3gp", true, MIME_VIDEO_MPEG, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
333 {"video/vnd.rn-realvideo", "rm", true, MIME_VIDEO_VND_RN_REALVIDEO, MIME_VIDEO_VND_RN_REALVIDEO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
334 {"video/vnd.rn-realmedia", "rm", true, MIME_VIDEO_VND_RN_REALMEDIA, MIME_VIDEO_VND_RN_REALMEDIA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
337 {"video/x-mp4", "mp4", true, MIME_VIDEO_X_MP4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
338 {"video/x-pv-mp4", "mp4", true, MIME_VIDEO_X_PV_MP4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
339 {"video/x-pn-realvideo", "rv", true, MIME_VIDEO_X_PN_REALVIDEO, MIME_VIDEO_VND_RN_REALVIDEO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
340 {"video/x-pn-multirate-realvideo", "rm", true, MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO, MIME_VIDEO_VND_RN_REALVIDEO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
341 {"video/x-ms-wmv", "wmv", true, MIME_VIDEO_X_MS_WMV, MIME_VIDEO_X_MS_WMV, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
342 {"video/x-ms-asf", "asf", true, MIME_VIDEO_X_MS_ASF, MIME_VIDEO_X_MS_ASF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
343 {"video/x-pv-pvx", "pvx", true, MIME_VIDEO_X_PV_PVX, MIME_VIDEO_X_PV_PVX, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY }
347 /********** MIME table information ***********/
348 static const int mimeTableIndex[] = {
359 /***************** Extension definition *****************/
360 static const ExtTable extTable[] = {
362 {"txt", MIME_TEXT_PLAIN},
363 {"html", MIME_TEXT_HTML},
364 {"htm", MIME_TEXT_HTML},
365 {"xhtml", MIME_APPLICATION_XHTML_XML},
366 {"wml", MIME_TEXT_VND_WAP_WML},
367 {"vcs", MIME_TEXT_X_VCALENDAR},
368 {"vcf", MIME_TEXT_X_VCARD},
369 {"vnt", MIME_TEXT_X_VNOTE},
370 {"smil", MIME_APPLICATION_SMIL},
371 {"eml", MIME_MESSAGE_RFC822},
372 {"gif", MIME_IMAGE_GIF},
373 {"jpeg", MIME_IMAGE_JPEG},
374 {"jpg", MIME_IMAGE_JPEG},
375 {"jpe", MIME_IMAGE_JPEG},
376 {"jpz", MIME_IMAGE_JPEG},
377 {"tiff", MIME_IMAGE_TIFF},
378 {"tif", MIME_IMAGE_TIFF},
379 {"png", MIME_IMAGE_PNG},
380 {"pnz", MIME_IMAGE_PNG},
381 {"wbmp", MIME_IMAGE_VND_WAP_WBMP},
382 {"bmp", MIME_IMAGE_BMP},
383 {"au", MIME_AUDIO_BASIC},
384 {"snd", MIME_AUDIO_BASIC},
385 {"mp3", MIME_AUDIO_MP3},
386 {"aac", MIME_AUDIO_AAC},
387 {"mp4", MIME_AUDIO_MP4},
388 {"m4a", MIME_AUDIO_M4A},
389 {"amr", MIME_AUDIO_X_AMR},
390 {"mmf", MIME_APPLICATION_VND_SMAF},
391 {"imy", MIME_AUDIO_X_IMELODY},
392 {"mid", MIME_AUDIO_MID},
393 {"midi", MIME_AUDIO_MID},
394 {"spm", MIME_AUDIO_SP_MIDI},
395 {"wav", MIME_AUDIO_WAVE},
396 {"3gp", MIME_AUDIO_3GPP},
397 {"3gpp", MIME_VIDEO_3GPP},
398 {"rm", MIME_VIDEO_VND_RN_REALVIDEO},
399 {"ra", MIME_AUDIO_VND_RN_REALAUDIO},
400 {"ram", MIME_AUDIO_VND_RN_REALAUDIO},
401 {"wma", MIME_AUDIO_X_MS_WMA},
402 {"smp", MIME_APPLICATION_STUDIOM},
403 {"avi", MIME_VIDEO_AVI},
404 {"sdp", MIME_APPLICATION_SDP},
405 {"vbm", MIME_TEXT_PLAIN},
406 {"url", MIME_TEXT_PLAIN},
407 {"jad", MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR},
408 {"jar", MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE},
409 {"dd", MIME_APPLICATION_VND_OMA_DD_XML},
410 {"dm", MIME_APPLICATION_VND_OMA_DRM_MESSAGE},
411 {"dcf", MIME_APPLICATION_VND_OMA_DRM_CONTENT},
412 {"rv", MIME_VIDEO_X_PN_REALVIDEO},
413 {"ro", MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML},
414 {"thm", MIME_APPLICATION_VND_SAMSUNG_THEME},
415 {"xls", MIME_APPLICATION_X_EXCEL},
416 {"pdf", MIME_APPLICATION_PDF},
417 {"ppt", MIME_APPLICATION_X_POWERPOINT},
418 {"swf", MIME_APPLICATION_X_FLASH},
419 {"svg", MIME_IMAGE_SVG},
420 {"doc", MIME_APPLICATION_MSWORD},
421 {"wmv", MIME_VIDEO_X_MS_WMV},
422 {"asf", MIME_VIDEO_X_MS_ASF},
423 {"3ga", MIME_AUDIO_M4A},
424 {"xmf", MIME_AUDIO_XMF},
425 {"mxmf", MIME_AUDIO_MOBILE_XMF},
426 {"pvx", MIME_VIDEO_X_PV_PVX},
427 {"oro", MIME_APPLICATION_VND_OMA_DRM_RO_XML},
428 {"odf", MIME_APPLICATION_VND_OMA_DRM_DCF}
432 static int mimeTableEnum[] =
436 MIME_APPLICATION_XML ,
437 MIME_APPLICATION_WML_XML ,
438 MIME_APPLICATION_XHTML_XML ,
439 MIME_APPLICATION_JAVA_VM ,
440 MIME_APPLICATION_SMIL ,
441 MIME_APPLICATION_JAVA_ARCHIVE ,
442 MIME_APPLICATION_JAVA ,
443 MIME_APPLICATION_OCTET_STREAM ,
444 MIME_APPLICATION_STUDIOM ,
445 MIME_APPLICATION_FUNMEDIA ,
446 MIME_APPLICATION_MSWORD ,
447 MIME_APPLICATION_PDF ,
448 MIME_APPLICATION_SDP ,
449 MIME_APPLICATION_RAM ,
450 MIME_APPLICATION_ASTERIC ,
453 MIME_APPLICATION_VND_WAP_XHTMLXML ,
454 MIME_APPLICATION_VND_WAP_WMLC ,
455 MIME_APPLICATION_VND_WAP_WMLSCRIPTC ,
456 MIME_APPLICATION_VND_WAP_WTA_EVENTC ,
457 MIME_APPLICATION_VND_WAP_UAPROF ,
458 MIME_APPLICATION_VND_WAP_SIC ,
459 MIME_APPLICATION_VND_WAP_SLC ,
460 MIME_APPLICATION_VND_WAP_COC ,
461 MIME_APPLICATION_VND_WAP_SIA ,
462 MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML ,
463 MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA ,
464 MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES ,
465 MIME_APPLICATION_VND_WAP_MULTIPART_MIXED ,
466 MIME_APPLICATION_VND_WAP_MULTIPART_RELATED ,
467 MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE ,
468 MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC ,
469 MIME_APPLICATION_VND_WAP_WBXML ,
470 MIME_APPLICATION_VND_OMA_DD_XML ,
471 MIME_APPLICATION_VND_OMA_DRM_MESSAGE ,
472 MIME_APPLICATION_VND_OMA_DRM_CONTENT ,
473 MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML ,
474 MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML ,
475 MIME_APPLICATION_VND_OMA_DRM_RO_XML ,
476 MIME_APPLICATION_VND_OMA_DRM_DCF ,
477 MIME_APPLICATION_VND_OMA_ROAPPDU_XML ,
478 MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML,
479 MIME_APPLICATION_VND_SMAF ,
480 MIME_APPLICATION_VND_RN_REALMEDIA ,
481 MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE ,
482 MIME_APPLICATION_VND_SAMSUNG_THEME ,
483 MIME_APPLICATION_VND_EXCEL ,
484 MIME_APPLICATION_VND_POWERPOINT,
485 MIME_APPLICATION_VND_MSWORD,
488 MIME_APPLICATION_X_HDMLC ,
489 MIME_APPLICATION_X_X968_USERCERT ,
490 MIME_APPLICATION_X_WWW_FORM_URLENCODED ,
491 MIME_APPLICATION_X_SMAF ,
492 MIME_APPLICATION_X_FLASH ,
493 MIME_APPLICATION_X_EXCEL ,
494 MIME_APPLICATION_X_POWERPOINT ,
510 MIME_AUDIO_IMELODY2 ,
519 MIME_AUDIO_MP4A_LATM ,
525 MIME_AUDIO_MOBILE_XMF,
528 MIME_AUDIO_VND_RN_REALAUDIO ,
538 MIME_AUDIO_X_IMELODY ,
540 MIME_AUDIO_X_MPEGAUDIO ,
541 MIME_AUDIO_X_PN_REALAUDIO ,
542 MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO ,
543 MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE ,
546 MIME_AUDIO_X_MS_WMA ,
548 MIME_AUDIO_X_MS_ASF ,
563 MIME_IMAGE_VND_WAP_WBMP ,
564 MIME_IMAGE_VND_TMO_GIF,
565 MIME_IMAGE_VND_TMO_JPG,
569 MIME_MESSAGE_RFC822 ,
572 MIME_MULTIPART_MIXED ,
573 MIME_MULTIPART_RELATED ,
574 MIME_MULTIPART_ALTERNATIVE ,
575 MIME_MULTIPART_FORM_DATA ,
576 MIME_MULTIPART_BYTERANGE ,
577 MIME_MULTIPART_REPORT ,
578 MIME_MULTIPART_VOICE_MESSAGE ,
587 MIME_TEXT_VND_WAP_WMLSCRIPT ,
588 MIME_TEXT_VND_WAP_WML ,
589 MIME_TEXT_VND_WAP_WTA_EVENT ,
590 MIME_TEXT_VND_WAP_CONNECTIVITY_XML ,
591 MIME_TEXT_VND_WAP_SI ,
592 MIME_TEXT_VND_WAP_SL ,
593 MIME_TEXT_VND_WAP_CO ,
594 MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR ,
596 MIME_TEXT_X_VCALENDAR ,
598 MIME_TEXT_X_IMELODY ,
599 MIME_TEXT_X_IMELODY2 ,
612 MIME_VIDEO_VND_RN_REALVIDEO ,
613 MIME_VIDEO_VND_RN_REALMEDIA ,
615 MIME_VIDEO_X_PV_MP4 ,
616 MIME_VIDEO_X_PN_REALVIDEO ,
617 MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO ,
618 MIME_VIDEO_X_MS_WMV ,
620 MIME_VIDEO_X_PV_PVX ,
622 MIME_UNKNOWN // MIME_MAX
626 #define MIME_MAX_NUM 166
628 #define MIME_SUB_TYPE_VND 1
629 #define MIME_SUB_TYPE_X 2
631 int __MimeGetTableIndexInt(MimeType mime);
632 int __MimeGetTableIndexString(const char *szMime);
633 MimeMainType __MimeGetMainTypeName(const char *szType);
637 * This function checks whether a mime is downloadable or not.
639 * @param mime [in] Enumeration number for a MIME type.
640 * @return This function returns true if downloadable, or false.
642 bool MimeIsDownloadableInt(MimeType mime)
646 index = __MimeGetTableIndexInt(mime);
647 if (index == MIME_UNKNOWN)
650 return mimeTable[index].bDownloadable;
654 * This function checks whether a mime is downloadable or not.
656 * @param mime [in] MIME string.
657 * @return This function returns true if downloadable, or false.
659 bool MimeIsDownloadableString(const char *szMime)
663 index = __MimeGetTableIndexString(szMime);
664 if (index == MIME_UNKNOWN)
667 return mimeTable[index].bDownloadable;
671 * This function checks main type of a MIME.
673 * @param mime [in] Enumeration number for a MIME type.
674 * @return This function returns main type of a MIME.
676 MimeMainType MimeGetMainTypeInt(MimeType mime)
680 index = __MimeGetTableIndexInt(mime);
681 if (index == MIME_UNKNOWN)
682 return MIME_MAINTYPE_ETC;
684 return mimeTable[index].mainType;
688 * This function checks main type of a MIME.
690 * @param mime [in] MIME string.
691 * @return This function returns main type of a MIME.
693 MimeMainType MimeGetMainTypeString(const char *szMime)
697 index = __MimeGetTableIndexString(szMime);
698 if (index == MIME_UNKNOWN)
699 return MIME_MAINTYPE_ETC;
701 return mimeTable[index].mainType;
705 * This function returns a extension name for a specified MIME.
707 * @param mime [in] Enumeration number for a MIME type.
708 * @return This function returns Extension string.
710 char *MimeGetExtFromMimeInt(MimeType mime)
714 index = __MimeGetTableIndexInt(mime);
715 if (index == MIME_UNKNOWN)
718 return (char *)mimeTable[index].szExt;
722 * This function returns a extension name for a specified MIME.
724 * @param mime [in] MIME string.
725 * @return This function returns Extension string.
727 char *MimeGetExtFromMimeString(const char *szMime)
731 index = __MimeGetTableIndexString(szMime);
732 if (index == MIME_UNKNOWN)
735 return (char *)mimeTable[index].szExt;
740 * This function returns a MIME type for a specified Extension.
742 * @param mime [in] Extension string.
743 * @return This function returns MIME string.
745 char *MimeGetMimeFromExtString(const char *szExt)
749 for (i = 0; i < EXT_MAX; i++) {
750 if (!strcasecmp( extTable[i].szExt, szExt)) {
753 index = __MimeGetTableIndexInt(extTable[i].mimeType);
754 if (index == MIME_UNKNOWN)
757 return (char *)mimeTable[index].szMIME;
765 * This function returns a MIME type for a specified Extension.
767 * @param mime [in] Extension string.
768 * @return This function returns MIME string.
770 MimeType MimeGetMimeFromExtInt(const char *szExt)
774 for (i = 0; i < EXT_MAX; i++) {
775 if (!strcasecmp( extTable[i].szExt, szExt))
776 return extTable[i].mimeType;
783 * This function returns index number in MIME definition table with MIME enumeration.
786 int __MimeGetTableIndexInt(MimeType mime)
793 if (mime == MIME_UNKNOWN)
796 type = (mime & 0xf000) >> 12;
797 subtype = (mime & 0x0f00) >> 8;
798 index = (mime & 0x003f);
800 //If 'type' is zero, mimeTableIndex's array value have a minus value
801 //If 'type' is zero, mime type is '*/*'
805 tableIndex = mimeTableIndex[(type - 1) * 3 + subtype] + index;
811 #define MIME_MAX_LEN 43
813 * This function returns index number in MIME definition table with MIME string.
816 int __MimeGetTableIndexString(const char *szMime)
822 char *szTmpStart = NULL;
828 char *szMIMEType = NULL;
831 if (szMime == NULL) {
832 MSG_DEBUG("szMime is NULL");
836 szMIMEType = (char * )malloc(strlen(szMime) + 1);
838 if (szMIMEType == NULL) {
839 MSG_DEBUG("szMime is NULL");
843 memset(szMIMEType, 0, strlen(szMime) + 1);
845 if (!strcmp(szMime, "*/*")) {
849 strcpy(szMIMEType, szMime);
853 szTmpStart = szMIMEType;
854 len = strlen(szTmpStart);
866 type = __MimeGetMainTypeName(szType);
867 szTmpStart = &szTmpStart[i];
875 len = strlen(szTmpStart);
886 if (!strcasecmp(szSubType, "vnd"))
887 subtype = MIME_SUB_TYPE_VND;
889 } else if (c == '-') {
891 if (!strcasecmp(szSubType, "x"))
892 subtype = MIME_SUB_TYPE_X;
899 start = mimeTableIndex[type * 3 + subtype];
901 if (type == MIME_MAINTYPE_VIDEO && subtype == MIME_SUB_TYPE_X)
904 end = mimeTableIndex[type * 3 + subtype + 1];
906 if (start == end && type < MIME_MAINTYPE_VIDEO) {
907 end = mimeTableIndex[(type + 1) * 3 + subtype + 1];
911 for (i = start; i < end; i++) {
912 if (i >= MIME_MAX_NUM)
915 if (!strcasecmp(mimeTable[i].szMIME, szMime)) {
926 * This function returns main type of MIME : Internal function.
928 MimeMainType __MimeGetMainTypeName(const char *szType)
931 return MIME_MAINTYPE_APPLICATION;
933 if (!strcasecmp(szType, "application"))
934 return MIME_MAINTYPE_APPLICATION;
935 else if (!strcasecmp(szType, "audio"))
936 return MIME_MAINTYPE_AUDIO;
937 else if (!strcasecmp(szType, "image"))
938 return MIME_MAINTYPE_IMAGE;
939 else if (!strcasecmp(szType, "message"))
940 return MIME_MAINTYPE_MESSAGE;
941 else if (!strcasecmp(szType, "multipart"))
942 return MIME_MAINTYPE_MULTIPART;
943 else if (!strcasecmp(szType, "text"))
944 return MIME_MAINTYPE_TEXT;
945 else if (!strcasecmp(szType, "video"))
946 return MIME_MAINTYPE_VIDEO;
948 return MIME_MAINTYPE_APPLICATION;
953 // MimeString -> MimeInt
954 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr)
956 int index = __MimeGetTableIndexString(szMimeStr);
957 if (index == MIME_UNKNOWN) {
960 return (MimeType)mimeTableEnum[index];
964 // MimeInt -> MimeString
965 char *MimeGetMimeStringFromMimeInt(int mimeType)
967 int idx = __MimeGetTableIndexInt((MimeType)mimeType);
969 if (idx == MIME_UNKNOWN)
972 return (char *)mimeTable[idx].szMIME;
976 // BinaryCode -> MimeInt
977 MimeType MimeGetMimeIntFromBi(int binCode)
981 if (binCode < 0x00 || binCode > 0x4b)
984 for (index = 0; index < MIME_MAX_NUM; index++) {
985 if (binCode == mimeTable[index].binary)
986 return (MimeType)mimeTableEnum[index];
992 // BinaryCode -> MimeInt
993 char *MimeGetMimeStringFromBi(int binCode)
997 if (binCode < 0x00 || binCode > 0x4b)
1000 for (index = 0; index < MIME_MAX_NUM; index++) {
1001 if (binCode == mimeTable[index].binary)
1002 return (char *)mimeTable[index].szMIME;
1008 // Mimeint -> Binary Value
1009 int MimeGetBinaryValueFromMimeInt(MimeType mime)
1013 index = __MimeGetTableIndexInt(mime);
1014 if (index == MIME_UNKNOWN)
1015 return UNDEFINED_BINARY;
1017 return mimeTable[index].binary;
1020 // MimeString -> Binary value
1021 int MimeGetBinaryValueFromMimeString(const char *szMime)
1025 index = __MimeGetTableIndexString(szMime);
1026 if (index == MIME_UNKNOWN)
1027 return UNDEFINED_BINARY;
1029 return mimeTable[index].binary;
1034 * This function checks main type of a MIME.
1036 * @param mime [in] Enumeration number for a MIME type.
1037 * @return This function returns application type of a MIME.
1039 MimeAppType MimeGetAppTypeFromInt(MimeType mime)
1043 index = __MimeGetTableIndexInt(mime);
1044 if (index == MIME_UNKNOWN)
1045 return MIME_APPLICATION_NONE;
1047 return mimeTable[index].appType;
1051 * This function checks main type of a MIME.
1053 * @param mime [in] MIME string.
1054 * @return This function returns application type of a MIME.
1056 MimeAppType MimeGetAppTypeFromString(const char *szMime)
1060 index = __MimeGetTableIndexString(szMime);
1061 if (index == MIME_UNKNOWN)
1062 return MIME_APPLICATION_NONE;
1064 return mimeTable[index].appType;
1069 * This function returns a application type for a specified Extension.
1071 * @param mime [in] Extension string.
1072 * @return This function returns application type.
1074 MimeAppType MimeGetAppTypeFromExtString(const char *szExt)
1078 for (i = 0; i < EXT_MAX; i++) {
1079 if (!strcasecmp( extTable[i].szExt, szExt)) {
1082 index = __MimeGetTableIndexInt(extTable[i].mimeType);
1083 if (index == MIME_UNKNOWN)
1084 return MIME_APPLICATION_NONE;
1085 return mimeTable[index].appType;
1089 return MIME_APPLICATION_NONE;
1093 * This function gets the representative mime type from MimeType
1095 * @param mime [in] Enumeration number for a MIME type.
1096 * @return representative mime type Enumeration number
1099 MimeType MimeGetContentTypeFromInt(MimeType mime)
1103 for (index = 0; index < MIME_MAX_NUM; index++) {
1104 if (mime == mimeTable[index].mime)
1105 return mimeTable[index].contentType;
1108 return MIME_UNKNOWN;
1112 * This function gets the representative mime type from mime string
1114 * @param szMime - string name of MimeType
1115 * @return representative mime type Enumeration number
1118 MimeType MimeGetContentTypeFromString(const char *szMime)
1122 for (index = 0; index < MIME_MAX_NUM; index++) {
1123 if (!strcasecmp(szMime, mimeTable[index].szMIME))
1124 return mimeTable[index].contentType;
1127 return MIME_UNKNOWN;
1131 * This function gets the index from mime string
1133 * @param szMime - string name of MimeType
1134 * @return Enumeration number for a MIME type.
1137 MimeType MimeGetMimeTypeFromString(const char *szMime)
1141 for (index = 0; index < MIME_MAX_NUM; index++) {
1142 if (!strcasecmp(szMime, mimeTable[index].szMIME))
1143 return mimeTable[index].mime;
1146 return MIME_UNKNOWN;
1150 int MsgGetCode(MsgHeaderField tableId, char *pStr)
1153 int nNum = MSG_FIELD_UNKNOWN;
1154 char **pTable = NULL;
1158 nNum = MSG_FIELD_NUM;
1159 pTable = (char **)szMsgField;
1163 nNum = MSG_PARAM_NUM;
1164 pTable = (char **)szMsgParam;
1168 return MimeGetMimeIntFromMimeString(pStr);
1171 nNum = MSG_CHARSET_NUM;
1172 pTable = (char **)szMsgCharset;
1176 nNum = MSG_ENCODING_NUM;
1177 pTable = (char **)szMsgEncoding;
1180 case MSG_DISPOSITION:
1181 nNum = MSG_DISPOSITION_NUM;
1182 pTable = (char **)szMsgDisposition;
1186 nNum = MSG_ADDR_TYPE_NUM;
1187 pTable = (char **)szMsgAddrType;
1194 for (cCode = 0; cCode < nNum; cCode++) {
1195 if (!strcasecmp(pStr, pTable[cCode])) {
1204 char *MsgGetString(MsgHeaderField tableId, int code)
1206 int nNum = MSG_FIELD_UNKNOWN;
1207 char **pTable = NULL;
1211 nNum = MSG_FIELD_NUM;
1212 pTable = (char **)szMsgField;
1216 nNum = MSG_PARAM_NUM;
1217 pTable = (char **)szMsgParam;
1221 if (code != MIME_UNKNOWN && code != -1)
1222 return MimeGetMimeStringFromMimeInt(code);
1224 return (char *)MSG_UNKNOWN_TYPE_STRING;
1227 nNum = MSG_CHARSET_NUM;
1228 pTable = (char **)szMsgCharset;
1232 nNum = MSG_ENCODING_NUM;
1233 pTable = (char **)szMsgEncoding;
1236 case MSG_DISPOSITION:
1237 nNum = MSG_DISPOSITION_NUM;
1238 pTable = (char **)szMsgDisposition;
1242 nNum = MSG_ADDR_TYPE_NUM;
1243 pTable = (char **)szMsgAddrType;
1250 if (code < 0 || code >= nNum || !pTable)
1251 return (char *)MSG_UNKNOWN_TYPE_STRING;
1253 return pTable[code];
1256 char *_MsgSkipWS3(char *s)
1259 if ((*s == MSG_CH_CR) ||
1260 (*s == MSG_CH_LF) ||
1261 (*s == MSG_CH_SP) ||
1270 int _MsgGetCode(MsgHeaderField tableId, char *pStr)
1273 int nNum = MSG_FIELD_UNKNOWN;
1274 char **pTable = NULL;
1278 nNum = MSG_FIELD_NUM;
1279 pTable = (char **)szMsgField;
1283 nNum = MSG_PARAM_NUM;
1284 pTable = (char **)szMsgParam;
1288 return MimeGetMimeIntFromMimeString(pStr);
1291 nNum = MSG_CHARSET_NUM;
1292 pTable = (char **)szMsgCharset;
1296 nNum = MSG_ENCODING_NUM;
1297 pTable = (char **)szMsgEncoding;
1300 case MSG_DISPOSITION:
1301 nNum = MSG_DISPOSITION_NUM;
1302 pTable = (char **)szMsgDisposition;
1306 nNum = MSG_ADDR_TYPE_NUM;
1307 pTable = (char **)szMsgAddrType;
1311 MSG_DEBUG("_MsgGetCode: Invalid tableId [%d] \n", tableId);
1315 for (cCode = 0; cCode < nNum; cCode++) {
1316 if (pTable[cCode] != NULL) {
1317 if (!strcasecmp( pStr, pTable[cCode])) {
1323 return INVALID_HOBJ;