diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModule.cs index 2d571932a1..d3c775151a 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModule.cs @@ -27,86 +27,95 @@ using System; using System.Collections.Generic; using System.Reflection; +using System.Text; using log4net; using Nini.Config; -using Mono.Addins; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Servers; using OpenSim.Framework.Client; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using Mono.Addins; + +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Avatar.InstantMessage { [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MuteListModule")] public class MuteListModule : ISharedRegionModule { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog m_log = LogManager.GetLogger( + MethodBase.GetCurrentMethod().DeclaringType); - private bool enabled = true; - private List m_SceneList = new List(); - private string m_RestURL = String.Empty; + protected bool m_Enabled = false; + protected List m_SceneList = new List(); + protected IMuteListService m_service = null; public void Initialise(IConfigSource config) { IConfig cnf = config.Configs["Messaging"]; if (cnf == null) - { - enabled = false; return; - } - if (cnf != null && cnf.GetString("MuteListModule", "None") != - "MuteListModule") - { - enabled = false; + if (cnf.GetString("MuteListModule", "None") != "MuteListModule") return; - } - m_RestURL = cnf.GetString("MuteListURL", ""); - if (m_RestURL == "") - { - m_log.Error("[MUTE LIST] Module was enabled, but no URL is given, disabling"); - enabled = false; - return; - } + m_Enabled = true; } public void AddRegion(Scene scene) { - if (!enabled) - return; - - lock (m_SceneList) - { - m_SceneList.Add(scene); - - scene.EventManager.OnNewClient += OnNewClient; - } } public void RegionLoaded(Scene scene) { + if (!m_Enabled) + return; + + IXfer xfer = scene.RequestModuleInterface(); + if (xfer == null) + { + m_log.ErrorFormat("[MuteListModule]: Xfer not availble in region {0}. Module Disabled", scene.Name); + m_Enabled = false; + return; + } + + IMuteListService srv = scene.RequestModuleInterface(); + if(srv == null) + { + m_log.ErrorFormat("[MuteListModule]: MuteListService not availble in region {0}. Module Disabled", scene.Name); + m_Enabled = false; + return; + } + lock (m_SceneList) + { + if(m_service == null) + m_service = srv; + m_SceneList.Add(scene); + scene.EventManager.OnNewClient += OnNewClient; + } } public void RemoveRegion(Scene scene) { - if (!enabled) - return; - lock (m_SceneList) { - m_SceneList.Remove(scene); + if(m_SceneList.Contains(scene)) + { + m_SceneList.Remove(scene); + scene.EventManager.OnNewClient -= OnNewClient; + } } } public void PostInitialise() { - if (!enabled) + if (!m_Enabled) return; - m_log.Debug("[MUTE LIST] Mute list enabled"); + m_log.Debug("[MuteListModule]: enabled"); } public string Name @@ -118,27 +127,102 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage { get { return null; } } - + public void Close() { } - + private void OnNewClient(IClientAPI client) { client.OnMuteListRequest += OnMuteListRequest; + client.OnUpdateMuteListEntry += OnUpdateMuteListEntry; + client.OnRemoveMuteListEntry += OnRemoveMuteListEntry; } private void OnMuteListRequest(IClientAPI client, uint crc) { - m_log.DebugFormat("[MUTE LIST] Got mute list request for crc {0}", crc); - string filename = "mutes"+client.AgentId.ToString(); + if (!m_Enabled) + { + if(crc == 0) + client.SendEmpytMuteList(); + else + client.SendUseCachedMuteList(); + return; + } IXfer xfer = client.Scene.RequestModuleInterface(); - if (xfer != null) + if (xfer == null) { - xfer.AddNewFile(filename, new Byte[0]); - client.SendMuteListUpdate(filename); + if(crc == 0) + client.SendEmpytMuteList(); + else + client.SendUseCachedMuteList(); + return; } + + Byte[] data = m_service.MuteListRequest(client.AgentId, crc); + if (data == null) + { + if(crc == 0) + client.SendEmpytMuteList(); + else + client.SendUseCachedMuteList(); + return; + } + + if (data.Length == 0) + { + client.SendEmpytMuteList(); + return; + } + + if (data.Length == 1) + { + if(crc == 0) + client.SendEmpytMuteList(); + else + client.SendUseCachedMuteList(); + return; + } + + string filename = "mutes" + client.AgentId.ToString(); + xfer.AddNewFile(filename, data); + client.SendMuteListUpdate(filename); + } + + private void OnUpdateMuteListEntry(IClientAPI client, UUID muteID, string muteName, int muteType, uint muteFlags) + { + if (!m_Enabled) + return; + + UUID agentID = client.AgentId; + if(muteType == 1) // agent + { + if(agentID == muteID) + return; + if(m_SceneList[0].Permissions.IsAdministrator(muteID)) + { + OnMuteListRequest(client, 0); + return; + } + } + + MuteData mute = new MuteData(); + mute.AgentID = agentID; + mute.MuteID = muteID; + mute.MuteName = muteName; + mute.MuteType = muteType; + mute.MuteFlags = (int)muteFlags; + mute.Stamp = Util.UnixTimeSinceEpoch(); + + m_service.UpdateMute(mute); + } + + private void OnRemoveMuteListEntry(IClientAPI client, UUID muteID, string muteName) + { + if (!m_Enabled) + return; + m_service.RemoveMute(client.AgentId, muteID, muteName); } } } diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs deleted file mode 100644 index 6857f352c8..0000000000 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using log4net; -using Nini.Config; -using OpenMetaverse; -using OpenSim.Framework; -using OpenSim.Framework.Servers; -using OpenSim.Framework.Client; -using OpenSim.Region.Framework.Interfaces; -using OpenSim.Region.Framework.Scenes; -using Mono.Addins; - -using OpenSim.Server.Base; -using OpenSim.Services.Interfaces; - -namespace OpenSim.Region.CoreModules.Avatar.InstantMessage -{ - [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MuteListModuleTst")] - public class MuteListModuleTst : ISharedRegionModule - { - private static readonly ILog m_log = LogManager.GetLogger( - MethodBase.GetCurrentMethod().DeclaringType); - - protected bool m_Enabled = false; - protected List m_SceneList = new List(); - protected IMuteListService m_service = null; - - public void Initialise(IConfigSource config) - { - IConfig cnf = config.Configs["Messaging"]; - if (cnf == null) - return; - - if (cnf.GetString("MuteListModule", "None") != "MuteListModuleTst") - return; - - m_Enabled = true; - } - - public void AddRegion(Scene scene) - { - } - - public void RegionLoaded(Scene scene) - { - if (!m_Enabled) - return; - - IXfer xfer = scene.RequestModuleInterface(); - if (xfer == null) - { - m_log.ErrorFormat("[MuteListModuleTst]: Xfer not availble in region {0}. Module Disabled", scene.Name); - m_Enabled = false; - return; - } - - IMuteListService srv = scene.RequestModuleInterface(); - if(srv == null) - { - m_log.ErrorFormat("[MuteListModuleTst]: MuteListService not availble in region {0}. Module Disabled", scene.Name); - m_Enabled = false; - return; - } - lock (m_SceneList) - { - if(m_service == null) - m_service = srv; - m_SceneList.Add(scene); - scene.EventManager.OnNewClient += OnNewClient; - } - } - - public void RemoveRegion(Scene scene) - { - lock (m_SceneList) - { - if(m_SceneList.Contains(scene)) - { - m_SceneList.Remove(scene); - scene.EventManager.OnNewClient -= OnNewClient; - } - } - } - - public void PostInitialise() - { - if (!m_Enabled) - return; - - m_log.Debug("[MuteListModuleTst]: enabled"); - } - - public string Name - { - get { return "MuteListModuleTst"; } - } - - public Type ReplaceableInterface - { - get { return null; } - } - - public void Close() - { - } - - private void OnNewClient(IClientAPI client) - { - client.OnMuteListRequest += OnMuteListRequest; - client.OnUpdateMuteListEntry += OnUpdateMuteListEntry; - client.OnRemoveMuteListEntry += OnRemoveMuteListEntry; - } - - private void OnMuteListRequest(IClientAPI client, uint crc) - { - if (!m_Enabled) - { - if(crc == 0) - client.SendEmpytMuteList(); - else - client.SendUseCachedMuteList(); - return; - } - - IXfer xfer = client.Scene.RequestModuleInterface(); - if (xfer == null) - { - if(crc == 0) - client.SendEmpytMuteList(); - else - client.SendUseCachedMuteList(); - return; - } - - Byte[] data = m_service.MuteListRequest(client.AgentId, crc); - if (data == null) - { - if(crc == 0) - client.SendEmpytMuteList(); - else - client.SendUseCachedMuteList(); - return; - } - - if (data.Length == 0) - { - client.SendEmpytMuteList(); - return; - } - - if (data.Length == 1) - { - if(crc == 0) - client.SendEmpytMuteList(); - else - client.SendUseCachedMuteList(); - return; - } - - string filename = "mutes" + client.AgentId.ToString(); - xfer.AddNewFile(filename, data); - client.SendMuteListUpdate(filename); - } - - private void OnUpdateMuteListEntry(IClientAPI client, UUID muteID, string muteName, int muteType, uint muteFlags) - { - if (!m_Enabled) - return; - - UUID agentID = client.AgentId; - if(muteType == 1) // agent - { - if(agentID == muteID) - return; - if(m_SceneList[0].Permissions.IsAdministrator(muteID)) - { - OnMuteListRequest(client, 0); - return; - } - } - - MuteData mute = new MuteData(); - mute.AgentID = agentID; - mute.MuteID = muteID; - mute.MuteName = muteName; - mute.MuteType = muteType; - mute.MuteFlags = (int)muteFlags; - mute.Stamp = Util.UnixTimeSinceEpoch(); - - m_service.UpdateMute(mute); - } - - private void OnRemoveMuteListEntry(IClientAPI client, UUID muteID, string muteName) - { - if (!m_Enabled) - return; - m_service.RemoveMute(client.AgentId, muteID, muteName); - } - } -} - diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/XMuteModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/XMuteModule.cs deleted file mode 100644 index b61e848c3a..0000000000 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/XMuteModule.cs +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using log4net; -using Nini.Config; -using OpenMetaverse; -using OpenSim.Framework; -using OpenSim.Region.Framework.Interfaces; -using OpenSim.Region.Framework.Scenes; -using Mono.Addins; -using OpenSim.Data.MySQL; -using MySql.Data.MySqlClient; - - -namespace OpenSim.Region.CoreModules.Avatar.InstantMessage -{ - [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "XMute")] - public class XMuteModule : ISharedRegionModule - { - private static readonly ILog m_log = LogManager.GetLogger( - MethodBase.GetCurrentMethod().DeclaringType); - - protected bool m_Enabled = true; - protected List m_SceneList = new List(); - protected MuteTableHandler m_MuteTable; - protected string m_DatabaseConnect; - - public void Initialise(IConfigSource config) - { - IConfig cnf = config.Configs["Messaging"]; - if (cnf == null) - { - m_Enabled = false; - return; - } - - if (cnf.GetString("MuteListModule", "None") != - "XMute") - { - m_Enabled = false; - return; - } - - m_DatabaseConnect = cnf.GetString("MuteDatabaseConnect", String.Empty); - if (m_DatabaseConnect == String.Empty) - { - m_log.Debug("[XMute]: MuteDatabaseConnect missing or empty"); - m_Enabled = false; - return; - } - - m_MuteTable = new MuteTableHandler( - m_DatabaseConnect, "XMute", String.Empty); - } - - public void AddRegion(Scene scene) - { - if (!m_Enabled) - return; - - lock (m_SceneList) - { - m_SceneList.Add(scene); - - scene.EventManager.OnNewClient += OnNewClient; - } - } - - public void RegionLoaded(Scene scene) - { - } - - public void RemoveRegion(Scene scene) - { - if (!m_Enabled) - return; - - lock (m_SceneList) - { - m_SceneList.Remove(scene); - } - } - - public void PostInitialise() - { - if (!m_Enabled) - return; - - m_log.Debug("[XMute]: Mute list enabled"); - } - - public string Name - { - get { return "XMuteModule"; } - } - - public Type ReplaceableInterface - { - get { return null; } - } - - public void Close() - { - } - - private void OnNewClient(IClientAPI client) - { - client.OnMuteListRequest += OnMuteListRequest; - client.OnUpdateMuteListEntry += OnUpdateMuteListEntry; - client.OnRemoveMuteListEntry += OnRemoveMuteListEntry; - } - - private void OnMuteListRequest(IClientAPI client, uint crc) - { - string filename = "mutes"+client.AgentId.ToString(); - - IXfer xfer = client.Scene.RequestModuleInterface(); - if (xfer != null) - { - MuteData[] data = m_MuteTable.Get("AgentID", client.AgentId.ToString()); - if (data == null || data.Length == 0) - { - xfer.AddNewFile(filename, new Byte[0]); - } - else - { - StringBuilder sb = new StringBuilder(1024); - - foreach (MuteData d in data) - sb.AppendFormat("{0} {1} {2}|{3}\n", - d.MuteType, - d.MuteID.ToString(), - d.MuteName, - d.MuteFlags); - - Byte[] filedata = Util.UTF8.GetBytes(sb.ToString()); - - uint dataCrc = Crc32.Compute(filedata); - - if (dataCrc == crc) - { - client.SendUseCachedMuteList(); - return; - } - - xfer.AddNewFile(filename, filedata); - } - - client.SendMuteListUpdate(filename); - } - } - - private void OnUpdateMuteListEntry(IClientAPI client, UUID muteID, string muteName, int muteType, uint muteFlags) - { - MuteData mute = new MuteData(); - - mute.AgentID = client.AgentId; - mute.MuteID = muteID; - mute.MuteName = muteName; - mute.MuteType = muteType; - mute.MuteFlags = (int)muteFlags; - mute.Stamp = Util.UnixTimeSinceEpoch(); - - m_MuteTable.Store(mute); - } - - private void OnRemoveMuteListEntry(IClientAPI client, UUID muteID, string muteName) - { - m_MuteTable.Delete(new string[] { "AgentID", - "MuteID", - "MuteName" }, - new string[] { client.AgentId.ToString(), - muteID.ToString(), - muteName }); - } - } - - public class MuteTableHandler : MySQLGenericTableHandler - { - public MuteTableHandler(string conn, string realm, string m) : base(conn, realm, m) - { - } - - public bool Delete(string[] fields, string[] val) - { - if (fields.Length != val.Length) - return false; - - using (MySqlCommand cmd = new MySqlCommand()) - { - string text = String.Format("delete from {0} where ", m_Realm); - - List terms = new List(); - - for (int i = 0 ; i < fields.Length ; i++) - { - terms.Add(String.Format("{0} = ?{0}", fields[i])); - cmd.Parameters.AddWithValue("?" + fields[i], val[i]); - } - - text += string.Join(" and ", terms.ToArray()); - - cmd.CommandText = text; - - if (ExecuteNonQuery(cmd) > 0) - return true; - return false; - } - } - } -} - diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs index 37b30aa533..1fc1a6e520 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs @@ -71,7 +71,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MuteList if (moduleConfig == null) return; - if (moduleConfig.GetString("MuteListModule", "None") != "MuteListModuleTst") + if (moduleConfig.GetString("MuteListModule", "None") != "MuteListModule") return; moduleConfig = source.Configs["Modules"]; diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/RemoteMuteListServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/RemoteMuteListServiceConnector.cs index a5dec6483a..a65e2bdf4f 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/RemoteMuteListServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/RemoteMuteListServiceConnector.cs @@ -69,7 +69,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MuteList if (moduleConfig == null) return; - if (moduleConfig.GetString("MuteListModule", "None") != "MuteListModuleTst") + if (moduleConfig.GetString("MuteListModule", "None") != "MuteListModule") return; moduleConfig = source.Configs["Modules"];