* Moved XMLRPC Controller to a Application Plugin. Requires testing.

afrisby
Adam Frisby 2007-12-03 07:06:46 +00:00
parent 4b95eb589b
commit 981c97502a
5 changed files with 237 additions and 126 deletions

View File

@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("RemoteController")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RemoteController")]
[assembly: AssemblyCopyright("Copyright © 2007")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("a8d10dbc-371b-4514-8d1d-7d3589f658af")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.832
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace RemoteController.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@ -1,122 +1,139 @@
using System; using System;
using System.Collections; using System.Collections.Generic;
using System.Net; using System.Text;
using System.Timers; using System.Net;
using Nwc.XmlRpc; using OpenSim;
using OpenSim.Framework; using OpenSim.Framework.Console;
using OpenSim.Framework.Console; using OpenSim.Framework;
using OpenSim.Framework.Servers; using OpenSim.Framework.Servers;
using Mono.Addins;
namespace OpenSim using Mono.Addins.Description;
{ using Nini;
internal class OpenSimController using Nini.Config;
{ using Nwc.XmlRpc;
private OpenSimMain m_app; using System.Collections;
private BaseHttpServer m_httpServer; using System.Timers;
private const bool m_enablexmlrpc = true;
[assembly: Addin]
public OpenSimController(OpenSimMain core, BaseHttpServer httpd) [assembly: AddinDependency("OpenSim", "0.4")]
{
m_app = core; namespace OpenSim.ApplicationPlugins.LoadRegions
m_httpServer = httpd; {
[Extension("/OpenSim/Startup")]
if (m_enablexmlrpc) public class RemoteAdminPlugin : IApplicationPlugin
{ {
m_httpServer.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); private OpenSimMain m_app;
m_httpServer.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); private BaseHttpServer m_httpd;
}
} public void Initialise(OpenSimMain openSim)
{
public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request) if (openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false))
{ {
MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request"); System.Console.WriteLine("RADMIN","Remote Admin Plugin Enabled");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable) request.Params[0]; m_app = openSim;
m_httpd = openSim.HttpServer;
if ((string) requestData["shutdown"] == "delayed")
{ m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod);
int timeout = (Int32)requestData["milliseconds"]; m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod);
}
Hashtable responseData = new Hashtable(); }
responseData["accepted"] = "true";
response.Value = responseData; public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request)
{
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() + MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request");
" second(s). Please save what you are doing and log out."); XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
// Perform shutdown
Timer shutdownTimer = new Timer(timeout); // Wait before firing if ((string)requestData["shutdown"] == "delayed")
shutdownTimer.AutoReset = false; {
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); int timeout = (Int32)requestData["milliseconds"];
shutdownTimer.Start();
Hashtable responseData = new Hashtable();
return response; responseData["accepted"] = "true";
} response.Value = responseData;
else
{ m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int)(timeout / 1000)).ToString() +
Hashtable responseData = new Hashtable(); " second(s). Please save what you are doing and log out.");
responseData["accepted"] = "true";
response.Value = responseData; // Perform shutdown
Timer shutdownTimer = new Timer(timeout); // Wait before firing
m_app.SceneManager.SendGeneralMessage("Region is going down now."); shutdownTimer.AutoReset = false;
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
// Perform shutdown shutdownTimer.Start();
Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing
shutdownTimer.AutoReset = false; return response;
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); }
shutdownTimer.Start(); else
{
return response; Hashtable responseData = new Hashtable();
} responseData["accepted"] = "true";
} response.Value = responseData;
private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e) m_app.SceneManager.SendGeneralMessage("Region is going down now.");
{
m_app.Shutdown(); // Perform shutdown
} Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing
shutdownTimer.AutoReset = false;
public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request) shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
{ shutdownTimer.Start();
MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request");
XmlRpcResponse response = new XmlRpcResponse(); return response;
Hashtable requestData = (Hashtable) request.Params[0]; }
}
RegionInfo newRegionData = new RegionInfo();
private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e)
try {
{ m_app.Shutdown();
newRegionData.RegionID = (string)requestData["region_id"]; }
newRegionData.RegionName = (string)requestData["region_name"];
newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]); public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request)
newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]); {
MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request");
// Security risk XmlRpcResponse response = new XmlRpcResponse();
newRegionData.DataStore = (string) requestData["datastore"]; Hashtable requestData = (Hashtable)request.Params[0];
newRegionData.InternalEndPoint = new IPEndPoint( RegionInfo newRegionData = new RegionInfo();
IPAddress.Parse((string) requestData["listen_ip"]), 0);
try
newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"]; {
newRegionData.ExternalHostName = (string)requestData["external_address"]; newRegionData.RegionID = (string)requestData["region_id"];
newRegionData.RegionName = (string)requestData["region_name"];
newRegionData.MasterAvatarFirstName = (string) requestData["region_master_first"]; newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]);
newRegionData.MasterAvatarLastName = (string) requestData["region_master_last"]; newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]);
m_app.CreateRegion(newRegionData); // Security risk
newRegionData.DataStore = (string)requestData["datastore"];
Hashtable responseData = new Hashtable();
responseData["created"] = "true"; newRegionData.InternalEndPoint = new IPEndPoint(
response.Value = responseData; IPAddress.Parse((string)requestData["listen_ip"]), 0);
}
catch (Exception e) newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"];
{ newRegionData.ExternalHostName = (string)requestData["external_address"];
Hashtable responseData = new Hashtable();
responseData["created"] = "false"; newRegionData.MasterAvatarFirstName = (string)requestData["region_master_first"];
responseData["error"] = e.ToString(); newRegionData.MasterAvatarLastName = (string)requestData["region_master_last"];
response.Value = responseData;
} m_app.CreateRegion(newRegionData);
return response; Hashtable responseData = new Hashtable();
} responseData["created"] = "true";
} response.Value = responseData;
} }
catch (Exception e)
{
Hashtable responseData = new Hashtable();
responseData["created"] = "false";
responseData["error"] = e.ToString();
response.Value = responseData;
}
return response;
}
public void Close()
{
}
}
}

