125
|
1 /*
|
|
2 * mime.c : GeeXboX uShare media file MIME-type association.
|
|
3 * Originally developped for the GeeXboX project.
|
|
4 * Ref : http://freedesktop.org/wiki/Standards_2fshared_2dmime_2dinfo_2dspec
|
|
5 * Copyright (C) 2005-2007 Benjamin Zores <ben@geexbox.org>
|
|
6 *
|
|
7 * This program is free software; you can redistribute it and/or modify
|
|
8 * it under the terms of the GNU General Public License as published by
|
|
9 * the Free Software Foundation; either version 2 of the License, or
|
|
10 * (at your option) any later version.
|
|
11 *
|
|
12 * This program is distributed in the hope that it will be useful,
|
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15 * GNU Library General Public License for more details.
|
|
16 *
|
|
17 * You should have received a copy of the GNU General Public License along
|
|
18 * with this program; if not, write to the Free Software Foundation,
|
|
19 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
20 */
|
|
21
|
|
22 #include <stdlib.h>
|
|
23 #include <string.h>
|
|
24
|
|
25 #include "mime.h"
|
|
26 #include "ushare.h"
|
|
27
|
|
28 #define UPNP_VIDEO "object.item.videoItem"
|
|
29 #define UPNP_AUDIO "object.item.audioItem.musicTrack"
|
|
30 #define UPNP_PHOTO "object.item.imageItem.photo"
|
|
31 #define UPNP_PLAYLIST "object.item.playlistItem"
|
|
32 #define UPNP_TEXT "object.item.textItem"
|
|
33
|
|
34 const struct mime_type_t MIME_Type_List[] = {
|
|
35 /* Video files */
|
|
36 { "asf", UPNP_VIDEO, "http-get:*:video/x-ms-asf:"},
|
|
37 { "avc", UPNP_VIDEO, "http-get:*:video/avi:"},
|
|
38 { "avi", UPNP_VIDEO, "http-get:*:video/avi:"},
|
|
39 { "dv", UPNP_VIDEO, "http-get:*:video/x-dv:"},
|
|
40 { "divx", UPNP_VIDEO, "http-get:*:video/avi:"},
|
|
41 { "wmv", UPNP_VIDEO, "http-get:*:video/x-ms-wmv:"},
|
|
42 { "mjpg", UPNP_VIDEO, "http-get:*:video/x-motion-jpeg:"},
|
|
43 { "mjpeg", UPNP_VIDEO, "http-get:*:video/x-motion-jpeg:"},
|
|
44 { "mpeg", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
45 { "mpg", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
46 { "mpe", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
47 { "mp2p", UPNP_VIDEO, "http-get:*:video/mp2p:"},
|
|
48 { "vob", UPNP_VIDEO, "http-get:*:video/mp2p:"},
|
|
49 { "mp2t", UPNP_VIDEO, "http-get:*:video/mp2t:"},
|
|
50 { "m1v", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
51 { "m2v", UPNP_VIDEO, "http-get:*:video/mpeg2:"},
|
|
52 { "mpg2", UPNP_VIDEO, "http-get:*:video/mpeg2:"},
|
|
53 { "mpeg2", UPNP_VIDEO, "http-get:*:video/mpeg2:"},
|
|
54 { "m4v", UPNP_VIDEO, "http-get:*:video/mp4:"},
|
|
55 { "m4p", UPNP_VIDEO, "http-get:*:video/mp4:"},
|
|
56 { "mp4ps", UPNP_VIDEO, "http-get:*:video/x-nerodigital-ps:"},
|
|
57 { "ts", UPNP_VIDEO, "http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_60_L2_ISO;"},
|
|
58 { "ogm", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
59 { "mkv", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
60 { "rmvb", UPNP_VIDEO, "http-get:*:video/mpeg:"},
|
|
61 { "mov", UPNP_VIDEO, "http-get:*:video/quicktime:"},
|
|
62 { "hdmov", UPNP_VIDEO, "http-get:*:video/quicktime:"},
|
|
63 { "qt", UPNP_VIDEO, "http-get:*:video/quicktime:"},
|
|
64 { "bin", UPNP_VIDEO, "http-get:*:video/mpeg2:"},
|
|
65 { "iso", UPNP_VIDEO, "http-get:*:video/mpeg2:"},
|
|
66
|
|
67 /* Audio files */
|
|
68 { "3gp", UPNP_AUDIO, "http-get:*:audio/3gpp:"},
|
|
69 { "aac", UPNP_AUDIO, "http-get:*:audio/x-aac:"},
|
|
70 { "ac3", UPNP_AUDIO, "http-get:*:audio/x-ac3:"},
|
|
71 { "aif", UPNP_AUDIO, "http-get:*:audio/aiff:"},
|
|
72 { "aiff", UPNP_AUDIO, "http-get:*:audio/aiff:"},
|
|
73 { "at3p", UPNP_AUDIO, "http-get:*:audio/x-atrac3:"},
|
|
74 { "au", UPNP_AUDIO, "http-get:*:audio/basic:"},
|
|
75 { "snd", UPNP_AUDIO, "http-get:*:audio/basic:"},
|
|
76 { "dts", UPNP_AUDIO, "http-get:*:audio/x-dts:"},
|
|
77 { "rmi", UPNP_AUDIO, "http-get:*:audio/midi:"},
|
|
78 { "mid", UPNP_AUDIO, "http-get:*:audio/midi:"},
|
|
79 { "mp1", UPNP_AUDIO, "http-get:*:audio/mp1:"},
|
|
80 { "mp2", UPNP_AUDIO, "http-get:*:audio/mp2:"},
|
|
81 { "mp3", UPNP_AUDIO, "http-get:*:audio/mpeg:"},
|
|
82 { "mp4", UPNP_AUDIO, "http-get:*:audio/mp4:"},
|
|
83 { "m4a", UPNP_AUDIO, "http-get:*:audio/mp4:"},
|
|
84 { "ogg", UPNP_AUDIO, "http-get:*:audio/x-ogg:"},
|
|
85 { "wav", UPNP_AUDIO, "http-get:*:audio/wav:"},
|
|
86 { "pcm", UPNP_AUDIO, "http-get:*:audio/l16:"},
|
|
87 { "lpcm", UPNP_AUDIO, "http-get:*:audio/l16:"},
|
|
88 { "l16", UPNP_AUDIO, "http-get:*:audio/l16:"},
|
|
89 { "wma", UPNP_AUDIO, "http-get:*:audio/x-ms-wma:"},
|
|
90 { "mka", UPNP_AUDIO, "http-get:*:audio/mpeg:"},
|
|
91 { "ra", UPNP_AUDIO, "http-get:*:audio/x-pn-realaudio:"},
|
|
92 { "rm", UPNP_AUDIO, "http-get:*:audio/x-pn-realaudio:"},
|
|
93 { "ram", UPNP_AUDIO, "http-get:*:audio/x-pn-realaudio:"},
|
|
94 { "flac", UPNP_AUDIO, "http-get:*:audio/x-flac:"},
|
|
95
|
|
96 /* Images files */
|
|
97 { "bmp", UPNP_PHOTO, "http-get:*:image/bmp:"},
|
|
98 { "ico", UPNP_PHOTO, "http-get:*:image/x-icon:"},
|
|
99 { "gif", UPNP_PHOTO, "http-get:*:image/gif:"},
|
|
100 { "jpeg", UPNP_PHOTO, "http-get:*:image/jpeg:"},
|
|
101 { "jpg", UPNP_PHOTO, "http-get:*:image/jpeg:"},
|
|
102 { "jpe", UPNP_PHOTO, "http-get:*:image/jpeg:"},
|
|
103 { "pcd", UPNP_PHOTO, "http-get:*:image/x-ms-bmp:"},
|
|
104 { "png", UPNP_PHOTO, "http-get:*:image/png:"},
|
|
105 { "pnm", UPNP_PHOTO, "http-get:*:image/x-portable-anymap:"},
|
|
106 { "ppm", UPNP_PHOTO, "http-get:*:image/x-portable-pixmap:"},
|
|
107 { "qti", UPNP_PHOTO, "http-get:*:image/x-quicktime:"},
|
|
108 { "qtf", UPNP_PHOTO, "http-get:*:image/x-quicktime:"},
|
|
109 { "qtif", UPNP_PHOTO, "http-get:*:image/x-quicktime:"},
|
|
110 { "tif", UPNP_PHOTO, "http-get:*:image/tiff:"},
|
|
111 { "tiff", UPNP_PHOTO, "http-get:*:image/tiff:"},
|
|
112
|
|
113 /* Playlist files */
|
|
114 { "pls", UPNP_PLAYLIST, "http-get:*:audio/x-scpls:"},
|
|
115 { "m3u", UPNP_PLAYLIST, "http-get:*:audio/mpegurl:"},
|
|
116 { "asx", UPNP_PLAYLIST, "http-get:*:video/x-ms-asf:"},
|
|
117
|
|
118 /* Subtitle Text files */
|
|
119 { "srt", UPNP_TEXT, "http-get:*:text/srt:"}, /* SubRip */
|
|
120 { "ssa", UPNP_TEXT, "http-get:*:text/ssa:"}, /* SubStation Alpha */
|
|
121 { "stl", UPNP_TEXT, "http-get:*:text/srt:"}, /* Spruce */
|
|
122 { "psb", UPNP_TEXT, "http-get:*:text/psb:"}, /* PowerDivX */
|
|
123 { "pjs", UPNP_TEXT, "http-get:*:text/pjs:"}, /* Phoenix Japanim */
|
|
124 { "sub", UPNP_TEXT, "http-get:*:text/sub:"}, /* MicroDVD */
|
|
125 { "idx", UPNP_TEXT, "http-get:*:text/idx:"}, /* VOBsub */
|
|
126 { "dks", UPNP_TEXT, "http-get:*:text/dks:"}, /* DKS */
|
|
127 { "scr", UPNP_TEXT, "http-get:*:text/scr:"}, /* MACsub */
|
|
128 { "tts", UPNP_TEXT, "http-get:*:text/tts:"}, /* TurboTitler */
|
|
129 { "vsf", UPNP_TEXT, "http-get:*:text/vsf:"}, /* ViPlay */
|
|
130 { "zeg", UPNP_TEXT, "http-get:*:text/zeg:"}, /* ZeroG */
|
|
131 { "mpl", UPNP_TEXT, "http-get:*:text/mpl:"}, /* MPL */
|
|
132
|
|
133 /* Miscellaneous text files */
|
|
134 { "bup", UPNP_TEXT, "http-get:*:text/bup:"}, /* DVD backup */
|
|
135 { "ifo", UPNP_TEXT, "http-get:*:text/ifo:"}, /* DVD information */
|
|
136
|
|
137 { NULL, NULL, NULL}
|
|
138 };
|
|
139
|
|
140 char *mime_get_protocol (struct mime_type_t *mime)
|
|
141 {
|
|
142 char protocol[512];
|
|
143
|
|
144 if (!mime)
|
|
145 return NULL;
|
|
146
|
|
147 sprintf (protocol, mime->mime_protocol);
|
|
148 //strcat (protocol, "*");
|
|
149 return strdup (protocol);
|
|
150 }
|