Modify flora license version.
[platform/core/messaging/msg-service.git] / plugin / mms_plugin / MmsPluginMIME.cpp
1 /*
2 * Copyright 2012-2013  Samsung Electronics Co., Ltd
3 *
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *    http://floralicense.org/license/
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 "MmsPluginMIME.h"
20 #include "MmsPluginDebug.h"
21 #include "MmsPluginSmil.h"
22
23 #ifndef NULL
24 #define NULL    0
25 #endif
26
27
28 /* Header field */
29 static const char *szMsgField[MSG_FIELD_NUM] =
30 {
31         "Return-Path",
32         "Message-ID",
33         "From" ,
34         "To" ,
35         "Cc" ,
36         "Subject",
37         "Date",
38         "Mime-Version",
39         "Content-Type",
40         "Content-Transfer-Encoding",
41         "Content-Disposition", //If start param is given in multipart/related, this field will be ignored
42         "Content-ID", //for start part of multipart/related body
43         "Content-Location",
44         "Content-Name",
45         "Content-Description",
46         "Content-Vendor",
47         "Rights-Issuer",
48         "Return-Receipt-To",                    /* Delivery confirm */
49         "Disposition-Notification-To",  /* Read confirm */
50         "Content-Rep-Pos",
51         "Content-Rep-Size",
52         "Content-Rep-Index"
53 };
54
55 /*  MIME header field parameter */
56 static const char *szMsgParam[MSG_PARAM_NUM] =
57 {
58         "charset",
59         "name",
60         "filename",
61         "type",         //Only if content-type is multipart/related,
62         "start",        //Only if content-type is multipart/related
63         "start-info",   //Only if content-type is multipart/related
64         "boundary",
65         "report-type", // only used as parameter of Content-Type: multipart/report; report-type=delivery-status;
66 #ifdef FEATURE_JAVA_MMS
67         "Application-ID",                               //laconic_javaParamFix
68         "Reply-To-Application-ID",              //laconic_javaParamFix
69 #endif
70 };
71
72 /* Content-Transfer-Encoding header value */
73 static const char *szMsgEncoding[MSG_ENCODING_NUM] =
74 {
75         "7bit",
76         "8bit",
77         "binary",
78         "base64",
79         "quoted-printable"
80 };
81
82 /* Content-Disposition header value */
83 static const char *szMsgDisposition[MSG_DISPOSITION_NUM] =
84 {
85         "form-data",
86         "attachment",
87         "inline"
88 };
89
90 static const char *szMsgAddrType[MSG_ADDR_TYPE_NUM] =
91 {
92         "/TYPE=PLMN",
93         "",
94         "/TYPE=IPV4",
95         "/TYPE=IPV6",
96         ""
97 };
98
99 /* character-set value */
100 static const char *szMsgCharset [MSG_CHARSET_NUM] =
101 {
102         "us-ascii",
103         "utf-16",
104         "usc-2",
105         "utf-8",
106         /* MIME character-set value */
107
108         "iso-2022-kr",
109         "ks_c_5601-1987",
110         "euc_kr",
111         "iso-2022-jp",
112         "iso-2022-jp-2",
113         "iso-8859-1",
114         "iso-8859-2",
115         "iso-8859-3",
116         "iso-8859-4",
117         "iso-8859-5",
118         "iso-8859-6",
119         "iso-8859-6-e",
120         "iso-8859-6-i",
121         "iso-8859-7",
122         "iso-8859-8",
123         "iso-8859-8-i",
124         "iso-8859-9",
125         "iso-8859-10",
126         "iso-8859-15",
127         "Shift_jis",
128         "euc-jp",
129         "gb2312",
130         "big5",
131         "win1251",
132         "window-1251",
133         "windows-1251",
134         "koi8-r",
135         "koi8-u"
136 };
137
138
139 /**************************************************     MIME definition     ***************************************************/
140 static const MimeTable mimeTable[] = {
141         // 0
142         {"*/*",                                                                                                 "",                                     false,          MIME_ASTERISK,                                                                  MIME_ASTERISK,                                                  MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                              UNDEFINED_BINARY        },
143
144     // 1
145         {"application/xml",                                                                     "",                                     false,          MIME_APPLICATION_XML,                                                   MIME_APPLICATION_XML,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x27    },
146         {"application/wml+xml",                                                         "",                                     false,          MIME_APPLICATION_WML_XML,                                               MIME_APPLICATION_WML_XML,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x3c    },
147         {"application/xhtml+xml",                                                               "xhtml",                        false,          MIME_APPLICATION_XHTML_XML,                                             MIME_APPLICATION_XHTML_XML,                             MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x3b    },
148         {"application/java-vm",                                                         "",                                     false,          MIME_APPLICATION_JAVA_VM,                                               MIME_APPLICATION_JAVA_VM,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x11    },
149         {"application/smil",                                                                    "smil",                         true,           MIME_APPLICATION_SMIL,                                                  MIME_APPLICATION_SMIL,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
150         {"application/java-archive",                                                    "jar",                          true,           MIME_APPLICATION_JAVA_ARCHIVE,                                  MIME_APPLICATION_JAVA_ARCHIVE,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
151         {"application/java",                                                                    "jar",                          true,           MIME_APPLICATION_JAVA,                                                  MIME_APPLICATION_JAVA,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
152         {"application/octet-stream",                                                    "",                                     false,          MIME_APPLICATION_OCTET_STREAM,                                  MIME_APPLICATION_OCTET_STREAM,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
153         {"application/studiom",                                                         "smp",                          true,           MIME_APPLICATION_STUDIOM,                                               MIME_APPLICATION_STUDIOM,                               MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
154         {"application/funMedia",                                                                "smp",                          true,           MIME_APPLICATION_FUNMEDIA,                                              MIME_APPLICATION_FUNMEDIA,                              MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
155         {"application/msword",                                                                  "doc",                          true,           MIME_APPLICATION_MSWORD,                                                MIME_APPLICATION_MSWORD,                                MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
156         {"application/pdf",                                                                     "pdf",                          true,           MIME_APPLICATION_PDF,                                                   MIME_APPLICATION_PDF,                                   MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
157         {"application/sdp",                                                                     "sdp",                          true,           MIME_APPLICATION_SDP,                                                   MIME_APPLICATION_SDP,                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,    UNDEFINED_BINARY        },
158         {"application/ram",                                                                     "ram",                          true,           MIME_APPLICATION_RAM,                                                   MIME_APPLICATION_RAM,                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
159         {"application/*",                                                                               "",                                     false,          MIME_APPLICATION_ASTERIC,                                               MIME_APPLICATION_ASTERIC,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x10    },
160
161         //16
162         {"application/vnd.wap.xhtml+xml",                                               "",                                     false,          MIME_APPLICATION_VND_WAP_XHTMLXML,                              MIME_APPLICATION_VND_WAP_XHTMLXML,              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x45    },
163         {"application/vnd.wap.wmlc",                                                    "",                                     false,          MIME_APPLICATION_VND_WAP_WMLC,                                  MIME_APPLICATION_VND_WAP_WMLC,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x14    },
164         {"application/vnd.wap.wmlscriptc",                                              "",                                     false,          MIME_APPLICATION_VND_WAP_WMLSCRIPTC,                    MIME_APPLICATION_VND_WAP_WMLSCRIPTC,    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x15    },
165         {"application/vnd.wap.wta-eventc",                                              "",                                     false,          MIME_APPLICATION_VND_WAP_WTA_EVENTC,                    MIME_APPLICATION_VND_WAP_WTA_EVENTC,    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x16    },
166         {"application/vnd.wap.uaprof",                                                  "",                                     false,          MIME_APPLICATION_VND_WAP_UAPROF,                                MIME_APPLICATION_VND_WAP_UAPROF,                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x17    },
167         {"application/vnd.wap.sic",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_SIC,                                   MIME_APPLICATION_VND_WAP_SIC,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2e    },
168         {"application/vnd.wap.slc",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_SLC,                                   MIME_APPLICATION_VND_WAP_SLC,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x30    },
169         {"application/vnd.wap.coc",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_COC,                                   MIME_APPLICATION_VND_WAP_COC,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x32    },
170         {"application/vnd.wap.sia",                                                     "",                                     false,          MIME_APPLICATION_VND_WAP_SIA,                                   MIME_APPLICATION_VND_WAP_SIA,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x34    },
171         {"application/vnd.wap,connectivity-wbxml",                              "",                                     false,          MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML,    MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML,            MIME_APPLICATION_NONE,          MIME_MAINTYPE_TEXT,                     UNDEFINED_BINARY        },
172         {"application/vnd.wap.multipart.form-data",                     "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA,   MIME_MULTIPART_FORM_DATA,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x24    },
173         {"application/vnd.wap.multipart.byteranges",                    "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES,  MIME_MULTIPART_BYTERANGE,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x25    },
174         {"application/vnd.wap.multipart.mixed",                         "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_MIXED,               MIME_MULTIPART_MIXED,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x23    },
175         {"application/vnd.wap.multipart.related",                               "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_RELATED,             MIME_MULTIPART_RELATED,                                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x33    },
176         {"application/vnd.wap.multipart.alternative",                   "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE, MIME_MULTIPART_ALTERNATIVE,                                     MIME_APPLICATION_NONE,                          MIME_MAINTYPE_APPLICATION,      0x26    },
177         {"application/vnd.wap.multipart.*",                                     "",                                     false,          MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC,             MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC,             MIME_APPLICATION_NONE,                  MIME_MAINTYPE_APPLICATION,      0x22    },
178         {"application/vnd.wap.wbxml",                                                   "",                                     false,          MIME_APPLICATION_VND_WAP_WBXML,                                 MIME_APPLICATION_VND_WAP_WBXML,                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x29    },
179         {"application/vnd.oma.dd+xml",                                                  "dd",                           true,           MIME_APPLICATION_VND_OMA_DD_XML,                                MIME_APPLICATION_VND_OMA_DD_XML,                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      0x47    },
180         {"application/vnd.oma.drm.message",                                     "dm",                           true,           MIME_APPLICATION_VND_OMA_DRM_MESSAGE,                   MIME_APPLICATION_VND_OMA_DRM_MESSAGE,           MIME_APPLICATION_NONE,                          MIME_MAINTYPE_ETC,                      0x48    },
181         {"application/vnd.oma.drm.content",                                     "dcf",                          true,           MIME_APPLICATION_VND_OMA_DRM_CONTENT,                   MIME_APPLICATION_VND_OMA_DRM_CONTENT,           MIME_APPLICATION_NONE,                          MIME_MAINTYPE_ETC,                      0x49    },
182         {"application/vnd.oma.drm.rights+xml",                                  "ro",                           true,           MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML,                MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML,                MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                      0x4a    },
183         {"application/vnd.oma.drm.rights+wbxml",                                "ro",                           true,           MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML,              MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML,              MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                      0x4b    },
184         {"application/vnd.oma.drm.ro+xml",                              "oro",                          true,           MIME_APPLICATION_VND_OMA_DRM_RO_XML,            MIME_APPLICATION_VND_OMA_DRM_RO_XML,            MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                      0x4b    },
185         {"application/vnd.oma.drm.dcf",                         "odf",                          true,           MIME_APPLICATION_VND_OMA_DRM_DCF,               MIME_APPLICATION_VND_OMA_DRM_DCF,               MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                      0x4b    },
186         {"application/vnd.oma.drm.roap-pdu+xml",                                "xml",                          true,           MIME_APPLICATION_VND_OMA_ROAPPDU_XML,           MIME_APPLICATION_VND_OMA_ROAPPDU_XML,           MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                      0x4b    },
187         {"application/vnd.oma.drm.roap-trigger+xml",                            "xml",                          true,           MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML,               MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML,               MIME_APPLICATION_NONE,                  MIME_MAINTYPE_ETC,                      0x4b    },
188         {"application/vnd.smaf",                                                                "mmf",                          true,           MIME_APPLICATION_VND_SMAF,                                              MIME_APPLICATION_X_SMAF,                                MIME_APPLICATION_SOUNDPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
189         {"application/vnd.rn-realmedia",                                                "rm",                           true,           MIME_APPLICATION_VND_RN_REALMEDIA,                              MIME_APPLICATION_VND_RN_REALMEDIA,              MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
190         {"application/vnd.sun.j2me.java-archive",                               "jar",                          true,           MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE,             MIME_APPLICATION_JAVA_ARCHIVE,                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
191         {"application/vnd.samsung.theme",                                               "thm",                          true,           MIME_APPLICATION_VND_SAMSUNG_THEME,                             MIME_APPLICATION_VND_SAMSUNG_THEME,             MIME_APPLICATION_THEMEVIEWER,                   MIME_MAINTYPE_THEME,            UNDEFINED_BINARY        },
192         {"application/vnd.ms-excel",                                                    "xls",                          true,           MIME_APPLICATION_VND_EXCEL,                                             MIME_APPLICATION_X_EXCEL,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
193         {"application/vnd.ms-powerpoint",                                               "ppt",                          true,           MIME_APPLICATION_VND_POWERPOINT,                                MIME_APPLICATION_VND_POWERPOINT,                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
194         {"applcation/vnd.ms-word",                                                              "doc",                          true,           MIME_APPLICATION_VND_MSWORD,                                    MIME_APPLICATION_MSWORD,                                MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
195
196         //49
197         {"application/x-hdmlc",                                                         "",                                     false,          MIME_APPLICATION_X_HDMLC,                                               MIME_APPLICATION_X_HDMLC,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x13    },
198         {"application/x-x968-user-cert",                                                "",                                     false,          MIME_APPLICATION_X_X968_USERCERT,                               MIME_APPLICATION_X_X968_USERCERT,               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2c    },
199         {"application/x-www-form-urlencoded",                                   "",                                     false,          MIME_APPLICATION_X_WWW_FORM_URLENCODED,                 MIME_APPLICATION_X_WWW_FORM_URLENCODED,         MIME_APPLICATION_NONE,                          MIME_MAINTYPE_APPLICATION,      0x12    },
200         {"application/x-smaf",                                                                  "mmf",                          true,           MIME_APPLICATION_X_SMAF,                                                MIME_APPLICATION_X_SMAF,                                MIME_APPLICATION_SOUNDPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
201         {"application/x-shockwave-flash",                                               "swf",                          true,           MIME_APPLICATION_X_FLASH,                                               MIME_APPLICATION_X_FLASH,                               MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
202         {"application/x-msexcel",                                                               "xls",                          true,           MIME_APPLICATION_X_EXCEL,                                               MIME_APPLICATION_X_EXCEL,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
203         {"application/x-mspowerpoint",                                                  "ppt",                          true,           MIME_APPLICATION_X_POWERPOINT,                                  MIME_APPLICATION_X_POWERPOINT,                  MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
204
205
206         //56
207         {"audio/basic",                                                                         "snd"/*,au"*/,          false,          MIME_AUDIO_BASIC,                                                               MIME_AUDIO_BASIC,                                               MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
208         {"audio/mpeg",                                                                                  "mp3",                          true,           MIME_AUDIO_MPEG,                                                                MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
209         {"audio/mp3",                                                                                   "mp3",                          true,           MIME_AUDIO_MP3,                                                                 MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
210         {"audio/mpg3",                                                                                  "mp3",                          true,           MIME_AUDIO_MPG3,                                                                MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
211         {"audio/mpeg3",                                                                         "mp3",                          true,           MIME_AUDIO_MPEG3,                                                               MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
212         {"audio/mpg",                                                                                   "mp3",                          true,           MIME_AUDIO_MPG,                                                                 MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
213         {"audio/aac",                                                                                   "aac",                          true,           MIME_AUDIO_AAC,                                                                 MIME_AUDIO_AAC,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
214         {"audio/g72",                                                                                   "aac",                          true,           MIME_AUDIO_G72,                                                                 MIME_AUDIO_AAC,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
215         {"audio/amr",                                                                                   "amr",                          true,           MIME_AUDIO_AMR,                                                                 MIME_AUDIO_AMR,                                                 MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
216         {"audio/amr-wb",                                                                                "amr",                          true,           MIME_AUDIO_AMR_WB,                                                              MIME_AUDIO_AMR_WB,                                              MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
217         {"audio/mmf",                                                                                   "mmf",                          true,           MIME_AUDIO_MMF,                                                                 MIME_AUDIO_MMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
218         {"audio/smaf",                                                                                  "mmf",                          true,           MIME_AUDIO_SMAF,                                                                MIME_AUDIO_SMAF,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
219         {"audio/iMelody",                                                                               "imy",                          true,           MIME_AUDIO_IMELODY,                                                             MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
220         {"audio/imelody",                                                                               "imy",                          true,           MIME_AUDIO_IMELODY2,                                                            MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
221         {"audio/melody",                                                                                "imy",                          true,           MIME_AUDIO_MELODY,                                                              MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
222         {"audio/mid",                                                                                   "mid",                          true,           MIME_AUDIO_MID,                                                                 MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
223         {"audio/midi",                                                                                  "mid"/*,midi"*/,        true,           MIME_AUDIO_MIDI,                                                                MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
224         {"audio/sp-midi",                                                                               "spm"/*,midi"*/,        true,           MIME_AUDIO_SP_MIDI,                                                             MIME_AUDIO_SP_MIDI,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
225         {"audio/wave",                                                                                  "wav",                          true,           MIME_AUDIO_WAVE,                                                                MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
226         {"audio/wav",                                                                                   "wav",                          true,           MIME_AUDIO_WAV,                                                         MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
227         {"audio/3gpp",                                                                                  "3gp",                          true,           MIME_AUDIO_3GPP,                                                                MIME_AUDIO_3GPP,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
228         {"audio/mp4",                                                                                   "mp4",                          true,           MIME_AUDIO_MP4,                                                                 MIME_AUDIO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
229         {"audio/MP4A-LATM",                                                                     "mp4",                          true,           MIME_AUDIO_MP4A_LATM,                                                   MIME_AUDIO_MP4A_LATM,                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
230         {"audio/m4a",                                                                                   "m4a",                          true,           MIME_AUDIO_M4A,                                                                 MIME_AUDIO_M4A,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
231         {"audio/mpeg4",                                                                         "mp4",                          true,           MIME_AUDIO_MPEG4,                                                               MIME_AUDIO_MPEG4,                                               MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
232         {"audio/wma",                                                                                   "wma",                          true,           MIME_AUDIO_WMA,                                                                 MIME_AUDIO_WMA,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
233         {"audio/xmf",                                                                                   "xmf",                          true,           MIME_AUDIO_XMF,                                                                 MIME_AUDIO_XMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
234         {"audio/imy",                                                                                   "imy",                          true,           MIME_AUDIO_IMY,                                                                 MIME_AUDIO_IMY,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
235         {"audio/mobile-xmf",                                                                    "mxmf",                         true,           MIME_AUDIO_MOBILE_XMF,                                                  MIME_AUDIO_XMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
236
237         // 85
238         {"audio/vnd.rn-realaudio",                                                              "rm"/*,ram,ra"*/,       true,           MIME_AUDIO_VND_RN_REALAUDIO,                                    MIME_AUDIO_VND_RN_REALAUDIO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
239
240         //86
241         {"audio/x-mpeg",                                                                                "mp3",                          true,           MIME_AUDIO_X_MPEG,                                                              MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
242         {"audio/x-mp3",                                                                         "mp3",                          true,           MIME_AUDIO_X_MP3,                                                               MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
243         {"audio/x-mpeg3",                                                                               "mp3",                          true,           MIME_AUDIO_X_MPEG3,                                                             MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
244         {"audio/x-mpg",                                                                         "mp3",                          true,           MIME_AUDIO_X_MPG,                                                               MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
245         {"audio/x-amr",                                                                         "amr",                          true,           MIME_AUDIO_X_AMR,                                                               MIME_AUDIO_AMR,                                                 MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
246         {"audio/x-mmf",                                                                         "mmf",                          true,           MIME_AUDIO_X_MMF,                                                               MIME_AUDIO_MMF,                                                 MIME_APPLICATION_VOICEMEMO,                             MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
247         {"audio/x-smaf",                                                                                "mmf",                          true,           MIME_AUDIO_X_SMAF,                                                              MIME_AUDIO_SMAF,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
248         {"audio/x-iMelody",                                                                     "imy",                          true,           MIME_AUDIO_X_IMELODY,                                                   MIME_AUDIO_IMELODY,                                             MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
249         {"audio/x-midi",                                                                                "mid"/*,midi"*/,        true,           MIME_AUDIO_X_MIDI,                                                              MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
250         {"audio/x-mpegaudio",                                                                   "mp3",                          true,           MIME_AUDIO_X_MPEGAUDIO,                                                 MIME_AUDIO_MP3,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
251         {"audio/x-pn-realaudio",                                                                "ra"/*,ram,ra"*/,       true,           MIME_AUDIO_X_PN_REALAUDIO,                                              MIME_AUDIO_VND_RN_REALAUDIO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
252         {"audio/x-pn-multirate-realaudio",                                              "rm"/*,ram,ra"*/,       true,           MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO,                    MIME_AUDIO_VND_RN_REALAUDIO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
253         {"audio/x-pn-multirate-realaudio-live",                         "rm"/*,ram,ra"*/,       true,           MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE,               MIME_AUDIO_VND_RN_REALAUDIO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
254         {"audio/x-wave",                                                                                "wav",                          true,           MIME_AUDIO_X_WAVE,                                                              MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
255         {"audio/x-wav",                                                                         "wav",                          true,           MIME_AUDIO_X_WAV,                                                               MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
256         {"audio/x-ms-wma",                                                                              "wma",                          true,           MIME_AUDIO_X_MS_WMA,                                                    MIME_AUDIO_WAVE,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
257         {"audio/x-mid",                                                                         "mid",                          true,           MIME_AUDIO_X_MID,                                                               MIME_AUDIO_MID,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
258         {"audio/x-ms-asf",                                                                              "asf",                          true,           MIME_AUDIO_X_MS_ASF,                                                    MIME_AUDIO_X_MS_ASF,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
259         {"audio/x-xmf",                                                                         "xmf",                          true,           MIME_AUDIO_X_XMF,                                                               MIME_AUDIO_XMF,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,                    UNDEFINED_BINARY        },
260
261         //105
262         {"image/gif",                                                                                   "gif",                          false,          MIME_IMAGE_GIF,                                                                 MIME_IMAGE_GIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    0x1d    },
263         {"image/jpeg",                                                                                  "jpg"/*,jpeg,jpe,jpz"*/,        false,  MIME_IMAGE_JPEG,                                                        MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            0x1e    },
264         {"image/jpg",                                                                                   "jpg",                          false,          MIME_IMAGE_JPG,                                                                 MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
265         {"image/tiff",                                                                                  "tif"/*,tiff"*/,        false,          MIME_IMAGE_TIFF,                                                                MIME_IMAGE_TIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    0x1f    },
266         {"image/tif",                                                                                   "tif",                          false,          MIME_IMAGE_TIF,                                                                 MIME_IMAGE_TIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
267         {"image/png",                                                                                   "png"/*,pnz"*/,         false,          MIME_IMAGE_PNG,                                                                 MIME_IMAGE_PNG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    0x20    },
268         {"image/wbmp",                                                                                  "wbmp",                         false,          MIME_IMAGE_WBMP,                                                                MIME_IMAGE_WBMP,                                                MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
269         {"image/pjpeg",                                                                         "jpg",                          false,          MIME_IMAGE_PJPEG,                                                               MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
270         {"image/bmp",                                                                                   "bmp",                          false,          MIME_IMAGE_BMP,                                                                 MIME_IMAGE_BMP,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
271         {"image/svg+xml",                                                                               "svg",                          false,          MIME_IMAGE_SVG,                                                                 MIME_IMAGE_SVG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
272         {"image/svg-xml",                                                                               "svg",                          false,          MIME_IMAGE_SVG1,                                                                MIME_IMAGE_SVG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,                    UNDEFINED_BINARY        },
273
274         //116
275         {"image/vnd.wap.wbmp",                                                                  "wbmp",                         false,          MIME_IMAGE_VND_WAP_WBMP,                                                MIME_IMAGE_WBMP,                                                MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            0x21    },
276         {"image/vnd.tmo.my5-gif",                                                               "gif",                          false,          MIME_IMAGE_VND_TMO_GIF,                                                 MIME_IMAGE_GIF,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
277         {"image/vnd.tmo.my5-jpg",                                                               "jpg",                          false,          MIME_IMAGE_VND_TMO_JPG,                                                 MIME_IMAGE_JPG,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
278
279         // 119
280         {"image/x-bmp",                                                                         "bmp",                          false,          MIME_IMAGE_X_BMP,                                                               MIME_IMAGE_BMP,                                                 MIME_APPLICATION_IMAGEVIEWER,                   MIME_MAINTYPE_IMAGE,            UNDEFINED_BINARY        },
281
282         // 120
283         {"message/rfc822",                                                                              "elm",                          false,          MIME_MESSAGE_RFC822,                                                    MIME_MESSAGE_RFC822,                                    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_MESSAGE,          UNDEFINED_BINARY        },
284
285         //121
286         {"multipart/mixed",                                                                     "",                                     false,          MIME_MULTIPART_MIXED,                                                   MIME_MULTIPART_MIXED,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0c    },
287         {"multipart/related",                                                                   "",                                     false,          MIME_MULTIPART_RELATED,                                                 MIME_MULTIPART_RELATED,                                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
288         {"multipart/alternative",                                                               "",                                     false,          MIME_MULTIPART_ALTERNATIVE,                                             MIME_MULTIPART_ALTERNATIVE,                             MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0f    },
289         {"multipart/form-data",                                                         "",                                     false,          MIME_MULTIPART_FORM_DATA,                                               MIME_MULTIPART_FORM_DATA,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0d    },
290         {"multipart/byterange",                                                         "",                                     false,          MIME_MULTIPART_BYTERANGE,                                               MIME_MULTIPART_BYTERANGE,                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      0x0e    },
291         {"multipart/report",                                                                    "",                                     false,          MIME_MULTIPART_REPORT,                                                  MIME_MULTIPART_REPORT,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
292         {"multipart/voice-message",                                                     "",                                     false,          MIME_MULTIPART_VOICE_MESSAGE,                                   MIME_MULTIPART_VOICE_MESSAGE,                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_APPLICATION,      UNDEFINED_BINARY        },
293
294         //128
295         {"text/txt",                                                                                    "txt",                          false,          MIME_TEXT_TXT,                                                                  MIME_TEXT_TXT,                                                  MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_TEXT,                     UNDEFINED_BINARY        },
296         {"text/html",                                                                                   "html"/*,htm"*/,        false,          MIME_TEXT_HTML,                                                                 MIME_TEXT_HTML,                                                 MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x02    },
297         {"text/plain",                                                                                  "txt"/*,vbm,url"*/,                             false,          MIME_TEXT_PLAIN,                                                                MIME_TEXT_PLAIN,                                                MIME_APPLICATION_PICSELVIEWER,                  MIME_MAINTYPE_TEXT,                     0x03    },
298         {"text/css",                                                                                    "",                                     false,          MIME_TEXT_CSS,                                                                  MIME_TEXT_CSS,                                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x3d    },
299         {"text/xml",                                                                                    "",                                     false,          MIME_TEXT_XML,                                                                  MIME_TEXT_XML,                                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x28    },
300         {"text/iMelody",                                                                                "imy",                          true,           MIME_TEXT_IMELODY,                                                              MIME_TEXT_IMELODY,                                              MIME_APPLICATION_SOUNDPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
301
302         //134
303         {"text/vnd.wap.wmlscript",                                                              "",                                     false,          MIME_TEXT_VND_WAP_WMLSCRIPT,                                    MIME_TEXT_VND_WAP_WMLSCRIPT,                    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x09    },
304         {"text/vnd.wap.wml",                                                                    "wml",                          false,          MIME_TEXT_VND_WAP_WML,                                                  MIME_TEXT_VND_WAP_WML,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x08    },
305         {"text/vnd.wap.wta-event",                                                              "",                                     false,          MIME_TEXT_VND_WAP_WTA_EVENT,                                    MIME_TEXT_VND_WAP_WTA_EVENT,                    MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x0a    },
306         {"text/vnd.wap.connectivity-xml",                                               "",                                     false,          MIME_TEXT_VND_WAP_CONNECTIVITY_XML,                             MIME_TEXT_VND_WAP_CONNECTIVITY_XML,             MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x35    },
307         {"text/vnd.wap.si",                                                                     "",                                     false,          MIME_TEXT_VND_WAP_SI,                                                   MIME_TEXT_VND_WAP_SI,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2d    },
308         {"text/vnd.wap.sl",                                                                     "",                                     false,          MIME_TEXT_VND_WAP_SL,                                                   MIME_TEXT_VND_WAP_SL,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x2f    },
309         {"text/vnd.wap.co",                                                                     "",                                     false,          MIME_TEXT_VND_WAP_CO,                                                   MIME_TEXT_VND_WAP_CO,                                   MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x31    },
310         {"text/vnd.sun.j2me.app-descriptor",                                    "jad",                          true,           MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR,                  MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR,  MIME_APPLICATION_NONE,                                          MIME_MAINTYPE_ETC,                      UNDEFINED_BINARY        },
311
312
313         //142
314         {"text/x-hdml",                                                                         "",                                     false,          MIME_TEXT_X_HDML,                                                               MIME_TEXT_X_HDML,                                               MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x04    },
315         {"text/x-vCalendar",                                                                    "vcs",                          true,           MIME_TEXT_X_VCALENDAR,                                                  MIME_TEXT_X_VCALENDAR,                                  MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x06    },
316         {"text/x-vCard",                                                                                "vcf",                          true,           MIME_TEXT_X_VCARD,                                                              MIME_TEXT_X_VCARD,                                              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     0x07    },
317         {"text/x-iMelody",                                                                              "imy",                          true,           MIME_TEXT_X_IMELODY,                                                    MIME_TEXT_X_IMELODY,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
318         {"text/x-imelody",                                                                              "imy",                          true,           MIME_TEXT_X_IMELODY2,                                                   MIME_TEXT_X_IMELODY,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_AUDIO,            UNDEFINED_BINARY        },
319         {"text/x-vnote",                                                                                "vnt",                          true,           MIME_TEXT_X_VNOTE,                                                              MIME_TEXT_X_VNOTE,                                              MIME_APPLICATION_NONE,                                  MIME_MAINTYPE_TEXT,                     UNDEFINED_BINARY        },
320
321         //148
322         {"video/mpeg4",                                                                         "mp4",                          true,           MIME_VIDEO_MPEG4,                                                               MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
323         {"video/mp4",                                                                                   "mp4",                          true,           MIME_VIDEO_MP4,                                                                 MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
324         {"video/h263",                                                                                  "3gp"/*,3gpp,mp4"*/,true,               MIME_VIDEO_H263,                                                                MIME_VIDEO_H263,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
325         {"video/3gpp",                                                                                  "3gp"/*,3gpp"*/,        true,           MIME_VIDEO_3GPP,                                                                MIME_VIDEO_3GPP,                                                MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
326         {"video/3gp",                                                                                   "3gp"/*,3gpp"*/,        true,           MIME_VIDEO_3GP,                                                                 MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
327         {"video/avi",                                                                                   "avi",                          false,          MIME_VIDEO_AVI,                                                                 MIME_VIDEO_AVI,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
328         {"video/sdp",                                                                                   "sdp",                          true,           MIME_VIDEO_SDP,                                                                 MIME_APPLICATION_SDP,                                                   MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
329         {"video/mp4v-es",                                                                                       "3gp",                          true,           MIME_VIDEO_MP4_ES,                                                                      MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
330         {"video/mpeg",                                                                                  "3gp",                          true,           MIME_VIDEO_MPEG,                                                                        MIME_VIDEO_3GP,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,            UNDEFINED_BINARY        },
331
332         // 157
333         {"video/vnd.rn-realvideo",                                                              "rm",                           true,           MIME_VIDEO_VND_RN_REALVIDEO,                                    MIME_VIDEO_VND_RN_REALVIDEO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
334         {"video/vnd.rn-realmedia",                                                              "rm",                           true,           MIME_VIDEO_VND_RN_REALMEDIA,                                    MIME_VIDEO_VND_RN_REALMEDIA,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
335
336         //159
337         {"video/x-mp4",                                                                         "mp4",                          true,           MIME_VIDEO_X_MP4,                                                               MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
338         {"video/x-pv-mp4",                                                                              "mp4",                          true,           MIME_VIDEO_X_PV_MP4,                                                    MIME_VIDEO_MP4,                                                 MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
339         {"video/x-pn-realvideo",                                                                "rv",                           true,           MIME_VIDEO_X_PN_REALVIDEO,                                              MIME_VIDEO_VND_RN_REALVIDEO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
340         {"video/x-pn-multirate-realvideo",                                              "rm",                           true,           MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO,                    MIME_VIDEO_VND_RN_REALVIDEO,                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
341         {"video/x-ms-wmv",                                                                              "wmv",                          true,           MIME_VIDEO_X_MS_WMV,                                                    MIME_VIDEO_X_MS_WMV,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
342         {"video/x-ms-asf",                                                                              "asf",                          true,           MIME_VIDEO_X_MS_ASF,                                                    MIME_VIDEO_X_MS_ASF,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        },
343         {"video/x-pv-pvx",                                                                              "pvx",                          true,           MIME_VIDEO_X_PV_PVX,                                                    MIME_VIDEO_X_PV_PVX,                                    MIME_APPLICATION_MEDIAPLAYER,                   MIME_MAINTYPE_VIDEO,                    UNDEFINED_BINARY        }
344
345 };
346
347 /**********              MIME table information     ***********/
348 static const int mimeTableIndex[] = {
349         1,                      16,                     49,
350         56,                     85,                     86,
351         105,            116,            119,
352         120,            120,            120,
353         121,            121,            121,
354         128,            134,            142,
355         148,            157,            159
356 };
357
358
359 /*****************              Extension definition      *****************/
360 static const ExtTable extTable[] = {
361
362         {"txt",                 MIME_TEXT_PLAIN},
363         {"html",                        MIME_TEXT_HTML},
364         {"htm",                 MIME_TEXT_HTML},
365         {"xhtml",                       MIME_APPLICATION_XHTML_XML},
366         {"wml",                 MIME_TEXT_VND_WAP_WML},
367         {"vcs",                 MIME_TEXT_X_VCALENDAR},
368         {"vcf",                 MIME_TEXT_X_VCARD},
369         {"vnt",                 MIME_TEXT_X_VNOTE},
370         {"smil",                        MIME_APPLICATION_SMIL},
371         {"eml",                 MIME_MESSAGE_RFC822},
372         {"gif",                 MIME_IMAGE_GIF},
373         {"jpeg",                        MIME_IMAGE_JPEG},
374         {"jpg",                 MIME_IMAGE_JPEG},
375         {"jpe",                 MIME_IMAGE_JPEG},
376         {"jpz",                 MIME_IMAGE_JPEG},
377         {"tiff",                        MIME_IMAGE_TIFF},
378         {"tif",                 MIME_IMAGE_TIFF},
379         {"png",                 MIME_IMAGE_PNG},
380         {"pnz",                 MIME_IMAGE_PNG},
381         {"wbmp",                        MIME_IMAGE_VND_WAP_WBMP},
382         {"bmp",                 MIME_IMAGE_BMP},
383         {"au",                          MIME_AUDIO_BASIC},
384         {"snd",                 MIME_AUDIO_BASIC},
385         {"mp3",                 MIME_AUDIO_MP3},
386         {"aac",                 MIME_AUDIO_AAC},
387         {"mp4",                 MIME_AUDIO_MP4},
388         {"m4a",                 MIME_AUDIO_M4A},
389         {"amr",                 MIME_AUDIO_X_AMR},
390         {"mmf",                 MIME_APPLICATION_VND_SMAF},
391         {"imy",                 MIME_AUDIO_X_IMELODY},
392         {"mid",                 MIME_AUDIO_MID},
393         {"midi",                        MIME_AUDIO_MID},
394         {"spm",                 MIME_AUDIO_SP_MIDI},
395         {"wav",                 MIME_AUDIO_WAVE},
396         {"3gp",                 MIME_AUDIO_3GPP},
397         {"3gpp",                        MIME_VIDEO_3GPP},
398         {"rm",                          MIME_VIDEO_VND_RN_REALVIDEO},
399         {"ra",                          MIME_AUDIO_VND_RN_REALAUDIO},
400         {"ram",                 MIME_AUDIO_VND_RN_REALAUDIO},
401         {"wma",                 MIME_AUDIO_X_MS_WMA},
402         {"smp",                 MIME_APPLICATION_STUDIOM},
403         {"avi",                 MIME_VIDEO_AVI},
404         {"sdp",                 MIME_APPLICATION_SDP},
405         {"vbm",                 MIME_TEXT_PLAIN},
406         {"url",                 MIME_TEXT_PLAIN},
407         {"jad",                 MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR},
408         {"jar",                 MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE},
409         {"dd",                          MIME_APPLICATION_VND_OMA_DD_XML},
410         {"dm",                          MIME_APPLICATION_VND_OMA_DRM_MESSAGE},
411         {"dcf",                 MIME_APPLICATION_VND_OMA_DRM_CONTENT},
412         {"rv",                          MIME_VIDEO_X_PN_REALVIDEO},
413         {"ro",                          MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML},
414         {"thm",                 MIME_APPLICATION_VND_SAMSUNG_THEME},
415         {"xls",                 MIME_APPLICATION_X_EXCEL},
416         {"pdf",                 MIME_APPLICATION_PDF},
417         {"ppt",                 MIME_APPLICATION_X_POWERPOINT},
418         {"swf",                 MIME_APPLICATION_X_FLASH},
419         {"svg",                 MIME_IMAGE_SVG},
420         {"doc",                 MIME_APPLICATION_MSWORD},
421         {"wmv",                 MIME_VIDEO_X_MS_WMV},
422         {"asf",                 MIME_VIDEO_X_MS_ASF},
423         {"3ga",                 MIME_AUDIO_M4A},
424         {"xmf",                 MIME_AUDIO_XMF},
425         {"mxmf",                        MIME_AUDIO_MOBILE_XMF},
426         {"pvx",                 MIME_VIDEO_X_PV_PVX},
427         {"oro",                 MIME_APPLICATION_VND_OMA_DRM_RO_XML},
428         {"odf",                 MIME_APPLICATION_VND_OMA_DRM_DCF}
429 };
430
431
432 static int mimeTableEnum[] =
433 {
434         MIME_ASTERISK   ,
435
436         MIME_APPLICATION_XML    ,
437         MIME_APPLICATION_WML_XML        ,
438         MIME_APPLICATION_XHTML_XML      ,
439         MIME_APPLICATION_JAVA_VM        ,
440         MIME_APPLICATION_SMIL   ,
441         MIME_APPLICATION_JAVA_ARCHIVE   ,
442         MIME_APPLICATION_JAVA   ,
443         MIME_APPLICATION_OCTET_STREAM   ,
444         MIME_APPLICATION_STUDIOM        ,
445         MIME_APPLICATION_FUNMEDIA       ,
446         MIME_APPLICATION_MSWORD         ,
447         MIME_APPLICATION_PDF            ,
448         MIME_APPLICATION_SDP            ,
449         MIME_APPLICATION_RAM            ,
450         MIME_APPLICATION_ASTERIC        ,
451
452
453         MIME_APPLICATION_VND_WAP_XHTMLXML       ,
454         MIME_APPLICATION_VND_WAP_WMLC   ,
455         MIME_APPLICATION_VND_WAP_WMLSCRIPTC     ,
456         MIME_APPLICATION_VND_WAP_WTA_EVENTC     ,
457         MIME_APPLICATION_VND_WAP_UAPROF ,
458         MIME_APPLICATION_VND_WAP_SIC    ,
459         MIME_APPLICATION_VND_WAP_SLC    ,
460         MIME_APPLICATION_VND_WAP_COC    ,
461         MIME_APPLICATION_VND_WAP_SIA    ,
462         MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML     ,
463         MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA    ,
464         MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES   ,
465         MIME_APPLICATION_VND_WAP_MULTIPART_MIXED        ,
466         MIME_APPLICATION_VND_WAP_MULTIPART_RELATED      ,
467         MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE  ,
468         MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC      ,
469         MIME_APPLICATION_VND_WAP_WBXML  ,
470         MIME_APPLICATION_VND_OMA_DD_XML ,
471         MIME_APPLICATION_VND_OMA_DRM_MESSAGE    ,
472         MIME_APPLICATION_VND_OMA_DRM_CONTENT    ,
473         MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML ,
474         MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML       ,
475         MIME_APPLICATION_VND_OMA_DRM_RO_XML     ,
476         MIME_APPLICATION_VND_OMA_DRM_DCF        ,
477         MIME_APPLICATION_VND_OMA_ROAPPDU_XML    ,
478         MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML,
479         MIME_APPLICATION_VND_SMAF       ,
480         MIME_APPLICATION_VND_RN_REALMEDIA       ,
481         MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE      ,
482         MIME_APPLICATION_VND_SAMSUNG_THEME      ,
483         MIME_APPLICATION_VND_EXCEL      ,
484         MIME_APPLICATION_VND_POWERPOINT,
485         MIME_APPLICATION_VND_MSWORD,
486
487
488         MIME_APPLICATION_X_HDMLC        ,
489         MIME_APPLICATION_X_X968_USERCERT        ,
490         MIME_APPLICATION_X_WWW_FORM_URLENCODED  ,
491         MIME_APPLICATION_X_SMAF ,
492         MIME_APPLICATION_X_FLASH        ,
493         MIME_APPLICATION_X_EXCEL        ,
494         MIME_APPLICATION_X_POWERPOINT   ,
495
496
497         MIME_AUDIO_BASIC,
498         MIME_AUDIO_MPEG ,
499         MIME_AUDIO_MP3  ,
500         MIME_AUDIO_MPG3 ,
501         MIME_AUDIO_MPEG3        ,
502         MIME_AUDIO_MPG  ,
503         MIME_AUDIO_AAC  ,
504         MIME_AUDIO_G72  ,
505         MIME_AUDIO_AMR  ,
506         MIME_AUDIO_AMR_WB       ,
507         MIME_AUDIO_MMF  ,
508         MIME_AUDIO_SMAF ,
509         MIME_AUDIO_IMELODY      ,
510         MIME_AUDIO_IMELODY2 ,
511         MIME_AUDIO_MELODY       ,
512         MIME_AUDIO_MID  ,
513         MIME_AUDIO_MIDI ,
514         MIME_AUDIO_SP_MIDI      ,
515         MIME_AUDIO_WAVE ,
516         MIME_AUDIO_WAV ,
517         MIME_AUDIO_3GPP ,
518         MIME_AUDIO_MP4  ,
519         MIME_AUDIO_MP4A_LATM    ,
520         MIME_AUDIO_M4A  ,
521         MIME_AUDIO_MPEG4,
522         MIME_AUDIO_WMA,
523         MIME_AUDIO_XMF,
524         MIME_AUDIO_IMY,
525         MIME_AUDIO_MOBILE_XMF,
526
527
528         MIME_AUDIO_VND_RN_REALAUDIO     ,
529
530
531         MIME_AUDIO_X_MPEG       ,
532         MIME_AUDIO_X_MP3        ,
533         MIME_AUDIO_X_MPEG3      ,
534         MIME_AUDIO_X_MPG        ,
535         MIME_AUDIO_X_AMR        ,
536         MIME_AUDIO_X_MMF        ,
537         MIME_AUDIO_X_SMAF       ,
538         MIME_AUDIO_X_IMELODY    ,
539         MIME_AUDIO_X_MIDI       ,
540         MIME_AUDIO_X_MPEGAUDIO  ,
541         MIME_AUDIO_X_PN_REALAUDIO       ,
542         MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO     ,
543         MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE        ,
544         MIME_AUDIO_X_WAVE       ,
545         MIME_AUDIO_X_WAV        ,
546         MIME_AUDIO_X_MS_WMA     ,
547         MIME_AUDIO_X_MID ,
548         MIME_AUDIO_X_MS_ASF ,
549         MIME_AUDIO_X_XMF,
550
551
552         MIME_IMAGE_GIF  ,
553         MIME_IMAGE_JPEG ,
554         MIME_IMAGE_JPG  ,
555         MIME_IMAGE_TIFF ,
556         MIME_IMAGE_TIF  ,
557         MIME_IMAGE_PNG  ,
558         MIME_IMAGE_WBMP ,
559         MIME_IMAGE_PJPEG        ,
560         MIME_IMAGE_BMP  ,
561         MIME_IMAGE_SVG  ,
562         MIME_IMAGE_SVG1 ,
563         MIME_IMAGE_VND_WAP_WBMP ,
564         MIME_IMAGE_VND_TMO_GIF,
565         MIME_IMAGE_VND_TMO_JPG,
566         MIME_IMAGE_X_BMP        ,
567
568
569         MIME_MESSAGE_RFC822     ,
570
571
572         MIME_MULTIPART_MIXED    ,
573         MIME_MULTIPART_RELATED  ,
574         MIME_MULTIPART_ALTERNATIVE      ,
575         MIME_MULTIPART_FORM_DATA        ,
576         MIME_MULTIPART_BYTERANGE        ,
577         MIME_MULTIPART_REPORT   ,
578         MIME_MULTIPART_VOICE_MESSAGE    ,
579
580
581         MIME_TEXT_TXT   ,
582         MIME_TEXT_HTML  ,
583         MIME_TEXT_PLAIN ,
584         MIME_TEXT_CSS   ,
585         MIME_TEXT_XML   ,
586         MIME_TEXT_IMELODY       ,
587         MIME_TEXT_VND_WAP_WMLSCRIPT     ,
588         MIME_TEXT_VND_WAP_WML   ,
589         MIME_TEXT_VND_WAP_WTA_EVENT     ,
590         MIME_TEXT_VND_WAP_CONNECTIVITY_XML      ,
591         MIME_TEXT_VND_WAP_SI    ,
592         MIME_TEXT_VND_WAP_SL    ,
593         MIME_TEXT_VND_WAP_CO    ,
594         MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR   ,
595         MIME_TEXT_X_HDML        ,
596         MIME_TEXT_X_VCALENDAR   ,
597         MIME_TEXT_X_VCARD       ,
598         MIME_TEXT_X_IMELODY     ,
599         MIME_TEXT_X_IMELODY2 ,
600         MIME_TEXT_X_VNOTE ,
601
602
603         MIME_VIDEO_MPEG4        ,
604         MIME_VIDEO_MP4  ,
605         MIME_VIDEO_H263 ,
606         MIME_VIDEO_3GPP ,
607         MIME_VIDEO_3GP  ,
608         MIME_VIDEO_AVI  ,
609         MIME_VIDEO_SDP  ,
610         MIME_VIDEO_MP4_ES,
611         MIME_VIDEO_MPEG ,
612         MIME_VIDEO_VND_RN_REALVIDEO     ,
613         MIME_VIDEO_VND_RN_REALMEDIA     ,
614         MIME_VIDEO_X_MP4        ,
615         MIME_VIDEO_X_PV_MP4     ,
616         MIME_VIDEO_X_PN_REALVIDEO       ,
617         MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO     ,
618         MIME_VIDEO_X_MS_WMV ,
619         MIME_VIDEO_X_MS_ASF,
620         MIME_VIDEO_X_PV_PVX ,
621
622         MIME_UNKNOWN    // MIME_MAX
623 };
624
625
626 #define MIME_MAX_NUM    166
627 #define EXT_MAX 67
628 #define MIME_SUB_TYPE_VND       1
629 #define MIME_SUB_TYPE_X         2
630
631 int __MimeGetTableIndexInt(MimeType mime);
632 int __MimeGetTableIndexString(const char *szMime);
633 MimeMainType __MimeGetMainTypeName(const char *szType);
634
635
636 /*
637  * This function checks whether a mime is downloadable or not.
638  *
639  * @param       mime [in] Enumeration number for a MIME type.
640  * @return      This function returns true if downloadable, or false.
641  */
642 bool MimeIsDownloadableInt(MimeType mime)
643 {
644         int index;
645
646         index = __MimeGetTableIndexInt(mime);
647         if (index == MIME_UNKNOWN)
648                 return false;
649
650         return mimeTable[index].bDownloadable;
651 }
652
653 /*
654  * This function checks whether a mime is downloadable or not.
655  *
656  * @param       mime [in] MIME string.
657  * @return      This function returns true if downloadable, or false.
658  */
659 bool MimeIsDownloadableString(const char *szMime)
660 {
661         int index;
662
663         index = __MimeGetTableIndexString(szMime);
664         if (index == MIME_UNKNOWN)
665                 return false;
666
667         return mimeTable[index].bDownloadable;
668 }
669
670 /*
671  * This function checks main type of a MIME.
672  *
673  * @param       mime [in] Enumeration number for a MIME type.
674  * @return      This function returns main type of a MIME.
675  */
676 MimeMainType MimeGetMainTypeInt(MimeType mime)
677 {
678         int index;
679
680         index = __MimeGetTableIndexInt(mime);
681         if (index == MIME_UNKNOWN)
682                 return MIME_MAINTYPE_ETC;
683
684         return mimeTable[index].mainType;
685 }
686
687 /*
688  * This function checks main type of a MIME.
689  *
690  * @param       mime [in] MIME string.
691  * @return      This function returns main type of a MIME.
692  */
693 MimeMainType MimeGetMainTypeString(const char *szMime)
694 {
695         int index;
696
697         index = __MimeGetTableIndexString(szMime);
698         if (index == MIME_UNKNOWN)
699                 return MIME_MAINTYPE_ETC;
700
701         return mimeTable[index].mainType;
702 }
703
704 /*
705  * This function returns a extension name for a specified MIME.
706  *
707  * @param       mime [in] Enumeration number for a MIME type.
708  * @return      This function returns Extension string.
709  */
710 char *MimeGetExtFromMimeInt(MimeType mime)
711 {
712         int index;
713
714         index = __MimeGetTableIndexInt(mime);
715         if (index == MIME_UNKNOWN)
716                 return NULL;
717
718         return (char *)mimeTable[index].szExt;
719 }
720
721 /*
722  * This function returns a extension name for a specified MIME.
723  *
724  * @param       mime [in] MIME string.
725  * @return      This function returns Extension string.
726  */
727 char *MimeGetExtFromMimeString(const char *szMime)
728 {
729         int index;
730
731         index = __MimeGetTableIndexString(szMime);
732         if (index == MIME_UNKNOWN)
733                 return NULL;
734
735         return (char *)mimeTable[index].szExt;
736 }
737
738
739 /*
740  * This function returns a MIME type for a specified Extension.
741  *
742  * @param       mime [in] Extension string.
743  * @return      This function returns MIME string.
744  */
745 char *MimeGetMimeFromExtString(const char *szExt)
746 {
747         int i;
748
749         for (i = 0; i < EXT_MAX; i++) {
750                 if (!strcasecmp( extTable[i].szExt, szExt)) {
751                         int index;
752
753                         index = __MimeGetTableIndexInt(extTable[i].mimeType);
754                         if (index == MIME_UNKNOWN)
755                                 return NULL;
756
757                         return (char *)mimeTable[index].szMIME;
758                 }
759         }
760
761         return NULL;
762 }
763
764 /*
765  * This function returns a MIME type for a specified Extension.
766  *
767  * @param       mime [in] Extension string.
768  * @return      This function returns MIME string.
769  */
770 MimeType MimeGetMimeFromExtInt(const char *szExt)
771 {
772         int i;
773
774         for (i = 0; i < EXT_MAX; i++) {
775                 if (!strcasecmp( extTable[i].szExt, szExt))
776                         return extTable[i].mimeType;
777         }
778
779         return MIME_UNKNOWN;
780 }
781
782 /*
783  * This function returns index number in MIME definition table with MIME enumeration.
784  * Internal function.
785  */
786 int __MimeGetTableIndexInt(MimeType mime)
787 {
788         int type;
789         int subtype;
790         int index;
791         int tableIndex;
792
793         if (mime == MIME_UNKNOWN)
794                 return MIME_UNKNOWN;
795
796         type = (mime & 0xf000) >> 12;
797         subtype = (mime & 0x0f00) >> 8;
798         index = (mime & 0x003f);
799
800         //If 'type' is zero, mimeTableIndex's array value have a minus value
801         //If 'type' is zero, mime type is '*/*'
802         if (type == 0)
803                 tableIndex = 0;
804         else
805                 tableIndex = mimeTableIndex[(type - 1) * 3 + subtype] + index;
806
807         return tableIndex;
808 }
809
810
811 #define MIME_MAX_LEN    43
812 /*
813  * This function returns index number in MIME definition table with MIME string.
814  * Internal function.
815  */
816 int __MimeGetTableIndexString(const char *szMime)
817 {
818         int type;
819         int subtype;
820         char szType[50];
821         char szSubType[50];
822         char *szTmpStart = NULL;
823         char c;
824         int i = 0;
825         int j = 0;
826         int start;
827         int end;
828         char *szMIMEType = NULL;
829         int len;
830
831         if (szMime == NULL) {
832                 MSG_DEBUG("szMime is NULL");
833                 return MIME_UNKNOWN;
834         }
835
836         szMIMEType = (char * )malloc(strlen(szMime) + 1);
837
838         if (szMIMEType == NULL) {
839                 MSG_DEBUG("szMime is NULL");
840                  return MIME_UNKNOWN;
841         }
842
843         memset(szMIMEType, 0, strlen(szMime) + 1);
844
845         if (!strcmp(szMime, "*/*")) {
846                 free(szMIMEType);
847                 return 0;
848         }
849         strcpy(szMIMEType, szMime);
850         type = 0;
851         subtype = 0;
852
853         szTmpStart = szMIMEType;
854         len = strlen(szTmpStart);
855
856         while (true) {
857                 if (i >= len) {
858                         free(szMIMEType);
859                         return MIME_UNKNOWN;
860                 }
861
862                 c = szTmpStart[i++];
863
864                 if (c == '/') {
865                         szType[j] = '\0';
866                         type = __MimeGetMainTypeName(szType);
867                         szTmpStart = &szTmpStart[i];
868                         break;
869                 } else
870                         szType[j++] = c;
871         }
872
873         i = 0;
874         j = 0;
875         len = strlen(szTmpStart);
876
877         while (true) {
878                 c = szTmpStart[i++];
879                 if (i > len) {
880                         szSubType[j] = '\0';
881                         break;
882                 }
883
884                 if (c == '.') {
885                         szSubType[j] = '\0';
886                         if (!strcasecmp(szSubType, "vnd"))
887                                 subtype = MIME_SUB_TYPE_VND;
888                         break;
889                 } else if (c == '-') {
890                         szSubType[j] = '\0';
891                         if (!strcasecmp(szSubType, "x"))
892                                 subtype = MIME_SUB_TYPE_X;
893                         break;
894                 } else
895                         szSubType[j++] = c;
896         }
897
898
899         start = mimeTableIndex[type * 3 + subtype];
900
901         if (type == MIME_MAINTYPE_VIDEO && subtype == MIME_SUB_TYPE_X)
902                 end = MIME_MAX_NUM;
903         else
904                 end = mimeTableIndex[type * 3 + subtype + 1];
905
906         if (start == end && type < MIME_MAINTYPE_VIDEO) {
907                 end = mimeTableIndex[(type + 1) * 3 + subtype + 1];
908         }
909
910
911         for (i = start; i < end; i++) {
912                 if (i >= MIME_MAX_NUM)
913                         break;
914
915                 if (!strcasecmp(mimeTable[i].szMIME, szMime)) {
916                         free(szMIMEType);
917                         return i;
918                 }
919         }
920
921         free(szMIMEType);
922         return MIME_UNKNOWN;
923 }
924
925 /*
926  * This function returns main type of MIME : Internal function.
927  */
928 MimeMainType __MimeGetMainTypeName(const char *szType)
929 {
930         if (szType == NULL )
931                 return MIME_MAINTYPE_APPLICATION;
932
933         if (!strcasecmp(szType, "application"))
934                 return MIME_MAINTYPE_APPLICATION;
935         else if (!strcasecmp(szType, "audio"))
936                 return MIME_MAINTYPE_AUDIO;
937         else if (!strcasecmp(szType, "image"))
938                 return MIME_MAINTYPE_IMAGE;
939         else if (!strcasecmp(szType, "message"))
940                 return MIME_MAINTYPE_MESSAGE;
941         else if (!strcasecmp(szType, "multipart"))
942                 return MIME_MAINTYPE_MULTIPART;
943         else if (!strcasecmp(szType, "text"))
944                 return MIME_MAINTYPE_TEXT;
945         else if (!strcasecmp(szType, "video"))
946                 return MIME_MAINTYPE_VIDEO;
947
948         return MIME_MAINTYPE_APPLICATION;
949 }
950
951
952
953 // MimeString -> MimeInt
954 MimeType MimeGetMimeIntFromMimeString(char *szMimeStr)
955 {
956         int index = __MimeGetTableIndexString(szMimeStr);
957         if (index == MIME_UNKNOWN) {
958                 return MIME_UNKNOWN;
959         } else {
960                 return (MimeType)mimeTableEnum[index];
961         }
962 }
963
964 // MimeInt -> MimeString
965 char *MimeGetMimeStringFromMimeInt(int mimeType)
966 {
967         int idx = __MimeGetTableIndexInt((MimeType)mimeType);
968
969         if (idx == MIME_UNKNOWN)
970                 return NULL;
971
972         return (char *)mimeTable[idx].szMIME;
973 }
974
975
976 // BinaryCode -> MimeInt
977 MimeType MimeGetMimeIntFromBi(int binCode)
978 {
979         int index;
980
981         if (binCode < 0x00 || binCode > 0x4b)
982                 return MIME_UNKNOWN;
983
984         for (index = 0; index < MIME_MAX_NUM; index++) {
985                 if (binCode == mimeTable[index].binary)
986                         return (MimeType)mimeTableEnum[index];
987         }
988
989         return MIME_UNKNOWN;
990 }
991
992 // BinaryCode -> MimeInt
993 char *MimeGetMimeStringFromBi(int binCode)
994 {
995         int index;
996
997         if (binCode < 0x00 || binCode > 0x4b)
998                 return NULL;
999
1000         for (index = 0; index < MIME_MAX_NUM; index++) {
1001                 if (binCode == mimeTable[index].binary)
1002                         return (char *)mimeTable[index].szMIME;
1003         }
1004
1005         return NULL;
1006 }
1007
1008 // Mimeint -> Binary Value
1009 int MimeGetBinaryValueFromMimeInt(MimeType mime)
1010 {
1011         int index;
1012
1013         index = __MimeGetTableIndexInt(mime);
1014         if (index == MIME_UNKNOWN)
1015                 return UNDEFINED_BINARY;
1016
1017         return mimeTable[index].binary;
1018 }
1019
1020 // MimeString -> Binary value
1021 int MimeGetBinaryValueFromMimeString(const char *szMime)
1022 {
1023         int index;
1024
1025         index = __MimeGetTableIndexString(szMime);
1026         if (index == MIME_UNKNOWN)
1027                 return UNDEFINED_BINARY;
1028
1029         return mimeTable[index].binary;
1030 }
1031
1032
1033 /*
1034  * This function checks main type of a MIME.
1035  *
1036  * @param       mime [in] Enumeration number for a MIME type.
1037  * @return      This function returns application type of a MIME.
1038  */
1039 MimeAppType MimeGetAppTypeFromInt(MimeType mime)
1040 {
1041         int index;
1042
1043         index = __MimeGetTableIndexInt(mime);
1044         if (index == MIME_UNKNOWN)
1045                 return MIME_APPLICATION_NONE;
1046
1047         return mimeTable[index].appType;
1048 }
1049
1050 /*
1051  * This function checks main type of a MIME.
1052  *
1053  * @param       mime [in] MIME string.
1054  * @return      This function returns application type of a MIME.
1055  */
1056 MimeAppType MimeGetAppTypeFromString(const char *szMime)
1057 {
1058         int index;
1059
1060         index = __MimeGetTableIndexString(szMime);
1061         if (index == MIME_UNKNOWN)
1062                 return MIME_APPLICATION_NONE;
1063
1064         return mimeTable[index].appType;
1065 }
1066
1067
1068 /*
1069  * This function returns a application type for a specified Extension.
1070  *
1071  * @param       mime [in] Extension string.
1072  * @return      This function returns application type.
1073  */
1074 MimeAppType MimeGetAppTypeFromExtString(const char *szExt)
1075 {
1076         int i;
1077
1078         for (i = 0; i < EXT_MAX; i++) {
1079                 if (!strcasecmp( extTable[i].szExt, szExt)) {
1080                         int index;
1081
1082                         index = __MimeGetTableIndexInt(extTable[i].mimeType);
1083                         if (index == MIME_UNKNOWN)
1084                                 return MIME_APPLICATION_NONE;
1085                         return mimeTable[index].appType;
1086                 }
1087         }
1088
1089         return MIME_APPLICATION_NONE;
1090 }
1091
1092 /*
1093  * This function gets the representative mime type from MimeType
1094  *
1095  * @param       mime [in] Enumeration number for a MIME type.
1096  * @return      representative mime type Enumeration number
1097  */
1098
1099 MimeType MimeGetContentTypeFromInt(MimeType mime)
1100 {
1101         int index;
1102
1103         for (index = 0; index < MIME_MAX_NUM; index++) {
1104                 if (mime == mimeTable[index].mime)
1105                         return mimeTable[index].contentType;
1106         }
1107
1108         return MIME_UNKNOWN;
1109 }
1110
1111 /*
1112  * This function gets the representative mime type from mime string
1113  *
1114  * @param       szMime - string name of MimeType
1115  * @return      representative mime type Enumeration number
1116  */
1117
1118 MimeType MimeGetContentTypeFromString(const char *szMime)
1119 {
1120         int index;
1121
1122         for (index = 0; index < MIME_MAX_NUM; index++) {
1123                 if (!strcasecmp(szMime, mimeTable[index].szMIME))
1124                         return mimeTable[index].contentType;
1125         }
1126
1127         return MIME_UNKNOWN;
1128 }
1129
1130 /*
1131  * This function gets the index from mime string
1132  *
1133  * @param       szMime - string name of MimeType
1134  * @return      Enumeration number for a MIME type.
1135  */
1136
1137 MimeType MimeGetMimeTypeFromString(const char *szMime)
1138 {
1139         int index;
1140
1141         for (index = 0; index < MIME_MAX_NUM; index++) {
1142                 if (!strcasecmp(szMime, mimeTable[index].szMIME))
1143                         return mimeTable[index].mime;
1144         }
1145
1146         return MIME_UNKNOWN;
1147 }
1148
1149
1150 int MsgGetCode(MsgHeaderField tableId, char *pStr)
1151 {
1152         int cCode = 0;
1153         int nNum = MSG_FIELD_UNKNOWN;
1154         char **pTable = NULL;
1155
1156         switch (tableId) {
1157         case MSG_FIELD:
1158                 nNum = MSG_FIELD_NUM;
1159                 pTable = (char **)szMsgField;
1160                 break;
1161
1162         case MSG_PARAM:
1163                 nNum = MSG_PARAM_NUM;
1164                 pTable = (char **)szMsgParam;
1165                 break;
1166
1167         case MSG_TYPE:
1168                 return MimeGetMimeIntFromMimeString(pStr);
1169
1170         case MSG_CHARSET:
1171                 nNum = MSG_CHARSET_NUM;
1172                 pTable = (char **)szMsgCharset;
1173                 break;
1174
1175         case MSG_ENCODING:
1176                 nNum = MSG_ENCODING_NUM;
1177                 pTable = (char **)szMsgEncoding;
1178                 break;
1179
1180         case MSG_DISPOSITION:
1181                 nNum = MSG_DISPOSITION_NUM;
1182                 pTable = (char **)szMsgDisposition;
1183                 break;
1184
1185         case MSG_ADDR_TYPE:
1186                 nNum = MSG_ADDR_TYPE_NUM;
1187                 pTable = (char **)szMsgAddrType;
1188                 break;
1189
1190         default:
1191                 break;
1192         }
1193
1194         for (cCode = 0; cCode < nNum; cCode++) {
1195                 if (!strcasecmp(pStr, pTable[cCode])) {
1196                         return cCode;
1197                 }
1198         }
1199
1200         return -1;
1201 }
1202
1203
1204 char *MsgGetString(MsgHeaderField tableId, int code)
1205 {
1206         int nNum = MSG_FIELD_UNKNOWN;
1207         char **pTable = NULL;
1208
1209         switch (tableId) {
1210         case MSG_FIELD:
1211                 nNum = MSG_FIELD_NUM;
1212                 pTable = (char **)szMsgField;
1213                 break;
1214
1215         case MSG_PARAM:
1216                 nNum = MSG_PARAM_NUM;
1217                 pTable = (char **)szMsgParam;
1218                 break;
1219
1220         case MSG_TYPE:
1221                 if (code != MIME_UNKNOWN && code != -1)
1222                         return MimeGetMimeStringFromMimeInt(code);
1223                 else
1224                         return (char *)MSG_UNKNOWN_TYPE_STRING;
1225
1226         case MSG_CHARSET:
1227                 nNum = MSG_CHARSET_NUM;
1228                 pTable = (char **)szMsgCharset;
1229                 break;
1230
1231         case MSG_ENCODING:
1232                 nNum = MSG_ENCODING_NUM;
1233                 pTable = (char **)szMsgEncoding;
1234                 break;
1235
1236         case MSG_DISPOSITION:
1237                 nNum = MSG_DISPOSITION_NUM;
1238                 pTable = (char **)szMsgDisposition;
1239                 break;
1240
1241         case MSG_ADDR_TYPE:
1242                 nNum = MSG_ADDR_TYPE_NUM;
1243                 pTable = (char **)szMsgAddrType;
1244                 break;
1245
1246         default:
1247                 break;
1248         }
1249
1250         if (code < 0 || code >= nNum || !pTable)
1251                 return (char *)MSG_UNKNOWN_TYPE_STRING;
1252
1253         return pTable[code];
1254 }
1255
1256 char *_MsgSkipWS3(char *s)
1257 {
1258         while (true) {
1259                 if ((*s == MSG_CH_CR) ||
1260                         (*s == MSG_CH_LF) ||
1261                         (*s == MSG_CH_SP) ||
1262                         (*s == MSG_CH_TAB))
1263                         ++s;
1264                 else
1265                         return s;
1266         }
1267 }
1268
1269
1270 int _MsgGetCode(MsgHeaderField tableId, char *pStr)
1271 {
1272         int cCode = 0;
1273         int nNum = MSG_FIELD_UNKNOWN;
1274         char **pTable = NULL;
1275
1276         switch (tableId) {
1277         case MSG_FIELD:
1278                 nNum = MSG_FIELD_NUM;
1279                 pTable = (char **)szMsgField;
1280                 break;
1281
1282         case MSG_PARAM:
1283                 nNum = MSG_PARAM_NUM;
1284                 pTable = (char **)szMsgParam;
1285                 break;
1286
1287         case MSG_TYPE:
1288                 return MimeGetMimeIntFromMimeString(pStr);
1289
1290         case MSG_CHARSET:
1291                 nNum = MSG_CHARSET_NUM;
1292                 pTable = (char **)szMsgCharset;
1293                 break;
1294
1295         case MSG_ENCODING:
1296                 nNum = MSG_ENCODING_NUM;
1297                 pTable = (char **)szMsgEncoding;
1298                 break;
1299
1300         case MSG_DISPOSITION:
1301                 nNum = MSG_DISPOSITION_NUM;
1302                 pTable = (char **)szMsgDisposition;
1303                 break;
1304
1305         case MSG_ADDR_TYPE:
1306                 nNum = MSG_ADDR_TYPE_NUM;
1307                 pTable = (char **)szMsgAddrType;
1308                 break;
1309
1310         default:
1311                 MSG_DEBUG("_MsgGetCode: Invalid tableId [%d] \n", tableId);
1312                 break;
1313         }
1314
1315         for (cCode = 0; cCode < nNum; cCode++) {
1316                 if (pTable[cCode] != NULL) {
1317                         if (!strcasecmp( pStr, pTable[cCode])) {
1318                                 return cCode;
1319                         }
1320                 }
1321         }
1322
1323         return INVALID_HOBJ;
1324 }
1325