From 7d5f03220384092ed2cb8a86d489e0151774f496 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Tue, 4 Dec 2007 05:47:51 +0000 Subject: * Added SSL Support to HttpListener * Added SSL Option to User Server to allow logins to be done via SSL. * Added sane handling for when Remote Admin Plugin configuration is not found * Added some performance boosts to an area of libTerrain which was highlighted in profiling. --- .../RemoteController/RemoteAdminPlugin.cs | 35 ++++++++++++---------- OpenSim/Framework/Servers/BaseHttpServer.cs | 16 +++++++++- OpenSim/Framework/UserConfig.cs | 7 +++++ .../libTerrainBSD/Channel/Common.cs | 25 ++++++++++------ 4 files changed, 57 insertions(+), 26 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index c37fcba..b9559c0 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -28,22 +28,25 @@ namespace OpenSim.ApplicationPlugins.LoadRegions public void Initialise(OpenSimMain openSim) { - IConfig remoteConfig = openSim.ConfigSource.Configs["RemoteAdmin"]; - if (remoteConfig != null) - { - if (remoteConfig.GetBoolean("enabled", false)) - { - System.Console.WriteLine("RADMIN", "Remote Admin Plugin Enabled"); - - m_app = openSim; - m_httpd = openSim.HttpServer; - - m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); - m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); - m_httpd.AddXmlRPCHandler("admin_broadcast", XmlRpcAlertMethod); - m_httpd.AddXmlRPCHandler("admin_restart", XmlRpcRestartMethod); - } - } + try + { + if (openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false)) + { + OpenSim.Framework.Console.MainLog.Instance.Verbose("RADMIN", "Remote Admin Plugin Enabled"); + + m_app = openSim; + m_httpd = openSim.HttpServer; + + m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); + m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); + m_httpd.AddXmlRPCHandler("admin_broadcast", XmlRpcAlertMethod); + m_httpd.AddXmlRPCHandler("admin_restart", XmlRpcRestartMethod); + } + } + catch (NullReferenceException) + { + // Ignore. + } } public XmlRpcResponse XmlRpcRestartMethod(XmlRpcRequest request) diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs index aa6d315..81829c4 100644 --- a/OpenSim/Framework/Servers/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/BaseHttpServer.cs @@ -45,6 +45,7 @@ namespace OpenSim.Framework.Servers protected Dictionary m_rpcHandlers = new Dictionary(); protected Dictionary m_streamHandlers = new Dictionary(); protected int m_port; + protected bool m_ssl = false; protected bool m_firstcaps = true; public int Port @@ -57,6 +58,12 @@ namespace OpenSim.Framework.Servers m_port = port; } + public BaseHttpServer(int port, bool ssl) + { + m_ssl = ssl; + BaseHttpServer(port); + } + public void AddStreamHandler(IRequestHandler handler) { string httpMethod = handler.HttpMethod; @@ -252,7 +259,14 @@ namespace OpenSim.Framework.Servers MainLog.Instance.Verbose("HTTPD", "Spawned main thread OK"); m_httpListener = new HttpListener(); - m_httpListener.Prefixes.Add("http://+:" + m_port + "/"); + if (!m_ssl) + { + m_httpListener.Prefixes.Add("http://+:" + m_port + "/"); + } + else + { + m_httpListener.Prefixes.Add("https://+:" + m_port + "/"); + } m_httpListener.Start(); HttpListenerContext context; diff --git a/OpenSim/Framework/UserConfig.cs b/OpenSim/Framework/UserConfig.cs index 4c6b3b8..1cc00c7 100644 --- a/OpenSim/Framework/UserConfig.cs +++ b/OpenSim/Framework/UserConfig.cs @@ -43,7 +43,9 @@ namespace OpenSim.Framework public string DatabaseProvider = ""; public static uint DefaultHttpPort = 8002; + public static bool DefaultHttpSSL = false; public uint HttpPort = DefaultHttpPort; + public bool HttpSSL = DefaultHttpSSL; public uint DefaultX = 1000; public uint DefaultY = 1000; @@ -80,6 +82,8 @@ namespace OpenSim.Framework configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, "Http Listener port", DefaultHttpPort.ToString(), false); + configMember.addConfigurationOption("http_ssl", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN, + "Use SSL? true/false", DefaultHttpSSL.ToString(), false); configMember.addConfigurationOption("default_X", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, "Known good region X", "1000", false); configMember.addConfigurationOption("default_Y", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, @@ -111,6 +115,9 @@ namespace OpenSim.Framework case "http_port": HttpPort = (uint) configuration_result; break; + case "http_ssl": + HttpSSL = (bool)configuration_result; + break; case "default_X": DefaultX = (uint)configuration_result; break; diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Common.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Common.cs index 2ad784b..55ed90b 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Common.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Common.cs @@ -143,15 +143,22 @@ namespace libTerrain public double Get(int x, int y) { - if (x >= w) - x = w - 1; - if (y >= h) - y = h - 1; - if (x < 0) - x = 0; - if (y < 0) - y = 0; - return map[x, y]; + try + { + return map[x, y]; + } + catch (IndexOutOfRangeException) + { + if (x >= w) + x = w - 1; + if (y >= h) + y = h - 1; + if (x < 0) + x = 0; + if (y < 0) + y = 0; + return map[x, y]; + } } public void SetWrap(int x, int y, double val) -- cgit v1.1