From 5fae30eb8863f3f39e6853584fd49197c52e8835 Mon Sep 17 00:00:00 2001 From: onefang Date: Mon, 5 Aug 2019 01:41:34 +1000 Subject: More basic web server. --- .../Server/Handlers/Web/WebServerInConnector.cs | 53 +++++++++++++++++++--- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Server/Handlers/Web/WebServerInConnector.cs b/OpenSim/Server/Handlers/Web/WebServerInConnector.cs index 94c636f..e7fb2fc 100644 --- a/OpenSim/Server/Handlers/Web/WebServerInConnector.cs +++ b/OpenSim/Server/Handlers/Web/WebServerInConnector.cs @@ -45,27 +45,60 @@ namespace OpenSim.Server.Handlers.Web { public class WebServerInConnector : ServiceConnector { + // This is all slow and clunky, it's not a real web server, just something to use if you don't want a real one. private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private IConfigSource m_Config; private Hashtable mime = new Hashtable(); + private Hashtable ssi = new Hashtable(); public WebServerInConnector(IConfigSource config, IHttpServer server, string configName) : base(config, server, configName) { m_Config = config; + mime.Add(".gz", "application/gzip"); + mime.Add(".js", "application/javascript"); + mime.Add(".json", "application/json"); + mime.Add(".pdf", "application/pdf"); + mime.Add(".rtf", "application/rtf"); + mime.Add(".zip", "application/zip"); + mime.Add(".xz", "application/x-xz"); + mime.Add(".gif", "image/gif"); + mime.Add(".png", "image/png"); + mime.Add(".jp2", "image/jp2"); + mime.Add(".jpg2", "image/jp2"); + mime.Add(".jpe", "image/jpeg"); + mime.Add(".jpg", "image/jpeg"); + mime.Add(".jpeg", "image/jpeg"); + mime.Add(".svg", "image/svg+xml"); + mime.Add(".svgz", "image/svg+xml"); + mime.Add(".tif", "image/tiff"); + mime.Add(".tiff", "image/tiff"); + mime.Add(".css", "text/css"); mime.Add(".html", "text/html"); mime.Add(".htm", "text/html"); mime.Add(".shtml", "text/html"); +// mime.Add(".md", "text/markdown"); +// mime.Add(".markdown","text/markdown"); mime.Add(".txt", "text/plain"); - mime.Add(".css", "text/css"); - mime.Add(".js", "application/javascript"); - mime.Add(".png", "image/png"); - mime.Add(".jpeg", "image/jpeg"); + + IConfig cfg = m_Config.Configs["GridInfoService"]; + string HomeURI = Util.GetConfigVarFromSections(m_Config, "HomeURI", new string[] { "Startup", "Hypergrid" }, String.Empty); + ssi.Add("grid", cfg.GetString("gridname", "my grid")); + ssi.Add("uri", cfg.GetString("login", HomeURI)); + ssi.Add("version", VersionInfo.Version); server.AddHTTPHandler("/web/", WebRequestHandler); } private Hashtable WebRequestHandler(Hashtable request) { Hashtable reply = new Hashtable(); + // Looks like we have to jump through hoops to do simple database queries. B-( + ssi["members"] = "?"; // SELECT COUNT(PrincipalID) FROM UserAccounts + ssi["inworld"] = "?"; // SELECT COUNT(UserID) FROM presence_culled; Includes locals and HGers in world, but not locals HGing. + // SELECT COUNT(UserID) FROM users_online; Includes local online only. + ssi["outworld"] = "?"; // SELECT COUNT(UserID) FROM hg_traveling_data WHERE GridExternalName != ssi["uri"]; Includes locals that are HGing. +// ssi["hgers"] = "?"; // This is complex. + ssi["sims"] = "?"; // SELECT COUNT(uuid) FROM regions +// ssi["month"] = "?"; // SELECT COUNT(UserID) FROM Presence WHERE LastSeen < one month ago 2017-11-28 09:01:51; Includes external HGers, and locals on now. string reqpath = (string) request["uri"]; string[] query = (string[]) request["querystringkeys"]; @@ -78,16 +111,22 @@ namespace OpenSim.Server.Handlers.Web reply["int_response_code"] = 200; if (File.Exists(file)) { - string m = (string) mime[Path.GetExtension(file)]; + string m = (string) mime[Path.GetExtension(file).ToLower()]; reply["content_type"] = m; - if (("image/jpeg" == m) || ("image/png" == m)) + if ((null == m) || ("text/" != m.Substring(0, 5))) { reply["bin_response_data"] = File.ReadAllBytes(file); } else { StreamReader csr = File.OpenText(file); - reply["str_response_string"] = csr.ReadToEnd(); + string content = csr.ReadToEnd(); + // Slow and wasteful, but I'm expecting only tiny web files, not accessed very often. + foreach (DictionaryEntry v in ssi) + { + content = content.Replace("", (string) v.Value); + } + reply["str_response_string"] = content; csr.Close(); } } -- cgit v1.1