#include "service.h" typedef enum MimeTypes { M_Type, M_Extension } mimetype; #define NUM_MIME_TYPES 767 /* * This array has been constructed based on the * Apache web server's mime.types file */ const char* const MIME[NUM_MIME_TYPES][2] = { { "application/andrew-inset", "ez" }, { "application/applixware", "aw" }, { "application/atom+xml", "atom" }, { "application/atomcat+xml", "atomcat" }, { "application/atomsvc+xml", "atomsvc" }, { "application/ccxml+xml", "ccxml" }, { "application/cdmi-capability", "cdmia" }, { "application/cdmi-container", "cdmic" }, { "application/cdmi-domain", "cdmid" }, { "application/cdmi-object", "cdmio" }, { "application/cdmi-queue", "cdmiq" }, { "application/cu-seeme", "cu" }, { "application/davmount+xml", "davmount" }, { "application/docbook+xml", "dbk" }, { "application/dssc+der", "dssc" }, { "application/dssc+xml", "xdssc" }, { "application/ecmascript", "ecma" }, { "application/emma+xml", "emma" }, { "application/epub+zip", "epub" }, { "application/exi", "exi" }, { "application/font-tdpfr", "pfr" }, { "application/gml+xml", "gml" }, { "application/gpx+xml", "gpx" }, { "application/gxf", "gxf" }, { "application/hyperstudio", "stk" }, { "application/inkml+xml", "ink" }, { "application/ipfix", "ipfix" }, { "application/java-archive", "jar" }, { "application/java-serialized-object", "ser" }, { "application/java-vm", "class" }, { "application/javascript", "js" }, { "application/json", "json" }, { "application/jsonml+json", "jsonml" }, { "application/lost+xml", "lostxml" }, { "application/mac-binhex40", "hqx" }, { "application/mac-compactpro", "cpt" }, { "application/mads+xml", "mads" }, { "application/marc", "mrc" }, { "application/marcxml+xml", "mrcx" }, { "application/mathematica", "ma" }, { "application/mathml+xml", "mathml" }, { "application/mbox", "mbox" }, { "application/mediaservercontrol+xml", "mscml" }, { "application/metalink+xml", "metalink" }, { "application/metalink4+xml", "meta4" }, { "application/mets+xml", "mets" }, { "application/mods+xml", "mods" }, { "application/mp21", "m21" }, { "application/mp4", "mp4s" }, { "application/msword", "doc" }, { "application/mxf", "mxf" }, { "application/octet-stream", "bin" }, { "application/oda", "oda" }, { "application/oebps-package+xml", "opf" }, { "application/ogg", "ogx" }, { "application/omdoc+xml", "omdoc" }, { "application/onenote", "onetoc" }, { "application/oxps", "oxps" }, { "application/patch-ops-error+xml", "xer" }, { "application/pdf", "pdf" }, { "application/pgp-encrypted", "pgp" }, { "application/pgp-signature", "asc" }, { "application/pics-rules", "prf" }, { "application/pkcs10", "p10" }, { "application/pkcs7-mime", "p7m" }, { "application/pkcs7-signature", "p7s" }, { "application/pkcs8", "p8" }, { "application/pkix-attr-cert", "ac" }, { "application/pkix-cert", "cer" }, { "application/pkix-crl", "crl" }, { "application/pkix-pkipath", "pkipath" }, { "application/pkixcmp", "pki" }, { "application/pls+xml", "pls" }, { "application/postscript", "ps" }, { "application/prs.cww", "cww" }, { "application/pskc+xml", "pskcxml" }, { "application/rdf+xml", "rdf" }, { "application/reginfo+xml", "rif" }, { "application/relax-ng-compact-syntax", "rnc" }, { "application/resource-lists+xml", "rl" }, { "application/resource-lists-diff+xml", "rld" }, { "application/rls-services+xml", "rs" }, { "application/rpki-ghostbusters", "gbr" }, { "application/rpki-manifest", "mft" }, { "application/rpki-roa", "roa" }, { "application/rsd+xml", "rsd" }, { "application/rss+xml", "rss" }, { "application/rtf", "rtf" }, { "application/sbml+xml", "sbml" }, { "application/scvp-cv-request", "scq" }, { "application/scvp-cv-response", "scs" }, { "application/scvp-vp-request", "spq" }, { "application/scvp-vp-response", "spp" }, { "application/sdp", "sdp" }, { "application/set-payment-initiation", "setpay" }, { "application/set-registration-initiation", "setreg" }, { "application/shf+xml", "shf" }, { "application/smil+xml", "smi" }, { "application/sparql-query", "rq" }, { "application/sparql-results+xml", "srx" }, { "application/srgs", "gram" }, { "application/srgs+xml", "grxml" }, { "application/sru+xml", "sru" }, { "application/ssdl+xml", "ssdl" }, { "application/ssml+xml", "ssml" }, { "application/tei+xml", "tei" }, { "application/thraud+xml", "tfi" }, { "application/timestamped-data", "tsd" }, { "application/vnd.3gpp.pic-bw-large", "plb" }, { "application/vnd.3gpp.pic-bw-small", "psb" }, { "application/vnd.3gpp.pic-bw-var", "pvb" }, { "application/vnd.3gpp2.tcap", "tcap" }, { "application/vnd.3m.post-it-notes", "pwn" }, { "application/vnd.accpac.simply.aso", "aso" }, { "application/vnd.accpac.simply.imp", "imp" }, { "application/vnd.acucobol", "acu" }, { "application/vnd.acucorp", "atc" }, { "application/vnd.adobe.air-application-installer-package+zip", "air" }, { "application/vnd.adobe.formscentral.fcdt", "fcdt" }, { "application/vnd.adobe.fxp", "fxp" }, { "application/vnd.adobe.xdp+xml", "xdp" }, { "application/vnd.adobe.xfdf", "xfdf" }, { "application/vnd.ahead.space", "ahead" }, { "application/vnd.airzip.filesecure.azf", "azf" }, { "application/vnd.airzip.filesecure.azs", "azs" }, { "application/vnd.amazon.ebook", "azw" }, { "application/vnd.americandynamics.acc", "acc" }, { "application/vnd.amiga.ami", "ami" }, { "application/vnd.android.package-archive", "apk" }, { "application/vnd.anser-web-certificate-issue-initiation", "cii" }, { "application/vnd.anser-web-funds-transfer-initiation", "fti" }, { "application/vnd.antix.game-component", "atx" }, { "application/vnd.apple.installer+xml", "mpkg" }, { "application/vnd.apple.mpegurl", "m3u8" }, { "application/vnd.aristanetworks.swi", "swi" }, { "application/vnd.astraea-software.iota", "iota" }, { "application/vnd.audiograph", "aep" }, { "application/vnd.blueice.multipass", "mpm" }, { "application/vnd.bmi", "bmi" }, { "application/vnd.businessobjects", "rep" }, { "application/vnd.chemdraw+xml", "cdxml" }, { "application/vnd.chipnuts.karaoke-mmd", "mmd" }, { "application/vnd.cinderella", "cdy" }, { "application/vnd.claymore", "cla" }, { "application/vnd.cloanto.rp9", "rp9" }, { "application/vnd.clonk.c4group", "c4g" }, { "application/vnd.cluetrust.cartomobile-config", "c11amc" }, { "application/vnd.cluetrust.cartomobile-config-pkg", "c11amz" }, { "application/vnd.commonspace", "csp" }, { "application/vnd.contact.cmsg", "cdbcmsg" }, { "application/vnd.cosmocaller", "cmc" }, { "application/vnd.crick.clicker", "clkx" }, { "application/vnd.crick.clicker.keyboard", "clkk" }, { "application/vnd.crick.clicker.palette", "clkp" }, { "application/vnd.crick.clicker.template", "clkt" }, { "application/vnd.crick.clicker.wordbank", "clkw" }, { "application/vnd.criticaltools.wbs+xml", "wbs" }, { "application/vnd.ctc-posml", "pml" }, { "application/vnd.cups-ppd", "ppd" }, { "application/vnd.curl.car", "car" }, { "application/vnd.curl.pcurl", "pcurl" }, { "application/vnd.dart", "dart" }, { "application/vnd.data-vision.rdz", "rdz" }, { "application/vnd.dece.data", "uvf" }, { "application/vnd.dece.ttml+xml", "uvt" }, { "application/vnd.dece.unspecified", "uvx" }, { "application/vnd.dece.zip", "uvz" }, { "application/vnd.denovo.fcselayout-link", "fe_launch" }, { "application/vnd.dna", "dna" }, { "application/vnd.dolby.mlp", "mlp" }, { "application/vnd.dpgraph", "dpg" }, { "application/vnd.dreamfactory", "dfac" }, { "application/vnd.ds-keypoint", "kpxx" }, { "application/vnd.dvb.ait", "ait" }, { "application/vnd.dvb.service", "svc" }, { "application/vnd.dynageo", "geo" }, { "application/vnd.ecowin.chart", "mag" }, { "application/vnd.enliven", "nml" }, { "application/vnd.epson.esf", "esf" }, { "application/vnd.epson.msf", "msf" }, { "application/vnd.epson.quickanime", "qam" }, { "application/vnd.epson.salt", "slt" }, { "application/vnd.epson.ssf", "ssf" }, { "application/vnd.eszigno3+xml", "es3" }, { "application/vnd.ezpix-album", "ez2" }, { "application/vnd.ezpix-package", "ez3" }, { "application/vnd.fdf", "fdf" }, { "application/vnd.fdsn.mseed", "mseed" }, { "application/vnd.fdsn.seed", "seed" }, { "application/vnd.flographit", "gph" }, { "application/vnd.fluxtime.clip", "ftc" }, { "application/vnd.framemaker", "fm" }, { "application/vnd.frogans.fnc", "fnc" }, { "application/vnd.frogans.ltf", "ltf" }, { "application/vnd.fsc.weblaunch", "fsc" }, { "application/vnd.fujitsu.oasys", "oas" }, { "application/vnd.fujitsu.oasys2", "oa2" }, { "application/vnd.fujitsu.oasys3", "oa3" }, { "application/vnd.fujitsu.oasysgp", "fg5" }, { "application/vnd.fujitsu.oasysprs", "bh2" }, { "application/vnd.fujixerox.ddd", "ddd" }, { "application/vnd.fujixerox.docuworks", "xdw" }, { "application/vnd.fujixerox.docuworks.binder", "xbd" }, { "application/vnd.fuzzysheet", "fzs" }, { "application/vnd.genomatix.tuxedo", "txd" }, { "application/vnd.geogebra.file", "ggb" }, { "application/vnd.geogebra.tool", "ggt" }, { "application/vnd.geometry-explorer", "gex" }, { "application/vnd.geonext", "gxt" }, { "application/vnd.geoplan", "g2w" }, { "application/vnd.geospace", "g3w" }, { "application/vnd.gmx", "gmx" }, { "application/vnd.google-earth.kml+xml", "kml" }, { "application/vnd.google-earth.kmz", "kmz" }, { "application/vnd.grafeq", "gqf" }, { "application/vnd.groove-account", "gac" }, { "application/vnd.groove-help", "ghf" }, { "application/vnd.groove-identity-message", "gim" }, { "application/vnd.groove-injector", "grv" }, { "application/vnd.groove-tool-message", "gtm" }, { "application/vnd.groove-tool-template", "tpl" }, { "application/vnd.groove-vcard", "vcg" }, { "application/vnd.hal+xml", "hal" }, { "application/vnd.handheld-entertainment+xml", "zmm" }, { "application/vnd.hbci", "hbci" }, { "application/vnd.hhe.lesson-player", "les" }, { "application/vnd.hp-hpgl", "hpgl" }, { "application/vnd.hp-hpid", "hpid" }, { "application/vnd.hp-hps", "hps" }, { "application/vnd.hp-jlyt", "jlt" }, { "application/vnd.hp-pcl", "pcl" }, { "application/vnd.hp-pclxl", "pclxl" }, { "application/vnd.hydrostatix.sof-data", "sfd-hdstx" }, { "application/vnd.ibm.minipay", "mpy" }, { "application/vnd.ibm.modcap", "afp" }, { "application/vnd.ibm.rights-management", "irm" }, { "application/vnd.ibm.secure-container", "sc" }, { "application/vnd.iccprofile", "icc" }, { "application/vnd.igloader", "igl" }, { "application/vnd.immervision-ivp", "ivp" }, { "application/vnd.immervision-ivu", "ivu" }, { "application/vnd.insors.igm", "igm" }, { "application/vnd.intercon.formnet", "xpw" }, { "application/vnd.intergeo", "i2g" }, { "application/vnd.intu.qbo", "qbo" }, { "application/vnd.intu.qfx", "qfx" }, { "application/vnd.ipunplugged.rcprofile", "rcprofile" }, { "application/vnd.irepository.package+xml", "irp" }, { "application/vnd.is-xpr", "xpr" }, { "application/vnd.isac.fcs", "fcs" }, { "application/vnd.jam", "jam" }, { "application/vnd.jcp.javame.midlet-rms", "rms" }, { "application/vnd.jisp", "jisp" }, { "application/vnd.joost.joda-archive", "joda" }, { "application/vnd.kahootz", "ktz" }, { "application/vnd.kde.karbon", "karbon" }, { "application/vnd.kde.kchart", "chrt" }, { "application/vnd.kde.kformula", "kfo" }, { "application/vnd.kde.kivio", "flw" }, { "application/vnd.kde.kontour", "kon" }, { "application/vnd.kde.kpresenter", "kpr" }, { "application/vnd.kde.kspread", "ksp" }, { "application/vnd.kde.kword", "kwd" }, { "application/vnd.kenameaapp", "htke" }, { "application/vnd.kidspiration", "kia" }, { "application/vnd.kinar", "kne" }, { "application/vnd.koan", "skp" }, { "application/vnd.kodak-descriptor", "sse" }, { "application/vnd.las.las+xml", "lasxml" }, { "application/vnd.llamagraphics.life-balance.desktop", "lbd" }, { "application/vnd.llamagraphics.life-balance.exchange+xml", "lbe" }, { "application/vnd.lotus-1-2-3", "123" }, { "application/vnd.lotus-approach", "apr" }, { "application/vnd.lotus-freelance", "pre" }, { "application/vnd.lotus-notes", "nsf" }, { "application/vnd.lotus-organizer", "org" }, { "application/vnd.lotus-screencam", "scm" }, { "application/vnd.lotus-wordpro", "lwp" }, { "application/vnd.macports.portpkg", "portpkg" }, { "application/vnd.mcd", "mcd" }, { "application/vnd.medcalcdata", "mc1" }, { "application/vnd.mediastation.cdkey", "cdkey" }, { "application/vnd.mfer", "mwf" }, { "application/vnd.mfmp", "mfm" }, { "application/vnd.micrografx.flo", "flo" }, { "application/vnd.micrografx.igx", "igx" }, { "application/vnd.mif", "mif" }, { "application/vnd.mobius.daf", "daf" }, { "application/vnd.mobius.dis", "dis" }, { "application/vnd.mobius.mbk", "mbk" }, { "application/vnd.mobius.mqy", "mqy" }, { "application/vnd.mobius.msl", "msl" }, { "application/vnd.mobius.plc", "plc" }, { "application/vnd.mobius.txf", "txf" }, { "application/vnd.mophun.application", "mpn" }, { "application/vnd.mophun.certificate", "mpc" }, { "application/vnd.mozilla.xul+xml", "xul" }, { "application/vnd.ms-artgalry", "cil" }, { "application/vnd.ms-cab-compressed", "cab" }, { "application/vnd.ms-excel", "xls" }, { "application/vnd.ms-excel.addin.macroenabled.12", "xlam" }, { "application/vnd.ms-excel.sheet.binary.macroenabled.12", "xlsb" }, { "application/vnd.ms-excel.sheet.macroenabled.12", "xlsm" }, { "application/vnd.ms-excel.template.macroenabled.12", "xltm" }, { "application/vnd.ms-fontobject", "eot" }, { "application/vnd.ms-htmlhelp", "chm" }, { "application/vnd.ms-ims", "ims" }, { "application/vnd.ms-lrm", "lrm" }, { "application/vnd.ms-officetheme", "thmx" }, { "application/vnd.ms-pki.seccat", "cat" }, { "application/vnd.ms-pki.stl", "stl" }, { "application/vnd.ms-powerpoint", "ppt" }, { "application/vnd.ms-powerpoint.addin.macroenabled.12", "ppam" }, { "application/vnd.ms-powerpoint.presentation.macroenabled.12", "pptm" }, { "application/vnd.ms-powerpoint.slide.macroenabled.12", "sldm" }, { "application/vnd.ms-powerpoint.slideshow.macroenabled.12", "ppsm" }, { "application/vnd.ms-powerpoint.template.macroenabled.12", "potm" }, { "application/vnd.ms-project", "mpp" }, { "application/vnd.ms-word.document.macroenabled.12", "docm" }, { "application/vnd.ms-word.template.macroenabled.12", "dotm" }, { "application/vnd.ms-works", "wps" }, { "application/vnd.ms-wpl", "wpl" }, { "application/vnd.ms-xpsdocument", "xps" }, { "application/vnd.mseq", "mseq" }, { "application/vnd.musician", "mus" }, { "application/vnd.muvee.style", "msty" }, { "application/vnd.mynfc", "taglet" }, { "application/vnd.neurolanguage.nlu", "nlu" }, { "application/vnd.nitf", "ntf" }, { "application/vnd.noblenet-directory", "nnd" }, { "application/vnd.noblenet-sealer", "nns" }, { "application/vnd.noblenet-web", "nnw" }, { "application/vnd.nokia.n-gage.data", "ngdat" }, { "application/vnd.nokia.n-gage.symbian.install", "n-gage" }, { "application/vnd.nokia.radio-preset", "rpst" }, { "application/vnd.nokia.radio-presets", "rpss" }, { "application/vnd.novadigm.edm", "edm" }, { "application/vnd.novadigm.edx", "edx" }, { "application/vnd.novadigm.ext", "ext" }, { "application/vnd.oasis.opendocument.chart", "odc" }, { "application/vnd.oasis.opendocument.chart-template", "otc" }, { "application/vnd.oasis.opendocument.database", "odb" }, { "application/vnd.oasis.opendocument.formula", "odf" }, { "application/vnd.oasis.opendocument.formula-template", "odft" }, { "application/vnd.oasis.opendocument.graphics", "odg" }, { "application/vnd.oasis.opendocument.graphics-template", "otg" }, { "application/vnd.oasis.opendocument.image", "odi" }, { "application/vnd.oasis.opendocument.image-template", "oti" }, { "application/vnd.oasis.opendocument.presentation", "odp" }, { "application/vnd.oasis.opendocument.presentation-template", "otp" }, { "application/vnd.oasis.opendocument.spreadsheet", "ods" }, { "application/vnd.oasis.opendocument.spreadsheet-template", "ots" }, { "application/vnd.oasis.opendocument.text", "odt" }, { "application/vnd.oasis.opendocument.text-master", "odm" }, { "application/vnd.oasis.opendocument.text-template", "ott" }, { "application/vnd.oasis.opendocument.text-web", "oth" }, { "application/vnd.olpc-sugar", "xo" }, { "application/vnd.oma.dd2+xml", "dd2" }, { "application/vnd.openofficeorg.extension", "oxt" }, { "application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx" }, { "application/vnd.openxmlformats-officedocument.presentationml.slide", "sldx" }, { "application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppsx" }, { "application/vnd.openxmlformats-officedocument.presentationml.template", "potx" }, { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx" }, { "application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx" }, { "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx" }, { "application/vnd.openxmlformats-officedocument.wordprocessingml.template", "dotx" }, { "application/vnd.osgeo.mapguide.package", "mgp" }, { "application/vnd.osgi.dp", "dp" }, { "application/vnd.osgi.subsystem", "esa" }, { "application/vnd.palm", "pdb" }, { "application/vnd.pawaafile", "paw" }, { "application/vnd.pg.format", "str" }, { "application/vnd.pg.osasli", "ei6" }, { "application/vnd.picsel", "efif" }, { "application/vnd.pmi.widget", "wg" }, { "application/vnd.pocketlearn", "plf" }, { "application/vnd.powerbuilder6", "pbd" }, { "application/vnd.previewsystems.box", "box" }, { "application/vnd.proteus.magazine", "mgz" }, { "application/vnd.publishare-delta-tree", "qps" }, { "application/vnd.pvi.ptid1", "ptid" }, { "application/vnd.quark.quarkxpress", "qxd" }, { "application/vnd.realvnc.bed", "bed" }, { "application/vnd.recordare.musicxml", "mxl" }, { "application/vnd.recordare.musicxml+xml", "musicxml" }, { "application/vnd.rig.cryptonote", "cryptonote" }, { "application/vnd.rim.cod", "cod" }, { "application/vnd.rn-realmedia", "rm" }, { "application/vnd.rn-realmedia-vbr", "rmvb" }, { "application/vnd.route66.link66+xml", "link66" }, { "application/vnd.sailingtracker.track", "st" }, { "application/vnd.seemail", "see" }, { "application/vnd.sema", "sema" }, { "application/vnd.semd", "semd" }, { "application/vnd.semf", "semf" }, { "application/vnd.shana.informed.formdata", "ifm" }, { "application/vnd.shana.informed.formtemplate", "itp" }, { "application/vnd.shana.informed.interchange", "iif" }, { "application/vnd.shana.informed.package", "ipk" }, { "application/vnd.simtech-mindmapper", "twd" }, { "application/vnd.smaf", "mmf" }, { "application/vnd.smart.teacher", "teacher" }, { "application/vnd.solent.sdkm+xml", "sdkm" }, { "application/vnd.spotfire.dxp", "dxp" }, { "application/vnd.spotfire.sfs", "sfs" }, { "application/vnd.stardivision.calc", "sdc" }, { "application/vnd.stardivision.draw", "sda" }, { "application/vnd.stardivision.impress", "sdd" }, { "application/vnd.stardivision.math", "smf" }, { "application/vnd.stardivision.writer", "sdw" }, { "application/vnd.stardivision.writer-global", "sgl" }, { "application/vnd.stepmania.package", "smzip" }, { "application/vnd.stepmania.stepchart", "sm" }, { "application/vnd.sun.xml.calc", "sxc" }, { "application/vnd.sun.xml.calc.template", "stc" }, { "application/vnd.sun.xml.draw", "sxd" }, { "application/vnd.sun.xml.draw.template", "std" }, { "application/vnd.sun.xml.impress", "sxi" }, { "application/vnd.sun.xml.impress.template", "sti" }, { "application/vnd.sun.xml.math", "sxm" }, { "application/vnd.sun.xml.writer", "sxw" }, { "application/vnd.sun.xml.writer.global", "sxg" }, { "application/vnd.sun.xml.writer.template", "stw" }, { "application/vnd.sus-calendar", "sus" }, { "application/vnd.svd", "svd" }, { "application/vnd.symbian.install", "sis" }, { "application/vnd.syncml+xml", "xsm" }, { "application/vnd.syncml.dm+wbxml", "bdm" }, { "application/vnd.syncml.dm+xml", "xdm" }, { "application/vnd.tao.intent-module-archive", "tao" }, { "application/vnd.tcpdump.pcap", "pcap" }, { "application/vnd.tmobile-livetv", "tmo" }, { "application/vnd.trid.tpt", "tpt" }, { "application/vnd.triscape.mxs", "mxs" }, { "application/vnd.trueapp", "tra" }, { "application/vnd.ufdl", "ufd" }, { "application/vnd.uiq.theme", "utz" }, { "application/vnd.umajin", "umj" }, { "application/vnd.unity", "unityweb" }, { "application/vnd.uoml+xml", "uoml" }, { "application/vnd.vcx", "vcx" }, { "application/vnd.visio", "vsd" }, { "application/vnd.visionary", "vis" }, { "application/vnd.vsf", "vsf" }, { "application/vnd.wap.wbxml", "wbxml" }, { "application/vnd.wap.wmlc", "wmlc" }, { "application/vnd.wap.wmlscriptc", "wmlsc" }, { "application/vnd.webturbo", "wtb" }, { "application/vnd.wolfram.player", "nbp" }, { "application/vnd.wordperfect", "wpd" }, { "application/vnd.wqd", "wqd" }, { "application/vnd.wt.stf", "stf" }, { "application/vnd.xara", "xar" }, { "application/vnd.xfdl", "xfdl" }, { "application/vnd.yamaha.hv-dic", "hvd" }, { "application/vnd.yamaha.hv-script", "hvs" }, { "application/vnd.yamaha.hv-voice", "hvp" }, { "application/vnd.yamaha.openscoreformat", "osf" }, { "application/vnd.yamaha.openscoreformat.osfpvg+xml", "osfpvg" }, { "application/vnd.yamaha.smaf-audio", "saf" }, { "application/vnd.yamaha.smaf-phrase", "spf" }, { "application/vnd.yellowriver-custom-menu", "cmp" }, { "application/vnd.zul", "zir" }, { "application/vnd.zzazz.deck+xml", "zaz" }, { "application/voicexml+xml", "vxml" }, { "application/widget", "wgt" }, { "application/winhlp", "hlp" }, { "application/wsdl+xml", "wsdl" }, { "application/wspolicy+xml", "wspolicy" }, { "application/x-7z-compressed", "7z" }, { "application/x-abiword", "abw" }, { "application/x-ace-compressed", "ace" }, { "application/x-apple-diskimage", "dmg" }, { "application/x-authorware-bin", "aab" }, { "application/x-authorware-map", "aam" }, { "application/x-authorware-seg", "aas" }, { "application/x-bcpio", "bcpio" }, { "application/x-bittorrent", "torrent" }, { "application/x-blorb", "blb" }, { "application/x-bzip", "bz" }, { "application/x-bzip2", "bz2" }, { "application/x-cbr", "cbr" }, { "application/x-cdlink", "vcd" }, { "application/x-cfs-compressed", "cfs" }, { "application/x-chat", "chat" }, { "application/x-chess-pgn", "pgn" }, { "application/x-conference", "nsc" }, { "application/x-cpio", "cpio" }, { "application/x-csh", "csh" }, { "application/x-debian-package", "deb" }, { "application/x-dgc-compressed", "dgc" }, { "application/x-director", "dir" }, { "application/x-doom", "wad" }, { "application/x-dtbncx+xml", "ncx" }, { "application/x-dtbook+xml", "dtb" }, { "application/x-dtbresource+xml", "res" }, { "application/x-dvi", "dvi" }, { "application/x-envoy", "evy" }, { "application/x-eva", "eva" }, { "application/x-font-bdf", "bdf" }, { "application/x-font-ghostscript", "gsf" }, { "application/x-font-linux-psf", "psf" }, { "application/x-font-otf", "otf" }, { "application/x-font-pcf", "pcf" }, { "application/x-font-snf", "snf" }, { "application/x-font-ttf", "ttf" }, { "application/x-font-type1", "pfa" }, { "application/font-woff", "woff" }, { "application/x-freearc", "arc" }, { "application/x-futuresplash", "spl" }, { "application/x-gca-compressed", "gca" }, { "application/x-glulx", "ulx" }, { "application/x-gnumeric", "gnumeric" }, { "application/x-gramps-xml", "gramps" }, { "application/x-gtar", "gtar" }, { "application/x-hdf", "hdf" }, { "application/x-install-instructions", "install" }, { "application/x-iso9660-image", "iso" }, { "application/x-java-jnlp-file", "jnlp" }, { "application/x-latex", "latex" }, { "application/x-lzh-compressed", "lzh" }, { "application/x-mie", "mie" }, { "application/x-mobipocket-ebook", "prc" }, { "application/x-ms-application", "application" }, { "application/x-ms-shortcut", "lnk" }, { "application/x-ms-wmd", "wmd" }, { "application/x-ms-wmz", "wmz" }, { "application/x-ms-xbap", "xbap" }, { "application/x-msaccess", "mdb" }, { "application/x-msbinder", "obd" }, { "application/x-mscardfile", "crd" }, { "application/x-msclip", "clp" }, { "application/x-msdownload", "exe" }, { "application/x-msmediaview", "mvb" }, { "application/x-msmetafile", "wmf" }, { "application/x-msmoney", "mny" }, { "application/x-mspublisher", "pub" }, { "application/x-msschedule", "scd" }, { "application/x-msterminal", "trm" }, { "application/x-mswrite", "wri" }, { "application/x-netcdf", "nc" }, { "application/x-nzb", "nzb" }, { "application/x-pkcs12", "p12" }, { "application/x-pkcs7-certificates", "p7b" }, { "application/x-pkcs7-certreqresp", "p7r" }, { "application/x-rar-compressed", "rar" }, { "application/x-research-info-systems", "ris" }, { "application/x-sh", "sh" }, { "application/x-shar", "shar" }, { "application/x-shockwave-flash", "swf" }, { "application/x-silverlight-app", "xap" }, { "application/x-sql", "sql" }, { "application/x-stuffit", "sit" }, { "application/x-stuffitx", "sitx" }, { "application/x-subrip", "srt" }, { "application/x-sv4cpio", "sv4cpio" }, { "application/x-sv4crc", "sv4crc" }, { "application/x-t3vm-image", "t3" }, { "application/x-tads", "gam" }, { "application/x-tar", "tar" }, { "application/x-tcl", "tcl" }, { "application/x-tex", "tex" }, { "application/x-tex-tfm", "tfm" }, { "application/x-texinfo", "texinfo" }, { "application/x-tgif", "obj" }, { "application/x-ustar", "ustar" }, { "application/x-wais-source", "src" }, { "application/x-x509-ca-cert", "der" }, { "application/x-xfig", "fig" }, { "application/x-xliff+xml", "xlf" }, { "application/x-xpinstall", "xpi" }, { "application/x-xz", "xz" }, { "application/x-zmachine", "z1" }, { "application/xaml+xml", "xaml" }, { "application/xcap-diff+xml", "xdf" }, { "application/xenc+xml", "xenc" }, { "application/xhtml+xml", "xhtml" }, { "application/xml", "xml" }, { "application/xml-dtd", "dtd" }, { "application/xop+xml", "xop" }, { "application/xproc+xml", "xpl" }, { "application/xslt+xml", "xslt" }, { "application/xspf+xml", "xspf" }, { "application/xv+xml", "mxml" }, { "application/yang", "yang" }, { "application/yin+xml", "yin" }, { "application/zip", "zip" }, { "audio/adpcm", "adp" }, { "audio/basic", "au" }, { "audio/midi", "mid" }, { "audio/mp4", "mp4a" }, { "audio/mpeg", "mpga" }, { "audio/ogg", "oga" }, { "audio/s3m", "s3m" }, { "audio/silk", "sil" }, { "audio/vnd.dece.audio", "uva" }, { "audio/vnd.digital-winds", "eol" }, { "audio/vnd.dra", "dra" }, { "audio/vnd.dts", "dts" }, { "audio/vnd.dts.hd", "dtshd" }, { "audio/vnd.lucent.voice", "lvp" }, { "audio/vnd.ms-playready.media.pya", "pya" }, { "audio/vnd.nuera.ecelp4800", "ecelp4800" }, { "audio/vnd.nuera.ecelp7470", "ecelp7470" }, { "audio/vnd.nuera.ecelp9600", "ecelp9600" }, { "audio/vnd.rip", "rip" }, { "audio/webm", "weba" }, { "audio/x-aac", "aac" }, { "audio/x-aiff", "aif" }, { "audio/x-caf", "caf" }, { "audio/x-flac", "flac" }, { "audio/x-matroska", "mka" }, { "audio/x-mpegurl", "m3u" }, { "audio/x-ms-wax", "wax" }, { "audio/x-ms-wma", "wma" }, { "audio/x-pn-realaudio", "ram" }, { "audio/x-pn-realaudio-plugin", "rmp" }, { "audio/x-wav", "wav" }, { "audio/xm", "xm" }, { "chemical/x-cdx", "cdx" }, { "chemical/x-cif", "cif" }, { "chemical/x-cmdf", "cmdf" }, { "chemical/x-cml", "cml" }, { "chemical/x-csml", "csml" }, { "chemical/x-xyz", "xyz" }, { "image/bmp", "bmp" }, { "image/cgm", "cgm" }, { "image/g3fax", "g3" }, { "image/gif", "gif" }, { "image/ief", "ief" }, { "image/jpg", "jpg" }, { "image/jpeg", "jpeg" }, { "image/ktx", "ktx" }, { "image/png", "png" }, { "image/prs.btif", "btif" }, { "image/sgi", "sgi" }, { "image/svg+xml", "svg" }, { "image/tiff", "tiff" }, { "image/vnd.adobe.photoshop", "psd" }, { "image/vnd.dece.graphic", "uvi" }, { "image/vnd.dvb.subtitle", "sub" }, { "image/vnd.djvu", "djvu" }, { "image/vnd.dwg", "dwg" }, { "image/vnd.dxf", "dxf" }, { "image/vnd.fastbidsheet", "fbs" }, { "image/vnd.fpx", "fpx" }, { "image/vnd.fst", "fst" }, { "image/vnd.fujixerox.edmics-mmr", "mmr" }, { "image/vnd.fujixerox.edmics-rlc", "rlc" }, { "image/vnd.ms-modi", "mdi" }, { "image/vnd.ms-photo", "wdp" }, { "image/vnd.net-fpx", "npx" }, { "image/vnd.wap.wbmp", "wbmp" }, { "image/vnd.xiff", "xif" }, { "image/webp", "webp" }, { "image/x-3ds", "3ds" }, { "image/x-cmu-raster", "ras" }, { "image/x-cmx", "cmx" }, { "image/x-freehand", "fh" }, { "image/x-icon", "ico" }, { "image/x-mrsid-image", "sid" }, { "image/x-pcx", "pcx" }, { "image/x-pict", "pic" }, { "image/x-portable-anymap", "pnm" }, { "image/x-portable-bitmap", "pbm" }, { "image/x-portable-graymap", "pgm" }, { "image/x-portable-pixmap", "ppm" }, { "image/x-rgb", "rgb" }, { "image/x-tga", "tga" }, { "image/x-xbitmap", "xbm" }, { "image/x-xpixmap", "xpm" }, { "image/x-xwindowdump", "xwd" }, { "message/rfc822", "eml" }, { "model/iges", "igs" }, { "model/mesh", "msh" }, { "model/vnd.collada+xml", "dae" }, { "model/vnd.dwf", "dwf" }, { "model/vnd.gdl", "gdl" }, { "model/vnd.gtw", "gtw" }, { "model/vnd.mts", "mts" }, { "model/vnd.vtu", "vtu" }, { "model/vrml", "wrl" }, { "model/x3d+binary", "x3db" }, { "model/x3d+vrml", "x3dv" }, { "model/x3d+xml", "x3d" }, { "text/cache-manifest", "appcache" }, { "text/calendar", "ics" }, { "text/css", "css" }, { "text/csv", "csv" }, { "text/html", "html" }, { "text/n3", "n3" }, { "text/plain", "txt" }, { "text/prs.lines.tag", "dsc" }, { "text/richtext", "rtx" }, { "text/sgml", "sgml" }, { "text/tab-separated-values", "tsv" }, { "text/troff", "t" }, { "text/turtle", "ttl" }, { "text/uri-list", "uri" }, { "text/vcard", "vcard" }, { "text/vnd.curl", "curl" }, { "text/vnd.curl.dcurl", "dcurl" }, { "text/vnd.curl.scurl", "scurl" }, { "text/vnd.curl.mcurl", "mcurl" }, { "text/vnd.dvb.subtitle", "sub" }, { "text/vnd.fly", "fly" }, { "text/vnd.fmi.flexstor", "flx" }, { "text/vnd.graphviz", "gv" }, { "text/vnd.in3d.3dml", "3dml" }, { "text/vnd.in3d.spot", "spot" }, { "text/vnd.sun.j2me.app-descriptor", "jad" }, { "text/vnd.wap.wml", "wml" }, { "text/vnd.wap.wmlscript", "wmls" }, { "text/x-asm", "s" }, { "text/x-c", "c" }, { "text/x-fortran", "f" }, { "text/x-java-source", "java" }, { "text/x-opml", "opml" }, { "text/x-pascal", "p" }, { "text/x-nfo", "nfo" }, { "text/x-setext", "etx" }, { "text/x-sfv", "sfv" }, { "text/x-uuencode", "uu" }, { "text/x-vcalendar", "vcs" }, { "text/x-vcard", "vcf" }, { "text/xml", "xml" }, { "video/3gpp", "3gp" }, { "video/3gpp2", "3g2" }, { "video/h261", "h261" }, { "video/h263", "h263" }, { "video/h264", "h264" }, { "video/jpeg", "jpgv" }, { "video/jpm", "jpm" }, { "video/mj2", "mj2" }, { "video/mp4", "mp4" }, { "video/mpeg", "mpeg" }, { "video/ogg", "ogv" }, { "video/quicktime", "qt" }, { "video/vnd.dece.hd", "uvh" }, { "video/vnd.dece.mobile", "uvm" }, { "video/vnd.dece.pd", "uvp" }, { "video/vnd.dece.sd", "uvs" }, { "video/vnd.dece.video", "uvv" }, { "video/vnd.dvb.file", "dvb" }, { "video/vnd.fvt", "fvt" }, { "video/vnd.mpegurl", "mxu" }, { "video/vnd.ms-playready.media.pyv", "pyv" }, { "video/vnd.uvvu.mp4", "uvu" }, { "video/vnd.vivo", "viv" }, { "video/webm", "webm" }, { "video/x-f4v", "f4v" }, { "video/x-fli", "fli" }, { "video/x-flv", "flv" }, { "video/x-m4v", "m4v" }, { "video/x-matroska", "mkv" }, { "video/x-mng", "mng" }, { "video/x-ms-asf", "asf" }, { "video/x-ms-vob", "vob" }, { "video/x-ms-wm", "wm" }, { "video/x-ms-wmv", "wmv" }, { "video/x-ms-wmx", "wmx" }, { "video/x-ms-wvx", "wvx" }, { "video/x-msvideo", "avi" }, { "video/x-sgi-movie", "movie" }, { "video/x-smv", "smv" }, { "x-conference/x-cooltalk", "ice" } }; /** * Obtain default file extension for a give MIME type * * @param mimeType a MIME type (lowercase string), e.g. "image/png" * @param extension a buffer in which to store the file extension; the default value is "txt" if no extension is found * @param length the size of the buffer extension * @return true if a file extension is found for the given MIME type, otherwise false */ static bool getFileExtension(const char* mimeType, char* extension, size_t length) { bool hasExt = false; strncpy(extension, "txt", length); if (mimeType != NULL) { for (int i = 0; i < NUM_MIME_TYPES; i++) { if (strncmp(mimeType, MIME[i][M_Type], strlen(MIME[i][M_Type])) == 0) { strncpy(extension, MIME[i][M_Extension], length); hasExt = true; break; } } if (hasExt == false && strncmp(mimeType, "image/", 6) == 0) { strncpy(extension, strstr(mimeType, "/") + 1, length); } } return hasExt; } /** * Obtain default file extension for a give MIME type * * @param mimeType a MIME type (lowercase string), e.g. "image/png" * @param hasExt the value of this pointer is set to true if a default file extension is found, otherwise false * @return a map with name "extension" and value set to file extension, e.g. "png"; if not found the default value is "txt" */ static map* getFileExtensionMap(const char* mimeType, bool* hasExt) { map* ext = createMap("extension", "txt"); *hasExt = false; if (mimeType != NULL) { for (int i = 0; i < NUM_MIME_TYPES; i++) { if(strncmp(mimeType, MIME[i][M_Type], strlen(MIME[i][M_Type])) == 0) { free(ext->value); ext->value = zStrdup(MIME[i][M_Extension]); *hasExt = true; break; } } if (*hasExt == false && strncmp(mimeType, "image/", 6) == 0) { free(ext->value); ext->value = zStrdup(strstr(mimeType, "/") + 1); } } return ext; } static int isGeographic(const char* mimeType){ char* imageMimeType[4]={ "image/tiff", "image/png", "image/jpeg", "application/vnd.google-earth.kmz" }; char* vectorMimeType[5]={ "text/xml", "application/json", "application/gml+xml", "application/zip", "application/vnd.google-earth.kml+xml" }; int i=0; for(;i<4;i++){ if(strncmp(imageMimeType[i],mimeType,strlen(imageMimeType[i]))==0) return 1; } i=0; for(;i<5;i++){ if(strncmp(vectorMimeType[i],mimeType,strlen(vectorMimeType[i]))==0) return 2; } return -1; }