aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs8
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs64
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs11
-rw-r--r--OpenSim/Region/ClientStack/RegionApplicationBase.cs1
-rw-r--r--OpenSim/Server/Base/HttpServerBase.cs13
5 files changed, 75 insertions, 22 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 6b52485..0db1329 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -53,14 +53,6 @@ namespace OpenSim.Framework.Servers.HttpServer
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); 54 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
55 55
56 /// <summary>
57 /// Control the printing of certain debug messages.
58 /// </summary>
59 /// <remarks>
60 /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data.
61 /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data.
62 /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged.
63 /// </remarks>
64 public int DebugLevel { get; set; } 56 public int DebugLevel { get; set; }
65 57
66 private volatile int NotSocketErrors = 0; 58 private volatile int NotSocketErrors = 0;
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs
index efac6e1..becbbc2 100644
--- a/OpenSim/Framework/Servers/MainServer.cs
+++ b/OpenSim/Framework/Servers/MainServer.cs
@@ -25,6 +25,7 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System;
28using System.Collections.Generic; 29using System.Collections.Generic;
29using System.Reflection; 30using System.Reflection;
30using System.Net; 31using System.Net;
@@ -40,13 +41,20 @@ namespace OpenSim.Framework.Servers
40 private static BaseHttpServer instance = null; 41 private static BaseHttpServer instance = null;
41 private static Dictionary<uint, BaseHttpServer> m_Servers = new Dictionary<uint, BaseHttpServer>(); 42 private static Dictionary<uint, BaseHttpServer> m_Servers = new Dictionary<uint, BaseHttpServer>();
42 43
44 /// <summary>
45 /// Control the printing of certain debug messages.
46 /// </summary>
47 /// <remarks>
48 /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data.
49 /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data.
50 /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged.
51 /// </remarks>
43 public static int DebugLevel 52 public static int DebugLevel
44 { 53 {
45 get { return s_debugLevel; } 54 get { return s_debugLevel; }
46 set 55 set
47 { 56 {
48 s_debugLevel = value; 57 s_debugLevel = value;
49 Instance.DebugLevel = s_debugLevel;
50 58
51 lock (m_Servers) 59 lock (m_Servers)
52 foreach (BaseHttpServer server in m_Servers.Values) 60 foreach (BaseHttpServer server in m_Servers.Values)
@@ -56,20 +64,70 @@ namespace OpenSim.Framework.Servers
56 64
57 private static int s_debugLevel; 65 private static int s_debugLevel;
58 66
67 /// <summary>
68 /// Set the main HTTP server instance.
69 /// </summary>
70 /// <remarks>
71 /// This will be used to register all handlers that listen to the default port.
72 /// </remarks>
73 /// <exception cref='Exception'>
74 /// Thrown if the HTTP server has not already been registered via AddHttpServer()
75 /// </exception>
59 public static BaseHttpServer Instance 76 public static BaseHttpServer Instance
60 { 77 {
61 get { return instance; } 78 get { return instance; }
62 set { instance = value; } 79
80 set
81 {
82 lock (m_Servers)
83 if (!m_Servers.ContainsValue(value))
84 throw new Exception("HTTP server must already have been registered to be set as the main instance");
85
86 instance = value;
87 }
63 } 88 }
64 89
65 /// <summary> 90 /// <summary>
66 /// Add an already started HTTP server to the collection of known servers. 91 /// Register an already started HTTP server to the collection of known servers.
67 /// </summary> 92 /// </summary>
68 /// <param name='server'></param> 93 /// <param name='server'></param>
69 public static void AddHttpServer(BaseHttpServer server) 94 public static void AddHttpServer(BaseHttpServer server)
70 { 95 {
71 lock (m_Servers) 96 lock (m_Servers)
97 {
98 if (m_Servers.ContainsKey(server.Port))
99 throw new Exception(string.Format("HTTP server for port {0} already exists.", server.Port));
100
72 m_Servers.Add(server.Port, server); 101 m_Servers.Add(server.Port, server);
102 }
103 }
104
105 /// <summary>
106 /// Removes the http server listening on the given port.
107 /// </summary>
108 /// <remarks>
109 /// It is the responsibility of the caller to do clean up.
110 /// </remarks>
111 /// <param name='port'></param>
112 /// <returns></returns>
113 public static bool RemoveHttpServer(uint port)
114 {
115 lock (m_Servers)
116 return m_Servers.Remove(port);
117 }
118
119 /// <summary>
120 /// Does this collection of servers contain one with the given port?
121 /// </summary>
122 /// <remarks>
123 /// Unlike GetHttpServer, this will not instantiate a server if one does not exist on that port.
124 /// </remarks>
125 /// <param name='port'></param>
126 /// <returns>true if a server with the given port is registered, false otherwise.</returns>
127 public static bool ContainsHttpServer(uint port)
128 {
129 lock (m_Servers)
130 return m_Servers.ContainsKey(port);
73 } 131 }
74 132
75 /// <summary> 133 /// <summary>
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs
index c25b58c..cd70410 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs
@@ -51,7 +51,16 @@ namespace OpenSim.Region.ClientStack.Linden.Tests
51 [SetUp] 51 [SetUp]
52 public void SetUp() 52 public void SetUp()
53 { 53 {
54 MainServer.Instance = new BaseHttpServer(9999, false, 9998, ""); 54 uint port = 9999;
55 uint sslPort = 9998;
56
57 // This is an unfortunate bit of clean up we have to do because MainServer manages things through static
58 // variables and the VM is not restarted between tests.
59 MainServer.RemoveHttpServer(port);
60
61 BaseHttpServer server = new BaseHttpServer(port, false, sslPort, "");
62 MainServer.AddHttpServer(server);
63 MainServer.Instance = server;
55 64
56 IConfigSource config = new IniConfigSource(); 65 IConfigSource config = new IniConfigSource();
57 config.AddConfig("Startup"); 66 config.AddConfig("Startup");
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
index 27a5879..c4324e8 100644
--- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs
+++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
@@ -94,6 +94,7 @@ namespace OpenSim.Region.ClientStack
94 m_log.InfoFormat("[REGION SERVER]: Starting HTTP server on port {0}", m_httpServerPort); 94 m_log.InfoFormat("[REGION SERVER]: Starting HTTP server on port {0}", m_httpServerPort);
95 m_httpServer.Start(); 95 m_httpServer.Start();
96 96
97 MainServer.AddHttpServer(m_httpServer);
97 MainServer.Instance = m_httpServer; 98 MainServer.Instance = m_httpServer;
98 99
99 // "OOB" Server 100 // "OOB" Server
diff --git a/OpenSim/Server/Base/HttpServerBase.cs b/OpenSim/Server/Base/HttpServerBase.cs
index d471559..7014303 100644
--- a/OpenSim/Server/Base/HttpServerBase.cs
+++ b/OpenSim/Server/Base/HttpServerBase.cs
@@ -138,6 +138,7 @@ namespace OpenSim.Server.Base
138 m_HttpServer = new BaseHttpServer(port, ssl_main, cert_path, cert_pass); 138 m_HttpServer = new BaseHttpServer(port, ssl_main, cert_path, cert_pass);
139 } 139 }
140 140
141 MainServer.AddHttpServer(m_HttpServer);
141 MainServer.Instance = m_HttpServer; 142 MainServer.Instance = m_HttpServer;
142 143
143 // If https_listener = true, then add an ssl listener on the https_port... 144 // If https_listener = true, then add an ssl listener on the https_port...
@@ -157,16 +158,8 @@ namespace OpenSim.Server.Base
157 System.Console.WriteLine("Password for X509 certificate is missing, server can't start."); 158 System.Console.WriteLine("Password for X509 certificate is missing, server can't start.");
158 Thread.CurrentThread.Abort(); 159 Thread.CurrentThread.Abort();
159 } 160 }
160 // Add our https_server 161
161 BaseHttpServer server = null; 162 m_Servers.Add(https_port, new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass));
162 server = new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass);
163 if (server != null)
164 {
165 m_Log.InfoFormat("[SERVER]: Starting HTTPS server on port {0}", https_port);
166 m_Servers.Add(https_port,server);
167 }
168 else
169 System.Console.WriteLine(String.Format("Failed to start HTTPS server on port {0}",https_port));
170 } 163 }
171 } 164 }
172 165