2 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved
4 * Licensed under the Apache License, Version 2.0 (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://www.apache.org/licenses/LICENSE-2.0
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 <metadata_extractor.h>
20 #include "MsgUtilMime.h"
23 typedef enum _MimeAppType {
24 MIME_APPLICATION_NONE,
26 MIME_APPLICATION_CAMERA,
27 MIME_APPLICATION_VIDEORECORDER,
29 MIME_APPLICATION_IMAGEVIEWER,
30 MIME_APPLICATION_FLASHVIEWER,
31 MIME_APPLICATION_IMAGEEDITOR,
32 MIME_APPLICATION_THEMEVIEWER,
34 MIME_APPLICATION_SOUNDPLAYER,
35 MIME_APPLICATION_MEDIAPLAYER,
36 MIME_APPLICATION_VOICEMEMO,
38 MIME_APPLICATION_PICSELVIEWER,
40 MIME_APPLICATION_CONTACT,
41 MIME_APPLICATION_ORGANIZER,
47 typedef struct _MimeTable {
51 MimeType mime; /* index of mime type */
52 MimeType contentType; /* representative mime type */
54 MimeMainType mainType;
58 /************************************************** MIME definition ***************************************************/
59 static const MimeTable mimeTable[] = {
61 {"*/*", "", false, MIME_ASTERISK, MIME_ASTERISK, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
64 {"application/xml", "", false, MIME_APPLICATION_XML, MIME_APPLICATION_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x27 },
65 {"application/wml+xml", "", false, MIME_APPLICATION_WML_XML, MIME_APPLICATION_WML_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x3c },
66 {"application/xhtml+xml", "xhtml", false, MIME_APPLICATION_XHTML_XML, MIME_APPLICATION_XHTML_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x3b },
67 {"application/java-vm", "", false, MIME_APPLICATION_JAVA_VM, MIME_APPLICATION_JAVA_VM, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x11 },
68 {"application/smil", "smil", true, MIME_APPLICATION_SMIL, MIME_APPLICATION_SMIL, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
69 {"application/java-archive", "jar", true, MIME_APPLICATION_JAVA_ARCHIVE, MIME_APPLICATION_JAVA_ARCHIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
70 {"application/java", "jar", true, MIME_APPLICATION_JAVA, MIME_APPLICATION_JAVA, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
71 {"application/octet-stream", "", false, MIME_APPLICATION_OCTET_STREAM, MIME_APPLICATION_OCTET_STREAM, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, UNDEFINED_BINARY },
72 {"application/studiom", "smp", true, MIME_APPLICATION_STUDIOM, MIME_APPLICATION_STUDIOM, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
73 {"application/funMedia", "smp", true, MIME_APPLICATION_FUNMEDIA, MIME_APPLICATION_FUNMEDIA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
74 {"application/msword", "doc", true, MIME_APPLICATION_MSWORD, MIME_APPLICATION_MSWORD, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
75 {"application/pdf", "pdf", true, MIME_APPLICATION_PDF, MIME_APPLICATION_PDF, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
76 {"application/sdp", "sdp", true, MIME_APPLICATION_SDP, MIME_APPLICATION_SDP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
77 {"application/ram", "ram", true, MIME_APPLICATION_RAM, MIME_APPLICATION_RAM, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
78 {"application/*", "", false, MIME_APPLICATION_ASTERIC, MIME_APPLICATION_ASTERIC, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x10 },
81 {"application/vnd.wap.xhtml+xml", "", false, MIME_APPLICATION_VND_WAP_XHTMLXML, MIME_APPLICATION_VND_WAP_XHTMLXML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x45 },
82 {"application/vnd.wap.wmlc", "", false, MIME_APPLICATION_VND_WAP_WMLC, MIME_APPLICATION_VND_WAP_WMLC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x14 },
83 {"application/vnd.wap.wmlscriptc", "", false, MIME_APPLICATION_VND_WAP_WMLSCRIPTC, MIME_APPLICATION_VND_WAP_WMLSCRIPTC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x15 },
84 {"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 },
85 {"application/vnd.wap.uaprof", "", false, MIME_APPLICATION_VND_WAP_UAPROF, MIME_APPLICATION_VND_WAP_UAPROF, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x17 },
86 {"application/vnd.wap.sic", "", false, MIME_APPLICATION_VND_WAP_SIC, MIME_APPLICATION_VND_WAP_SIC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2e },
87 {"application/vnd.wap.slc", "", false, MIME_APPLICATION_VND_WAP_SLC, MIME_APPLICATION_VND_WAP_SLC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x30 },
88 {"application/vnd.wap.coc", "", false, MIME_APPLICATION_VND_WAP_COC, MIME_APPLICATION_VND_WAP_COC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x32 },
89 {"application/vnd.wap.sia", "", false, MIME_APPLICATION_VND_WAP_SIA, MIME_APPLICATION_VND_WAP_SIA, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x34 },
90 {"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 },
91 {"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 },
92 {"application/vnd.wap.multipart.byteranges", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES, MIME_MULTIPART_BYTERANGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x25 },
93 {"application/vnd.wap.multipart.mixed", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_MIXED, MIME_MULTIPART_MIXED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x23 },
94 {"application/vnd.wap.multipart.related", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_RELATED, MIME_MULTIPART_RELATED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x33 },
95 {"application/vnd.wap.multipart.alternative", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE, MIME_MULTIPART_ALTERNATIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x26 },
96 {"application/vnd.wap.multipart.*", "", false, MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC, MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x22 },
97 {"application/vnd.wap.wbxml", "", false, MIME_APPLICATION_VND_WAP_WBXML, MIME_APPLICATION_VND_WAP_WBXML, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x29 },
98 {"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 },
99 {"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 },
100 {"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 },
101 {"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 },
102 {"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 },
103 {"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 },
104 {"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 },
105 {"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 },
106 {"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 },
107 {"application/vnd.smaf", "mmf", true, MIME_APPLICATION_VND_SMAF, MIME_APPLICATION_X_SMAF, MIME_APPLICATION_SOUNDPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
108 {"application/vnd.rn-realmedia", "rm", true, MIME_APPLICATION_VND_RN_REALMEDIA, MIME_APPLICATION_VND_RN_REALMEDIA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
109 {"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 },
110 {"application/vnd.samsung.theme", "thm", true, MIME_APPLICATION_VND_SAMSUNG_THEME, MIME_APPLICATION_VND_SAMSUNG_THEME, MIME_APPLICATION_THEMEVIEWER, MIME_MAINTYPE_THEME, UNDEFINED_BINARY },
111 {"application/vnd.ms-excel", "xls", true, MIME_APPLICATION_VND_EXCEL, MIME_APPLICATION_X_EXCEL, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
112 {"application/vnd.ms-powerpoint", "ppt", true, MIME_APPLICATION_VND_POWERPOINT, MIME_APPLICATION_VND_POWERPOINT, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
113 {"applcation/vnd.ms-word", "doc", true, MIME_APPLICATION_VND_MSWORD, MIME_APPLICATION_MSWORD, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
116 {"application/x-hdmlc", "", false, MIME_APPLICATION_X_HDMLC, MIME_APPLICATION_X_HDMLC, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x13 },
117 {"application/x-x968-user-cert", "", false, MIME_APPLICATION_X_X968_USERCERT, MIME_APPLICATION_X_X968_USERCERT, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2c },
118 {"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 },
119 {"application/x-smaf", "mmf", true, MIME_APPLICATION_X_SMAF, MIME_APPLICATION_X_SMAF, MIME_APPLICATION_SOUNDPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
120 {"application/x-shockwave-flash", "swf", true, MIME_APPLICATION_X_FLASH, MIME_APPLICATION_X_FLASH, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
121 {"application/x-msexcel", "xls", true, MIME_APPLICATION_X_EXCEL, MIME_APPLICATION_X_EXCEL, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
122 {"application/x-mspowerpoint", "ppt", true, MIME_APPLICATION_X_POWERPOINT, MIME_APPLICATION_X_POWERPOINT, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
126 {"audio/basic", "snd"/*,au"*/, false, MIME_AUDIO_BASIC, MIME_AUDIO_BASIC, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
127 {"audio/mpeg", "mp3", true, MIME_AUDIO_MPEG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
128 {"audio/mp3", "mp3", true, MIME_AUDIO_MP3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
129 {"audio/mpg3", "mp3", true, MIME_AUDIO_MPG3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
130 {"audio/mpeg3", "mp3", true, MIME_AUDIO_MPEG3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
131 {"audio/mpg", "mp3", true, MIME_AUDIO_MPG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
132 {"audio/aac", "aac", true, MIME_AUDIO_AAC, MIME_AUDIO_AAC, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
133 {"audio/g72", "aac", true, MIME_AUDIO_G72, MIME_AUDIO_AAC, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
134 {"audio/amr", "amr", true, MIME_AUDIO_AMR, MIME_AUDIO_AMR, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
135 {"audio/amr-wb", "amr", true, MIME_AUDIO_AMR_WB, MIME_AUDIO_AMR_WB, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
136 {"audio/mmf", "mmf", true, MIME_AUDIO_MMF, MIME_AUDIO_MMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
137 {"audio/smaf", "mmf", true, MIME_AUDIO_SMAF, MIME_AUDIO_SMAF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
138 {"audio/imelody", "imy", true, MIME_AUDIO_IMELODY, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
139 {"audio/iMelody", "imy", true, MIME_AUDIO_IMELODY2, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
140 {"audio/melody", "imy", true, MIME_AUDIO_MELODY, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
141 {"audio/mid", "mid", true, MIME_AUDIO_MID, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
142 {"audio/midi", "mid"/*,midi"*/, true, MIME_AUDIO_MIDI, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
143 {"audio/sp-midi", "spm"/*,midi"*/, true, MIME_AUDIO_SP_MIDI, MIME_AUDIO_SP_MIDI, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
144 {"audio/wave", "wav", true, MIME_AUDIO_WAVE, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
145 {"audio/wav", "wav", true, MIME_AUDIO_WAV, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
146 {"audio/3gpp", "3gp", true, MIME_AUDIO_3GPP, MIME_AUDIO_3GPP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
147 {"audio/mp4", "mp4", true, MIME_AUDIO_MP4, MIME_AUDIO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
148 {"audio/MP4A-LATM", "mp4", true, MIME_AUDIO_MP4A_LATM, MIME_AUDIO_MP4A_LATM, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
149 {"audio/m4a", "m4a", true, MIME_AUDIO_M4A, MIME_AUDIO_M4A, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
150 {"audio/mpeg4", "mp4", true, MIME_AUDIO_MPEG4, MIME_AUDIO_MPEG4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
151 {"audio/wma", "wma", true, MIME_AUDIO_WMA, MIME_AUDIO_WMA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
152 {"audio/xmf", "xmf", true, MIME_AUDIO_XMF, MIME_AUDIO_XMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
153 {"audio/imy", "imy", true, MIME_AUDIO_IMY, MIME_AUDIO_IMY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
154 {"audio/mobile-xmf", "mxmf", true, MIME_AUDIO_MOBILE_XMF, MIME_AUDIO_MOBILE_XMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
155 {"audio/ogg", "ogg", true, MIME_AUDIO_OGG, MIME_AUDIO_OGG, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
158 {"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 },
161 {"audio/x-mpeg", "mp3", true, MIME_AUDIO_X_MPEG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
162 {"audio/x-mp3", "mp3", true, MIME_AUDIO_X_MP3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
163 {"audio/x-mpeg3", "mp3", true, MIME_AUDIO_X_MPEG3, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
164 {"audio/x-mpg", "mp3", true, MIME_AUDIO_X_MPG, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
165 {"audio/x-amr", "amr", true, MIME_AUDIO_X_AMR, MIME_AUDIO_AMR, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
166 {"audio/x-mmf", "mmf", true, MIME_AUDIO_X_MMF, MIME_AUDIO_MMF, MIME_APPLICATION_VOICEMEMO, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
167 {"audio/x-smaf", "mmf", true, MIME_AUDIO_X_SMAF, MIME_AUDIO_SMAF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
168 {"audio/x-iMelody", "imy", true, MIME_AUDIO_X_IMELODY, MIME_AUDIO_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
169 {"audio/x-midi", "mid"/*,midi"*/, true, MIME_AUDIO_X_MIDI, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
170 {"audio/x-mpegaudio", "mp3", true, MIME_AUDIO_X_MPEGAUDIO, MIME_AUDIO_MP3, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
171 {"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 },
172 {"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 },
173 {"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 },
174 {"audio/x-wave", "wav", true, MIME_AUDIO_X_WAVE, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
175 {"audio/x-wav", "wav", true, MIME_AUDIO_X_WAV, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
176 {"audio/x-ms-wma", "wma", true, MIME_AUDIO_X_MS_WMA, MIME_AUDIO_WAVE, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
177 {"audio/x-mid", "mid", true, MIME_AUDIO_X_MID, MIME_AUDIO_MID, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
178 {"audio/x-ms-asf", "asf", true, MIME_AUDIO_X_MS_ASF, MIME_AUDIO_X_MS_ASF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
179 {"audio/x-xmf", "xmf", true, MIME_AUDIO_X_XMF, MIME_AUDIO_XMF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
182 {"image/gif", "gif", false, MIME_IMAGE_GIF, MIME_IMAGE_GIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x1d },
183 {"image/jpeg", "jpg"/*,jpeg,jpe,jpz"*/, false, MIME_IMAGE_JPEG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x1e },
184 {"image/jpg", "jpg", false, MIME_IMAGE_JPG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
185 {"image/tiff", "tif"/*,tiff"*/, false, MIME_IMAGE_TIFF, MIME_IMAGE_TIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x1f },
186 {"image/tif", "tif", false, MIME_IMAGE_TIF, MIME_IMAGE_TIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
187 {"image/png", "png"/*,pnz"*/, false, MIME_IMAGE_PNG, MIME_IMAGE_PNG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x20 },
188 {"image/wbmp", "wbmp", false, MIME_IMAGE_WBMP, MIME_IMAGE_WBMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
189 {"image/pjpeg", "jpg", false, MIME_IMAGE_PJPEG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
190 {"image/bmp", "bmp", false, MIME_IMAGE_BMP, MIME_IMAGE_BMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
191 {"image/svg+xml", "svg", false, MIME_IMAGE_SVG, MIME_IMAGE_SVG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
192 {"image/svg-xml", "svg", false, MIME_IMAGE_SVG1, MIME_IMAGE_SVG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
195 {"image/vnd.wap.wbmp", "wbmp", false, MIME_IMAGE_VND_WAP_WBMP, MIME_IMAGE_WBMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, 0x21 },
196 {"image/vnd.tmo.my5-gif", "gif", false, MIME_IMAGE_VND_TMO_GIF, MIME_IMAGE_GIF, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
197 {"image/vnd.tmo.my5-jpg", "jpg", false, MIME_IMAGE_VND_TMO_JPG, MIME_IMAGE_JPG, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
200 {"image/x-bmp", "bmp", false, MIME_IMAGE_X_BMP, MIME_IMAGE_BMP, MIME_APPLICATION_IMAGEVIEWER, MIME_MAINTYPE_IMAGE, UNDEFINED_BINARY },
203 {"message/rfc822", "elm", false, MIME_MESSAGE_RFC822, MIME_MESSAGE_RFC822, MIME_APPLICATION_NONE, MIME_MAINTYPE_MESSAGE, UNDEFINED_BINARY },
206 {"multipart/mixed", "", false, MIME_MULTIPART_MIXED, MIME_MULTIPART_MIXED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0c },
207 {"multipart/related", "", false, MIME_MULTIPART_RELATED, MIME_MULTIPART_RELATED, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
208 {"multipart/alternative", "", false, MIME_MULTIPART_ALTERNATIVE, MIME_MULTIPART_ALTERNATIVE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0f },
209 {"multipart/form-data", "", false, MIME_MULTIPART_FORM_DATA, MIME_MULTIPART_FORM_DATA, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0d },
210 {"multipart/byterange", "", false, MIME_MULTIPART_BYTERANGE, MIME_MULTIPART_BYTERANGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, 0x0e },
211 {"multipart/report", "", false, MIME_MULTIPART_REPORT, MIME_MULTIPART_REPORT, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
212 {"multipart/voice-message", "", false, MIME_MULTIPART_VOICE_MESSAGE, MIME_MULTIPART_VOICE_MESSAGE, MIME_APPLICATION_NONE, MIME_MAINTYPE_APPLICATION, UNDEFINED_BINARY },
215 {"text/txt", "", false, MIME_TEXT_TXT, MIME_TEXT_TXT, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
216 {"text/html", "html"/*,htm"*/, false, MIME_TEXT_HTML, MIME_TEXT_HTML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x02 },
217 {"text/plain", "txt" /*,vbm,url"*/, false, MIME_TEXT_PLAIN, MIME_TEXT_PLAIN, MIME_APPLICATION_PICSELVIEWER, MIME_MAINTYPE_TEXT, 0x03 },
218 {"text/css", "", false, MIME_TEXT_CSS, MIME_TEXT_CSS, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x3d },
219 {"text/xml", "", false, MIME_TEXT_XML, MIME_TEXT_XML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x28 },
220 {"text/iMelody", "imy", true, MIME_TEXT_IMELODY, MIME_TEXT_IMELODY, MIME_APPLICATION_SOUNDPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
221 {"text/calendar", "ics", true, MIME_TEXT_CALENDAR, MIME_TEXT_CALENDAR, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
224 {"text/vnd.wap.wmlscript", "", false, MIME_TEXT_VND_WAP_WMLSCRIPT, MIME_TEXT_VND_WAP_WMLSCRIPT, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x09 },
225 {"text/vnd.wap.wml", "wml", false, MIME_TEXT_VND_WAP_WML, MIME_TEXT_VND_WAP_WML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x08 },
226 {"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 },
227 {"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 },
228 {"text/vnd.wap.si", "", false, MIME_TEXT_VND_WAP_SI, MIME_TEXT_VND_WAP_SI, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2d },
229 {"text/vnd.wap.sl", "", false, MIME_TEXT_VND_WAP_SL, MIME_TEXT_VND_WAP_SL, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x2f },
230 {"text/vnd.wap.co", "", false, MIME_TEXT_VND_WAP_CO, MIME_TEXT_VND_WAP_CO, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x31 },
231 {"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 },
235 {"text/x-hdml", "", false, MIME_TEXT_X_HDML, MIME_TEXT_X_HDML, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, 0x04 },
236 {"text/x-vCalendar", "vcs", true, MIME_TEXT_X_VCALENDAR, MIME_TEXT_X_VCALENDAR, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x06 },
237 {"text/x-vCard", "vcf", true, MIME_TEXT_X_VCARD, MIME_TEXT_X_VCARD, MIME_APPLICATION_NONE, MIME_MAINTYPE_ETC, 0x07 },
238 {"text/x-iMelody", "imy", true, MIME_TEXT_X_IMELODY, MIME_TEXT_X_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
239 {"text/x-imelody", "imy", true, MIME_TEXT_X_IMELODY2, MIME_TEXT_X_IMELODY, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_AUDIO, UNDEFINED_BINARY },
240 {"text/x-vnote", "vnt", true, MIME_TEXT_X_VNOTE, MIME_TEXT_X_VNOTE, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
241 {"text/x-vtodo", "vts", true, MIME_TEXT_X_VTODO, MIME_TEXT_X_VNOTE, MIME_APPLICATION_NONE, MIME_MAINTYPE_TEXT, UNDEFINED_BINARY },
244 {"video/mpeg4", "mp4", true, MIME_VIDEO_MPEG4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
245 {"video/mp4", "mp4", true, MIME_VIDEO_MP4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
246 {"video/h263", ""/*,3gpp,mp4"*/, true, MIME_VIDEO_H263, MIME_VIDEO_H263, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
247 {"video/3gpp", "3gp"/*,3gpp"*/, true, MIME_VIDEO_3GPP, MIME_VIDEO_3GPP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
248 {"video/3gp", "3gp"/*,3gpp"*/, true, MIME_VIDEO_3GP, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
249 {"video/avi", "avi", false, MIME_VIDEO_AVI, MIME_VIDEO_AVI, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
250 {"video/sdp", "sdp", true, MIME_VIDEO_SDP, MIME_APPLICATION_SDP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
251 {"video/mp4v-es", "3gp", true, MIME_VIDEO_MP4_ES, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
252 {"video/mpeg", "3gp", true, MIME_VIDEO_MPEG, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
253 {"video/quicktime", "mov", true, MIME_VIDEO_MOV, MIME_VIDEO_3GP, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
256 {"video/vnd.rn-realvideo", "rm", true, MIME_VIDEO_VND_RN_REALVIDEO, MIME_VIDEO_VND_RN_REALVIDEO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
257 {"video/vnd.rn-realmedia", "rm", true, MIME_VIDEO_VND_RN_REALMEDIA, MIME_VIDEO_VND_RN_REALMEDIA, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
260 {"video/x-mp4", "mp4", true, MIME_VIDEO_X_MP4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
261 {"video/x-pv-mp4", "mp4", true, MIME_VIDEO_X_PV_MP4, MIME_VIDEO_MP4, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
262 {"video/x-pn-realvideo", "rv", true, MIME_VIDEO_X_PN_REALVIDEO, MIME_VIDEO_VND_RN_REALVIDEO, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
263 {"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 },
264 {"video/x-ms-wmv", "wmv", true, MIME_VIDEO_X_MS_WMV, MIME_VIDEO_X_MS_WMV, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
265 {"video/x-ms-asf", "asf", true, MIME_VIDEO_X_MS_ASF, MIME_VIDEO_X_MS_ASF, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY },
266 {"video/x-pv-pvx", "pvx", true, MIME_VIDEO_X_PV_PVX, MIME_VIDEO_X_PV_PVX, MIME_APPLICATION_MEDIAPLAYER, MIME_MAINTYPE_VIDEO, UNDEFINED_BINARY }
269 /********** MIME table information ***********/
270 static const int mimeTableIndex[] = {
280 static int mimeTableEnum[] =
284 MIME_APPLICATION_XML ,
285 MIME_APPLICATION_WML_XML ,
286 MIME_APPLICATION_XHTML_XML ,
287 MIME_APPLICATION_JAVA_VM ,
288 MIME_APPLICATION_SMIL ,
289 MIME_APPLICATION_JAVA_ARCHIVE ,
290 MIME_APPLICATION_JAVA ,
291 MIME_APPLICATION_OCTET_STREAM ,
292 MIME_APPLICATION_STUDIOM ,
293 MIME_APPLICATION_FUNMEDIA ,
294 MIME_APPLICATION_MSWORD ,
295 MIME_APPLICATION_PDF ,
296 MIME_APPLICATION_SDP ,
297 MIME_APPLICATION_RAM ,
298 MIME_APPLICATION_ASTERIC ,
301 MIME_APPLICATION_VND_WAP_XHTMLXML ,
302 MIME_APPLICATION_VND_WAP_WMLC ,
303 MIME_APPLICATION_VND_WAP_WMLSCRIPTC ,
304 MIME_APPLICATION_VND_WAP_WTA_EVENTC ,
305 MIME_APPLICATION_VND_WAP_UAPROF ,
306 MIME_APPLICATION_VND_WAP_SIC ,
307 MIME_APPLICATION_VND_WAP_SLC ,
308 MIME_APPLICATION_VND_WAP_COC ,
309 MIME_APPLICATION_VND_WAP_SIA ,
310 MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML ,
311 MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA ,
312 MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES ,
313 MIME_APPLICATION_VND_WAP_MULTIPART_MIXED ,
314 MIME_APPLICATION_VND_WAP_MULTIPART_RELATED ,
315 MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE ,
316 MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC ,
317 MIME_APPLICATION_VND_WAP_WBXML ,
318 MIME_APPLICATION_VND_OMA_DD_XML ,
319 MIME_APPLICATION_VND_OMA_DRM_MESSAGE ,
320 MIME_APPLICATION_VND_OMA_DRM_CONTENT ,
321 MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML ,
322 MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML ,
323 MIME_APPLICATION_VND_OMA_DRM_RO_XML ,
324 MIME_APPLICATION_VND_OMA_DRM_DCF ,
325 MIME_APPLICATION_VND_OMA_ROAPPDU_XML ,
326 MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML,
327 MIME_APPLICATION_VND_SMAF ,
328 MIME_APPLICATION_VND_RN_REALMEDIA ,
329 MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE ,
330 MIME_APPLICATION_VND_SAMSUNG_THEME ,
331 MIME_APPLICATION_VND_EXCEL ,
332 MIME_APPLICATION_VND_POWERPOINT,
333 MIME_APPLICATION_VND_MSWORD,
336 MIME_APPLICATION_X_HDMLC ,
337 MIME_APPLICATION_X_X968_USERCERT ,
338 MIME_APPLICATION_X_WWW_FORM_URLENCODED ,
339 MIME_APPLICATION_X_SMAF ,
340 MIME_APPLICATION_X_FLASH ,
341 MIME_APPLICATION_X_EXCEL ,
342 MIME_APPLICATION_X_POWERPOINT ,
358 MIME_AUDIO_IMELODY2 ,
367 MIME_AUDIO_MP4A_LATM ,
373 MIME_AUDIO_MOBILE_XMF,
377 MIME_AUDIO_VND_RN_REALAUDIO ,
387 MIME_AUDIO_X_IMELODY ,
389 MIME_AUDIO_X_MPEGAUDIO ,
390 MIME_AUDIO_X_PN_REALAUDIO ,
391 MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO ,
392 MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE ,
395 MIME_AUDIO_X_MS_WMA ,
397 MIME_AUDIO_X_MS_ASF ,
412 MIME_IMAGE_VND_WAP_WBMP ,
413 MIME_IMAGE_VND_TMO_GIF,
414 MIME_IMAGE_VND_TMO_JPG,
418 MIME_MESSAGE_RFC822 ,
421 MIME_MULTIPART_MIXED ,
422 MIME_MULTIPART_RELATED ,
423 MIME_MULTIPART_ALTERNATIVE ,
424 MIME_MULTIPART_FORM_DATA ,
425 MIME_MULTIPART_BYTERANGE ,
426 MIME_MULTIPART_REPORT ,
427 MIME_MULTIPART_VOICE_MESSAGE ,
437 MIME_TEXT_VND_WAP_WMLSCRIPT ,
438 MIME_TEXT_VND_WAP_WML ,
439 MIME_TEXT_VND_WAP_WTA_EVENT ,
440 MIME_TEXT_VND_WAP_CONNECTIVITY_XML ,
441 MIME_TEXT_VND_WAP_SI ,
442 MIME_TEXT_VND_WAP_SL ,
443 MIME_TEXT_VND_WAP_CO ,
444 MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR ,
446 MIME_TEXT_X_VCALENDAR ,
448 MIME_TEXT_X_IMELODY ,
449 MIME_TEXT_X_IMELODY2 ,
463 MIME_VIDEO_VND_RN_REALVIDEO ,
464 MIME_VIDEO_VND_RN_REALMEDIA ,
466 MIME_VIDEO_X_PV_MP4 ,
467 MIME_VIDEO_X_PN_REALVIDEO ,
468 MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO ,
469 MIME_VIDEO_X_MS_WMV ,
471 MIME_VIDEO_X_PV_PVX ,
473 MIME_UNKNOWN /* MIME_MAX */
477 #define MIME_MAX_NUM 167
479 #define MIME_SUB_TYPE_VND 1
480 #define MIME_SUB_TYPE_X 2
482 int __MimeGetTableIndexInt(MimeType mime);
483 int __MimeGetTableIndexString(const char *szMime);
484 MimeMainType __MimeGetMainTypeName(const char *szType);
487 * This function checks main type of a MIME.
489 * @param mime [in] Enumeration number for a MIME type.
490 * @return This function returns main type of a MIME.
492 MimeMainType MimeGetMainTypeInt(MimeType mime)
496 index = __MimeGetTableIndexInt(mime);
497 if (index == MIME_UNKNOWN)
498 return MIME_MAINTYPE_ETC;
500 return mimeTable[index].mainType;
505 * This function returns a extension name for a specified MIME.
507 * @param mime [in] Enumeration number for a MIME type.
508 * @return This function returns Extension string.
510 char *MimeGetExtFromMimeInt(MimeType mime)
514 index = __MimeGetTableIndexInt(mime);
515 if (index == MIME_UNKNOWN)
518 return (char *)mimeTable[index].szExt;
522 * This function returns index number in MIME definition table with MIME enumeration.
525 int __MimeGetTableIndexInt(MimeType mime)
532 if (mime == MIME_UNKNOWN)
535 type = (mime & 0xf000) >> 12;
536 subtype = (mime & 0x0f00) >> 8;
537 index = (mime & 0x003f);
539 /* If 'type' is zero, mimeTableIndex's array value have a minus value */
540 /* If 'type' is zero, mime type is '\*\/\*' */
544 tableIndex = mimeTableIndex[(type - 1) * 3 + subtype] + index;
550 * This function returns index number in MIME definition table with MIME string.
553 int __MimeGetTableIndexString(const char *szMime)
559 char *szTmpStart = NULL;
565 char *szMIMEType = NULL;
568 if (szMime == NULL) {
569 MSG_DEBUG("szMime is NULL");
573 szMIMEType = (char *)malloc(strlen(szMime) + 1);
575 if (szMIMEType == NULL) {
576 MSG_DEBUG("szMime is NULL");
580 memset(szMIMEType, 0, strlen(szMime) + 1);
582 if (!strcmp(szMime, "*/*")) {
587 strncpy(szMIMEType, szMime, strlen(szMime));
591 szTmpStart = szMIMEType;
592 len = strlen(szTmpStart);
604 type = __MimeGetMainTypeName(szType);
605 szTmpStart = &szTmpStart[i];
614 len = strlen(szTmpStart);
625 if (!strcasecmp(szSubType, "vnd"))
626 subtype = MIME_SUB_TYPE_VND;
628 } else if (c == '-') {
630 if (!strcasecmp(szSubType, "x"))
631 subtype = MIME_SUB_TYPE_X;
639 start = mimeTableIndex[type * 3 + subtype];
641 if (type == MIME_MAINTYPE_VIDEO && subtype == MIME_SUB_TYPE_X)
644 end = mimeTableIndex[type * 3 + subtype + 1];
646 if (start == end && type < MIME_MAINTYPE_VIDEO) {
647 end = mimeTableIndex[(type + 1) * 3 + subtype + 1];
651 for (i = start; i < end; i++) {
652 if (i >= MIME_MAX_NUM)
655 if (!strcasecmp(mimeTable[i].szMIME, szMime)) {
666 * This function returns main type of MIME : Internal function.
668 MimeMainType __MimeGetMainTypeName(const char *szType)
671 return MIME_MAINTYPE_APPLICATION;
673 if (!strcasecmp(szType, "application"))
674 return MIME_MAINTYPE_APPLICATION;
675 else if (!strcasecmp(szType, "audio"))
676 return MIME_MAINTYPE_AUDIO;
677 else if (!strcasecmp(szType, "image"))
678 return MIME_MAINTYPE_IMAGE;
679 else if (!strcasecmp(szType, "message"))
680 return MIME_MAINTYPE_MESSAGE;
681 else if (!strcasecmp(szType, "multipart"))
682 return MIME_MAINTYPE_MULTIPART;
683 else if (!strcasecmp(szType, "text"))
684 return MIME_MAINTYPE_TEXT;
685 else if (!strcasecmp(szType, "video"))
686 return MIME_MAINTYPE_VIDEO;
688 return MIME_MAINTYPE_APPLICATION;
693 /* MimeString -> MimeInt */
694 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr)
696 int index = __MimeGetTableIndexString(szMimeStr);
697 if (index == MIME_UNKNOWN) {
700 return (MimeType)mimeTableEnum[index];
704 /* MimeInt -> MimeString */
705 char *MimeGetMimeStringFromMimeInt(int mimeType)
707 int idx = __MimeGetTableIndexInt((MimeType)mimeType);
709 if (idx == MIME_UNKNOWN)
712 return (char *)mimeTable[idx].szMIME;
716 /* BinaryCode -> MimeInt */
717 MimeType MimeGetMimeIntFromBi(int binCode)
721 if (binCode < 0x00 || binCode > 0x4b)
724 for (index = 0; index < MIME_MAX_NUM; index++) {
725 if (binCode == mimeTable[index].binary)
726 return (MimeType)mimeTableEnum[index];
732 /* Mimeint -> Binary Value */
733 int MimeGetBinaryValueFromMimeInt(MimeType mime)
737 index = __MimeGetTableIndexInt(mime);
738 if (index == MIME_UNKNOWN)
739 return UNDEFINED_BINARY;
741 return mimeTable[index].binary;
748 const char *szContentType;
751 #define EXT_TABLE_SIZE (58)
753 const ExtTableItem extTable[EXT_TABLE_SIZE] = {
755 {"txt", MIME_MAINTYPE_TEXT, MIME_TEXT_PLAIN, "text/plain"},
756 {"html", MIME_MAINTYPE_TEXT, MIME_TEXT_HTML, "text/html"},
757 {"xhtml", MIME_MAINTYPE_TEXT, MIME_APPLICATION_XHTML_XML, "application/xhtml+xml"},
758 {"vcs", MIME_MAINTYPE_TEXT, MIME_TEXT_X_VCALENDAR, "text/x-vCalendar"},
759 {"vcf", MIME_MAINTYPE_TEXT, MIME_TEXT_X_VCARD, "text/x-vCard"},
760 {"vnt", MIME_MAINTYPE_TEXT, MIME_TEXT_X_VNOTE, "text/x-vnote"},
761 {"vts", MIME_MAINTYPE_TEXT, MIME_TEXT_X_VTODO, "text/x-vtodo"},
762 {"ics", MIME_MAINTYPE_TEXT, MIME_TEXT_CALENDAR, "text/calendar"},
765 {"gif", MIME_MAINTYPE_IMAGE, MIME_IMAGE_GIF, "image/gif"},
766 /* {"jpg", MIME_MAINTYPE_IMAGE, MIME_IMAGE_JPG, "image/jpg"}, */
767 {"jpg", MIME_MAINTYPE_IMAGE, MIME_IMAGE_JPEG, "image/jpeg"},
768 {"jpeg", MIME_MAINTYPE_IMAGE, MIME_IMAGE_JPEG, "image/jpeg"},
769 {"tiff", MIME_MAINTYPE_IMAGE, MIME_IMAGE_TIFF, "image/tiff"},
770 {"tif", MIME_MAINTYPE_IMAGE, MIME_IMAGE_TIF, "image/tif"},
771 {"png", MIME_MAINTYPE_IMAGE, MIME_IMAGE_PNG, "image/png"},
772 {"wbmp", MIME_MAINTYPE_IMAGE, MIME_IMAGE_VND_WAP_WBMP, "image/vnd.wap.wbmp"},
773 {"bmp", MIME_MAINTYPE_IMAGE, MIME_IMAGE_BMP, "image/bmp"},
774 {"svg", MIME_MAINTYPE_IMAGE, MIME_IMAGE_SVG, "image/svg+xml"},
777 {"snd", MIME_MAINTYPE_AUDIO, MIME_AUDIO_BASIC, "audio/basic"},
778 {"amr", MIME_MAINTYPE_AUDIO, MIME_AUDIO_AMR, "audio/amr"},
779 {"m4a", MIME_MAINTYPE_AUDIO, MIME_AUDIO_M4A, "audio/m4a"},
780 {"3gp", MIME_MAINTYPE_AUDIO, MIME_AUDIO_3GPP, "audio/3gpp"},
781 {"3gpp", MIME_MAINTYPE_AUDIO, MIME_AUDIO_3GPP, "audio/3gpp"},
782 {"mp3", MIME_MAINTYPE_AUDIO, MIME_AUDIO_MPEG, "audio/mpeg"},
783 {"aac", MIME_MAINTYPE_AUDIO, MIME_AUDIO_AAC, "audio/aac"},
784 {"imy", MIME_MAINTYPE_AUDIO, MIME_AUDIO_IMELODY, "audio/imelody"},
785 {"mid", MIME_MAINTYPE_AUDIO, MIME_AUDIO_MID, "audio/mid"},
786 {"mmf", MIME_MAINTYPE_AUDIO, MIME_AUDIO_MMF, "audio/mmf"},
787 {"spm", MIME_MAINTYPE_AUDIO, MIME_AUDIO_SP_MIDI, "audio/sp-midi"},
788 {"wav", MIME_MAINTYPE_AUDIO, MIME_AUDIO_WAV, "audio/wav"},
789 {"mp4", MIME_MAINTYPE_AUDIO, MIME_AUDIO_MP4, "audio/mp4"},
790 {"wma", MIME_MAINTYPE_AUDIO, MIME_AUDIO_X_MS_WMA, "audio/x-ms-wma"},
791 {"rm", MIME_MAINTYPE_AUDIO, MIME_AUDIO_VND_RN_REALAUDIO, "audio/vnd.rn-realaudio"},
792 {"ra", MIME_MAINTYPE_AUDIO, MIME_AUDIO_VND_RN_REALAUDIO, "audio/vnd.rn-realaudio"},
793 {"mxmf", MIME_MAINTYPE_AUDIO, MIME_AUDIO_MOBILE_XMF, "audio/mobile-xmf"},
794 {"ogg", MIME_MAINTYPE_AUDIO, MIME_AUDIO_OGG, "audio/ogg"},
797 {"3gp", MIME_MAINTYPE_VIDEO, MIME_VIDEO_3GPP, "video/3gpp"},
798 {"3gpp", MIME_MAINTYPE_VIDEO, MIME_VIDEO_3GPP, "video/3gpp"},
799 {"mp4", MIME_MAINTYPE_VIDEO, MIME_VIDEO_MP4, "video/mp4"},
800 {"rm", MIME_MAINTYPE_VIDEO, MIME_VIDEO_VND_RN_REALVIDEO, "video/vnd.rn-realvideo"},
801 {"rv", MIME_MAINTYPE_VIDEO, MIME_VIDEO_VND_RN_REALVIDEO, "video/vnd.rn-realvideo"},
802 {"avi", MIME_MAINTYPE_VIDEO, MIME_VIDEO_AVI, "video/avi"},
803 {"asf", MIME_MAINTYPE_VIDEO, MIME_VIDEO_X_MS_ASF, "video/x-ms-asf"},
804 {"mov", MIME_MAINTYPE_VIDEO, MIME_VIDEO_MOV, "video/quicktime"},
807 {"smil", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_SMIL, "application/smil"},
808 {"rm", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_RN_REALMEDIA, "application/vnd.rn-realmedia"},
809 {"ram", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_RAM, "application/ram"},
810 {"ppt", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_POWERPOINT, "application/vnd.ms-powerpoint"},
811 {"xls", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_EXCEL, "application/vnd.ms-excel"},
812 {"doc", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_MSWORD, "applcation/vnd.ms-word"},
813 {"pdf", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_PDF, "application/pdf"},
814 {"swf", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_X_FLASH, "application/x-shockwave-flash"},
815 {"dm", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_MESSAGE, "application/vnd.oma.drm.message"},
816 {"dcf", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_CONTENT, "application/vnd.oma.drm.content"},
817 {"dd", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DD_XML, "application/vnd.oma.dd+xml"},
818 {"ro", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML, "application/vnd.oma.drm.rights+xml"},
819 {"ro", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML, "application/vnd.oma.drm.rights+wbxml"},
820 {"oro", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_RO_XML, "application/vnd.oma.drm.ro+xml"},
821 {"odf", MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_DCF, "application/vnd.oma.drm.dcf"},
824 /* GetMimeType from File Extension */
825 bool MsgGetMimeTypeFromExt(MimeMainType mainType, const char *pExt, MimeType *pMimeType, const char **ppszMimeType)
827 const ExtTableItem *matchedItem = NULL;
832 if (pMimeType == NULL && ppszMimeType == NULL)
835 int extTableMainSize = sizeof(extTable)/sizeof(ExtTableItem);
837 for (int i = 0; i < extTableMainSize; i++) {
838 if (strcasecmp(extTable[i].szExt, pExt) == 0) {
839 matchedItem = &extTable[i];
841 if (mainType == extTable[i].mainType) {
848 MSG_DEBUG("Found ext = [%s], mainType = [%d], mimeType = [0x%04x], ContentType = [%s]"
850 , matchedItem->mainType
851 , matchedItem->enumMime
852 , matchedItem->szContentType);
855 *pMimeType = (MimeType)matchedItem->enumMime;
858 *ppszMimeType = matchedItem->szContentType;
866 bool MsgGetMimeTypeFromFileName(MimeMainType mainType, const char *pFileName, MimeType *pMimeType, const char **ppszMimeType)
868 const char *pExt = NULL;
870 if (pFileName == NULL)
873 if (pMimeType == NULL && ppszMimeType == NULL)
876 pExt = strrchr(pFileName, '.');
878 if (pExt == NULL || *(pExt + 1) == '\0')
883 return MsgGetMimeTypeFromExt(mainType, pExt, pMimeType, ppszMimeType);
886 bool MsgGetMainTypeFromMetaData(const char *pFileName, MimeMainType *mainType)
888 char *video_track_cnt = NULL;
889 char *audio_track_cnt = NULL;
891 if (pFileName == NULL)
894 int ret = METADATA_EXTRACTOR_ERROR_NONE;
895 metadata_extractor_h metadata = NULL;
897 ret = metadata_extractor_create(&metadata);
898 if(ret != METADATA_EXTRACTOR_ERROR_NONE) {
899 MSG_ERR("Fail metadata_extractor_create [%d]", ret);
903 ret = metadata_extractor_set_path(metadata, pFileName);
904 if(ret != METADATA_EXTRACTOR_ERROR_NONE) {
905 MSG_ERR("Fail metadata_extractor_set_path [%d]", ret);
906 metadata_extractor_destroy(metadata);
910 metadata_extractor_get_metadata(metadata, METADATA_HAS_VIDEO, &video_track_cnt);
911 if (video_track_cnt) {
912 MSG_DEBUG("video_track_cnt = [%s]", video_track_cnt);
913 if (atoi(video_track_cnt) > 0) {
914 metadata_extractor_destroy(metadata);
915 free(video_track_cnt);
916 video_track_cnt = NULL;
918 *mainType = MIME_MAINTYPE_VIDEO;
921 free(video_track_cnt);
922 video_track_cnt = NULL;
926 metadata_extractor_get_metadata(metadata, METADATA_HAS_AUDIO, &audio_track_cnt);
927 if (audio_track_cnt) {
928 MSG_DEBUG("audio_track_cnt = [%s]", audio_track_cnt);
929 if (atoi(audio_track_cnt) > 0) {
930 metadata_extractor_destroy(metadata);
931 free(audio_track_cnt);
932 audio_track_cnt = NULL;
934 *mainType = MIME_MAINTYPE_AUDIO;
937 free(audio_track_cnt);
938 audio_track_cnt = NULL;
942 metadata_extractor_destroy(metadata);