Increase memory limit
[platform/core/messaging/msg-service.git] / utils / MsgUtilMime.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15 */
16
17 #include <string>
18 #include <stdlib.h>
19 #include <metadata_extractor.h>
20 #include "MsgUtilMime.h"
21 #include "MsgDebug.h"
22
23 #define MIME_MAX_NUM    167
24 #define EXT_MAX 68
25 #define MIME_SUB_TYPE_VND       1
26 #define MIME_SUB_TYPE_X         2
27
28 typedef enum _MimeAppType {
29         MIME_APPLICATION_NONE,
30
31         MIME_APPLICATION_CAMERA,
32         MIME_APPLICATION_VIDEORECORDER,
33
34         MIME_APPLICATION_IMAGEVIEWER,
35         MIME_APPLICATION_FLASHVIEWER,
36         MIME_APPLICATION_IMAGEEDITOR,
37         MIME_APPLICATION_THEMEVIEWER,
38
39         MIME_APPLICATION_SOUNDPLAYER,
40         MIME_APPLICATION_MEDIAPLAYER,
41         MIME_APPLICATION_VOICEMEMO,
42
43         MIME_APPLICATION_PICSELVIEWER,
44
45         MIME_APPLICATION_CONTACT,
46         MIME_APPLICATION_ORGANIZER,
47
48         MIME_APPLICATION_MAX
49 } MimeAppType;
50
51
52 typedef struct _MimeTable {
53         const char *szMIME;
54         const char *szExt;
55         bool bDownloadable;
56         MimeType mime;                  /* index of mime type */
57         MimeType contentType;   /* representative mime type */
58         MimeAppType appType;
59         MimeMainType mainType;
60         int binary;
61 } MimeTable;
62
63 /**************************************************     MIME definition     ***************************************************/
64 static const MimeTable mimeTable[] = {
65         /* 0 */
66         {"*/*",                                                                                                 "",                                     false,          MIME_ASTERISK,                                                                  MIME_ASTERISK,                                                  MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                              UNDEFINED_BINARY        },
67
68     /* 1 */
69         {"application/xml",                                                                     "",                                     false,          MIME_APPLICATION_XML,                                                   MIME_APPLICATION_XML,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x27    },
70         {"application/wml+xml",                                                         "",                                     false,          MIME_APPLICATION_WML_XML,                                               MIME_APPLICATION_WML_XML,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x3c    },
71         {"application/xhtml+xml",                                                               "xhtml",                        false,          MIME_APPLICATION_XHTML_XML,                                             MIME_APPLICATION_XHTML_XML,                             MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x3b    },
72         {"application/java-vm",                                                         "",                                     false,          MIME_APPLICATION_JAVA_VM,                                               MIME_APPLICATION_JAVA_VM,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x11    },
73         {"application/smil",                                                                    "smil",                         true,           MIME_APPLICATION_SMIL,                                                  MIME_APPLICATION_SMIL,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
74         {"application/java-archive",                                                    "jar",                          true,           MIME_APPLICATION_JAVA_ARCHIVE,                                  MIME_APPLICATION_JAVA_ARCHIVE,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
75         {"application/java",                                                                    "jar",                          true,           MIME_APPLICATION_JAVA,                                                  MIME_APPLICATION_JAVA,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
76         {"application/octet-stream",                                                    "",                                     false,          MIME_APPLICATION_OCTET_STREAM,                                  MIME_APPLICATION_OCTET_STREAM,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
77         {"application/studiom",                                                         "smp",                          true,           MIME_APPLICATION_STUDIOM,                                               MIME_APPLICATION_STUDIOM,                               MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
78         {"application/funMedia",                                                                "smp",                          true,           MIME_APPLICATION_FUNMEDIA,                                              MIME_APPLICATION_FUNMEDIA,                              MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
79         {"application/msword",                                                                  "doc",                          true,           MIME_APPLICATION_MSWORD,                                                MIME_APPLICATION_MSWORD,                                MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
80         {"application/pdf",                                                                     "pdf",                          true,           MIME_APPLICATION_PDF,                                                   MIME_APPLICATION_PDF,                                   MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
81         {"application/sdp",                                                                     "sdp",                          true,           MIME_APPLICATION_SDP,                                                   MIME_APPLICATION_SDP,                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,    UNDEFINED_BINARY        },
82         {"application/ram",                                                                     "ram",                          true,           MIME_APPLICATION_RAM,                                                   MIME_APPLICATION_RAM,                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
83         {"application/*",                                                                               "",                                     false,          MIME_APPLICATION_ASTERIC,                                               MIME_APPLICATION_ASTERIC,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x10    },
84
85         /* 16 */
86         {"application/vnd.wap.xhtml+xml",                                               "",                                     false,          MIME_APPLICATION_VND_WAP_XHTMLXML,                              MIME_APPLICATION_VND_WAP_XHTMLXML,              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x45    },
87         {"application/vnd.wap.wmlc",                                                    "",                                     false,          MIME_APPLICATION_VND_WAP_WMLC,                                  MIME_APPLICATION_VND_WAP_WMLC,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x14    },
88         {"application/vnd.wap.wmlscriptc",                                              "",                                     false,          MIME_APPLICATION_VND_WAP_WMLSCRIPTC,                    MIME_APPLICATION_VND_WAP_WMLSCRIPTC,    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x15    },
89         {"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    },
90         {"application/vnd.wap.uaprof",                                                  "",                                     false,          MIME_APPLICATION_VND_WAP_UAPROF,                                MIME_APPLICATION_VND_WAP_UAPROF,                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x17    },
91         {"application/vnd.wap.sic",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_SIC,                                   MIME_APPLICATION_VND_WAP_SIC,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2e    },
92         {"application/vnd.wap.slc",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_SLC,                                   MIME_APPLICATION_VND_WAP_SLC,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x30    },
93         {"application/vnd.wap.coc",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_COC,                                   MIME_APPLICATION_VND_WAP_COC,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x32    },
94         {"application/vnd.wap.sia",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_SIA,                                   MIME_APPLICATION_VND_WAP_SIA,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x34    },
95         {"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        },
96         {"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    },
97         {"application/vnd.wap.multipart.byteranges",                    "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES,  MIME_MULTIPART_BYTERANGE,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x25    },
98         {"application/vnd.wap.multipart.mixed",                         "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_MIXED,               MIME_MULTIPART_MIXED,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x23    },
99         {"application/vnd.wap.multipart.related",                               "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_RELATED,             MIME_MULTIPART_RELATED,                                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x33    },
100         {"application/vnd.wap.multipart.alternative",                   "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE, MIME_MULTIPART_ALTERNATIVE,                                     MIME_APPLICATION_NONE,                          MIME_MAINTYPE_APPLICATION,      0x26    },
101         {"application/vnd.wap.multipart.*",                                     "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC,             MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC,             MIME_APPLICATION_NONE,                  MIME_MAINTYPE_APPLICATION,      0x22    },
102         {"application/vnd.wap.wbxml",                                                   "",                                     false,          MIME_APPLICATION_VND_WAP_WBXML,                                 MIME_APPLICATION_VND_WAP_WBXML,                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x29    },
103         {"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    },
104         {"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    },
105         {"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    },
106         {"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    },
107         {"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    },
108         {"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    },
109         {"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    },
110         {"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    },
111         {"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    },
112         {"application/vnd.smaf",                                                                "mmf",                          true,           MIME_APPLICATION_VND_SMAF,                                              MIME_APPLICATION_X_SMAF,                                MIME_APPLICATION_SOUNDPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
113         {"application/vnd.rn-realmedia",                                                "rm",                           true,           MIME_APPLICATION_VND_RN_REALMEDIA,                              MIME_APPLICATION_VND_RN_REALMEDIA,              MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
114         {"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        },
115         {"application/vnd.samsung.theme",                                               "thm",                          true,           MIME_APPLICATION_VND_SAMSUNG_THEME,                             MIME_APPLICATION_VND_SAMSUNG_THEME,             MIME_APPLICATION_THEMEVIEWER,                   MIME_MAINTYPE_THEME,            UNDEFINED_BINARY        },
116         {"application/vnd.ms-excel",                                                    "xls",                          true,           MIME_APPLICATION_VND_EXCEL,                                             MIME_APPLICATION_X_EXCEL,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
117         {"application/vnd.ms-powerpoint",                                               "ppt",                          true,           MIME_APPLICATION_VND_POWERPOINT,                                MIME_APPLICATION_VND_POWERPOINT,                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
118         {"applcation/vnd.ms-word",                                                              "doc",                          true,           MIME_APPLICATION_VND_MSWORD,                                    MIME_APPLICATION_MSWORD,                                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
119
120         /* 49 */
121         {"application/x-hdmlc",                                                         "",                                     false,          MIME_APPLICATION_X_HDMLC,                                               MIME_APPLICATION_X_HDMLC,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x13    },
122         {"application/x-x968-user-cert",                                                "",                                     false,          MIME_APPLICATION_X_X968_USERCERT,                               MIME_APPLICATION_X_X968_USERCERT,               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2c    },
123         {"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    },
124         {"application/x-smaf",                                                                  "mmf",                          true,           MIME_APPLICATION_X_SMAF,                                                MIME_APPLICATION_X_SMAF,                                MIME_APPLICATION_SOUNDPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
125         {"application/x-shockwave-flash",                                               "swf",                          true,           MIME_APPLICATION_X_FLASH,                                               MIME_APPLICATION_X_FLASH,                               MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
126         {"application/x-msexcel",                                                               "xls",                          true,           MIME_APPLICATION_X_EXCEL,                                               MIME_APPLICATION_X_EXCEL,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
127         {"application/x-mspowerpoint",                                                  "ppt",                          true,           MIME_APPLICATION_X_POWERPOINT,                                  MIME_APPLICATION_X_POWERPOINT,                  MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
128
129
130         /* 56 */
131         {"audio/basic",                                                                         "snd"/*,au"*/,          false,          MIME_AUDIO_BASIC,                                                               MIME_AUDIO_BASIC,                                               MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
132         {"audio/mpeg",                                                                                  "mp3",                          true,           MIME_AUDIO_MPEG,                                                                MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
133         {"audio/mp3",                                                                                   "mp3",                          true,           MIME_AUDIO_MP3,                                                                 MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
134         {"audio/mpg3",                                                                                  "mp3",                          true,           MIME_AUDIO_MPG3,                                                                MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
135         {"audio/mpeg3",                                                                         "mp3",                          true,           MIME_AUDIO_MPEG3,                                                               MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
136         {"audio/mpg",                                                                                   "mp3",                          true,           MIME_AUDIO_MPG,                                                                 MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
137         {"audio/aac",                                                                                   "aac",                          true,           MIME_AUDIO_AAC,                                                                 MIME_AUDIO_AAC,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
138         {"audio/g72",                                                                                   "aac",                          true,           MIME_AUDIO_G72,                                                                 MIME_AUDIO_AAC,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
139         {"audio/amr",                                                                                   "amr",                          true,           MIME_AUDIO_AMR,                                                                 MIME_AUDIO_AMR,                                                 MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
140         {"audio/amr-wb",                                                                                "amr",                          true,           MIME_AUDIO_AMR_WB,                                                              MIME_AUDIO_AMR_WB,                                              MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
141         {"audio/mmf",                                                                                   "mmf",                          true,           MIME_AUDIO_MMF,                                                                 MIME_AUDIO_MMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
142         {"audio/smaf",                                                                                  "mmf",                          true,           MIME_AUDIO_SMAF,                                                                MIME_AUDIO_SMAF,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
143         {"audio/imelody",                                                                               "imy",                          true,           MIME_AUDIO_IMELODY,                                                             MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
144         {"audio/iMelody",                                                                               "imy",                          true,           MIME_AUDIO_IMELODY2,                                                            MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
145         {"audio/melody",                                                                                "imy",                          true,           MIME_AUDIO_MELODY,                                                              MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
146         {"audio/mid",                                                                                   "mid",                          true,           MIME_AUDIO_MID,                                                                 MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
147         {"audio/midi",                                                                                  "mid"/*,midi"*/,        true,           MIME_AUDIO_MIDI,                                                                MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
148         {"audio/sp-midi",                                                                               "spm"/*,midi"*/,        true,           MIME_AUDIO_SP_MIDI,                                                             MIME_AUDIO_SP_MIDI,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
149         {"audio/wave",                                                                                  "wav",                          true,           MIME_AUDIO_WAVE,                                                                MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
150         {"audio/wav",                                                                                   "wav",                          true,           MIME_AUDIO_WAV,                                                         MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
151         {"audio/3gpp",                                                                                  "3gp",                          true,           MIME_AUDIO_3GPP,                                                                MIME_AUDIO_3GPP,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
152         {"audio/mp4",                                                                                   "mp4",                          true,           MIME_AUDIO_MP4,                                                                 MIME_AUDIO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
153         {"audio/MP4A-LATM",                                                                     "mp4",                          true,           MIME_AUDIO_MP4A_LATM,                                                   MIME_AUDIO_MP4A_LATM,                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
154         {"audio/m4a",                                                                                   "m4a",                          true,           MIME_AUDIO_M4A,                                                                 MIME_AUDIO_M4A,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
155         {"audio/mpeg4",                                                                         "mp4",                          true,           MIME_AUDIO_MPEG4,                                                               MIME_AUDIO_MPEG4,                                               MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
156         {"audio/wma",                                                                                   "wma",                          true,           MIME_AUDIO_WMA,                                                                 MIME_AUDIO_WMA,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
157         {"audio/xmf",                                                                                   "xmf",                          true,           MIME_AUDIO_XMF,                                                                 MIME_AUDIO_XMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
158         {"audio/imy",                                                                                   "imy",                          true,           MIME_AUDIO_IMY,                                                                 MIME_AUDIO_IMY,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
159         {"audio/mobile-xmf",                                                                    "mxmf",                         true,           MIME_AUDIO_MOBILE_XMF,                                                  MIME_AUDIO_MOBILE_XMF,                                          MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
160         {"audio/ogg",                                                                                   "ogg",                          true,           MIME_AUDIO_OGG,                                                         MIME_AUDIO_OGG,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
161
162         /* 86 */
163         {"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        },
164
165         /* 87 */
166         {"audio/x-mpeg",                                                                                "mp3",                          true,           MIME_AUDIO_X_MPEG,                                                              MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
167         {"audio/x-mp3",                                                                         "mp3",                          true,           MIME_AUDIO_X_MP3,                                                               MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
168         {"audio/x-mpeg3",                                                                               "mp3",                          true,           MIME_AUDIO_X_MPEG3,                                                             MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
169         {"audio/x-mpg",                                                                         "mp3",                          true,           MIME_AUDIO_X_MPG,                                                               MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
170         {"audio/x-amr",                                                                         "amr",                          true,           MIME_AUDIO_X_AMR,                                                               MIME_AUDIO_AMR,                                                 MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
171         {"audio/x-mmf",                                                                         "mmf",                          true,           MIME_AUDIO_X_MMF,                                                               MIME_AUDIO_MMF,                                                 MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
172         {"audio/x-smaf",                                                                                "mmf",                          true,           MIME_AUDIO_X_SMAF,                                                              MIME_AUDIO_SMAF,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
173         {"audio/x-iMelody",                                                                     "imy",                          true,           MIME_AUDIO_X_IMELODY,                                                   MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
174         {"audio/x-midi",                                                                                "mid"/*,midi"*/,        true,           MIME_AUDIO_X_MIDI,                                                              MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
175         {"audio/x-mpegaudio",                                                                   "mp3",                          true,           MIME_AUDIO_X_MPEGAUDIO,                                                 MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
176         {"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        },
177         {"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        },
178         {"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        },
179         {"audio/x-wave",                                                                                "wav",                          true,           MIME_AUDIO_X_WAVE,                                                              MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
180         {"audio/x-wav",                                                                         "wav",                          true,           MIME_AUDIO_X_WAV,                                                               MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
181         {"audio/x-ms-wma",                                                                              "wma",                          true,           MIME_AUDIO_X_MS_WMA,                                                    MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
182         {"audio/x-mid",                                                                         "mid",                          true,           MIME_AUDIO_X_MID,                                                               MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
183         {"audio/x-ms-asf",                                                                              "asf",                          true,           MIME_AUDIO_X_MS_ASF,                                                    MIME_AUDIO_X_MS_ASF,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
184         {"audio/x-xmf",                                                                         "xmf",                          true,           MIME_AUDIO_X_XMF,                                                               MIME_AUDIO_XMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
185
186         /* 106 */
187         {"image/gif",                                                                                   "gif",                          false,          MIME_IMAGE_GIF,                                                                 MIME_IMAGE_GIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    0x1d    },
188         {"image/jpeg",                                                                                  "jpg"/*,jpeg,jpe,jpz"*/,        false,  MIME_IMAGE_JPEG,                                                        MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            0x1e    },
189         {"image/jpg",                                                                                   "jpg",                          false,          MIME_IMAGE_JPG,                                                                 MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
190         {"image/tiff",                                                                                  "tif"/*,tiff"*/,        false,          MIME_IMAGE_TIFF,                                                                MIME_IMAGE_TIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    0x1f    },
191         {"image/tif",                                                                                   "tif",                          false,          MIME_IMAGE_TIF,                                                                 MIME_IMAGE_TIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
192         {"image/png",                                                                                   "png"/*,pnz"*/,         false,          MIME_IMAGE_PNG,                                                                 MIME_IMAGE_PNG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    0x20    },
193         {"image/wbmp",                                                                                  "wbmp",                         false,          MIME_IMAGE_WBMP,                                                                MIME_IMAGE_WBMP,                                                MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
194         {"image/pjpeg",                                                                         "jpg",                          false,          MIME_IMAGE_PJPEG,                                                               MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
195         {"image/bmp",                                                                                   "bmp",                          false,          MIME_IMAGE_BMP,                                                                 MIME_IMAGE_BMP,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
196         {"image/svg+xml",                                                                               "svg",                          false,          MIME_IMAGE_SVG,                                                                 MIME_IMAGE_SVG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
197         {"image/svg-xml",                                                                               "svg",                          false,          MIME_IMAGE_SVG1,                                                                MIME_IMAGE_SVG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
198
199         /* 117 */
200         {"image/vnd.wap.wbmp",                                                                  "wbmp",                         false,          MIME_IMAGE_VND_WAP_WBMP,                                                MIME_IMAGE_WBMP,                                                MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            0x21    },
201         {"image/vnd.tmo.my5-gif",                                                               "gif",                          false,          MIME_IMAGE_VND_TMO_GIF,                                                 MIME_IMAGE_GIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
202         {"image/vnd.tmo.my5-jpg",                                                               "jpg",                          false,          MIME_IMAGE_VND_TMO_JPG,                                                 MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
203
204         /* 120 */
205         {"image/x-bmp",                                                                         "bmp",                          false,          MIME_IMAGE_X_BMP,                                                               MIME_IMAGE_BMP,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
206
207         /* 121 */
208         {"message/rfc822",                                                                              "elm",                          false,          MIME_MESSAGE_RFC822,                                                    MIME_MESSAGE_RFC822,                                    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_MESSAGE,          UNDEFINED_BINARY        },
209
210         /* 122 */
211         {"multipart/mixed",                                                                     "",                                     false,          MIME_MULTIPART_MIXED,                                                   MIME_MULTIPART_MIXED,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0c    },
212         {"multipart/related",                                                                   "",                                     false,          MIME_MULTIPART_RELATED,                                                 MIME_MULTIPART_RELATED,                                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
213         {"multipart/alternative",                                                               "",                                     false,          MIME_MULTIPART_ALTERNATIVE,                                             MIME_MULTIPART_ALTERNATIVE,                             MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0f    },
214         {"multipart/form-data",                                                         "",                                     false,          MIME_MULTIPART_FORM_DATA,                                               MIME_MULTIPART_FORM_DATA,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0d    },
215         {"multipart/byterange",                                                         "",                                     false,          MIME_MULTIPART_BYTERANGE,                                               MIME_MULTIPART_BYTERANGE,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0e    },
216         {"multipart/report",                                                                    "",                                     false,          MIME_MULTIPART_REPORT,                                                  MIME_MULTIPART_REPORT,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
217         {"multipart/voice-message",                                                     "",                                     false,          MIME_MULTIPART_VOICE_MESSAGE,                                   MIME_MULTIPART_VOICE_MESSAGE,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
218
219         /* 129 */
220         {"text/txt",                                                                                    "",                             false,          MIME_TEXT_TXT,                                                                  MIME_TEXT_TXT,                                                  MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_TEXT,                     UNDEFINED_BINARY        },
221         {"text/html",                                                                                   "html"/*,htm"*/,        false,          MIME_TEXT_HTML,                                                                 MIME_TEXT_HTML,                                                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x02    },
222         {"text/plain",                                                                                  "txt" /*,vbm,url"*/,                            false,          MIME_TEXT_PLAIN,                                                                MIME_TEXT_PLAIN,                                                MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_TEXT,                     0x03    },
223         {"text/css",                                                                                    "",                                     false,          MIME_TEXT_CSS,                                                                  MIME_TEXT_CSS,                                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x3d    },
224         {"text/xml",                                                                                    "",                                     false,          MIME_TEXT_XML,                                                                  MIME_TEXT_XML,                                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x28    },
225         {"text/iMelody",                                                                                "imy",                          true,           MIME_TEXT_IMELODY,                                                              MIME_TEXT_IMELODY,                                              MIME_APPLICATION_SOUNDPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
226         {"text/calendar",                                                                               "ics",                          true,   MIME_TEXT_CALENDAR,                                                             MIME_TEXT_CALENDAR,                                             MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,             UNDEFINED_BINARY },
227
228         /* 136 */
229         {"text/vnd.wap.wmlscript",                                                              "",                                     false,          MIME_TEXT_VND_WAP_WMLSCRIPT,                                    MIME_TEXT_VND_WAP_WMLSCRIPT,                    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x09    },
230         {"text/vnd.wap.wml",                                                                    "wml",                          false,          MIME_TEXT_VND_WAP_WML,                                                  MIME_TEXT_VND_WAP_WML,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x08    },
231         {"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    },
232         {"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    },
233         {"text/vnd.wap.si",                                                                     "",                                     false,          MIME_TEXT_VND_WAP_SI,                                                   MIME_TEXT_VND_WAP_SI,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2d    },
234         {"text/vnd.wap.sl",                                                                     "",                                     false,          MIME_TEXT_VND_WAP_SL,                                                   MIME_TEXT_VND_WAP_SL,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2f    },
235         {"text/vnd.wap.co",                                                                     "",                                     false,          MIME_TEXT_VND_WAP_CO,                                                   MIME_TEXT_VND_WAP_CO,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x31    },
236         {"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        },
237
238
239         /* 144 */
240         {"text/x-hdml",                                                                         "",                                     false,          MIME_TEXT_X_HDML,                                                               MIME_TEXT_X_HDML,                                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x04    },
241         {"text/x-vCalendar",                                                                    "vcs",                          true,           MIME_TEXT_X_VCALENDAR,                                                  MIME_TEXT_X_VCALENDAR,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      0x06    },
242         {"text/x-vCard",                                                                                "vcf",                          true,           MIME_TEXT_X_VCARD,                                                              MIME_TEXT_X_VCARD,                                              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      0x07    },
243         {"text/x-iMelody",                                                                              "imy",                          true,           MIME_TEXT_X_IMELODY,                                                    MIME_TEXT_X_IMELODY,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
244         {"text/x-imelody",                                                                              "imy",                          true,           MIME_TEXT_X_IMELODY2,                                                   MIME_TEXT_X_IMELODY,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
245         {"text/x-vnote",                                                                                "vnt",                          true,           MIME_TEXT_X_VNOTE,                                                              MIME_TEXT_X_VNOTE,                                              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     UNDEFINED_BINARY        },
246         {"text/x-vtodo",                                                                                "vts",                          true,           MIME_TEXT_X_VTODO,                                                              MIME_TEXT_X_VNOTE,                                              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     UNDEFINED_BINARY        },
247
248         /* 151 */
249         {"video/mpeg4",                                                                         "mp4",                          true,           MIME_VIDEO_MPEG4,                                                               MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
250         {"video/mp4",                                                                                   "mp4",                          true,           MIME_VIDEO_MP4,                                                                 MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
251         {"video/h263",                                                                                  ""/*,3gpp,mp4"*/,       true,           MIME_VIDEO_H263,                                                                MIME_VIDEO_H263,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
252         {"video/3gpp",                                                                                  "3gp"/*,3gpp"*/,        true,           MIME_VIDEO_3GPP,                                                                MIME_VIDEO_3GPP,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
253         {"video/3gp",                                                                                   "3gp"/*,3gpp"*/,        true,           MIME_VIDEO_3GP,                                                                 MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
254         {"video/avi",                                                                                   "avi",                          false,          MIME_VIDEO_AVI,                                                                 MIME_VIDEO_AVI,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
255         {"video/sdp",                                                                                   "sdp",                          true,           MIME_VIDEO_SDP,                                                                 MIME_APPLICATION_SDP,                                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
256         {"video/mp4v-es",                                                                                       "3gp",                          true,           MIME_VIDEO_MP4_ES,                                                                      MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
257         {"video/mpeg",                                                                                  "3gp",                          true,           MIME_VIDEO_MPEG,                                                                        MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
258         {"video/quicktime",                                                                             "mov",                          true,           MIME_VIDEO_MOV,                                                                 MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
259
260         /* 161 */
261         {"video/vnd.rn-realvideo",                                                              "rm",                           true,           MIME_VIDEO_VND_RN_REALVIDEO,                                    MIME_VIDEO_VND_RN_REALVIDEO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
262         {"video/vnd.rn-realmedia",                                                              "rm",                           true,           MIME_VIDEO_VND_RN_REALMEDIA,                                    MIME_VIDEO_VND_RN_REALMEDIA,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
263
264         /* 163 */
265         {"video/x-mp4",                                                                         "mp4",                          true,           MIME_VIDEO_X_MP4,                                                               MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
266         {"video/x-pv-mp4",                                                                              "mp4",                          true,           MIME_VIDEO_X_PV_MP4,                                                    MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
267         {"video/x-pn-realvideo",                                                                "rv",                           true,           MIME_VIDEO_X_PN_REALVIDEO,                                              MIME_VIDEO_VND_RN_REALVIDEO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
268         {"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        },
269         {"video/x-ms-wmv",                                                                              "wmv",                          true,           MIME_VIDEO_X_MS_WMV,                                                    MIME_VIDEO_X_MS_WMV,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
270         {"video/x-ms-asf",                                                                              "asf",                          true,           MIME_VIDEO_X_MS_ASF,                                                    MIME_VIDEO_X_MS_ASF,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
271         {"video/x-pv-pvx",                                                                              "pvx",                          true,           MIME_VIDEO_X_PV_PVX,                                                    MIME_VIDEO_X_PV_PVX,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        }
272 };
273
274 /**********              MIME table information     ***********/
275 static const int mimeTableIndex[] = {
276         1,                      16,                     49,
277         56,                     86,                     87,
278         106,            117,            120,
279         121,            121,            121,
280         122,            122,            122,
281         129,            136,            144,
282         151,            161,            163,
283         MIME_MAX_NUM
284 };
285
286 static int mimeTableEnum[] =
287 {
288         MIME_ASTERISK   ,
289
290         MIME_APPLICATION_XML    ,
291         MIME_APPLICATION_WML_XML        ,
292         MIME_APPLICATION_XHTML_XML      ,
293         MIME_APPLICATION_JAVA_VM        ,
294         MIME_APPLICATION_SMIL   ,
295         MIME_APPLICATION_JAVA_ARCHIVE   ,
296         MIME_APPLICATION_JAVA   ,
297         MIME_APPLICATION_OCTET_STREAM   ,
298         MIME_APPLICATION_STUDIOM        ,
299         MIME_APPLICATION_FUNMEDIA       ,
300         MIME_APPLICATION_MSWORD         ,
301         MIME_APPLICATION_PDF            ,
302         MIME_APPLICATION_SDP            ,
303         MIME_APPLICATION_RAM            ,
304         MIME_APPLICATION_ASTERIC        ,
305
306
307         MIME_APPLICATION_VND_WAP_XHTMLXML       ,
308         MIME_APPLICATION_VND_WAP_WMLC   ,
309         MIME_APPLICATION_VND_WAP_WMLSCRIPTC     ,
310         MIME_APPLICATION_VND_WAP_WTA_EVENTC     ,
311         MIME_APPLICATION_VND_WAP_UAPROF ,
312         MIME_APPLICATION_VND_WAP_SIC    ,
313         MIME_APPLICATION_VND_WAP_SLC    ,
314         MIME_APPLICATION_VND_WAP_COC    ,
315         MIME_APPLICATION_VND_WAP_SIA    ,
316         MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML     ,
317         MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA    ,
318         MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES   ,
319         MIME_APPLICATION_VND_WAP_MULTIPART_MIXED        ,
320         MIME_APPLICATION_VND_WAP_MULTIPART_RELATED      ,
321         MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE  ,
322         MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC      ,
323         MIME_APPLICATION_VND_WAP_WBXML  ,
324         MIME_APPLICATION_VND_OMA_DD_XML ,
325         MIME_APPLICATION_VND_OMA_DRM_MESSAGE    ,
326         MIME_APPLICATION_VND_OMA_DRM_CONTENT    ,
327         MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML ,
328         MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML       ,
329         MIME_APPLICATION_VND_OMA_DRM_RO_XML     ,
330         MIME_APPLICATION_VND_OMA_DRM_DCF        ,
331         MIME_APPLICATION_VND_OMA_ROAPPDU_XML    ,
332         MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML,
333         MIME_APPLICATION_VND_SMAF       ,
334         MIME_APPLICATION_VND_RN_REALMEDIA       ,
335         MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE      ,
336         MIME_APPLICATION_VND_SAMSUNG_THEME      ,
337         MIME_APPLICATION_VND_EXCEL      ,
338         MIME_APPLICATION_VND_POWERPOINT,
339         MIME_APPLICATION_VND_MSWORD,
340
341
342         MIME_APPLICATION_X_HDMLC        ,
343         MIME_APPLICATION_X_X968_USERCERT        ,
344         MIME_APPLICATION_X_WWW_FORM_URLENCODED  ,
345         MIME_APPLICATION_X_SMAF ,
346         MIME_APPLICATION_X_FLASH        ,
347         MIME_APPLICATION_X_EXCEL        ,
348         MIME_APPLICATION_X_POWERPOINT   ,
349
350
351         MIME_AUDIO_BASIC,
352         MIME_AUDIO_MPEG ,
353         MIME_AUDIO_MP3  ,
354         MIME_AUDIO_MPG3 ,
355         MIME_AUDIO_MPEG3        ,
356         MIME_AUDIO_MPG  ,
357         MIME_AUDIO_AAC  ,
358         MIME_AUDIO_G72  ,
359         MIME_AUDIO_AMR  ,
360         MIME_AUDIO_AMR_WB       ,
361         MIME_AUDIO_MMF  ,
362         MIME_AUDIO_SMAF ,
363         MIME_AUDIO_IMELODY      ,
364         MIME_AUDIO_IMELODY2 ,
365         MIME_AUDIO_MELODY       ,
366         MIME_AUDIO_MID  ,
367         MIME_AUDIO_MIDI ,
368         MIME_AUDIO_SP_MIDI      ,
369         MIME_AUDIO_WAVE ,
370         MIME_AUDIO_WAV ,
371         MIME_AUDIO_3GPP ,
372         MIME_AUDIO_MP4  ,
373         MIME_AUDIO_MP4A_LATM    ,
374         MIME_AUDIO_M4A  ,
375         MIME_AUDIO_MPEG4,
376         MIME_AUDIO_WMA,
377         MIME_AUDIO_XMF,
378         MIME_AUDIO_IMY,
379         MIME_AUDIO_MOBILE_XMF,
380         MIME_AUDIO_OGG,
381
382
383         MIME_AUDIO_VND_RN_REALAUDIO     ,
384
385
386         MIME_AUDIO_X_MPEG       ,
387         MIME_AUDIO_X_MP3        ,
388         MIME_AUDIO_X_MPEG3      ,
389         MIME_AUDIO_X_MPG        ,
390         MIME_AUDIO_X_AMR        ,
391         MIME_AUDIO_X_MMF        ,
392         MIME_AUDIO_X_SMAF       ,
393         MIME_AUDIO_X_IMELODY    ,
394         MIME_AUDIO_X_MIDI       ,
395         MIME_AUDIO_X_MPEGAUDIO  ,
396         MIME_AUDIO_X_PN_REALAUDIO       ,
397         MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO     ,
398         MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE        ,
399         MIME_AUDIO_X_WAVE       ,
400         MIME_AUDIO_X_WAV        ,
401         MIME_AUDIO_X_MS_WMA     ,
402         MIME_AUDIO_X_MID ,
403         MIME_AUDIO_X_MS_ASF ,
404         MIME_AUDIO_X_XMF,
405
406
407         MIME_IMAGE_GIF  ,
408         MIME_IMAGE_JPEG ,
409         MIME_IMAGE_JPG  ,
410         MIME_IMAGE_TIFF ,
411         MIME_IMAGE_TIF  ,
412         MIME_IMAGE_PNG  ,
413         MIME_IMAGE_WBMP ,
414         MIME_IMAGE_PJPEG        ,
415         MIME_IMAGE_BMP  ,
416         MIME_IMAGE_SVG  ,
417         MIME_IMAGE_SVG1 ,
418         MIME_IMAGE_VND_WAP_WBMP ,
419         MIME_IMAGE_VND_TMO_GIF,
420         MIME_IMAGE_VND_TMO_JPG,
421         MIME_IMAGE_X_BMP        ,
422
423
424         MIME_MESSAGE_RFC822     ,
425
426
427         MIME_MULTIPART_MIXED    ,
428         MIME_MULTIPART_RELATED  ,
429         MIME_MULTIPART_ALTERNATIVE      ,
430         MIME_MULTIPART_FORM_DATA        ,
431         MIME_MULTIPART_BYTERANGE        ,
432         MIME_MULTIPART_REPORT   ,
433         MIME_MULTIPART_VOICE_MESSAGE    ,
434
435
436         MIME_TEXT_TXT   ,
437         MIME_TEXT_HTML  ,
438         MIME_TEXT_PLAIN ,
439         MIME_TEXT_CSS   ,
440         MIME_TEXT_XML   ,
441         MIME_TEXT_IMELODY       ,
442         MIME_TEXT_CALENDAR,
443         MIME_TEXT_VND_WAP_WMLSCRIPT     ,
444         MIME_TEXT_VND_WAP_WML   ,
445         MIME_TEXT_VND_WAP_WTA_EVENT     ,
446         MIME_TEXT_VND_WAP_CONNECTIVITY_XML      ,
447         MIME_TEXT_VND_WAP_SI    ,
448         MIME_TEXT_VND_WAP_SL    ,
449         MIME_TEXT_VND_WAP_CO    ,
450         MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR   ,
451         MIME_TEXT_X_HDML        ,
452         MIME_TEXT_X_VCALENDAR   ,
453         MIME_TEXT_X_VCARD       ,
454         MIME_TEXT_X_IMELODY     ,
455         MIME_TEXT_X_IMELODY2 ,
456         MIME_TEXT_X_VNOTE ,
457         MIME_TEXT_X_VTODO,
458
459         MIME_VIDEO_MPEG4        ,
460         MIME_VIDEO_MP4  ,
461         MIME_VIDEO_H263 ,
462         MIME_VIDEO_3GPP ,
463         MIME_VIDEO_3GP  ,
464         MIME_VIDEO_AVI  ,
465         MIME_VIDEO_SDP  ,
466         MIME_VIDEO_MP4_ES,
467         MIME_VIDEO_MPEG ,
468         MIME_VIDEO_MOV  ,
469         MIME_VIDEO_VND_RN_REALVIDEO     ,
470         MIME_VIDEO_VND_RN_REALMEDIA     ,
471         MIME_VIDEO_X_MP4        ,
472         MIME_VIDEO_X_PV_MP4     ,
473         MIME_VIDEO_X_PN_REALVIDEO       ,
474         MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO     ,
475         MIME_VIDEO_X_MS_WMV ,
476         MIME_VIDEO_X_MS_ASF,
477         MIME_VIDEO_X_PV_PVX ,
478
479         MIME_UNKNOWN    /* MIME_MAX */
480 };
481
482
483 int __MimeGetTableIndexInt(MimeType mime);
484 int __MimeGetTableIndexString(const char *szMime);
485 MimeMainType __MimeGetMainTypeName(const char *szType);
486
487 /*
488  * This function checks main type of a MIME.
489  *
490  * @param       mime [in] Enumeration number for a MIME type.
491  * @return      This function returns main type of a MIME.
492  */
493 MimeMainType MimeGetMainTypeInt(MimeType mime)
494 {
495         int index;
496
497         index = __MimeGetTableIndexInt(mime);
498         if (index == MIME_UNKNOWN)
499                 return MIME_MAINTYPE_ETC;
500
501         return mimeTable[index].mainType;
502 }
503
504
505 /*
506  * This function returns a extension name for a specified MIME.
507  *
508  * @param       mime [in] Enumeration number for a MIME type.
509  * @return      This function returns Extension string.
510  */
511 char *MimeGetExtFromMimeInt(MimeType mime)
512 {
513         int index;
514
515         index = __MimeGetTableIndexInt(mime);
516         if (index == MIME_UNKNOWN)
517                 return NULL;
518
519         return (char *)mimeTable[index].szExt;
520 }
521
522 /*
523  * This function returns index number in MIME definition table with MIME enumeration.
524  * Internal function.
525  */
526 int __MimeGetTableIndexInt(MimeType mime)
527 {
528         int type;
529         int subtype;
530         int index;
531         int tableIndex;
532
533         if (mime == MIME_UNKNOWN)
534                 return MIME_UNKNOWN;
535
536         type = (mime & 0xf000) >> 12;
537         subtype = (mime & 0x0f00) >> 8;
538         index = (mime & 0x003f);
539
540         /* If 'type' is zero, mimeTableIndex's array value have a minus value */
541         /* If 'type' is zero, mime type is '\*\/\*' */
542         if (type == 0)
543                 tableIndex = 0;
544         else
545                 tableIndex = mimeTableIndex[(type - 1) * 3 + subtype] + index;
546
547         return tableIndex;
548 }
549
550 /*
551  * This function returns index number in MIME definition table with MIME string.
552  * Internal function.
553  */
554 int __MimeGetTableIndexString(const char *szMime)
555 {
556         int type;
557         int subtype;
558         char szType[50];
559         char szSubType[50];
560         char *szTmpStart = NULL;
561         char c;
562         int i = 0;
563         int j = 0;
564         int start;
565         int end;
566         char *szMIMEType = NULL;
567         int len;
568
569         if (szMime == NULL) {
570                 MSG_DEBUG("szMime is NULL");
571                 return MIME_UNKNOWN;
572         }
573
574         szMIMEType = (char *)malloc(strlen(szMime) + 1);
575
576         if (szMIMEType == NULL) {
577                 MSG_DEBUG("szMime is NULL");
578                 return MIME_UNKNOWN;
579         }
580
581         memset(szMIMEType, 0, strlen(szMime) + 1);
582
583         if (!strcmp(szMime, "*/*")) {
584                 free(szMIMEType);
585                 return 0;
586         }
587
588         strncpy(szMIMEType, szMime, strlen(szMime));
589         type = 0;
590         subtype = 0;
591
592         szTmpStart = szMIMEType;
593         len = strlen(szTmpStart);
594
595         while (true) {
596                 if (i >= len) {
597                         free(szMIMEType);
598                         return MIME_UNKNOWN;
599                 }
600
601                 c = szTmpStart[i++];
602
603                 if (c == '/') {
604                         szType[j] = '\0';
605                         type = __MimeGetMainTypeName(szType);
606                         szTmpStart = &szTmpStart[i];
607                         break;
608                 } else {
609                         szType[j++] = c;
610                 }
611         }
612
613         i = 0;
614         j = 0;
615         len = strlen(szTmpStart);
616
617         while (true) {
618                 c = szTmpStart[i++];
619                 if (i > len) {
620                         szSubType[j] = '\0';
621                         break;
622                 }
623
624                 if (c == '.') {
625                         szSubType[j] = '\0';
626                         if (!strcasecmp(szSubType, "vnd"))
627                                 subtype = MIME_SUB_TYPE_VND;
628                         break;
629                 } else if (c == '-') {
630                         szSubType[j] = '\0';
631                         if (!strcasecmp(szSubType, "x"))
632                                 subtype = MIME_SUB_TYPE_X;
633                         break;
634                 } else {
635                         szSubType[j++] = c;
636                 }
637         }
638
639
640         start = mimeTableIndex[type * 3 + subtype];
641
642         if (type == MIME_MAINTYPE_VIDEO && subtype == MIME_SUB_TYPE_X)
643                 end = MIME_MAX_NUM;
644         else
645                 end = mimeTableIndex[type * 3 + subtype + 1];
646
647         if (start == end && type < MIME_MAINTYPE_VIDEO) {
648                 end = mimeTableIndex[(type + 1) * 3 + subtype + 1];
649         }
650
651
652         for (i = start; i < end; i++) {
653                 if (i >= MIME_MAX_NUM)
654                         break;
655
656                 if (!strcasecmp(mimeTable[i].szMIME, szMime)) {
657                         free(szMIMEType);
658                         return i;
659                 }
660         }
661
662         free(szMIMEType);
663         return MIME_UNKNOWN;
664 }
665
666 /*
667  * This function returns main type of MIME : Internal function.
668  */
669 MimeMainType __MimeGetMainTypeName(const char *szType)
670 {
671         if (szType == NULL )
672                 return MIME_MAINTYPE_APPLICATION;
673
674         if (!strcasecmp(szType, "application"))
675                 return MIME_MAINTYPE_APPLICATION;
676         else if (!strcasecmp(szType, "audio"))
677                 return MIME_MAINTYPE_AUDIO;
678         else if (!strcasecmp(szType, "image"))
679                 return MIME_MAINTYPE_IMAGE;
680         else if (!strcasecmp(szType, "message"))
681                 return MIME_MAINTYPE_MESSAGE;
682         else if (!strcasecmp(szType, "multipart"))
683                 return MIME_MAINTYPE_MULTIPART;
684         else if (!strcasecmp(szType, "text"))
685                 return MIME_MAINTYPE_TEXT;
686         else if (!strcasecmp(szType, "video"))
687                 return MIME_MAINTYPE_VIDEO;
688
689         return MIME_MAINTYPE_APPLICATION;
690 }
691
692
693 /* For Decode */
694 /* MimeString -> MimeInt */
695 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr)
696 {
697         int index = __MimeGetTableIndexString(szMimeStr);
698         if (index == MIME_UNKNOWN) {
699                 return MIME_UNKNOWN;
700         } else {
701                 return (MimeType)mimeTableEnum[index];
702         }
703 }
704
705 /* MimeInt -> MimeString */
706 char *MimeGetMimeStringFromMimeInt(int mimeType)
707 {
708         int idx = __MimeGetTableIndexInt((MimeType)mimeType);
709
710         if (idx == MIME_UNKNOWN)
711                 return NULL;
712
713         return (char *)mimeTable[idx].szMIME;
714 }
715
716
717 /* BinaryCode -> MimeInt */
718 MimeType MimeGetMimeIntFromBi(int binCode)
719 {
720         int index;
721
722         if (binCode < 0x00 || binCode > 0x4b)
723                 return MIME_UNKNOWN;
724
725         for (index = 0; index < MIME_MAX_NUM; index++) {
726                 if (binCode == mimeTable[index].binary)
727                         return (MimeType)mimeTableEnum[index];
728         }
729
730         return MIME_UNKNOWN;
731 }
732
733 /* Mimeint -> Binary Value */
734 int MimeGetBinaryValueFromMimeInt(MimeType mime)
735 {
736         int index;
737
738         index = __MimeGetTableIndexInt(mime);
739         if (index == MIME_UNKNOWN)
740                 return UNDEFINED_BINARY;
741
742         return mimeTable[index].binary;
743 }
744
745 typedef struct {
746         const char *szExt;
747         int mainType;
748         int enumMime;
749         const char *szContentType;
750 } ExtTableItem;
751
752 #define EXT_TABLE_SIZE (58)
753
754 const ExtTableItem extTable[EXT_TABLE_SIZE] = {
755         /* text */
756         {"txt",   MIME_MAINTYPE_TEXT, MIME_TEXT_PLAIN, "text/plain"},
757         {"html",  MIME_MAINTYPE_TEXT, MIME_TEXT_HTML, "text/html"},
758         {"xhtml", MIME_MAINTYPE_TEXT, MIME_APPLICATION_XHTML_XML, "application/xhtml+xml"},
759         {"vcs",   MIME_MAINTYPE_TEXT, MIME_TEXT_X_VCALENDAR, "text/x-vCalendar"},
760         {"vcf",   MIME_MAINTYPE_TEXT, MIME_TEXT_X_VCARD, "text/x-vCard"},
761         {"vnt",   MIME_MAINTYPE_TEXT, MIME_TEXT_X_VNOTE, "text/x-vnote"},
762         {"vts",   MIME_MAINTYPE_TEXT, MIME_TEXT_X_VTODO, "text/x-vtodo"},
763         {"ics",   MIME_MAINTYPE_TEXT, MIME_TEXT_CALENDAR, "text/calendar"},
764
765         /* image */
766         {"gif",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_GIF, "image/gif"},
767         /* {"jpg",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_JPG, "image/jpg"}, */
768         {"jpg",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_JPEG, "image/jpeg"},
769         {"jpeg",  MIME_MAINTYPE_IMAGE, MIME_IMAGE_JPEG, "image/jpeg"},
770         {"tiff",  MIME_MAINTYPE_IMAGE, MIME_IMAGE_TIFF, "image/tiff"},
771         {"tif",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_TIF, "image/tif"},
772         {"png",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_PNG, "image/png"},
773         {"wbmp",  MIME_MAINTYPE_IMAGE, MIME_IMAGE_VND_WAP_WBMP, "image/vnd.wap.wbmp"},
774         {"bmp",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_BMP, "image/bmp"},
775         {"svg",   MIME_MAINTYPE_IMAGE, MIME_IMAGE_SVG, "image/svg+xml"},
776
777         /* audio */
778         {"snd",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_BASIC, "audio/basic"},
779         {"amr",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_AMR, "audio/amr"},
780         {"m4a",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_M4A, "audio/m4a"},
781         {"3gp",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_3GPP, "audio/3gpp"},
782         {"3gpp",  MIME_MAINTYPE_AUDIO, MIME_AUDIO_3GPP, "audio/3gpp"},
783         {"mp3",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_MPEG, "audio/mpeg"},
784         {"aac",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_AAC, "audio/aac"},
785         {"imy",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_IMELODY, "audio/imelody"},
786         {"mid",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_MID, "audio/mid"},
787         {"mmf",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_MMF, "audio/mmf"},
788         {"spm",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_SP_MIDI, "audio/sp-midi"},
789         {"wav",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_WAV, "audio/wav"},
790         {"mp4",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_MP4, "audio/mp4"},
791         {"wma",   MIME_MAINTYPE_AUDIO, MIME_AUDIO_X_MS_WMA, "audio/x-ms-wma"},
792         {"rm",    MIME_MAINTYPE_AUDIO, MIME_AUDIO_VND_RN_REALAUDIO, "audio/vnd.rn-realaudio"},
793         {"ra",    MIME_MAINTYPE_AUDIO, MIME_AUDIO_VND_RN_REALAUDIO, "audio/vnd.rn-realaudio"},
794         {"mxmf",    MIME_MAINTYPE_AUDIO, MIME_AUDIO_MOBILE_XMF, "audio/mobile-xmf"},
795         {"ogg",    MIME_MAINTYPE_AUDIO, MIME_AUDIO_OGG, "audio/ogg"},
796
797         /* video */
798         {"3gp",   MIME_MAINTYPE_VIDEO, MIME_VIDEO_3GPP, "video/3gpp"},
799         {"3gpp",  MIME_MAINTYPE_VIDEO, MIME_VIDEO_3GPP, "video/3gpp"},
800         {"mp4",   MIME_MAINTYPE_VIDEO, MIME_VIDEO_MP4, "video/mp4"},
801         {"rm",    MIME_MAINTYPE_VIDEO, MIME_VIDEO_VND_RN_REALVIDEO, "video/vnd.rn-realvideo"},
802         {"rv",    MIME_MAINTYPE_VIDEO, MIME_VIDEO_VND_RN_REALVIDEO, "video/vnd.rn-realvideo"},
803         {"avi",   MIME_MAINTYPE_VIDEO, MIME_VIDEO_AVI, "video/avi"},
804         {"asf",   MIME_MAINTYPE_VIDEO, MIME_VIDEO_X_MS_ASF, "video/x-ms-asf"},
805         {"mov", MIME_MAINTYPE_VIDEO, MIME_VIDEO_MOV, "video/quicktime"},
806
807         /* application */
808         {"smil",  MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_SMIL, "application/smil"},
809         {"rm",    MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_RN_REALMEDIA, "application/vnd.rn-realmedia"},
810         {"ram",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_RAM, "application/ram"},
811         {"ppt",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_POWERPOINT, "application/vnd.ms-powerpoint"},
812         {"xls",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_EXCEL, "application/vnd.ms-excel"},
813         {"doc",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_MSWORD, "applcation/vnd.ms-word"},
814         {"pdf",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_PDF, "application/pdf"},
815         {"swf",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_X_FLASH, "application/x-shockwave-flash"},
816         {"dm",    MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_MESSAGE, "application/vnd.oma.drm.message"},
817         {"dcf",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_CONTENT, "application/vnd.oma.drm.content"},
818         {"dd",    MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DD_XML, "application/vnd.oma.dd+xml"},
819         {"ro",    MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML, "application/vnd.oma.drm.rights+xml"},
820         {"ro",    MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML, "application/vnd.oma.drm.rights+wbxml"},
821         {"oro",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_RO_XML, "application/vnd.oma.drm.ro+xml"},
822         {"odf",   MIME_MAINTYPE_APPLICATION, MIME_APPLICATION_VND_OMA_DRM_DCF, "application/vnd.oma.drm.dcf"},
823 };
824
825 /* GetMimeType from File Extension */
826 bool MsgGetMimeTypeFromExt(MimeMainType mainType, const char *pExt, MimeType *pMimeType, const char **ppszMimeType)
827 {
828         const ExtTableItem *matchedItem = NULL;
829
830         if (pExt == NULL)
831                 return false;
832
833         if (pMimeType == NULL && ppszMimeType == NULL)
834                 return false;
835
836         int extTableMainSize = sizeof(extTable)/sizeof(ExtTableItem);
837
838         for (int i = 0; i < extTableMainSize; i++) {
839                 if (strcasecmp(extTable[i].szExt, pExt) == 0) {
840                         matchedItem = &extTable[i];
841
842                         if (mainType == extTable[i].mainType) {
843                                 break;
844                         }
845                 }
846         }
847
848         if (matchedItem) {
849                 MSG_DEBUG("Found ext = [%s], mainType = [%d], mimeType = [0x%04x], ContentType = [%s]"
850                                 , matchedItem->szExt
851                                 , matchedItem->mainType
852                                 , matchedItem->enumMime
853                                 , matchedItem->szContentType);
854
855                 if (pMimeType)
856                         *pMimeType = (MimeType)matchedItem->enumMime;
857
858                 if (ppszMimeType)
859                         *ppszMimeType = matchedItem->szContentType;
860
861                 return true;
862         }
863
864         return false;
865 }
866
867 bool MsgGetMimeTypeFromFileName(MimeMainType mainType, const char *pFileName, MimeType *pMimeType, const char **ppszMimeType)
868 {
869         const char *pExt = NULL;
870
871         if (pFileName == NULL)
872                 return false;
873
874         if (pMimeType == NULL && ppszMimeType == NULL)
875                 return false;
876
877         pExt = strrchr(pFileName, '.');
878
879         if (pExt == NULL || *(pExt + 1) == '\0')
880                 return false;
881
882         pExt = pExt + 1;
883
884         return MsgGetMimeTypeFromExt(mainType, pExt, pMimeType, ppszMimeType);
885 }
886
887 bool MsgGetMainTypeFromMetaData(const char *pFileName, MimeMainType *mainType)
888 {
889         char *video_track_cnt = NULL;
890         char *audio_track_cnt = NULL;
891
892         if (pFileName == NULL)
893                 return false;
894
895         int ret = METADATA_EXTRACTOR_ERROR_NONE;
896         metadata_extractor_h metadata = NULL;
897
898         ret = metadata_extractor_create(&metadata);
899         if(ret != METADATA_EXTRACTOR_ERROR_NONE) {
900                 MSG_ERR("Fail metadata_extractor_create [%d]", ret);
901                 return false;
902         }
903
904         ret = metadata_extractor_set_path(metadata, pFileName);
905         if(ret != METADATA_EXTRACTOR_ERROR_NONE) {
906                 MSG_ERR("Fail metadata_extractor_set_path [%d]", ret);
907                 metadata_extractor_destroy(metadata);
908                 return false;
909         }
910
911         metadata_extractor_get_metadata(metadata, METADATA_HAS_VIDEO, &video_track_cnt);
912         if (video_track_cnt) {
913                 MSG_DEBUG("video_track_cnt = [%s]", video_track_cnt);
914                 if (atoi(video_track_cnt) > 0) {
915                         metadata_extractor_destroy(metadata);
916                         free(video_track_cnt);
917                         video_track_cnt = NULL;
918
919                         *mainType = MIME_MAINTYPE_VIDEO;
920                         return true;
921                 } else {
922                         free(video_track_cnt);
923                         video_track_cnt = NULL;
924                 }
925         }
926
927         metadata_extractor_get_metadata(metadata, METADATA_HAS_AUDIO, &audio_track_cnt);
928         if (audio_track_cnt) {
929                 MSG_DEBUG("audio_track_cnt = [%s]", audio_track_cnt);
930                 if (atoi(audio_track_cnt) > 0) {
931                         metadata_extractor_destroy(metadata);
932                         free(audio_track_cnt);
933                         audio_track_cnt = NULL;
934
935                         *mainType = MIME_MAINTYPE_AUDIO;
936                         return true;
937                 } else {
938                         free(audio_track_cnt);
939                         audio_track_cnt = NULL;
940                 }
941         }
942
943         metadata_extractor_destroy(metadata);
944
945         return false;
946 }