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