diff options
author | Adam Frisby | 2007-12-03 07:06:46 +0000 |
---|---|---|
committer | Adam Frisby | 2007-12-03 07:06:46 +0000 |
commit | 981c97502a25c12473328e332bb0505f8c779d73 (patch) | |
tree | f60cf6bfad1350ab5f64dbb68bd2720ed74e20a0 /OpenSim/ApplicationPlugins/RemoteController | |
parent | * Applied a few commits left on my laptop to OpenSimController. (diff) | |
download | opensim-SC-981c97502a25c12473328e332bb0505f8c779d73.zip opensim-SC-981c97502a25c12473328e332bb0505f8c779d73.tar.gz opensim-SC-981c97502a25c12473328e332bb0505f8c779d73.tar.bz2 opensim-SC-981c97502a25c12473328e332bb0505f8c779d73.tar.xz |
* Moved XMLRPC Controller to a Application Plugin. Requires testing.
Diffstat (limited to 'OpenSim/ApplicationPlugins/RemoteController')
3 files changed, 202 insertions, 0 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..869efe2 --- /dev/null +++ b/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,33 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("RemoteController")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("RemoteController")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("a8d10dbc-371b-4514-8d1d-7d3589f658af")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | [assembly: AssemblyVersion("1.0.0.0")] | ||
33 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/ApplicationPlugins/RemoteController/Properties/Settings.Designer.cs b/OpenSim/ApplicationPlugins/RemoteController/Properties/Settings.Designer.cs new file mode 100644 index 0000000..86daae1 --- /dev/null +++ b/OpenSim/ApplicationPlugins/RemoteController/Properties/Settings.Designer.cs | |||
@@ -0,0 +1,30 @@ | |||
1 | //------------------------------------------------------------------------------ | ||
2 | // <auto-generated> | ||
3 | // This code was generated by a tool. | ||
4 | // Runtime Version:2.0.50727.832 | ||
5 | // | ||
6 | // Changes to this file may cause incorrect behavior and will be lost if | ||
7 | // the code is regenerated. | ||
8 | // </auto-generated> | ||
9 | //------------------------------------------------------------------------------ | ||
10 | |||
11 | namespace RemoteController.Properties | ||
12 | { | ||
13 | |||
14 | |||
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | ||
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] | ||
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase | ||
18 | { | ||
19 | |||
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | ||
21 | |||
22 | public static Settings Default | ||
23 | { | ||
24 | get | ||
25 | { | ||
26 | return defaultInstance; | ||
27 | } | ||
28 | } | ||
29 | } | ||
30 | } | ||
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs new file mode 100644 index 0000000..2566a6b --- /dev/null +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -0,0 +1,139 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using System.Net; | ||
5 | using OpenSim; | ||
6 | using OpenSim.Framework.Console; | ||
7 | using OpenSim.Framework; | ||
8 | using OpenSim.Framework.Servers; | ||
9 | using Mono.Addins; | ||
10 | using Mono.Addins.Description; | ||
11 | using Nini; | ||
12 | using Nini.Config; | ||
13 | using Nwc.XmlRpc; | ||
14 | using System.Collections; | ||
15 | using System.Timers; | ||
16 | |||
17 | [assembly: Addin] | ||
18 | [assembly: AddinDependency("OpenSim", "0.4")] | ||
19 | |||
20 | namespace OpenSim.ApplicationPlugins.LoadRegions | ||
21 | { | ||
22 | [Extension("/OpenSim/Startup")] | ||
23 | public class RemoteAdminPlugin : IApplicationPlugin | ||
24 | { | ||
25 | private OpenSimMain m_app; | ||
26 | private BaseHttpServer m_httpd; | ||
27 | |||
28 | public void Initialise(OpenSimMain openSim) | ||
29 | { | ||
30 | if (openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false)) | ||
31 | { | ||
32 | System.Console.WriteLine("RADMIN","Remote Admin Plugin Enabled"); | ||
33 | |||
34 | m_app = openSim; | ||
35 | m_httpd = openSim.HttpServer; | ||
36 | |||
37 | m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); | ||
38 | m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); | ||
39 | } | ||
40 | } | ||
41 | |||
42 | public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request) | ||
43 | { | ||
44 | MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request"); | ||
45 | XmlRpcResponse response = new XmlRpcResponse(); | ||
46 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
47 | |||
48 | if ((string)requestData["shutdown"] == "delayed") | ||
49 | { | ||
50 | int timeout = (Int32)requestData["milliseconds"]; | ||
51 | |||
52 | Hashtable responseData = new Hashtable(); | ||
53 | responseData["accepted"] = "true"; | ||
54 | response.Value = responseData; | ||
55 | |||
56 | m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int)(timeout / 1000)).ToString() + | ||
57 | " second(s). Please save what you are doing and log out."); | ||
58 | |||
59 | // Perform shutdown | ||
60 | Timer shutdownTimer = new Timer(timeout); // Wait before firing | ||
61 | shutdownTimer.AutoReset = false; | ||
62 | shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); | ||
63 | shutdownTimer.Start(); | ||
64 | |||
65 | return response; | ||
66 | } | ||
67 | else | ||
68 | { | ||
69 | Hashtable responseData = new Hashtable(); | ||
70 | responseData["accepted"] = "true"; | ||
71 | response.Value = responseData; | ||
72 | |||
73 | m_app.SceneManager.SendGeneralMessage("Region is going down now."); | ||
74 | |||
75 | // Perform shutdown | ||
76 | Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing | ||
77 | shutdownTimer.AutoReset = false; | ||
78 | shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); | ||
79 | shutdownTimer.Start(); | ||
80 | |||
81 | return response; | ||
82 | } | ||
83 | } | ||
84 | |||
85 | private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e) | ||
86 | { | ||
87 | m_app.Shutdown(); | ||
88 | } | ||
89 | |||
90 | public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request) | ||
91 | { | ||
92 | MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request"); | ||
93 | XmlRpcResponse response = new XmlRpcResponse(); | ||
94 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
95 | |||
96 | RegionInfo newRegionData = new RegionInfo(); | ||
97 | |||
98 | try | ||
99 | { | ||
100 | newRegionData.RegionID = (string)requestData["region_id"]; | ||
101 | newRegionData.RegionName = (string)requestData["region_name"]; | ||
102 | newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]); | ||
103 | newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]); | ||
104 | |||
105 | // Security risk | ||
106 | newRegionData.DataStore = (string)requestData["datastore"]; | ||
107 | |||
108 | newRegionData.InternalEndPoint = new IPEndPoint( | ||
109 | IPAddress.Parse((string)requestData["listen_ip"]), 0); | ||
110 | |||
111 | newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"]; | ||
112 | newRegionData.ExternalHostName = (string)requestData["external_address"]; | ||
113 | |||
114 | newRegionData.MasterAvatarFirstName = (string)requestData["region_master_first"]; | ||
115 | newRegionData.MasterAvatarLastName = (string)requestData["region_master_last"]; | ||
116 | |||
117 | m_app.CreateRegion(newRegionData); | ||
118 | |||
119 | Hashtable responseData = new Hashtable(); | ||
120 | responseData["created"] = "true"; | ||
121 | response.Value = responseData; | ||
122 | } | ||
123 | catch (Exception e) | ||
124 | { | ||
125 | Hashtable responseData = new Hashtable(); | ||
126 | responseData["created"] = "false"; | ||
127 | responseData["error"] = e.ToString(); | ||
128 | response.Value = responseData; | ||
129 | } | ||
130 | |||
131 | return response; | ||
132 | } | ||
133 | |||
134 | public void Close() | ||
135 | { | ||
136 | |||
137 | } | ||
138 | } | ||
139 | } \ No newline at end of file | ||