From 940b5567a0103847ebe4a48d9bc766a4f40ed415 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Thu, 28 May 2009 18:27:08 +0000 Subject: [PATCH] * Adds OGS RAdmin class. Adds primitive remote admin functions for gridservers to perform on region servers. Used for grid-wide announcements, etc. --- .../Region/CoreModules/InterGrid/OGSRadmin.cs | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 OpenSim/Region/CoreModules/InterGrid/OGSRadmin.cs diff --git a/OpenSim/Region/CoreModules/InterGrid/OGSRadmin.cs b/OpenSim/Region/CoreModules/InterGrid/OGSRadmin.cs new file mode 100644 index 0000000000..98710c608c --- /dev/null +++ b/OpenSim/Region/CoreModules/InterGrid/OGSRadmin.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Reflection; +using System.Text; +using log4net; +using Nini.Config; +using Nwc.XmlRpc; +using OpenSim.Framework.Communications; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; + +namespace OpenSim.Region.CoreModules.InterGrid +{ + public class OGSRadmin : ISharedRegionModule + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private readonly List m_scenes = new List(); + private CommunicationsManager m_com; + private IConfigSource m_settings; + + #region Implementation of IRegionModuleBase + + public string Name + { + get { return "OGS Supporting RAdmin"; } + } + + public void Initialise(IConfigSource source) + { + m_settings = source; + } + + public void Close() + { + + } + + public void AddRegion(Scene scene) + { + lock(m_scenes) + m_scenes.Add(scene); + } + + public void RemoveRegion(Scene scene) + { + lock (m_scenes) + m_scenes.Remove(scene); + } + + public void RegionLoaded(Scene scene) + { + + } + + public void PostInitialise() + { + if (m_settings.Configs["Startup"].GetBoolean("gridmode", false)) + { + m_com = m_scenes[0].CommsManager; + m_com.HttpServer.AddXmlRPCHandler("grid_message", GridWideMessage); + } + } + + #endregion + + public XmlRpcResponse GridWideMessage(XmlRpcRequest req, IPEndPoint remoteClient) + { + XmlRpcResponse response = new XmlRpcResponse(); + Hashtable responseData = new Hashtable(); + + Hashtable requestData = (Hashtable)req.Params[0]; + + if ((!requestData.Contains("password") || (string)requestData["password"] != m_com.NetworkServersInfo.GridRecvKey)) + { + responseData["accepted"] = false; + responseData["success"] = false; + responseData["error"] = "Invalid Key"; + response.Value = responseData; + return response; + } + + string message = (string)requestData["message"]; + m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message); + + lock(m_scenes) + foreach (Scene scene in m_scenes) + { + IDialogModule dialogModule = scene.RequestModuleInterface(); + if (dialogModule != null) + dialogModule.SendGeneralAlert(message); + } + + responseData["accepted"] = true; + responseData["success"] = true; + response.Value = responseData; + + return response; + } + } +}