View File

@ -61,8 +61,6 @@ namespace OpenSim
public bool m_gridLocalAsset; public bool m_gridLocalAsset;
public bool m_SendChildAgentTaskData; public bool m_SendChildAgentTaskData;
private OpenSimController m_controller;
protected LocalLoginService m_loginService; protected LocalLoginService m_loginService;
protected string m_storageDll; protected string m_storageDll;
@ -102,6 +100,11 @@ namespace OpenSim
set { m_config = value; } set { m_config = value; }
} }
public BaseHttpServer HttpServer
{
get { return m_httpServer; }
}
private ModuleLoader m_moduleLoader; private ModuleLoader m_moduleLoader;
public ModuleLoader ModuleLoader public ModuleLoader ModuleLoader
@ -279,8 +282,6 @@ namespace OpenSim
base.StartUp(); base.StartUp();
m_controller = new OpenSimController(this, m_httpServer);
if (m_sandbox) if (m_sandbox)
{ {
LocalInventoryService inventoryService = new LocalInventoryService(); LocalInventoryService inventoryService = new LocalInventoryService();

View File

@ -767,6 +767,36 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.ApplicationPlugins.RemoteController" path="OpenSim/ApplicationPlugins/RemoteController" type="Library">
<Configuration name="Debug">
<Options>
<OutputPath>../../../bin/</OutputPath>
</Options>
</Configuration>
<Configuration name="Release">
<Options>
<OutputPath>../../../bin/</OutputPath>
</Options>
</Configuration>
<ReferencePath>../../../bin/</ReferencePath>
<Reference name="Mono.Addins.dll" />
<Reference name="System"/>
<Reference name="System.Xml"/>
<Reference name="libsecondlife.dll" />
<Reference name="Nini.dll" />
<Reference name="XMLRPC.dll" />
<Reference name="OpenSim"/>
<Reference name="OpenSim.Region.ClientStack"/>
<Reference name="OpenSim.Region.Environment"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Console"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<!-- Scene Server API Example Apps --> <!-- Scene Server API Example Apps -->
<Project name="SimpleApp" path="OpenSim/Region/Examples/SimpleApp" type="Exe"> <Project name="SimpleApp" path="OpenSim/Region/Examples/SimpleApp" type="Exe">