From f689e0f9d91c517740b2e65ae28c002742b368ac Mon Sep 17 00:00:00 2001 From: kelson42 Date: Fri, 11 Jul 2014 10:49:13 +0200 Subject: [PATCH] + Return correct HTTP header for resources (instead of nothing) --- src/server/kiwix-serve.cpp | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/server/kiwix-serve.cpp b/src/server/kiwix-serve.cpp index 5f628fa..d5cdfa9 100644 --- a/src/server/kiwix-serve.cpp +++ b/src/server/kiwix-serve.cpp @@ -89,6 +89,59 @@ static pthread_mutex_t compressorLock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t resourceLock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t verboseFlagLock = PTHREAD_MUTEX_INITIALIZER; +/* Try to get the mimeType from the file extension */ +static std::string getMimeTypeForFile(const std::string& filename) { + + std::map extMimeTypes; + extMimeTypes["HTML"] = "text/html"; + extMimeTypes["html"] = "text/html"; + extMimeTypes["HTM"] = "text/html"; + extMimeTypes["htm"] = "text/html"; + extMimeTypes["PNG"] = "image/png"; + extMimeTypes["png"] = "image/png"; + extMimeTypes["TIFF"] = "image/tiff"; + extMimeTypes["tiff"] = "image/tiff"; + extMimeTypes["TIF"] = "image/tiff"; + extMimeTypes["tif"] = "image/tiff"; + extMimeTypes["JPEG"] = "image/jpeg"; + extMimeTypes["jpeg"] = "image/jpeg"; + extMimeTypes["JPG"] = "image/jpeg"; + extMimeTypes["jpg"] = "image/jpeg"; + extMimeTypes["GIF"] = "image/gif"; + extMimeTypes["gif"] = "image/gif"; + extMimeTypes["SVG"] = "image/svg+xml"; + extMimeTypes["svg"] = "image/svg+xml"; + extMimeTypes["TXT"] = "text/plain"; + extMimeTypes["txt"] = "text/plain"; + extMimeTypes["XML"] = "text/xml"; + extMimeTypes["xml"] = "text/xml"; + extMimeTypes["PDF"] = "application/pdf"; + extMimeTypes["pdf"] = "application/pdf"; + extMimeTypes["OGG"] = "application/ogg"; + extMimeTypes["ogg"] = "application/ogg"; + extMimeTypes["JS"] = "application/javascript"; + extMimeTypes["js"] = "application/javascript"; + extMimeTypes["CSS"] = "text/css"; + extMimeTypes["css"] = "text/css"; + extMimeTypes["otf"] = "application/vnd.ms-opentype"; + extMimeTypes["OTF"] = "application/vnd.ms-opentype"; + extMimeTypes["ttf"] = "application/font-ttf"; + extMimeTypes["TTF"] = "application/font-ttf"; + extMimeTypes["woff"] = "application/font-woff"; + extMimeTypes["WOFF"] = "application/font-woff"; + extMimeTypes["vtt"] = "text/vtt"; + extMimeTypes["VTT"] = "text/vtt"; + + if (filename.find_last_of(".") != std::string::npos) { + std::string mimeType = filename.substr(filename.find_last_of(".")+1); + if (extMimeTypes.find(mimeType) != extMimeTypes.end()) { + return extMimeTypes[mimeType]; + } + } + + return "text/plain"; +} + void introduceTaskbar(string &content, const string &humanReadableBookId) { pthread_mutex_lock(&resourceLock); if (!nosearchbarFlag) { @@ -218,6 +271,7 @@ static int accessHandlerCallback(void *cls, /* Get static skin stuff */ else if (urlStr.size() > 5 && urlStr.substr(0, 6) == "/skin/") { content = getResourceAsString(urlStr.substr(6)); + mimeType = getMimeTypeForFile(urlStr); } /* Display the search restults */