From d32debe6184b1d6575b97541b98c520a8c4360c1 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 11 Dec 2017 23:58:27 +0000 Subject: commit what i did so far for core mutes module, befere i lose it --- .../Avatar/InstantMessage/MuteListModuleTst.cs | 135 ++++++++-------- .../Avatar/InstantMessage/XMuteModule.cs | 5 +- .../MuteList/LocalMuteListServiceConnector.cs | 180 +++++++++++++++++++++ 3 files changed, 251 insertions(+), 69 deletions(-) create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs index 7ade511..6857f35 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MuteListModuleTst.cs @@ -37,23 +37,21 @@ using OpenSim.Framework.Client; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using Mono.Addins; -using OpenSim.Data; -using OpenSim.Data.MySQL; -using MySql.Data.MySqlClient; -using System.Security.Cryptography; + +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Avatar.InstantMessage { [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MuteListModuleTst")] - public class MuteModuleTst : ISharedRegionModule + 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 MuteTableHandler m_MuteTable; - protected string m_DatabaseConnect; + protected IMuteListService m_service = null; public void Initialise(IConfigSource config) { @@ -64,37 +62,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage if (cnf.GetString("MuteListModule", "None") != "MuteListModuleTst") return; - m_DatabaseConnect = cnf.GetString("MuteDatabaseConnect", String.Empty); - if (m_DatabaseConnect == String.Empty) - { - m_log.Debug("[MuteModuleTst]: MuteDatabaseConnect missing or empty"); - return; - } - - try - { - m_MuteTable = new MuteTableHandler(m_DatabaseConnect, "XMute", String.Empty); - } - catch - { - m_log.Error("[MuteListModuleTst]: Failed to open/create database table"); - return; - } - m_Enabled = true; } 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) @@ -104,17 +76,37 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage IXfer xfer = scene.RequestModuleInterface(); if (xfer == null) - m_log.ErrorFormat("[MuteListModuleTst]: Xfer not availble in region {0}", scene.Name); + { + 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) { - if (!m_Enabled) - return; - lock (m_SceneList) { - m_SceneList.Remove(scene); + if(m_SceneList.Contains(scene)) + { + m_SceneList.Remove(scene); + scene.EventManager.OnNewClient -= OnNewClient; + } } } @@ -123,7 +115,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage if (!m_Enabled) return; - m_log.Debug("[MuteListModuleTst]: Mute list enabled"); + m_log.Debug("[MuteListModuleTst]: enabled"); } public string Name @@ -149,6 +141,15 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage 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) { @@ -159,8 +160,8 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage return; } - MuteData[] data = m_MuteTable.Get("AgentID", client.AgentId.ToString()); - if (data == null || data.Length == 0) + Byte[] data = m_service.MuteListRequest(client.AgentId, crc); + if (data == null) { if(crc == 0) client.SendEmpytMuteList(); @@ -169,20 +170,13 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage return; } - StringBuilder sb = new StringBuilder(16384); - - 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 (data.Length == 0) + { + client.SendEmpytMuteList(); + return; + } - if (dataCrc == crc) + if (data.Length == 1) { if(crc == 0) client.SendEmpytMuteList(); @@ -191,33 +185,44 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage return; } - string filename = "mutes"+client.AgentId.ToString(); - xfer.AddNewFile(filename, filedata); + 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) { - MuteData mute = new MuteData(); + 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; + } + } - mute.AgentID = client.AgentId; + 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_MuteTable.Store(mute); + m_service.UpdateMute(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 }); + 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 index ac542c2..b61e848 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/XMuteModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/XMuteModule.cs @@ -32,15 +32,12 @@ 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.Data; using OpenSim.Data.MySQL; using MySql.Data.MySqlClient; -using System.Security.Cryptography; + namespace OpenSim.Region.CoreModules.Avatar.InstantMessage { diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs new file mode 100644 index 0000000..833d883 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MuteList/LocalMuteListServiceConnector.cs @@ -0,0 +1,180 @@ +/* + * 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 log4net; +using Mono.Addins; +using Nini.Config; +using System; +using System.Collections.Generic; +using System.Reflection; +using OpenSim.Framework; +using OpenSim.Server.Base; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using OpenMetaverse; + +namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LocalMuteListServicesConnector")] + public class LocalMuteListServicesConnector : ISharedRegionModule, IMuteListService + { + private static readonly ILog m_log = + LogManager.GetLogger( + MethodBase.GetCurrentMethod().DeclaringType); + + private List m_Scenes = new List(); + protected IMuteListService m_service = null; + + private bool m_Enabled = false; + + #region ISharedRegionModule + + public Type ReplaceableInterface + { + get { return null; } + } + + public string Name + { + get { return "LocalMuteListServicesConnector"; } + } + + public void Initialise(IConfigSource source) + { + IConfig moduleConfig = source.Configs["Modules"]; + + if (moduleConfig == null) + return; + + string name = moduleConfig.GetString("MuteListService", ""); + if(name != Name) + return; + + IConfig userConfig = source.Configs["MuteListService"]; + if (userConfig == null) + { + m_log.Error("[MuteList LOCALCONNECTOR]: MuteListService missing from configuration"); + return; + } + + string serviceDll = userConfig.GetString("LocalServiceModule", + String.Empty); + + if (serviceDll == String.Empty) + { + m_log.Error("[MuteList LOCALCONNECTOR]: No LocalServiceModule named in section MuteListService"); + return; + } + + Object[] args = new Object[] { source }; + try + { + m_service = ServerUtils.LoadPlugin(serviceDll, args); + } + catch + { + m_log.Error("[MuteList LOCALCONNECTOR]: Failed to load mute service"); + return; + } + + if (m_service == null) + { + m_log.Error("[MuteList LOCALCONNECTOR]: Can't load MuteList service"); + return; + } + + m_Enabled = true; + m_log.Info("[MuteList LOCALCONNECTOR]: enabled"); + } + + public void Close() + { + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + lock(m_Scenes) + { + m_Scenes.Add(scene); + scene.RegisterModuleInterface(this); + } + } + + public void RegionLoaded(Scene scene) + { + } + + public void PostInitialise() + { + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + lock(m_Scenes) + { + if (m_Scenes.Contains(scene)) + { + m_Scenes.Remove(scene); + scene.UnregisterModuleInterface(this); + } + } + } + + #endregion ISharedRegionModule + + #region IMuteListService + public Byte[] MuteListRequest(UUID agentID, uint crc) + { + if (!m_Enabled) + return null; + return m_service.MuteListRequest(agentID, crc); + } + + public bool UpdateMute(MuteData mute) + { + if (!m_Enabled) + return false; + return m_service.UpdateMute(mute); + } + + public bool RemoveMute(UUID agentID, UUID muteID, string muteName) + { + if (!m_Enabled) + return false; + return m_service.RemoveMute(agentID, muteID, muteName); + } + + #endregion IMuteListService + } +} -- cgit v1.1