Merge branch 'master' into careminster
commit
30d872caad
|
@ -53,6 +53,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
|
private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
|
||||||
|
|
||||||
|
public int DebugLevel { get; set; }
|
||||||
|
|
||||||
private volatile int NotSocketErrors = 0;
|
private volatile int NotSocketErrors = 0;
|
||||||
public volatile bool HTTPDRunning = false;
|
public volatile bool HTTPDRunning = false;
|
||||||
|
|
||||||
|
@ -79,11 +81,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
private PollServiceRequestManager m_PollServiceManager;
|
private PollServiceRequestManager m_PollServiceManager;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Control the printing of certain debug messages.
|
|
||||||
/// </summary>
|
|
||||||
public int DebugLevel { get; set; }
|
|
||||||
|
|
||||||
public uint SSLPort
|
public uint SSLPort
|
||||||
{
|
{
|
||||||
get { return m_sslport; }
|
get { return m_sslport; }
|
||||||
|
@ -450,7 +447,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
if (TryGetStreamHandler(handlerKey, out requestHandler))
|
if (TryGetStreamHandler(handlerKey, out requestHandler))
|
||||||
{
|
{
|
||||||
if (DebugLevel >= 1)
|
if (DebugLevel >= 3)
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}",
|
"[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}",
|
||||||
request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description);
|
request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description);
|
||||||
|
@ -531,7 +528,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
case null:
|
case null:
|
||||||
case "text/html":
|
case "text/html":
|
||||||
|
|
||||||
if (DebugLevel >= 1)
|
if (DebugLevel >= 3)
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
||||||
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
||||||
|
@ -543,7 +540,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
case "application/xml+llsd":
|
case "application/xml+llsd":
|
||||||
case "application/llsd+json":
|
case "application/llsd+json":
|
||||||
|
|
||||||
if (DebugLevel >= 1)
|
if (DebugLevel >= 3)
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
||||||
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
||||||
|
@ -564,7 +561,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
//m_log.Info("[Debug BASE HTTP SERVER]: Checking for LLSD Handler");
|
//m_log.Info("[Debug BASE HTTP SERVER]: Checking for LLSD Handler");
|
||||||
if (DoWeHaveALLSDHandler(request.RawUrl))
|
if (DoWeHaveALLSDHandler(request.RawUrl))
|
||||||
{
|
{
|
||||||
if (DebugLevel >= 1)
|
if (DebugLevel >= 3)
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
||||||
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
||||||
|
@ -574,7 +571,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
// m_log.DebugFormat("[BASE HTTP SERVER]: Checking for HTTP Handler for request {0}", request.RawUrl);
|
// m_log.DebugFormat("[BASE HTTP SERVER]: Checking for HTTP Handler for request {0}", request.RawUrl);
|
||||||
else if (DoWeHaveAHTTPHandler(request.RawUrl))
|
else if (DoWeHaveAHTTPHandler(request.RawUrl))
|
||||||
{
|
{
|
||||||
if (DebugLevel >= 1)
|
if (DebugLevel >= 3)
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
|
||||||
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
|
||||||
|
@ -583,8 +580,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (DebugLevel >= 3)
|
||||||
if (DebugLevel >= 1)
|
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}",
|
"[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}",
|
||||||
request.HttpMethod, request.Url.PathAndQuery);
|
request.HttpMethod, request.Url.PathAndQuery);
|
||||||
|
@ -793,8 +789,23 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
xmlRprcRequest = (XmlRpcRequest) (new XmlRpcRequestDeserializer()).Deserialize(requestBody);
|
xmlRprcRequest = (XmlRpcRequest) (new XmlRpcRequestDeserializer()).Deserialize(requestBody);
|
||||||
}
|
}
|
||||||
catch (XmlException)
|
catch (XmlException e)
|
||||||
{
|
{
|
||||||
|
if (DebugLevel >= 1)
|
||||||
|
{
|
||||||
|
if (DebugLevel >= 2)
|
||||||
|
m_log.Warn(
|
||||||
|
string.Format(
|
||||||
|
"[BASE HTTP SERVER]: Got XMLRPC request with invalid XML from {0}. XML was '{1}'. Sending blank response. Exception ",
|
||||||
|
request.RemoteIPEndPoint, requestBody),
|
||||||
|
e);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.WarnFormat(
|
||||||
|
"[BASE HTTP SERVER]: Got XMLRPC request with invalid XML from {0}, length {1}. Sending blank response.",
|
||||||
|
request.RemoteIPEndPoint, requestBody.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xmlRprcRequest != null)
|
if (xmlRprcRequest != null)
|
||||||
|
@ -1570,6 +1581,9 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
private void StartHTTP()
|
private void StartHTTP()
|
||||||
{
|
{
|
||||||
|
m_log.InfoFormat(
|
||||||
|
"[BASE HTTP SERVER]: Starting {0} server on port {1}", UseSSL ? "HTTPS" : "HTTP", Port);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//m_httpListener = new HttpListener();
|
//m_httpListener = new HttpListener();
|
||||||
|
|
|
@ -25,57 +25,209 @@
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Console;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Servers
|
namespace OpenSim.Framework.Servers
|
||||||
{
|
{
|
||||||
public class MainServer
|
public class MainServer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private static BaseHttpServer instance = null;
|
private static BaseHttpServer instance = null;
|
||||||
private static Dictionary<uint, BaseHttpServer> m_Servers =
|
private static Dictionary<uint, BaseHttpServer> m_Servers = new Dictionary<uint, BaseHttpServer>();
|
||||||
new Dictionary<uint, BaseHttpServer>();
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Control the printing of certain debug messages.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// If DebugLevel >= 1, then short warnings are logged when receiving bad input data.
|
||||||
|
/// If DebugLevel >= 2, then long warnings are logged when receiving bad input data.
|
||||||
|
/// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged.
|
||||||
|
/// </remarks>
|
||||||
|
public static int DebugLevel
|
||||||
|
{
|
||||||
|
get { return s_debugLevel; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
s_debugLevel = value;
|
||||||
|
|
||||||
|
lock (m_Servers)
|
||||||
|
foreach (BaseHttpServer server in m_Servers.Values)
|
||||||
|
server.DebugLevel = s_debugLevel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int s_debugLevel;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set the main HTTP server instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This will be used to register all handlers that listen to the default port.
|
||||||
|
/// </remarks>
|
||||||
|
/// <exception cref='Exception'>
|
||||||
|
/// Thrown if the HTTP server has not already been registered via AddHttpServer()
|
||||||
|
/// </exception>
|
||||||
public static BaseHttpServer Instance
|
public static BaseHttpServer Instance
|
||||||
{
|
{
|
||||||
get { return instance; }
|
get { return instance; }
|
||||||
set { instance = value; }
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
lock (m_Servers)
|
||||||
|
if (!m_Servers.ContainsValue(value))
|
||||||
|
throw new Exception("HTTP server must already have been registered to be set as the main instance");
|
||||||
|
|
||||||
|
instance = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IHttpServer GetHttpServer(uint port)
|
/// <summary>
|
||||||
|
/// Get all the registered servers.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Returns a copy of the dictionary so this can be iterated through without locking.
|
||||||
|
/// </remarks>
|
||||||
|
/// <value></value>
|
||||||
|
public static Dictionary<uint, BaseHttpServer> Servers
|
||||||
{
|
{
|
||||||
return GetHttpServer(port,null);
|
get { return new Dictionary<uint, BaseHttpServer>(m_Servers); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void RegisterHttpConsoleCommands(ICommandConsole console)
|
||||||
|
{
|
||||||
|
console.Commands.AddCommand(
|
||||||
|
"Comms", false, "debug http", "debug http [<level>]",
|
||||||
|
"Turn on inbound non-poll http request debugging.",
|
||||||
|
"If level <= 0, then no extra logging is done.\n"
|
||||||
|
+ "If level >= 1, then short warnings are logged when receiving bad input data.\n"
|
||||||
|
+ "If level >= 2, then long warnings are logged when receiving bad input data.\n"
|
||||||
|
+ "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n"
|
||||||
|
+ "If no level is specified then the current level is returned.",
|
||||||
|
HandleDebugHttpCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Turn on some debugging values for OpenSim.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args"></param>
|
||||||
|
private static void HandleDebugHttpCommand(string module, string[] args)
|
||||||
|
{
|
||||||
|
if (args.Length == 3)
|
||||||
|
{
|
||||||
|
int newDebug;
|
||||||
|
if (int.TryParse(args[2], out newDebug))
|
||||||
|
{
|
||||||
|
MainServer.DebugLevel = newDebug;
|
||||||
|
MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args.Length == 2)
|
||||||
|
{
|
||||||
|
MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MainConsole.Instance.Output("Usage: debug http 0..3");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Register an already started HTTP server to the collection of known servers.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name='server'></param>
|
||||||
public static void AddHttpServer(BaseHttpServer server)
|
public static void AddHttpServer(BaseHttpServer server)
|
||||||
{
|
{
|
||||||
m_Servers.Add(server.Port, server);
|
lock (m_Servers)
|
||||||
|
{
|
||||||
|
if (m_Servers.ContainsKey(server.Port))
|
||||||
|
throw new Exception(string.Format("HTTP server for port {0} already exists.", server.Port));
|
||||||
|
|
||||||
|
m_Servers.Add(server.Port, server);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes the http server listening on the given port.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// It is the responsibility of the caller to do clean up.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name='port'></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool RemoveHttpServer(uint port)
|
||||||
|
{
|
||||||
|
lock (m_Servers)
|
||||||
|
return m_Servers.Remove(port);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Does this collection of servers contain one with the given port?
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Unlike GetHttpServer, this will not instantiate a server if one does not exist on that port.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name='port'></param>
|
||||||
|
/// <returns>true if a server with the given port is registered, false otherwise.</returns>
|
||||||
|
public static bool ContainsHttpServer(uint port)
|
||||||
|
{
|
||||||
|
lock (m_Servers)
|
||||||
|
return m_Servers.ContainsKey(port);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the default http server or an http server for a specific port.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// If the requested HTTP server doesn't already exist then a new one is instantiated and started.
|
||||||
|
/// </remarks>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <param name='port'>If 0 then the default HTTP server is returned.</param>
|
||||||
|
public static IHttpServer GetHttpServer(uint port)
|
||||||
|
{
|
||||||
|
return GetHttpServer(port, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the default http server, an http server for a specific port
|
||||||
|
/// and/or an http server bound to a specific address
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// If the requested HTTP server doesn't already exist then a new one is instantiated and started.
|
||||||
|
/// </remarks>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <param name='port'>If 0 then the default HTTP server is returned.</param>
|
||||||
|
/// <param name='ipaddr'>A specific IP address to bind to. If null then the default IP address is used.</param>
|
||||||
public static IHttpServer GetHttpServer(uint port, IPAddress ipaddr)
|
public static IHttpServer GetHttpServer(uint port, IPAddress ipaddr)
|
||||||
{
|
{
|
||||||
if (port == 0)
|
if (port == 0)
|
||||||
return Instance;
|
return Instance;
|
||||||
|
|
||||||
if (instance != null && port == Instance.Port)
|
if (instance != null && port == Instance.Port)
|
||||||
return Instance;
|
return Instance;
|
||||||
|
|
||||||
if (m_Servers.ContainsKey(port))
|
lock (m_Servers)
|
||||||
|
{
|
||||||
|
if (m_Servers.ContainsKey(port))
|
||||||
|
return m_Servers[port];
|
||||||
|
|
||||||
|
m_Servers[port] = new BaseHttpServer(port);
|
||||||
|
|
||||||
|
if (ipaddr != null)
|
||||||
|
m_Servers[port].ListenIPAddress = ipaddr;
|
||||||
|
|
||||||
|
m_Servers[port].Start();
|
||||||
|
|
||||||
return m_Servers[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];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -231,6 +231,8 @@ namespace OpenSim
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void RegisterConsoleCommands()
|
private void RegisterConsoleCommands()
|
||||||
{
|
{
|
||||||
|
MainServer.RegisterHttpConsoleCommands(m_console);
|
||||||
|
|
||||||
m_console.Commands.AddCommand("Objects", false, "force update",
|
m_console.Commands.AddCommand("Objects", false, "force update",
|
||||||
"force update",
|
"force update",
|
||||||
"Force the update of all objects on clients",
|
"Force the update of all objects on clients",
|
||||||
|
@ -248,14 +250,6 @@ namespace OpenSim
|
||||||
+ "If an avatar name is given then only packets from that avatar are logged",
|
+ "If an avatar name is given then only packets from that avatar are logged",
|
||||||
Debug);
|
Debug);
|
||||||
|
|
||||||
m_console.Commands.AddCommand("Comms", false, "debug http",
|
|
||||||
"debug http <level>",
|
|
||||||
"Turn on inbound http request debugging for everything except the event queue (see debug eq).",
|
|
||||||
"If level >= 2 then the handler used to service the request is logged.\n"
|
|
||||||
+ "If level >= 1 then incoming HTTP requests are logged.\n"
|
|
||||||
+ "If level <= 0 then no extra http logging is done.\n",
|
|
||||||
Debug);
|
|
||||||
|
|
||||||
m_console.Commands.AddCommand("Comms", false, "debug teleport", "debug teleport", "Toggle teleport route debugging", Debug);
|
m_console.Commands.AddCommand("Comms", false, "debug teleport", "debug teleport", "Toggle teleport route debugging", Debug);
|
||||||
|
|
||||||
m_console.Commands.AddCommand("Regions", false, "debug scene",
|
m_console.Commands.AddCommand("Regions", false, "debug scene",
|
||||||
|
@ -914,21 +908,6 @@ namespace OpenSim
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "http":
|
|
||||||
if (args.Length == 3)
|
|
||||||
{
|
|
||||||
int newDebug;
|
|
||||||
if (int.TryParse(args[2], out newDebug))
|
|
||||||
{
|
|
||||||
MainServer.Instance.DebugLevel = newDebug;
|
|
||||||
MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MainConsole.Instance.Output("Usage: debug http 0..2");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "scene":
|
case "scene":
|
||||||
if (args.Length == 4)
|
if (args.Length == 4)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,7 +51,16 @@ namespace OpenSim.Region.ClientStack.Linden.Tests
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void SetUp()
|
public void SetUp()
|
||||||
{
|
{
|
||||||
MainServer.Instance = new BaseHttpServer(9999, false, 9998, "");
|
uint port = 9999;
|
||||||
|
uint sslPort = 9998;
|
||||||
|
|
||||||
|
// This is an unfortunate bit of clean up we have to do because MainServer manages things through static
|
||||||
|
// variables and the VM is not restarted between tests.
|
||||||
|
MainServer.RemoveHttpServer(port);
|
||||||
|
|
||||||
|
BaseHttpServer server = new BaseHttpServer(port, false, sslPort, "");
|
||||||
|
MainServer.AddHttpServer(server);
|
||||||
|
MainServer.Instance = server;
|
||||||
|
|
||||||
IConfigSource config = new IniConfigSource();
|
IConfigSource config = new IniConfigSource();
|
||||||
config.AddConfig("Startup");
|
config.AddConfig("Startup");
|
||||||
|
|
|
@ -94,22 +94,19 @@ namespace OpenSim.Region.ClientStack
|
||||||
m_log.InfoFormat("[REGION SERVER]: Starting HTTP server on port {0}", m_httpServerPort);
|
m_log.InfoFormat("[REGION SERVER]: Starting HTTP server on port {0}", m_httpServerPort);
|
||||||
m_httpServer.Start();
|
m_httpServer.Start();
|
||||||
|
|
||||||
|
MainServer.AddHttpServer(m_httpServer);
|
||||||
MainServer.Instance = m_httpServer;
|
MainServer.Instance = m_httpServer;
|
||||||
|
|
||||||
// "OOB" Server
|
// "OOB" Server
|
||||||
if (m_networkServersInfo.ssl_listener)
|
if (m_networkServersInfo.ssl_listener)
|
||||||
{
|
{
|
||||||
BaseHttpServer server = null;
|
BaseHttpServer server = new BaseHttpServer(
|
||||||
server = new BaseHttpServer(
|
|
||||||
m_networkServersInfo.https_port, m_networkServersInfo.ssl_listener, m_networkServersInfo.cert_path,
|
m_networkServersInfo.https_port, m_networkServersInfo.ssl_listener, m_networkServersInfo.cert_path,
|
||||||
m_networkServersInfo.cert_pass);
|
m_networkServersInfo.cert_pass);
|
||||||
// Add the server to m_Servers
|
|
||||||
if(server != null)
|
m_log.InfoFormat("[REGION SERVER]: Starting HTTPS server on port {0}", server.Port);
|
||||||
{
|
MainServer.AddHttpServer(server);
|
||||||
m_log.InfoFormat("[REGION SERVER]: Starting HTTPS server on port {0}", server.Port);
|
server.Start();
|
||||||
MainServer.AddHttpServer(server);
|
|
||||||
server.Start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
base.StartupSpecific();
|
base.StartupSpecific();
|
||||||
|
|
|
@ -131,11 +131,12 @@ namespace OpenSim.Region.CoreModules.Scripting.XMLRPC
|
||||||
{
|
{
|
||||||
// Start http server
|
// Start http server
|
||||||
// Attach xmlrpc handlers
|
// Attach xmlrpc handlers
|
||||||
m_log.Info("[XML RPC MODULE]: " +
|
// m_log.InfoFormat(
|
||||||
"Starting up XMLRPC Server on port " + m_remoteDataPort + " for llRemoteData commands.");
|
// "[XML RPC MODULE]: Starting up XMLRPC Server on port {0} for llRemoteData commands.",
|
||||||
BaseHttpServer httpServer = new BaseHttpServer((uint) m_remoteDataPort);
|
// m_remoteDataPort);
|
||||||
|
|
||||||
|
IHttpServer httpServer = MainServer.GetHttpServer((uint)m_remoteDataPort);
|
||||||
httpServer.AddXmlRPCHandler("llRemoteData", XmlRpcRemoteData);
|
httpServer.AddXmlRPCHandler("llRemoteData", XmlRpcRemoteData);
|
||||||
httpServer.Start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,40 +44,7 @@ namespace OpenSim.Server.Base
|
||||||
//
|
//
|
||||||
private static readonly ILog m_Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
// The http server instance
|
private uint m_consolePort;
|
||||||
//
|
|
||||||
protected BaseHttpServer m_HttpServer = null;
|
|
||||||
protected uint m_Port = 0;
|
|
||||||
protected Dictionary<uint, BaseHttpServer> m_Servers =
|
|
||||||
new Dictionary<uint, BaseHttpServer>();
|
|
||||||
protected uint m_consolePort = 0;
|
|
||||||
|
|
||||||
public IHttpServer HttpServer
|
|
||||||
{
|
|
||||||
get { return m_HttpServer; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public uint DefaultPort
|
|
||||||
{
|
|
||||||
get { return m_Port; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public IHttpServer GetHttpServer(uint port)
|
|
||||||
{
|
|
||||||
m_Log.InfoFormat("[SERVER]: Requested port {0}", port);
|
|
||||||
if (port == m_Port)
|
|
||||||
return HttpServer;
|
|
||||||
|
|
||||||
if (m_Servers.ContainsKey(port))
|
|
||||||
return m_Servers[port];
|
|
||||||
|
|
||||||
m_Servers[port] = new BaseHttpServer(port);
|
|
||||||
|
|
||||||
m_Log.InfoFormat("[SERVER]: Starting new HTTP server on port {0}", port);
|
|
||||||
m_Servers[port].Start();
|
|
||||||
|
|
||||||
return m_Servers[port];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle all the automagical stuff
|
// Handle all the automagical stuff
|
||||||
//
|
//
|
||||||
|
@ -94,19 +61,21 @@ namespace OpenSim.Server.Base
|
||||||
System.Console.WriteLine("Section 'Network' not found, server can't start");
|
System.Console.WriteLine("Section 'Network' not found, server can't start");
|
||||||
Thread.CurrentThread.Abort();
|
Thread.CurrentThread.Abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint port = (uint)networkConfig.GetInt("port", 0);
|
uint port = (uint)networkConfig.GetInt("port", 0);
|
||||||
|
|
||||||
if (port == 0)
|
if (port == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
Thread.CurrentThread.Abort();
|
Thread.CurrentThread.Abort();
|
||||||
}
|
}
|
||||||
//
|
|
||||||
bool ssl_main = networkConfig.GetBoolean("https_main",false);
|
bool ssl_main = networkConfig.GetBoolean("https_main",false);
|
||||||
bool ssl_listener = networkConfig.GetBoolean("https_listener",false);
|
bool ssl_listener = networkConfig.GetBoolean("https_listener",false);
|
||||||
|
|
||||||
m_consolePort = (uint)networkConfig.GetInt("ConsolePort", 0);
|
m_consolePort = (uint)networkConfig.GetInt("ConsolePort", 0);
|
||||||
m_Port = port;
|
|
||||||
|
BaseHttpServer httpServer = null;
|
||||||
|
|
||||||
//
|
//
|
||||||
// This is where to make the servers:
|
// This is where to make the servers:
|
||||||
//
|
//
|
||||||
|
@ -118,8 +87,7 @@ namespace OpenSim.Server.Base
|
||||||
//
|
//
|
||||||
if ( !ssl_main )
|
if ( !ssl_main )
|
||||||
{
|
{
|
||||||
m_HttpServer = new BaseHttpServer(port);
|
httpServer = new BaseHttpServer(port);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -135,10 +103,12 @@ namespace OpenSim.Server.Base
|
||||||
System.Console.WriteLine("Password for X509 certificate is missing, server can't start.");
|
System.Console.WriteLine("Password for X509 certificate is missing, server can't start.");
|
||||||
Thread.CurrentThread.Abort();
|
Thread.CurrentThread.Abort();
|
||||||
}
|
}
|
||||||
m_HttpServer = new BaseHttpServer(port, ssl_main, cert_path, cert_pass);
|
|
||||||
|
httpServer = new BaseHttpServer(port, ssl_main, cert_path, cert_pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainServer.Instance = m_HttpServer;
|
MainServer.AddHttpServer(httpServer);
|
||||||
|
MainServer.Instance = httpServer;
|
||||||
|
|
||||||
// If https_listener = true, then add an ssl listener on the https_port...
|
// If https_listener = true, then add an ssl listener on the https_port...
|
||||||
if ( ssl_listener == true ) {
|
if ( ssl_listener == true ) {
|
||||||
|
@ -157,43 +127,24 @@ namespace OpenSim.Server.Base
|
||||||
System.Console.WriteLine("Password for X509 certificate is missing, server can't start.");
|
System.Console.WriteLine("Password for X509 certificate is missing, server can't start.");
|
||||||
Thread.CurrentThread.Abort();
|
Thread.CurrentThread.Abort();
|
||||||
}
|
}
|
||||||
// Add our https_server
|
|
||||||
BaseHttpServer server = null;
|
MainServer.AddHttpServer(new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass));
|
||||||
server = new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass);
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
m_Log.InfoFormat("[SERVER]: Starting HTTPS server on port {0}", https_port);
|
|
||||||
m_Servers.Add(https_port,server);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
System.Console.WriteLine(String.Format("Failed to start HTTPS server on port {0}",https_port));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Initialise()
|
protected override void Initialise()
|
||||||
{
|
{
|
||||||
m_Log.InfoFormat("[SERVER]: Starting HTTP server on port {0}", m_HttpServer.Port);
|
foreach (BaseHttpServer s in MainServer.Servers.Values)
|
||||||
m_HttpServer.Start();
|
s.Start();
|
||||||
|
|
||||||
if (m_Servers.Count > 0)
|
MainServer.RegisterHttpConsoleCommands(MainConsole.Instance);
|
||||||
{
|
|
||||||
foreach (BaseHttpServer s in m_Servers.Values)
|
|
||||||
{
|
|
||||||
if (!s.UseSSL)
|
|
||||||
m_Log.InfoFormat("[SERVER]: Starting HTTP server on port {0}", s.Port);
|
|
||||||
else
|
|
||||||
m_Log.InfoFormat("[SERVER]: Starting HTTPS server on port {0}", s.Port);
|
|
||||||
|
|
||||||
s.Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MainConsole.Instance is RemoteConsole)
|
if (MainConsole.Instance is RemoteConsole)
|
||||||
{
|
{
|
||||||
if (m_consolePort == 0)
|
if (m_consolePort == 0)
|
||||||
((RemoteConsole)MainConsole.Instance).SetServer(m_HttpServer);
|
((RemoteConsole)MainConsole.Instance).SetServer(MainServer.Instance);
|
||||||
else
|
else
|
||||||
((RemoteConsole)MainConsole.Instance).SetServer(GetHttpServer(m_consolePort));
|
((RemoteConsole)MainConsole.Instance).SetServer(MainServer.GetHttpServer(m_consolePort));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ using log4net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Server.Base;
|
using OpenSim.Server.Base;
|
||||||
using OpenSim.Server.Handlers.Base;
|
using OpenSim.Server.Handlers.Base;
|
||||||
|
@ -92,27 +93,24 @@ namespace OpenSim.Server
|
||||||
if (parts.Length > 1)
|
if (parts.Length > 1)
|
||||||
friendlyName = parts[1];
|
friendlyName = parts[1];
|
||||||
|
|
||||||
IHttpServer server = m_Server.HttpServer;
|
IHttpServer server;
|
||||||
if (port != 0)
|
|
||||||
server = m_Server.GetHttpServer(port);
|
|
||||||
|
|
||||||
if (port != m_Server.DefaultPort && port != 0)
|
if (port != 0)
|
||||||
m_log.InfoFormat("[SERVER]: Loading {0} on port {1}", friendlyName, port);
|
server = MainServer.GetHttpServer(port);
|
||||||
else
|
else
|
||||||
m_log.InfoFormat("[SERVER]: Loading {0}", friendlyName);
|
server = MainServer.Instance;
|
||||||
|
|
||||||
|
m_log.InfoFormat("[SERVER]: Loading {0} on port {1}", friendlyName, server.Port);
|
||||||
|
|
||||||
IServiceConnector connector = null;
|
IServiceConnector connector = null;
|
||||||
|
|
||||||
Object[] modargs = new Object[] { m_Server.Config, server,
|
Object[] modargs = new Object[] { m_Server.Config, server, configName };
|
||||||
configName };
|
connector = ServerUtils.LoadPlugin<IServiceConnector>(conn, modargs);
|
||||||
connector = ServerUtils.LoadPlugin<IServiceConnector>(conn,
|
|
||||||
modargs);
|
|
||||||
if (connector == null)
|
if (connector == null)
|
||||||
{
|
{
|
||||||
modargs = new Object[] { m_Server.Config, server };
|
modargs = new Object[] { m_Server.Config, server };
|
||||||
connector =
|
connector = ServerUtils.LoadPlugin<IServiceConnector>(conn, modargs);
|
||||||
ServerUtils.LoadPlugin<IServiceConnector>(conn,
|
|
||||||
modargs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connector != null)
|
if (connector != null)
|
||||||
|
|
|
@ -1480,6 +1480,7 @@
|
||||||
<Reference name="OpenMetaverse.StructuredData" path="../../bin/"/>
|
<Reference name="OpenMetaverse.StructuredData" path="../../bin/"/>
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
<Reference name="OpenSim.Server.Base"/>
|
<Reference name="OpenSim.Server.Base"/>
|
||||||
<Reference name="OpenSim.Server.Handlers"/>
|
<Reference name="OpenSim.Server.Handlers"/>
|
||||||
|
|
Loading…
Reference in New Issue