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