From 8a0a78cbccce796addacab7ed1609279b802a9b3 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 25 Oct 2011 20:24:21 +0100 Subject: Make OpenSim.Framework.Servers.HttpServer rely on OpenSim.Framework instead of the other way around. This is necessary so that code in HttpServer can use framework facilities such as the thread watchdog for monitoring purposes. Doing this shuffle meant that MainServer was moved into OpenSim/Framework/Servers Also had to make OpenSim.Framework.Console rely on OpenSim.Framework rather than the other way around since it in turn relies on HttpServer MainConsole and some new interfaces had to be moved into OpenSim/Framework to allow this. This can be reverted if parts of OpenSim.Framework stop relying on console presence (cheifly RegionInfo) --- OpenSim/Framework/ConfigurationMember.cs | 2 +- OpenSim/Framework/Console/CommandConsole.cs | 11 +-- OpenSim/Framework/Console/ConsoleBase.cs | 2 +- OpenSim/Framework/Console/MainConsole.cs | 40 ---------- OpenSim/Framework/ICommandConsole.cs | 90 ++++++++++++++++++++++ OpenSim/Framework/IConsole.cs | 53 +++++++++++++ OpenSim/Framework/IScene.cs | 4 +- OpenSim/Framework/MainConsole.cs | 40 ++++++++++ OpenSim/Framework/MainServer.cs | 81 ------------------- OpenSim/Framework/RegionInfo.cs | 2 +- .../Servers/HttpServer/Interfaces/IHttpServer.cs | 4 +- .../HttpServer/PollServiceRequestManager.cs | 38 +++++---- .../Servers/HttpServer/PollServiceWorkerThread.cs | 2 +- OpenSim/Framework/Servers/MainServer.cs | 81 +++++++++++++++++++ OpenSim/Framework/WebUtil.cs | 60 +++++++-------- 15 files changed, 329 insertions(+), 181 deletions(-) delete mode 100644 OpenSim/Framework/Console/MainConsole.cs create mode 100644 OpenSim/Framework/ICommandConsole.cs create mode 100644 OpenSim/Framework/IConsole.cs create mode 100644 OpenSim/Framework/MainConsole.cs delete mode 100644 OpenSim/Framework/MainServer.cs create mode 100644 OpenSim/Framework/Servers/MainServer.cs (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/ConfigurationMember.cs b/OpenSim/Framework/ConfigurationMember.cs index b4ce877..7afa68a 100644 --- a/OpenSim/Framework/ConfigurationMember.cs +++ b/OpenSim/Framework/ConfigurationMember.cs @@ -33,7 +33,7 @@ using System.Reflection; using System.Xml; using log4net; using OpenMetaverse; -using OpenSim.Framework.Console; +//using OpenSim.Framework.Console; namespace OpenSim.Framework { diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs index be36cf2..f10b857 100644 --- a/OpenSim/Framework/Console/CommandConsole.cs +++ b/OpenSim/Framework/Console/CommandConsole.cs @@ -33,12 +33,11 @@ using System.Reflection; using System.Text; using System.Threading; using log4net; +using OpenSim.Framework; namespace OpenSim.Framework.Console { - public delegate void CommandDelegate(string module, string[] cmd); - - public class Commands + public class Commands : ICommands { /// /// Encapsulates a command that can be invoked from the console @@ -564,14 +563,16 @@ namespace OpenSim.Framework.Console /// /// A console that processes commands internally /// - public class CommandConsole : ConsoleBase + public class CommandConsole : ConsoleBase, ICommandConsole { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public Commands Commands = new Commands(); + public ICommands Commands { get; private set; } public CommandConsole(string defaultPrompt) : base(defaultPrompt) { + Commands = new Commands(); + Commands.AddCommand("console", false, "help", "help []", "Get general command list or more detailed help on a specific command", Help); } diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs index c59fbca..4b375d9 100755 --- a/OpenSim/Framework/Console/ConsoleBase.cs +++ b/OpenSim/Framework/Console/ConsoleBase.cs @@ -41,7 +41,7 @@ namespace OpenSim.Framework.Console protected string prompt = "# "; - public object ConsoleScene = null; + public object ConsoleScene { get; set; } /// /// The default prompt text. diff --git a/OpenSim/Framework/Console/MainConsole.cs b/OpenSim/Framework/Console/MainConsole.cs deleted file mode 100644 index 24be617..0000000 --- a/OpenSim/Framework/Console/MainConsole.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -namespace OpenSim.Framework.Console -{ - public class MainConsole - { - private static CommandConsole instance; - - public static CommandConsole Instance - { - get { return instance; } - set { instance = value; } - } - } -} diff --git a/OpenSim/Framework/ICommandConsole.cs b/OpenSim/Framework/ICommandConsole.cs new file mode 100644 index 0000000..d33b9b5 --- /dev/null +++ b/OpenSim/Framework/ICommandConsole.cs @@ -0,0 +1,90 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Xml; + +namespace OpenSim.Framework +{ + public delegate void CommandDelegate(string module, string[] cmd); + + public interface ICommands + { + void FromXml(XmlElement root, CommandDelegate fn); + + /// + /// Get help for the given help string + /// + /// Parsed parts of the help string. If empty then general help is returned. + /// + List GetHelp(string[] cmd); + + /// + /// Add a command to those which can be invoked from the console. + /// + /// + /// + /// + /// + /// + void AddCommand(string module, bool shared, string command, string help, string longhelp, CommandDelegate fn); + + /// + /// Add a command to those which can be invoked from the console. + /// + /// + /// + /// + /// + /// + /// + void AddCommand(string module, bool shared, string command, + string help, string longhelp, string descriptivehelp, + CommandDelegate fn); + + string[] FindNextOption(string[] cmd, bool term); + + string[] Resolve(string[] cmd); + + XmlElement GetXml(XmlDocument doc); + } + + public interface ICommandConsole : IConsole + { + ICommands Commands { get; } + + /// + /// Display a command prompt on the console and wait for user input + /// + void Prompt(); + + void RunCommand(string cmd); + + string ReadLine(string p, bool isCommand, bool e); + } +} \ No newline at end of file diff --git a/OpenSim/Framework/IConsole.cs b/OpenSim/Framework/IConsole.cs new file mode 100644 index 0000000..33024b2 --- /dev/null +++ b/OpenSim/Framework/IConsole.cs @@ -0,0 +1,53 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; + +namespace OpenSim.Framework +{ + public interface IConsole + { + object ConsoleScene { get; } + + void Output(string text, string level); + void Output(string text); + void OutputFormat(string format, params object[] components); + + string CmdPrompt(string p); + string CmdPrompt(string p, string def); + string CmdPrompt(string p, List excludedCharacters); + string CmdPrompt(string p, string def, List excludedCharacters); + + // Displays a command prompt and returns a default value, user may only enter 1 of 2 options + string CmdPrompt(string prompt, string defaultresponse, List options); + + // Displays a prompt and waits for the user to enter a string, then returns that string + // (Done with no echo and suitable for passwords) + string PasswdPrompt(string p); + } +} \ No newline at end of file diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index e0cb897..f1b4732 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs @@ -26,7 +26,7 @@ */ using OpenMetaverse; -using OpenSim.Framework.Console; +//using OpenSim.Framework.Console; using Nini.Config; namespace OpenSim.Framework @@ -108,7 +108,7 @@ namespace OpenSim.Framework void RegisterModuleInterface(M mod); void StackModuleInterface(M mod); - void AddCommand(object module, string command, string shorthelp, string longhelp, CommandDelegate callback); +// void AddCommand(object module, string command, string shorthelp, string longhelp, CommandDelegate callback); ISceneObject DeserializeObject(string representation); diff --git a/OpenSim/Framework/MainConsole.cs b/OpenSim/Framework/MainConsole.cs new file mode 100644 index 0000000..4527b68 --- /dev/null +++ b/OpenSim/Framework/MainConsole.cs @@ -0,0 +1,40 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace OpenSim.Framework +{ + public class MainConsole + { + private static ICommandConsole instance; + + public static ICommandConsole Instance + { + get { return instance; } + set { instance = value; } + } + } +} diff --git a/OpenSim/Framework/MainServer.cs b/OpenSim/Framework/MainServer.cs deleted file mode 100644 index a3e0a26..0000000 --- a/OpenSim/Framework/MainServer.cs +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System.Collections.Generic; -using System.Reflection; -using System.Net; -using log4net; -using OpenSim.Framework.Servers.HttpServer; - -namespace OpenSim.Framework -{ - public class MainServer - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - private static BaseHttpServer instance = null; - private static Dictionary m_Servers = - new Dictionary(); - - public static BaseHttpServer Instance - { - get { return instance; } - set { instance = value; } - } - - public static IHttpServer GetHttpServer(uint port) - { - return GetHttpServer(port,null); - } - - public static void AddHttpServer(BaseHttpServer server) - { - m_Servers.Add(server.Port, server); - } - - public static IHttpServer GetHttpServer(uint port, IPAddress ipaddr) - { - if (port == 0) - return Instance; - if (instance != null && port == Instance.Port) - return Instance; - - if (m_Servers.ContainsKey(port)) - return m_Servers[port]; - - m_Servers[port] = new BaseHttpServer(port); - - if (ipaddr != null) - m_Servers[port].ListenIPAddress = ipaddr; - - m_log.InfoFormat("[MAIN HTTP SERVER]: Starting main http server on port {0}", port); - m_Servers[port].Start(); - - return m_Servers[port]; - } - } -} diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index 0e41535..f7c080f 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs @@ -36,7 +36,7 @@ using log4net; using Nini.Config; using OpenMetaverse; using OpenMetaverse.StructuredData; -using OpenSim.Framework.Console; +//using OpenSim.Framework.Console; namespace OpenSim.Framework { diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs index 65b1eb5..fd77984 100644 --- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs @@ -49,7 +49,7 @@ namespace OpenSim.Framework.Servers.HttpServer /// /// Add a handler for an HTTP request. /// - /// + /// /// This handler can actually be invoked either as /// /// http://:/?method= @@ -70,7 +70,7 @@ namespace OpenSim.Framework.Servers.HttpServer /// In addition, the handler invoked by the HTTP server for any request is the one when best matches the request /// URI. So if a handler for "/myapp/" is registered and a request for "/myapp/page" is received, then /// the "/myapp/" handler is invoked if no "/myapp/page" handler exists. - /// + /// /// /// /// diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 0840a9d..ea30b9a 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs @@ -31,6 +31,7 @@ using System.Threading; using System.Reflection; using log4net; using HttpServer; +using OpenSim.Framework; namespace OpenSim.Framework.Servers.HttpServer { @@ -54,21 +55,25 @@ namespace OpenSim.Framework.Servers.HttpServer m_PollServiceWorkerThreads = new PollServiceWorkerThread[m_WorkerThreadCount]; //startup worker threads - for (uint i=0;i 0; tc++) { //Loop over number of requests each thread handles. - for (int i=0;i 0;i++) + for (int i = 0; i < reqperthread && m_requests.Count > 0; i++) { try { @@ -125,14 +131,14 @@ namespace OpenSim.Framework.Servers.HttpServer } - - ~PollServiceRequestManager() { foreach (object o in m_requests) { PollServiceHttpRequest req = (PollServiceHttpRequest) o; - m_server.DoHTTPGruntWork(req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id), new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext)); + m_server.DoHTTPGruntWork( + req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id), + new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext)); } m_requests.Clear(); @@ -144,4 +150,4 @@ namespace OpenSim.Framework.Servers.HttpServer m_running = false; } } -} +} \ No newline at end of file diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs index b91496b..16e56d2 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs @@ -59,7 +59,7 @@ namespace OpenSim.Framework.Servers.HttpServer m_timeout = pTimeout; } - public void ThreadStart(object o) + public void ThreadStart() { Run(); } diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs new file mode 100644 index 0000000..b8ab8d9 --- /dev/null +++ b/OpenSim/Framework/Servers/MainServer.cs @@ -0,0 +1,81 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using System.Reflection; +using System.Net; +using log4net; +using OpenSim.Framework.Servers.HttpServer; + +namespace OpenSim.Framework.Servers +{ + public class MainServer + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private static BaseHttpServer instance = null; + private static Dictionary m_Servers = + new Dictionary(); + + public static BaseHttpServer Instance + { + get { return instance; } + set { instance = value; } + } + + public static IHttpServer GetHttpServer(uint port) + { + return GetHttpServer(port,null); + } + + public static void AddHttpServer(BaseHttpServer server) + { + m_Servers.Add(server.Port, server); + } + + public static IHttpServer GetHttpServer(uint port, IPAddress ipaddr) + { + if (port == 0) + return Instance; + if (instance != null && port == Instance.Port) + return Instance; + + if (m_Servers.ContainsKey(port)) + return m_Servers[port]; + + m_Servers[port] = new BaseHttpServer(port); + + if (ipaddr != null) + m_Servers[port].ListenIPAddress = ipaddr; + + m_log.InfoFormat("[MAIN HTTP SERVER]: Starting main http server on port {0}", port); + m_Servers[port].Start(); + + return m_Servers[port]; + } + } +} diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs index be7504f..cafa441 100644 --- a/OpenSim/Framework/WebUtil.cs +++ b/OpenSim/Framework/WebUtil.cs @@ -39,9 +39,7 @@ using System.Text; using System.Web; using System.Xml; using System.Xml.Serialization; - using log4net; -using OpenSim.Framework.Servers.HttpServer; using OpenMetaverse.StructuredData; namespace OpenSim.Framework @@ -65,35 +63,35 @@ namespace OpenSim.Framework // a "long" call for warning & debugging purposes public const int LongCallTime = 500; - /// - /// Send LLSD to an HTTP client in application/llsd+json form - /// - /// HTTP response to send the data in - /// LLSD to send to the client - public static void SendJSONResponse(OSHttpResponse response, OSDMap body) - { - byte[] responseData = Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(body)); - - response.ContentEncoding = Encoding.UTF8; - response.ContentLength = responseData.Length; - response.ContentType = "application/llsd+json"; - response.Body.Write(responseData, 0, responseData.Length); - } - - /// - /// Send LLSD to an HTTP client in application/llsd+xml form - /// - /// HTTP response to send the data in - /// LLSD to send to the client - public static void SendXMLResponse(OSHttpResponse response, OSDMap body) - { - byte[] responseData = OSDParser.SerializeLLSDXmlBytes(body); - - response.ContentEncoding = Encoding.UTF8; - response.ContentLength = responseData.Length; - response.ContentType = "application/llsd+xml"; - response.Body.Write(responseData, 0, responseData.Length); - } +// /// +// /// Send LLSD to an HTTP client in application/llsd+json form +// /// +// /// HTTP response to send the data in +// /// LLSD to send to the client +// public static void SendJSONResponse(OSHttpResponse response, OSDMap body) +// { +// byte[] responseData = Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(body)); +// +// response.ContentEncoding = Encoding.UTF8; +// response.ContentLength = responseData.Length; +// response.ContentType = "application/llsd+json"; +// response.Body.Write(responseData, 0, responseData.Length); +// } +// +// /// +// /// Send LLSD to an HTTP client in application/llsd+xml form +// /// +// /// HTTP response to send the data in +// /// LLSD to send to the client +// public static void SendXMLResponse(OSHttpResponse response, OSDMap body) +// { +// byte[] responseData = OSDParser.SerializeLLSDXmlBytes(body); +// +// response.ContentEncoding = Encoding.UTF8; +// response.ContentLength = responseData.Length; +// response.ContentType = "application/llsd+xml"; +// response.Body.Write(responseData, 0, responseData.Length); +// } /// /// Make a GET or GET-like request to a web service that returns LLSD -- cgit v1.1