* 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.Collections;
using System.Net;
using System.Timers;
using Nwc.XmlRpc;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
namespace OpenSim
{
internal class OpenSimController
{
private OpenSimMain m_app;
private BaseHttpServer m_httpServer;
private const bool m_enablexmlrpc = true;
public OpenSimController(OpenSimMain core, BaseHttpServer httpd)
{
m_app = core;
m_httpServer = httpd;
if (m_enablexmlrpc)
{
m_httpServer.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod);
m_httpServer.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod);
}
}
public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request)
{
MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable) request.Params[0];
if ((string) requestData["shutdown"] == "delayed")
{
int timeout = (Int32)requestData["milliseconds"];
Hashtable responseData = new Hashtable();
responseData["accepted"] = "true";
response.Value = responseData;
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() +
" second(s). Please save what you are doing and log out.");
// Perform shutdown
Timer shutdownTimer = new Timer(timeout); // Wait before firing
shutdownTimer.AutoReset = false;
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
shutdownTimer.Start();
return response;
}
else
{
Hashtable responseData = new Hashtable();
responseData["accepted"] = "true";
response.Value = responseData;
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
// Perform shutdown
Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing
shutdownTimer.AutoReset = false;
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
shutdownTimer.Start();
return response;
}
}
private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e)
{
m_app.Shutdown();
}
public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request)
{
MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable) request.Params[0];
RegionInfo newRegionData = new RegionInfo();
try
{
newRegionData.RegionID = (string)requestData["region_id"];
newRegionData.RegionName = (string)requestData["region_name"];
newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]);
newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]);
// Security risk
newRegionData.DataStore = (string) requestData["datastore"];
newRegionData.InternalEndPoint = new IPEndPoint(
IPAddress.Parse((string) requestData["listen_ip"]), 0);
newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"];
newRegionData.ExternalHostName = (string)requestData["external_address"];
newRegionData.MasterAvatarFirstName = (string) requestData["region_master_first"];
newRegionData.MasterAvatarLastName = (string) requestData["region_master_last"];
m_app.CreateRegion(newRegionData);
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;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using OpenSim;
using OpenSim.Framework.Console;
using OpenSim.Framework;
using OpenSim.Framework.Servers;
using Mono.Addins;
using Mono.Addins.Description;
using Nini;
using Nini.Config;
using Nwc.XmlRpc;
using System.Collections;
using System.Timers;
[assembly: Addin]
[assembly: AddinDependency("OpenSim", "0.4")]
namespace OpenSim.ApplicationPlugins.LoadRegions
{
[Extension("/OpenSim/Startup")]
public class RemoteAdminPlugin : IApplicationPlugin
{
private OpenSimMain m_app;
private BaseHttpServer m_httpd;
public void Initialise(OpenSimMain openSim)
{
if (openSim.ConfigSource.Configs["RemoteAdmin"].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);
}
}
public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request)
{
MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
if ((string)requestData["shutdown"] == "delayed")
{
int timeout = (Int32)requestData["milliseconds"];
Hashtable responseData = new Hashtable();
responseData["accepted"] = "true";
response.Value = responseData;
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int)(timeout / 1000)).ToString() +
" second(s). Please save what you are doing and log out.");
// Perform shutdown
Timer shutdownTimer = new Timer(timeout); // Wait before firing
shutdownTimer.AutoReset = false;
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
shutdownTimer.Start();
return response;
}
else
{
Hashtable responseData = new Hashtable();
responseData["accepted"] = "true";
response.Value = responseData;
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
// Perform shutdown
Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing
shutdownTimer.AutoReset = false;
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
shutdownTimer.Start();
return response;
}
}
private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e)
{
m_app.Shutdown();
}
public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request)
{
MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
RegionInfo newRegionData = new RegionInfo();
try
{
newRegionData.RegionID = (string)requestData["region_id"];
newRegionData.RegionName = (string)requestData["region_name"];
newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]);
newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]);
// Security risk
newRegionData.DataStore = (string)requestData["datastore"];
newRegionData.InternalEndPoint = new IPEndPoint(
IPAddress.Parse((string)requestData["listen_ip"]), 0);
newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"];
newRegionData.ExternalHostName = (string)requestData["external_address"];
newRegionData.MasterAvatarFirstName = (string)requestData["region_master_first"];
newRegionData.MasterAvatarLastName = (string)requestData["region_master_last"];
m_app.CreateRegion(newRegionData);
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_SendChildAgentTaskData;
private OpenSimController m_controller;
protected LocalLoginService m_loginService;
protected string m_storageDll;
@ -102,6 +100,11 @@ namespace OpenSim
set { m_config = value; }
}
public BaseHttpServer HttpServer
{
get { return m_httpServer; }
}
private ModuleLoader m_moduleLoader;
public ModuleLoader ModuleLoader
@ -279,8 +282,6 @@ namespace OpenSim
base.StartUp();
m_controller = new OpenSimController(this, m_httpServer);
if (m_sandbox)
{
LocalInventoryService inventoryService = new LocalInventoryService();

View File

@ -767,6 +767,36 @@
</Files>
</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 -->
<Project name="SimpleApp" path="OpenSim/Region/Examples/SimpleApp" type="Exe">