aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/ApplicationPlugins
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/ApplicationPlugins')
-rw-r--r--OpenSim/ApplicationPlugins/LoadRegions/RegionLoaderWebServer.cs105
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs291
2 files changed, 311 insertions, 85 deletions
diff --git a/OpenSim/ApplicationPlugins/LoadRegions/RegionLoaderWebServer.cs b/OpenSim/ApplicationPlugins/LoadRegions/RegionLoaderWebServer.cs
index 850f3e0..13d7a8a 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/RegionLoaderWebServer.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/RegionLoaderWebServer.cs
@@ -49,6 +49,9 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
49 49
50 public RegionInfo[] LoadRegions() 50 public RegionInfo[] LoadRegions()
51 { 51 {
52 int tries = 3;
53 int wait = 2000;
54
52 if (m_configSource == null) 55 if (m_configSource == null)
53 { 56 {
54 m_log.Error("[WEBLOADER]: Unable to load configuration source!"); 57 m_log.Error("[WEBLOADER]: Unable to load configuration source!");
@@ -56,7 +59,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
56 } 59 }
57 else 60 else
58 { 61 {
59 IConfig startupConfig = (IConfig) m_configSource.Configs["Startup"]; 62 IConfig startupConfig = (IConfig)m_configSource.Configs["Startup"];
60 string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim(); 63 string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim();
61 bool allowRegionless = startupConfig.GetBoolean("allow_regionless", false); 64 bool allowRegionless = startupConfig.GetBoolean("allow_regionless", false);
62 65
@@ -67,82 +70,74 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
67 } 70 }
68 else 71 else
69 { 72 {
70 RegionInfo[] regionInfos = new RegionInfo[] {}; 73 while (tries > 0)
71 int regionCount = 0;
72 HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url);
73 webRequest.Timeout = 30000; //30 Second Timeout
74 m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
75
76 try
77 { 74 {
78 string xmlSource = String.Empty; 75 RegionInfo[] regionInfos = new RegionInfo[] { };
76 int regionCount = 0;
77 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
78 webRequest.Timeout = 30000; //30 Second Timeout
79 m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
79 80
80 using (HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse()) 81 try
81 { 82 {
83 HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
82 m_log.Debug("[WEBLOADER]: Downloading region information..."); 84 m_log.Debug("[WEBLOADER]: Downloading region information...");
83 85 StreamReader reader = new StreamReader(webResponse.GetResponseStream());
84 using (Stream s = webResponse.GetResponseStream()) 86 string xmlSource = String.Empty;
87 string tempStr = reader.ReadLine();
88 while (tempStr != null)
85 { 89 {
86 using (StreamReader reader = new StreamReader(s)) 90 xmlSource = xmlSource + tempStr;
87 { 91 tempStr = reader.ReadLine();
88 string tempStr = reader.ReadLine();
89 while (tempStr != null)
90 {
91 xmlSource = xmlSource + tempStr;
92 tempStr = reader.ReadLine();
93 }
94 }
95 } 92 }
96 } 93 m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " +
97 94 xmlSource.Length);
98 m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " + 95 XmlDocument xmlDoc = new XmlDocument();
99 xmlSource.Length); 96 xmlDoc.LoadXml(xmlSource);
100 XmlDocument xmlDoc = new XmlDocument(); 97 if (xmlDoc.FirstChild.Name == "Nini")
101 xmlDoc.LoadXml(xmlSource);
102 if (xmlDoc.FirstChild.Name == "Nini")
103 {
104 regionCount = xmlDoc.FirstChild.ChildNodes.Count;
105
106 if (regionCount > 0)
107 { 98 {
108 regionInfos = new RegionInfo[regionCount]; 99 regionCount = xmlDoc.FirstChild.ChildNodes.Count;
109 int i; 100
110 for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) 101 if (regionCount > 0)
111 { 102 {
112 m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); 103 regionInfos = new RegionInfo[regionCount];
113 regionInfos[i] = 104 int i;
114 new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); 105 for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++)
106 {
107 m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml);
108 regionInfos[i] =
109 new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i], false, m_configSource);
110 }
115 } 111 }
116 } 112 }
117 } 113 }
118 } 114 catch (WebException ex)
119 catch (WebException ex)
120 {
121 using (HttpWebResponse response = (HttpWebResponse)ex.Response)
122 { 115 {
123 if (response.StatusCode == HttpStatusCode.NotFound) 116 if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
124 { 117 {
125 if (!allowRegionless) 118 if (!allowRegionless)
126 throw ex; 119 throw ex;
127 } 120 }
128 else 121 else
129 {
130 throw ex; 122 throw ex;
131 }
132 } 123 }
133 }
134 124
135 if (regionCount > 0 | allowRegionless) 125 if (regionCount > 0 | allowRegionless)
136 { 126 return regionInfos;
137 return regionInfos; 127
138 } 128 m_log.Debug("[WEBLOADER]: Request yielded no regions.");
139 else 129 tries--;
140 { 130 if (tries > 0)
141 m_log.Error("[WEBLOADER]: No region configs were available."); 131 {
142 return null; 132 m_log.Debug("[WEBLOADER]: Retrying");
133 System.Threading.Thread.Sleep(wait);
134 }
143 } 135 }
136
137 m_log.Error("[WEBLOADER]: No region configs were available.");
138 return null;
144 } 139 }
145 } 140 }
146 } 141 }
147 } 142 }
148} 143} \ No newline at end of file
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 808d9e4..bae1582 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -74,6 +74,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
74 74
75 private string m_name = "RemoteAdminPlugin"; 75 private string m_name = "RemoteAdminPlugin";
76 private string m_version = "0.0"; 76 private string m_version = "0.0";
77 private string m_openSimVersion;
77 78
78 public string Version 79 public string Version
79 { 80 {
@@ -93,6 +94,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
93 94
94 public void Initialise(OpenSimBase openSim) 95 public void Initialise(OpenSimBase openSim)
95 { 96 {
97 m_openSimVersion = openSim.GetVersionText();
98
96 m_configSource = openSim.ConfigSource.Source; 99 m_configSource = openSim.ConfigSource.Source;
97 try 100 try
98 { 101 {
@@ -135,10 +138,13 @@ namespace OpenSim.ApplicationPlugins.RemoteController
135 availableMethods["admin_region_query"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRegionQueryMethod); 138 availableMethods["admin_region_query"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRegionQueryMethod);
136 availableMethods["admin_shutdown"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcShutdownMethod); 139 availableMethods["admin_shutdown"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcShutdownMethod);
137 availableMethods["admin_broadcast"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAlertMethod); 140 availableMethods["admin_broadcast"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAlertMethod);
141 availableMethods["admin_dialog"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcDialogMethod);
138 availableMethods["admin_restart"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRestartMethod); 142 availableMethods["admin_restart"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRestartMethod);
139 availableMethods["admin_load_heightmap"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcLoadHeightmapMethod); 143 availableMethods["admin_load_heightmap"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcLoadHeightmapMethod);
140 availableMethods["admin_save_heightmap"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcSaveHeightmapMethod); 144 availableMethods["admin_save_heightmap"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcSaveHeightmapMethod);
141 145
146 availableMethods["admin_reset_land"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcResetLand);
147
142 // Agent management 148 // Agent management
143 availableMethods["admin_get_agents"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetAgentsMethod); 149 availableMethods["admin_get_agents"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetAgentsMethod);
144 availableMethods["admin_teleport_agent"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcTeleportAgentMethod); 150 availableMethods["admin_teleport_agent"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcTeleportAgentMethod);
@@ -163,8 +169,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
163 availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList); 169 availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList);
164 availableMethods["admin_estate_reload"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcEstateReload); 170 availableMethods["admin_estate_reload"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcEstateReload);
165 171
166 // Land management 172 // Misc
167 availableMethods["admin_reset_land"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcResetLand); 173 availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch);
174 availableMethods["admin_refresh_map"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshMap);
175 availableMethods["admin_get_opensim_version"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetOpenSimVersion);
176 availableMethods["admin_get_agent_count"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetAgentCount);
168 177
169 // Either enable full remote functionality or just selected features 178 // Either enable full remote functionality or just selected features
170 string enabledMethods = m_config.GetString("enabled_methods", "all"); 179 string enabledMethods = m_config.GetString("enabled_methods", "all");
@@ -265,25 +274,105 @@ namespace OpenSim.ApplicationPlugins.RemoteController
265 274
266 try 275 try
267 { 276 {
268 m_log.Info("[RADMIN]: Request to restart Region."); 277 Scene rebootedScene = null;
278 bool restartAll = false;
269 279
270 CheckRegionParams(requestData, responseData); 280 IConfig startupConfig = m_configSource.Configs["Startup"];
281 if (startupConfig != null)
282 {
283 if (startupConfig.GetBoolean("InworldRestartShutsDown", false))
284 {
285 rebootedScene = m_application.SceneManager.CurrentOrFirstScene;
286 restartAll = true;
287 }
288 }
271 289
272 Scene rebootedScene = null; 290 if (rebootedScene == null)
273 GetSceneFromRegionParams(requestData, responseData, out rebootedScene); 291 {
292 CheckRegionParams(requestData, responseData);
293
294 GetSceneFromRegionParams(requestData, responseData, out rebootedScene);
295 }
296
297 IRestartModule restartModule = rebootedScene.RequestModuleInterface<IRestartModule>();
274 298
275 responseData["success"] = false; 299 responseData["success"] = false;
276 responseData["accepted"] = true; 300 responseData["accepted"] = true;
277 responseData["rebooting"] = true; 301 responseData["rebooting"] = true;
278 302
279 IRestartModule restartModule = rebootedScene.RequestModuleInterface<IRestartModule>(); 303 string message;
280 if (restartModule != null) 304 List<int> times = new List<int>();
305
306 if (requestData.ContainsKey("alerts"))
281 { 307 {
282 List<int> times = new List<int> { 30, 15 }; 308 string[] alertTimes = requestData["alerts"].ToString().Split( new char[] {','});
309 if (alertTimes.Length == 1 && Convert.ToInt32(alertTimes[0]) == -1)
310 {
311 m_log.Info("[RADMIN]: Request to cancel restart.");
283 312
284 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), true); 313 if (restartModule != null)
285 responseData["success"] = true; 314 {
315 message = "Restart has been cancelled";
316
317 if (requestData.ContainsKey("message"))
318 message = requestData["message"].ToString();
319
320 restartModule.AbortRestart(message);
321
322 responseData["success"] = true;
323 responseData["rebooting"] = false;
324
325 return;
326 }
327 }
328 foreach (string a in alertTimes)
329 times.Add(Convert.ToInt32(a));
330 }
331 else
332 {
333 int timeout = 30;
334 if (requestData.ContainsKey("milliseconds"))
335 timeout = Int32.Parse(requestData["milliseconds"].ToString()) / 1000;
336 while (timeout > 0)
337 {
338 times.Add(timeout);
339 if (timeout > 300)
340 timeout -= 120;
341 else if (timeout > 30)
342 timeout -= 30;
343 else
344 timeout -= 15;
345 }
346 }
347
348 m_log.Info("[RADMIN]: Request to restart Region.");
349
350 message = "Region is restarting in {0}. Please save what you are doing and log out.";
351
352 if (requestData.ContainsKey("message"))
353 message = requestData["message"].ToString();
354
355 bool notice = true;
356 if (requestData.ContainsKey("noticetype")
357 && ((string)requestData["noticetype"] == "dialog"))
358 {
359 notice = false;
286 } 360 }
361
362 List<Scene> restartList;
363
364 if (restartAll)
365 restartList = m_application.SceneManager.Scenes;
366 else
367 restartList = new List<Scene>() { rebootedScene };
368
369 foreach (Scene s in m_application.SceneManager.Scenes)
370 {
371 restartModule = s.RequestModuleInterface<IRestartModule>();
372 if (restartModule != null)
373 restartModule.ScheduleRestart(UUID.Zero, message, times.ToArray(), notice);
374 }
375 responseData["success"] = true;
287 } 376 }
288 catch (Exception e) 377 catch (Exception e)
289 { 378 {
@@ -320,6 +409,32 @@ namespace OpenSim.ApplicationPlugins.RemoteController
320 m_log.Info("[RADMIN]: Alert request complete"); 409 m_log.Info("[RADMIN]: Alert request complete");
321 } 410 }
322 411
412 public void XmlRpcDialogMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
413 {
414 Hashtable responseData = (Hashtable)response.Value;
415
416 m_log.Info("[RADMIN]: Dialog request started");
417
418 Hashtable requestData = (Hashtable)request.Params[0];
419
420 string message = (string)requestData["message"];
421 string fromuuid = (string)requestData["from"];
422 m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message);
423
424 responseData["accepted"] = true;
425 responseData["success"] = true;
426
427 m_application.SceneManager.ForEachScene(
428 delegate(Scene scene)
429 {
430 IDialogModule dialogModule = scene.RequestModuleInterface<IDialogModule>();
431 if (dialogModule != null)
432 dialogModule.SendNotificationToUsersInRegion(UUID.Zero, fromuuid, message);
433 });
434
435 m_log.Info("[RADMIN]: Dialog request complete");
436 }
437
323 private void XmlRpcLoadHeightmapMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) 438 private void XmlRpcLoadHeightmapMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
324 { 439 {
325 m_log.Info("[RADMIN]: Load height maps request started"); 440 m_log.Info("[RADMIN]: Load height maps request started");
@@ -423,13 +538,32 @@ namespace OpenSim.ApplicationPlugins.RemoteController
423 message = "Region is going down now."; 538 message = "Region is going down now.";
424 } 539 }
425 540
426 m_application.SceneManager.ForEachScene( 541 if (requestData.ContainsKey("noticetype")
542 && ((string) requestData["noticetype"] == "dialog"))
543 {
544 m_application.SceneManager.ForEachScene(
545
427 delegate(Scene scene) 546 delegate(Scene scene)
547 {
548 IDialogModule dialogModule = scene.RequestModuleInterface<IDialogModule>();
549 if (dialogModule != null)
550 dialogModule.SendNotificationToUsersInRegion(UUID.Zero, "System", message);
551 });
552 }
553 else
554 {
555 if (!requestData.ContainsKey("noticetype")
556 || ((string)requestData["noticetype"] != "none"))
557 {
558 m_application.SceneManager.ForEachScene(
559 delegate(Scene scene)
428 { 560 {
429 IDialogModule dialogModule = scene.RequestModuleInterface<IDialogModule>(); 561 IDialogModule dialogModule = scene.RequestModuleInterface<IDialogModule>();
430 if (dialogModule != null) 562 if (dialogModule != null)
431 dialogModule.SendGeneralAlert(message); 563 dialogModule.SendGeneralAlert(message);
432 }); 564 });
565 }
566 }
433 567
434 // Perform shutdown 568 // Perform shutdown
435 System.Timers.Timer shutdownTimer = new System.Timers.Timer(timeout); // Wait before firing 569 System.Timers.Timer shutdownTimer = new System.Timers.Timer(timeout); // Wait before firing
@@ -1488,7 +1622,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1488 } 1622 }
1489 1623
1490 IRegionArchiverModule archiver = scene.RequestModuleInterface<IRegionArchiverModule>(); 1624 IRegionArchiverModule archiver = scene.RequestModuleInterface<IRegionArchiverModule>();
1491 Dictionary<string, object> archiveOptions = new Dictionary<string,object>(); 1625 Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
1492 if (mergeOar) archiveOptions.Add("merge", null); 1626 if (mergeOar) archiveOptions.Add("merge", null);
1493 if (skipAssets) archiveOptions.Add("skipAssets", null); 1627 if (skipAssets) archiveOptions.Add("skipAssets", null);
1494 if (archiver != null) 1628 if (archiver != null)
@@ -1748,21 +1882,31 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1748 1882
1749 private void XmlRpcRegionQueryMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) 1883 private void XmlRpcRegionQueryMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
1750 { 1884 {
1751 m_log.Info("[RADMIN]: Received Query XML Administrator Request");
1752
1753 Hashtable responseData = (Hashtable)response.Value; 1885 Hashtable responseData = (Hashtable)response.Value;
1754 Hashtable requestData = (Hashtable)request.Params[0]; 1886 Hashtable requestData = (Hashtable)request.Params[0];
1755 1887
1888 int flags = 0;
1889 string text = String.Empty;
1890 int health = 0;
1891 responseData["success"] = true;
1892
1756 CheckRegionParams(requestData, responseData); 1893 CheckRegionParams(requestData, responseData);
1757 1894
1758 Scene scene = null; 1895 Scene scene = null;
1759 GetSceneFromRegionParams(requestData, responseData, out scene); 1896 try
1760 1897 {
1761 int health = scene.GetHealth(); 1898 GetSceneFromRegionParams(requestData, responseData, out scene);
1762 responseData["health"] = health; 1899 health = scene.GetHealth(out flags, out text);
1900 }
1901 catch (Exception e)
1902 {
1903 responseData["error"] = null;
1904 }
1763 1905
1764 responseData["success"] = true; 1906 responseData["success"] = true;
1765 m_log.Info("[RADMIN]: Query XML Administrator Request complete"); 1907 responseData["health"] = health;
1908 responseData["flags"] = flags;
1909 responseData["message"] = text;
1766 } 1910 }
1767 1911
1768 private void XmlRpcConsoleCommandMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) 1912 private void XmlRpcConsoleCommandMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
@@ -2071,7 +2215,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2071 { 2215 {
2072 Hashtable requestData = (Hashtable)request.Params[0]; 2216 Hashtable requestData = (Hashtable)request.Params[0];
2073 Hashtable responseData = (Hashtable)response.Value; 2217 Hashtable responseData = (Hashtable)response.Value;
2074
2075 string musicURL = string.Empty; 2218 string musicURL = string.Empty;
2076 UUID groupID = UUID.Zero; 2219 UUID groupID = UUID.Zero;
2077 uint flags = 0; 2220 uint flags = 0;
@@ -2081,41 +2224,129 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2081 set_group = UUID.TryParse(requestData["group"].ToString(), out groupID); 2224 set_group = UUID.TryParse(requestData["group"].ToString(), out groupID);
2082 if (requestData.Contains("music") && requestData["music"] != null) 2225 if (requestData.Contains("music") && requestData["music"] != null)
2083 { 2226 {
2227
2084 musicURL = requestData["music"].ToString(); 2228 musicURL = requestData["music"].ToString();
2085 set_music = true; 2229 set_music = true;
2086 } 2230 }
2231
2087 if (requestData.Contains("flags") && requestData["flags"] != null) 2232 if (requestData.Contains("flags") && requestData["flags"] != null)
2088 set_flags = UInt32.TryParse(requestData["flags"].ToString(), out flags); 2233 set_flags = UInt32.TryParse(requestData["flags"].ToString(), out flags);
2089 2234
2090 m_log.InfoFormat("[RADMIN]: Received Reset Land Request group={0} musicURL={1} flags={2}", 2235 m_log.InfoFormat("[RADMIN]: Received Reset Land Request group={0} musicURL={1} flags={2}",
2091 (set_group ? groupID.ToString() : "unchanged"), 2236 (set_group ? groupID.ToString() : "unchanged"),
2092 (set_music ? musicURL : "unchanged"), 2237 (set_music ? musicURL : "unchanged"),
2093 (set_flags ? flags.ToString() : "unchanged")); 2238 (set_flags ? flags.ToString() : "unchanged"));
2094 2239
2095 m_application.SceneManager.ForEachScene(delegate(Scene s) 2240 m_application.SceneManager.ForEachScene(delegate (Scene s)
2096 { 2241 {
2097 List<ILandObject> parcels = s.LandChannel.AllParcels(); 2242 List<ILandObject> parcels = s.LandChannel.AllParcels();
2098 foreach (ILandObject p in parcels) 2243 foreach (ILandObject p in parcels)
2099 { 2244 {
2100 if (set_music) 2245 if (set_music)
2101 p.LandData.MusicURL = musicURL; 2246 p.LandData.MusicURL = musicURL;
2102
2103 if (set_group) 2247 if (set_group)
2104 p.LandData.GroupID = groupID; 2248 p.LandData.GroupID = groupID;
2105
2106 if (set_flags) 2249 if (set_flags)
2107 p.LandData.Flags = flags; 2250 p.LandData.Flags = flags;
2108
2109 s.LandChannel.UpdateLandObject(p.LandData.LocalID, p.LandData); 2251 s.LandChannel.UpdateLandObject(p.LandData.LocalID, p.LandData);
2110 } 2252 }
2111 } 2253 }
2112 ); 2254 );
2255 responseData["success"] = true;
2256 m_log.Info("[RADMIN]: Reset Land Request complete");
2257 }
2258
2259 private void XmlRpcRefreshSearch(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
2260 {
2261 m_log.Info("[RADMIN]: Received Refresh Search Request");
2262
2263 Hashtable responseData = (Hashtable)response.Value;
2264 Hashtable requestData = (Hashtable)request.Params[0];
2265
2266 CheckRegionParams(requestData, responseData);
2267
2268 Scene scene = null;
2269 GetSceneFromRegionParams(requestData, responseData, out scene);
2270
2271 ISearchModule searchModule = scene.RequestModuleInterface<ISearchModule>();
2272 if (searchModule != null)
2273 {
2274 searchModule.Refresh();
2275 responseData["success"] = true;
2276 }
2277 else
2278 {
2279 responseData["success"] = false;
2280 }
2281
2282 m_log.Info("[RADMIN]: Refresh Search Request complete");
2283 }
2284
2285 private void XmlRpcRefreshMap(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
2286 {
2287 m_log.Info("[RADMIN]: Received Refresh Map Request");
2288
2289 Hashtable responseData = (Hashtable)response.Value;
2290 Hashtable requestData = (Hashtable)request.Params[0];
2291
2292 CheckRegionParams(requestData, responseData);
2293
2294 Scene scene = null;
2295 GetSceneFromRegionParams(requestData, responseData, out scene);
2296
2297 IMapImageUploadModule mapTileModule = scene.RequestModuleInterface<IMapImageUploadModule>();
2298 if (mapTileModule != null)
2299 {
2300 Util.FireAndForget((x) =>
2301 {
2302 mapTileModule.UploadMapTile(scene);
2303 });
2304 responseData["success"] = true;
2305 }
2306 else
2307 {
2308 responseData["success"] = false;
2309 }
2310
2311 m_log.Info("[RADMIN]: Refresh Map Request complete");
2312 }
2313
2314 private void XmlRpcGetOpenSimVersion(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
2315 {
2316 m_log.Info("[RADMIN]: Received Get OpenSim Version Request");
2317
2318 Hashtable responseData = (Hashtable)response.Value;
2113 2319
2320 responseData["version"] = m_openSimVersion;
2114 responseData["success"] = true; 2321 responseData["success"] = true;
2115 2322
2116 m_log.Info("[RADMIN]: Reset Land Request complete"); 2323 m_log.Info("[RADMIN]: Get OpenSim Version Request complete");
2117 } 2324 }
2118 2325
2326 private void XmlRpcGetAgentCount(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
2327 {
2328 m_log.Info("[RADMIN]: Received Get Agent Count Request");
2329
2330 Hashtable responseData = (Hashtable)response.Value;
2331 Hashtable requestData = (Hashtable)request.Params[0];
2332
2333 CheckRegionParams(requestData, responseData);
2334
2335 Scene scene = null;
2336 GetSceneFromRegionParams(requestData, responseData, out scene);
2337
2338 if (scene == null)
2339 {
2340 responseData["success"] = false;
2341 }
2342 else
2343 {
2344 responseData["count"] = scene.GetRootAgentCount();
2345 responseData["success"] = true;
2346 }
2347
2348 m_log.Info("[RADMIN]: Get Agent Count Request complete");
2349 }
2119 2350
2120 /// <summary> 2351 /// <summary>
2121 /// Parse a float with the given parameter name from a request data hash table. 2352 /// Parse a float with the given parameter name from a request data hash table.
@@ -2822,7 +3053,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2822 /// </summary> 3053 /// </summary>
2823 private void ApplyNextOwnerPermissions(InventoryItemBase item) 3054 private void ApplyNextOwnerPermissions(InventoryItemBase item)
2824 { 3055 {
2825 if (item.InvType == (int)InventoryType.Object) 3056 if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & 7) != 0)
2826 { 3057 {
2827 uint perms = item.CurrentPermissions; 3058 uint perms = item.CurrentPermissions;
2828 PermissionsUtil.ApplyFoldedPermissions(item.CurrentPermissions, ref perms); 3059 PermissionsUtil.ApplyFoldedPermissions(item.CurrentPermissions, ref perms);