2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "web/http/MimeTypes.h"
44#ifndef DOXYGEN_SHOULD_SKIP_THIS
46#include "log/Logger.h"
56 magic_t MimeTypes::magic;
60 {
".dwg",
"application/acad"},
61 {
".asd",
"application/astound"},
62 {
".asn",
"application/astound"},
63 {
".tsp",
"application/dsptype"},
64 {
".dxf",
"application/dxf"},
65 {
".reg",
"application/force-download"},
66 {
".spl",
"application/futuresplash"},
67 {
".gz",
"application/gzip"},
68 {
".js",
"application/javascript"},
69 {
".json",
"application/json"},
70 {
".ptlk",
"application/listenup"},
71 {
".hqx",
"application/mac-binhex40"},
72 {
".mbd",
"application/mbedlet"},
73 {
".mif",
"application/mif"},
74 {
".xls",
"application/msexcel"},
75 {
".xla",
"application/msexcel"},
76 {
".hlp",
"application/mshelp"},
77 {
".chm",
"application/mshelp"},
78 {
".ppt",
"application/mspowerpoint"},
79 {
".ppz",
"application/mspowerpoint"},
80 {
".pps",
"application/mspowerpoint"},
81 {
".pot",
"application/mspowerpoint"},
82 {
".doc",
"application/msword"},
83 {
".dot",
"application/msword"},
84 {
".bin",
"application/octet-stream"},
85 {
".file",
"application/octet-stream"},
86 {
".com",
"application/octet-stream"},
87 {
".class",
"application/octet-stream"},
88 {
".ini",
"application/octet-stream"},
89 {
".oda",
"application/oda"},
90 {
".pdf",
"application/pdf"},
91 {
".ai",
"application/postscript"},
92 {
".eps",
"application/postscript"},
93 {
".ps",
"application/postscript"},
94 {
".rtc",
"application/rtc"},
95 {
".rtf",
"application/rtf"},
96 {
".smp",
"application/studiom"},
97 {
".tbk",
"application/toolbook"},
98 {
".vmd",
"application/vocaltec-media-desc"},
99 {
".vmf",
"application/vocaltec-media-file"},
100 {
".xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
101 {
".docx",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
102 {
".xml",
"application/xml"},
103 {
".bcpio",
"application/x-bcpio"},
104 {
".z",
"application/x-compress"},
105 {
".cpio",
"application/x-cpio"},
106 {
".csh",
"application/x-csh"},
107 {
".dcr",
"application/x-director"},
108 {
".dir",
"application/x-director"},
109 {
".dxr",
"application/x-director"},
110 {
".dvi",
"application/x-dvi"},
111 {
".evy",
"application/x-envoy"},
112 {
".gtar",
"application/x-gtar"},
113 {
".hdf",
"application/x-hdf"},
114 {
".php",
"application/x-httpd-php"},
115 {
".phtml",
"application/x-httpd-php"},
116 {
".latex",
"application/x-latex"},
117 {
".bin",
"application/x-macbinary"},
118 {
".mif",
"application/x-mif"},
119 {
".nc",
"application/x-netcdf"},
120 {
".cdf",
"application/x-netcdf"},
121 {
".nsc",
"application/x-nschat"},
122 {
".sh",
"application/x-sh"},
123 {
".shar",
"application/x-shar"},
124 {
".swf",
"application/x-shockwave-flash"},
125 {
".cab",
"application/x-shockwave-flash"},
126 {
".spr",
"application/x-sprite"},
127 {
".sprite",
"application/x-sprite"},
128 {
".sit",
"application/x-stuffit"},
129 {
".sca",
"application/x-supercard"},
130 {
".sv4cpio",
"application/x-sv4cpio"},
131 {
".sv4crc",
"application/x-sv4crc"},
132 {
".tar",
"application/x-tar"},
133 {
".tcl",
"application/x-tcl"},
134 {
".tex",
"application/x-tex"},
135 {
".texinfo",
"application/x-texinfo"},
136 {
".texi",
"application/x-texinfo"},
137 {
".t",
"application/x-troff"},
138 {
".tr",
"application/x-troff"},
139 {
".roff",
"application/x-troff"},
140 {
".man",
"application/x-troff-man"},
141 {
".troff",
"application/x-troff-man"},
142 {
".me",
"application/x-troff-me"},
143 {
".troff",
"application/x-troff-me"},
144 {
".me",
"application/x-troff-ms"},
145 {
".troff",
"application/x-troff-ms"},
146 {
".ustar",
"application/x-ustar"},
147 {
".src",
"application/x-wais-source"},
148 {
".zip",
"application/zip"},
149 {
".au",
"audio/basic"},
150 {
".snd",
"audio/basic"},
151 {
".es",
"audio/echospeech"},
152 {
".mp3",
"audio/mpeg"},
153 {
".mp4",
"audio/mp4"},
154 {
".ogg",
"audio/ogg"},
155 {
".tsi",
"audio/tsplayer"},
156 {
".vox",
"audio/voxware"},
157 {
".wav",
"audio/wav"},
158 {
".aif",
"audio/x-aiff"},
159 {
".aiff",
"audio/x-aiff"},
160 {
".aifc",
"audio/x-aiff"},
161 {
".dus",
"audio/x-dspeeh"},
162 {
".cht",
"audio/x-dspeeh"},
163 {
".mid",
"audio/x-midi"},
164 {
".midi",
"audio/x-midi"},
165 {
".mp2",
"audio/x-mpeg"},
166 {
".ram",
"audio/x-pn-realaudio"},
167 {
".ra",
"audio/x-pn-realaudio"},
168 {
".rpm",
"audio/x-pn-realaudio-plugin"},
169 {
".stream",
"audio/x-qt-stream"},
170 {
".dwf",
"drawing/x-dwf"},
171 {
".bmp",
"image/bmp"},
172 {
".bmp",
"image/x-bmp"},
173 {
".bmp",
"image/x-ms-bmp"},
174 {
".cod",
"image/cis-cod"},
175 {
".ras",
"image/cmu-raster"},
176 {
".fif",
"image/fif"},
177 {
".gif",
"image/gif"},
178 {
".ief",
"image/ief"},
179 {
".jpeg",
"image/jpeg"},
180 {
".jpg",
"image/jpeg"},
181 {
".jpe",
"image/jpeg"},
182 {
".png",
"image/png"},
183 {
".svg",
"image/svg+xml"},
184 {
".tiff",
"image/tiff"},
185 {
".tif",
"image/tiff"},
186 {
".mcf",
"image/vasa"},
187 {
".wbmp",
"image/vnd.wap.wbmp"},
188 {
".fh4",
"image/x-freehand"},
189 {
".fh5",
"image/x-freehand"},
190 {
".fhc",
"image/x-freehand"},
191 {
".ico",
"image/x-icon"},
192 {
".pnm",
"image/x-portable-anymap"},
193 {
".pbm",
"image/x-portable-bitmap"},
194 {
".pgm",
"image/x-portable-graymap"},
195 {
".ppm",
"image/x-portable-pixmap"},
196 {
".rgb",
"image/x-rgb"},
197 {
".xwd",
"image/x-windowdump"},
198 {
".xbm",
"image/x-xbitmap"},
199 {
".xpm",
"image/x-xpixmap"},
200 {
".wrl",
"model/vrml"},
201 {
".ics",
"text/calendar"},
202 {
".csv",
"text/comma-separated-values"},
203 {
".css",
"text/css"},
204 {
".htm",
"text/html"},
205 {
".html",
"text/html"},
206 {
".shtml",
"text/html"},
207 {
".xhtml",
"text/html"},
208 {
".js",
"text/javascript"},
209 {
".txt",
"text/plain"},
210 {
".rtx",
"text/richtext"},
211 {
".rtf",
"text/rtf"},
212 {
".tsv",
"text/tab-separated-values"},
213 {
".wml",
"text/vnd.wap.wml"},
214 {
".wmlc",
"application/vnd.wap.wmlc"},
215 {
".wmls",
"text/vnd.wap.wmlscript"},
216 {
".wmlsc",
"application/vnd.wap.wmlscriptc"},
217 {
".xml",
"text/xml"},
218 {
".etx",
"text/x-setext"},
219 {
".sgm",
"text/x-sgml"},
220 {
".sgml",
"text/x-sgml"},
221 {
".talk",
"text/x-speech"},
222 {
".spc",
"text/x-speech"},
223 {
".mpeg",
"video/mpeg"},
224 {
".mpg",
"video/mpeg"},
225 {
".mpe",
"video/mpeg"},
226 {
".mp4",
"video/mp4"},
227 {
".ogg",
"video/ogg"},
228 {
".ogv",
"video/ogg"},
229 {
".qt",
"video/quicktime"},
230 {
".mov",
"video/quicktime"},
231 {
".viv",
"video/vnd.vivo"},
232 {
".vivo",
"video/vnd.vivo"},
233 {
".webm",
"video/webm"},
234 {
".avi",
"video/x-msvideo"},
235 {
".movie",
"video/x-sgi-movie"},
236 {
".vts",
"workbook/formulaone"},
237 {
".vtts",
"workbook/formulaone"},
238 {
".3dmf",
"x-world/x-3dmf"},
239 {
".3dm",
"x-world/x-3dmf"},
240 {
".qd3d",
"x-world/x-3dmf"},
241 {
".qd3",
"x-world/x-3dmf"},
242 {
".wrl",
"x-world/x-vrml"}};
246 MimeTypes::magic = magic_open(MAGIC_MIME);
248 if (magic_load(magic,
nullptr) != 0) {
249 LOG(DEBUG) <<
"HTTP: Cannot load magic database - " + std::string(magic_error(magic));
258 magic_close(MimeTypes::magic);
263 const std::map<std::string, std::string>::iterator it =
mimeType.find(std::filesystem::path(file).extension());
271 else if (magic !=
nullptr) {
272 const char* magicType = magic_file(MimeTypes::magic, file.c_str());
273 type = magicType !=
nullptr ? magicType : std::string();
277 return !type.empty() ? type :
"application/octet-stream";
static std::string contentType(const std::string &file)
static std::map< std::string, std::string > mimeType