aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers/MainServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Servers/MainServer.cs')
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs64
1 files changed, 61 insertions, 3 deletions
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>