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/RemoteAdminPlugin.cs | |
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 '')
-rw-r--r-- | OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs (renamed from OpenSim/Region/Application/OpenSimController.cs) | 261 |
1 files changed, 139 insertions, 122 deletions
diff --git a/OpenSim/Region/Application/OpenSimController.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 9fae426..2566a6b 100644 --- a/OpenSim/Region/Application/OpenSimController.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -1,122 +1,139 @@ | |||
1 | using System; | 1 | using System; |
2 | using System.Collections; | 2 | using System.Collections.Generic; |
3 | using System.Net; | 3 | using System.Text; |
4 | using System.Timers; | 4 | using System.Net; |
5 | using Nwc.XmlRpc; | 5 | using OpenSim; |
6 | using OpenSim.Framework; | 6 | using OpenSim.Framework.Console; |
7 | using OpenSim.Framework.Console; | 7 | using OpenSim.Framework; |
8 | using OpenSim.Framework.Servers; | 8 | using OpenSim.Framework.Servers; |
9 | 9 | using Mono.Addins; | |
10 | namespace OpenSim | 10 | using Mono.Addins.Description; |
11 | { | 11 | using Nini; |
12 | internal class OpenSimController | 12 | using Nini.Config; |
13 | { | 13 | using Nwc.XmlRpc; |
14 | private OpenSimMain m_app; | 14 | using System.Collections; |
15 | private BaseHttpServer m_httpServer; | 15 | using System.Timers; |
16 | private const bool m_enablexmlrpc = true; | 16 | |
17 | 17 | [assembly: Addin] | |
18 | public OpenSimController(OpenSimMain core, BaseHttpServer httpd) | 18 | [assembly: AddinDependency("OpenSim", "0.4")] |
19 | { | 19 | |
20 | m_app = core; | 20 | namespace OpenSim.ApplicationPlugins.LoadRegions |
21 | m_httpServer = httpd; | 21 | { |
22 | 22 | [Extension("/OpenSim/Startup")] | |
23 | if (m_enablexmlrpc) | 23 | public class RemoteAdminPlugin : IApplicationPlugin |
24 | { | 24 | { |
25 | m_httpServer.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); | 25 | private OpenSimMain m_app; |
26 | m_httpServer.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); | 26 | private BaseHttpServer m_httpd; |
27 | } | 27 | |
28 | } | 28 | public void Initialise(OpenSimMain openSim) |
29 | 29 | { | |
30 | public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request) | 30 | if (openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false)) |
31 | { | 31 | { |
32 | MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request"); | 32 | System.Console.WriteLine("RADMIN","Remote Admin Plugin Enabled"); |
33 | XmlRpcResponse response = new XmlRpcResponse(); | 33 | |
34 | Hashtable requestData = (Hashtable) request.Params[0]; | 34 | m_app = openSim; |
35 | 35 | m_httpd = openSim.HttpServer; | |
36 | if ((string) requestData["shutdown"] == "delayed") | 36 | |
37 | { | 37 | m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); |
38 | int timeout = (Int32)requestData["milliseconds"]; | 38 | m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); |
39 | 39 | } | |
40 | Hashtable responseData = new Hashtable(); | 40 | } |
41 | responseData["accepted"] = "true"; | 41 | |
42 | response.Value = responseData; | 42 | public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request) |
43 | 43 | { | |
44 | m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() + | 44 | MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request"); |
45 | " second(s). Please save what you are doing and log out."); | 45 | XmlRpcResponse response = new XmlRpcResponse(); |
46 | 46 | Hashtable requestData = (Hashtable)request.Params[0]; | |
47 | // Perform shutdown | 47 | |
48 | Timer shutdownTimer = new Timer(timeout); // Wait before firing | 48 | if ((string)requestData["shutdown"] == "delayed") |
49 | shutdownTimer.AutoReset = false; | 49 | { |
50 | shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); | 50 | int timeout = (Int32)requestData["milliseconds"]; |
51 | shutdownTimer.Start(); | 51 | |
52 | 52 | Hashtable responseData = new Hashtable(); | |
53 | return response; | 53 | responseData["accepted"] = "true"; |
54 | } | 54 | response.Value = responseData; |
55 | else | 55 | |
56 | { | 56 | m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int)(timeout / 1000)).ToString() + |
57 | Hashtable responseData = new Hashtable(); | 57 | " second(s). Please save what you are doing and log out."); |
58 | responseData["accepted"] = "true"; | 58 | |
59 | response.Value = responseData; | 59 | // Perform shutdown |
60 | 60 | Timer shutdownTimer = new Timer(timeout); // Wait before firing | |
61 | m_app.SceneManager.SendGeneralMessage("Region is going down now."); | 61 | shutdownTimer.AutoReset = false; |
62 | 62 | shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); | |
63 | // Perform shutdown | 63 | shutdownTimer.Start(); |
64 | Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing | 64 | |
65 | shutdownTimer.AutoReset = false; | 65 | return response; |
66 | shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); | 66 | } |
67 | shutdownTimer.Start(); | 67 | else |
68 | 68 | { | |
69 | return response; | 69 | Hashtable responseData = new Hashtable(); |
70 | } | 70 | responseData["accepted"] = "true"; |
71 | } | 71 | response.Value = responseData; |
72 | 72 | ||
73 | private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e) | 73 | m_app.SceneManager.SendGeneralMessage("Region is going down now."); |
74 | { | 74 | |
75 | m_app.Shutdown(); | 75 | // Perform shutdown |
76 | } | 76 | Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing |
77 | 77 | shutdownTimer.AutoReset = false; | |
78 | public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request) | 78 | shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); |
79 | { | 79 | shutdownTimer.Start(); |
80 | MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request"); | 80 | |
81 | XmlRpcResponse response = new XmlRpcResponse(); | 81 | return response; |
82 | Hashtable requestData = (Hashtable) request.Params[0]; | 82 | } |
83 | 83 | } | |
84 | RegionInfo newRegionData = new RegionInfo(); | 84 | |
85 | 85 | private void shutdownTimer_Elapsed(object sender, ElapsedEventArgs e) | |
86 | try | 86 | { |
87 | { | 87 | m_app.Shutdown(); |
88 | newRegionData.RegionID = (string)requestData["region_id"]; | 88 | } |
89 | newRegionData.RegionName = (string)requestData["region_name"]; | 89 | |
90 | newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]); | 90 | public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request) |
91 | newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]); | 91 | { |
92 | 92 | MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request"); | |
93 | // Security risk | 93 | XmlRpcResponse response = new XmlRpcResponse(); |
94 | newRegionData.DataStore = (string) requestData["datastore"]; | 94 | Hashtable requestData = (Hashtable)request.Params[0]; |
95 | 95 | ||
96 | newRegionData.InternalEndPoint = new IPEndPoint( | 96 | RegionInfo newRegionData = new RegionInfo(); |
97 | IPAddress.Parse((string) requestData["listen_ip"]), 0); | 97 | |
98 | 98 | try | |
99 | newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"]; | 99 | { |
100 | newRegionData.ExternalHostName = (string)requestData["external_address"]; | 100 | newRegionData.RegionID = (string)requestData["region_id"]; |
101 | 101 | newRegionData.RegionName = (string)requestData["region_name"]; | |
102 | newRegionData.MasterAvatarFirstName = (string) requestData["region_master_first"]; | 102 | newRegionData.RegionLocX = Convert.ToUInt32((Int32)requestData["region_x"]); |
103 | newRegionData.MasterAvatarLastName = (string) requestData["region_master_last"]; | 103 | newRegionData.RegionLocY = Convert.ToUInt32((Int32)requestData["region_y"]); |
104 | 104 | ||
105 | m_app.CreateRegion(newRegionData); | 105 | // Security risk |
106 | 106 | newRegionData.DataStore = (string)requestData["datastore"]; | |
107 | Hashtable responseData = new Hashtable(); | 107 | |
108 | responseData["created"] = "true"; | 108 | newRegionData.InternalEndPoint = new IPEndPoint( |
109 | response.Value = responseData; | 109 | IPAddress.Parse((string)requestData["listen_ip"]), 0); |
110 | } | 110 | |
111 | catch (Exception e) | 111 | newRegionData.InternalEndPoint.Port = (Int32)requestData["listen_port"]; |
112 | { | 112 | newRegionData.ExternalHostName = (string)requestData["external_address"]; |
113 | Hashtable responseData = new Hashtable(); | 113 | |
114 | responseData["created"] = "false"; | 114 | newRegionData.MasterAvatarFirstName = (string)requestData["region_master_first"]; |
115 | responseData["error"] = e.ToString(); | 115 | newRegionData.MasterAvatarLastName = (string)requestData["region_master_last"]; |
116 | response.Value = responseData; | 116 | |
117 | } | 117 | m_app.CreateRegion(newRegionData); |
118 | 118 | ||
119 | return response; | 119 | Hashtable responseData = new Hashtable(); |
120 | } | 120 | responseData["created"] = "true"; |
121 | } | 121 | response.Value = responseData; |
122 | } | 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 | ||