/*
	ZazouMiniWebServer

	Copyright (C) 2003-2011 Xavier Garreau <xavier@xgarreau.org>

	This file is part of ZazouMiniWebServer.

    ZazouMiniWebServer is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    ZazouMiniWebServer is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with ZazouMiniWebServer; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*/
	
#include "stdafx.h"
#include "ZMWSmime.h"

std::string ZMWSMIME::defaultMIME =  "application/octet-stream";

ZMWSMIME::ZMWSMIME(void){
	// Valeur si pas d'extension, ne pas confondre avec valeur par défaut
	mime_types.insert(MIME_TYPE("", "text/plain")); 

	mime_types.insert(MIME_TYPE("mp3", "audio/mpeg"));
	mime_types.insert(MIME_TYPE("m3u", "audio/x-mpegurl"));
	mime_types.insert(MIME_TYPE("m3a", "audio/x-mpegurl-add"));
	mime_types.insert(MIME_TYPE("ram", "audio/vnd.rn-realaudio"));
	mime_types.insert(MIME_TYPE("ra", "audio/x-pn-realaudio"));
	mime_types.insert(MIME_TYPE("rpm", "audio/x-pn-realaudio-plugin"));
	mime_types.insert(MIME_TYPE("wma", "audio/x-ms-wma"));

	mime_types.insert(MIME_TYPE("rv", "video/vnd.rn-realvideo"));
	mime_types.insert(MIME_TYPE("avi", "video/avi"));
	mime_types.insert(MIME_TYPE("mpg", "video/mpeg"));
	mime_types.insert(MIME_TYPE("mpeg", "video/mpeg"));
	mime_types.insert(MIME_TYPE("mov", "video/quicktime"));
	mime_types.insert(MIME_TYPE("wmv", "video/x-ms-wmv"));
	mime_types.insert(MIME_TYPE("asf", "video/x-ms-asf"));

	mime_types.insert(MIME_TYPE("jpg", "image/jpeg"));
	mime_types.insert(MIME_TYPE("jpeg", "image/jpeg"));
	mime_types.insert(MIME_TYPE("gif", "image/gif"));
	mime_types.insert(MIME_TYPE("png", "image/png"));
	mime_types.insert(MIME_TYPE("psd", "image/psd"));
	mime_types.insert(MIME_TYPE("dxf", "image/x-autocad"));
	mime_types.insert(MIME_TYPE("svg", "application/xml+svg"));
	mime_types.insert(MIME_TYPE("ico", "image/x-icon"));

	mime_types.insert(MIME_TYPE("blend", "application/x-blender"));
	mime_types.insert(MIME_TYPE("rtf", "application/rtf"));
	mime_types.insert(MIME_TYPE("zip", "application/zip"));
	mime_types.insert(MIME_TYPE("bz2", "application/x-bzip2"));
	mime_types.insert(MIME_TYPE("gzip", "application/gzip"));
	mime_types.insert(MIME_TYPE("gz", "application/gzip"));
	mime_types.insert(MIME_TYPE("rar", "application/rar"));
	mime_types.insert(MIME_TYPE("tar", "application/tar"));
	mime_types.insert(MIME_TYPE("swf", "application/x-shockwave-flash"));
	mime_types.insert(MIME_TYPE("flv", "video/x-flv"));
	mime_types.insert(MIME_TYPE("dir", "application/x-director"));
	mime_types.insert(MIME_TYPE("dcr", "application/x-director"));
	mime_types.insert(MIME_TYPE("dxr", "application/x-director"));
	mime_types.insert(MIME_TYPE("ttf", "application/x-font-ttf"));
	mime_types.insert(MIME_TYPE("ogg", "application/ogg"));
	mime_types.insert(MIME_TYPE("exe", "application/octet-stream"));
	mime_types.insert(MIME_TYPE("pdf", "application/pdf"));
	mime_types.insert(MIME_TYPE("sis", "application/vnd.symbian.install"));
	mime_types.insert(MIME_TYPE("doc", "application/msword"));
	mime_types.insert(MIME_TYPE("xls", "application/msexcel"));
	mime_types.insert(MIME_TYPE("ppt", "application/powerpoint"));
	mime_types.insert(MIME_TYPE("sxw", "application/vnd.sun.xml.writer"));
	mime_types.insert(MIME_TYPE("stw", "application/vnd.sun.xml.writer.template"));
	mime_types.insert(MIME_TYPE("sxc", "application/vnd.sun.xml.calc"));
	mime_types.insert(MIME_TYPE("stc", "application/vnd.sun.xml.calc.template"));
	mime_types.insert(MIME_TYPE("sxd", "application/vnd.sun.xml.draw"));
	mime_types.insert(MIME_TYPE("std", "application/vnd.sun.xml.draw.template"));
	mime_types.insert(MIME_TYPE("sxi", "application/vnd.sun.xml.impress"));
	mime_types.insert(MIME_TYPE("sti", "application/vnd.sun.xml.impress.template"));
	mime_types.insert(MIME_TYPE("sxg", "application/vnd.sun.xml.writer.global"));
	mime_types.insert(MIME_TYPE("sxm", "application/vnd.sun.xml.math"));
	mime_types.insert(MIME_TYPE("sdw", "application/vnd.stardivision.writer"));
	mime_types.insert(MIME_TYPE("sgl", "application/vnd.stardivision.writer-global"));
	mime_types.insert(MIME_TYPE("sdc", "application/vnd.stardivision.calc"));
	mime_types.insert(MIME_TYPE("sda", "application/vnd.stardivision.draw"));
	mime_types.insert(MIME_TYPE("sdd", "application/vnd.stardivision.impress"));
	mime_types.insert(MIME_TYPE("sdp", "application/vnd.stardivision.impress-packed"));
	mime_types.insert(MIME_TYPE("smf", "application/vnd.stardivision.math"));
	mime_types.insert(MIME_TYPE("sds", "application/vnd.stardivision.chart"));
	mime_types.insert(MIME_TYPE("sdm", "application/vnd.stardivision.mail"));
	mime_types.insert(MIME_TYPE("abw", "application/x-abiword"));
	mime_types.insert(MIME_TYPE("odt", "application/vnd.oasis.opendocument.text"));
	mime_types.insert(MIME_TYPE("ods", "application/vnd.oasis.opendocument.spreadsheet"));
	mime_types.insert(MIME_TYPE("odp", "application/vnd.oasis.opendocument.presentation"));
	mime_types.insert(MIME_TYPE("odg", "application/vnd.oasis.opendocument.graphics"));
	mime_types.insert(MIME_TYPE("odc", "application/vnd.oasis.opendocument.chart"));
	mime_types.insert(MIME_TYPE("odf", "application/vnd.oasis.opendocument.formula"));
	mime_types.insert(MIME_TYPE("odb", "application/vnd.oasis.opendocument.database"));
	mime_types.insert(MIME_TYPE("odi", "application/vnd.oasis.opendocument.image"));
	mime_types.insert(MIME_TYPE("odm", "application/vnd.oasis.opendocument.text-master"));
	mime_types.insert(MIME_TYPE("ott", "application/vnd.oasis.opendocument.text-template"));
	mime_types.insert(MIME_TYPE("ots", "application/vnd.oasis.opendocument.spreadsheet-template"));
	mime_types.insert(MIME_TYPE("otp", "application/vnd.oasis.opendocument.presentation-template"));
	mime_types.insert(MIME_TYPE("otg", "application/vnd.oasis.opendocument.graphics-template"));

	mime_types.insert(MIME_TYPE("htm", "text/html"));
	mime_types.insert(MIME_TYPE("html", "text/html"));
	mime_types.insert(MIME_TYPE("txt", "text/plain"));
	mime_types.insert(MIME_TYPE("sh", "text/plain"));
	mime_types.insert(MIME_TYPE("csh", "text/plain"));
	mime_types.insert(MIME_TYPE("zsh", "text/plain"));
	mime_types.insert(MIME_TYPE("tcsh", "text/plain"));
	mime_types.insert(MIME_TYPE("ksh", "text/plain"));
	mime_types.insert(MIME_TYPE("bash", "text/plain"));
	mime_types.insert(MIME_TYPE("c", "text/plain"));
	mime_types.insert(MIME_TYPE("cpp", "text/plain"));
	mime_types.insert(MIME_TYPE("cc", "text/plain"));
	mime_types.insert(MIME_TYPE("c++", "text/plain"));
	mime_types.insert(MIME_TYPE("h", "text/plain"));
	mime_types.insert(MIME_TYPE("css", "text/css"));
	mime_types.insert(MIME_TYPE("smil", "application/smil"));
	mime_types.insert(MIME_TYPE("xml", "application/xml"));
	mime_types.insert(MIME_TYPE("xsl", "application/xml"));
	mime_types.insert(MIME_TYPE("rss", "application/rss+xml"));

	mime_types.insert(MIME_TYPE("xpi", "application/x-xpinstall"));
	mime_types.insert(MIME_TYPE("xul", "application/vnd.mozilla.xul+xml"));
	mime_types.insert(MIME_TYPE("rdf", "text/xml"));
	mime_types.insert(MIME_TYPE("xbl", "text/xml"));
	mime_types.insert(MIME_TYPE("cacert", "application/x-x509-ca-cert"));

	mime_types.insert(MIME_TYPE("wml", "text/vnd.wap.wml"));
	mime_types.insert(MIME_TYPE("wbmp", "image/vnd.wap.wbmp"));
	mime_types.insert(MIME_TYPE("wmlc", "application/vnd.wap.wmlc"));
	mime_types.insert(MIME_TYPE("wmls", "text/vnd.wap.wmlscript"));
	mime_types.insert(MIME_TYPE("wmlsc", "application/vnd.wap.wmlscriptc"));

	// learn more ...
}

ZMWSMIME::~ZMWSMIME(void){
	mime_types.clear();
}

const std::string ZMWSMIME::getMimeType(const std::string& extension) {
	if (mime_types.find(extension) != mime_types.end()) {
		return mime_types[extension];
	}
	return defaultMIME;
}

void ZMWSMIME::addMimeType(const std::string& extension, const std::string& type) {
	if (mime_types.find(extension) != mime_types.end()) {
	    mime_types[extension] = type;
	} else {    
	    mime_types.insert(MIME_TYPE(extension, type));
	}    
}

void ZMWSMIME::setDefaultMimeType(const std::string& type) {
	defaultMIME = type;
}
