From 665f79e15c1de3a98f777004cba278625b8b3181 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Mon, 19 Nov 2012 21:47:49 -0500 Subject: [PATCH 1/7] Expose configuration options for the XmlRpcGridRouter Expose configuration options for the XmlRpcGridRouter to allow simulators to register llRemoteData channels with an external routing service --- bin/OpenSim.ini.example | 23 ++++++++++++++++++++++- bin/OpenSimDefaults.ini | 14 -------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index c7df7bba50..e591a69355 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -443,9 +443,30 @@ ;; What is reported as the "User-Agent" when using llHTTPRequest ;; Defaults to not sent if not set here. See the notes section in the wiki ;; at http://wiki.secondlife.com/wiki/LlHTTPRequest for comments on adding - ;; " (Mozilla Compatible)" to the text where there are problems with a web server + ;; " (Mozilla Compatible)" to the text where there are problems with a + ;; web server ; user_agent = "OpenSim LSL (Mozilla Compatible)" +[XMLRPC] + ;# {XmlRpcRouterModule} {} {Module used to route incoming llRemoteData calls} {XmlRpcRouterModule XmlRpcGridRouterModule} XmlRpcRouterModule + ;; If enabled and set to XmlRpcRouterModule, this will post an event, + ;; "xmlrpc_uri(string)" to the script concurrently with the first + ;; remote_data event. This will contain the fully qualified URI an + ;; external site needs to use to send XMLRPC requests to that script + ;; + ;; If enabled and set to XmlRpcGridRouterModule, newly created channels + ;; will be registered with an external service via a configured uri + ;XmlRpcRouterModule = "XmlRpcRouterModule" + + ;# {XmlRpcPort} {} {Port for incoming llRemoteData xmlrpc calls} {} 20800 + ;XmlRpcPort = 20800 + + ;# {XmlRpcHubURI} {XmlRpcRouterModule} {URI for external service used to register xmlrpc channels created in the simulator. This depends on XmlRpcRouterModule being set to XmlRpcGridRouterModule} http://example.com + ;; If XmlRpcRouterModule is set to XmlRpcGridRouterModule, the simulator + ;; will use this address to register xmlrpc channels on the external + ;; service + ; XmlRpcHubURI = http://example.com + [ClientStack.LindenUDP] ;; See OpensSimDefaults.ini for the throttle options. You can copy the diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index ed1b9693fd..c81c65853a 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -429,20 +429,6 @@ ; many simultaneous requests, default is 30 and is currently applied only to assets ;MaxRequestConcurrency = 30 -[XMLRPC] - ; ## - ; ## Scripting XMLRPC mapper - ; ## - - ; If enabled, this will post an event, "xmlrpc_uri(string)" to the - ; script concurrently with the first remote_data event. - ; This will contain the fully qualified URI an external site needs - ; to use to send XMLRPC requests to that script - - ;XmlRpcRouterModule = "XmlRpcRouterModule" - ;XmlRpcPort = 20800 - - [ClientStack.LindenUDP] ; Set this to true to process incoming packets asynchronously. Networking is ; already separated from packet handling with a queue, so this will only From dc5711ad6221f087b6250179ac9a6a389581058c Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 20 Nov 2012 04:10:03 +0000 Subject: [PATCH 2/7] minor: If logging full incoming HTTP data, don't deceptively print ... at the end of the body. --- OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 410a76a798..66d80cf3d7 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -719,8 +719,11 @@ namespace OpenSim.Framework.Servers.HttpServer if (DebugLevel == 5) { const int sampleLength = 80; - char[] sampleChars = new char[sampleLength]; + char[] sampleChars = new char[sampleLength + 3]; reader.Read(sampleChars, 0, sampleLength); + sampleChars[80] = '.'; + sampleChars[81] = '.'; + sampleChars[82] = '.'; output = new string(sampleChars); } else @@ -728,7 +731,7 @@ namespace OpenSim.Framework.Servers.HttpServer output = reader.ReadToEnd(); } - m_log.DebugFormat("[BASE HTTP SERVER]: {0}...", output.Replace("\n", @"\n")); + m_log.DebugFormat("[BASE HTTP SERVER]: {0}", output.Replace("\n", @"\n")); } } From 0962a35d2ff8e2d0a8cf87bfce542276dfb2c0f5 Mon Sep 17 00:00:00 2001 From: Iain Oliver Date: Wed, 14 Nov 2012 15:02:35 +0000 Subject: [PATCH 3/7] Fix movetotarget on mega regions. --- .../Region/Framework/Scenes/ScenePresence.cs | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 96bca3e5f1..342de78916 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1698,8 +1698,18 @@ namespace OpenSim.Region.Framework.Scenes // "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}", // Name, pos, m_scene.RegionInfo.RegionName); - if (pos.X < 0 || pos.X >= Constants.RegionSize - || pos.Y < 0 || pos.Y >= Constants.RegionSize + Vector2 regionSize; + IRegionCombinerModule regionCombinerModule = m_scene.RequestModuleInterface(); + if(regionCombinerModule != null) + { + regionSize = regionCombinerModule.GetSizeOfMegaregion(m_scene.RegionInfo.RegionID); + } + else + { + regionSize = new Vector2(Constants.RegionSize); + } + if (pos.X < 0 || pos.X >= regionSize.X + || pos.Y < 0 || pos.Y >= regionSize.Y || pos.Z < 0) return; @@ -1713,7 +1723,15 @@ namespace OpenSim.Region.Framework.Scenes // pos.Z = AbsolutePosition.Z; // } - float terrainHeight = (float)m_scene.Heightmap[(int)pos.X, (int)pos.Y]; + int X = (int)((m_scene.RegionInfo.RegionLocX * Constants.RegionSize) + pos.X); + int Y = (int)((m_scene.RegionInfo.RegionLocY * Constants.RegionSize) + pos.Y); + UUID target_regionID = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y).RegionID; + Scene targetScene = m_scene; + if(!SceneManager.Instance.TryGetScene(target_regionID, out targetScene)) + { + targetScene = m_scene; + } + float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % Constants.RegionSize), (int)(pos.Y % Constants.RegionSize)]; pos.Z = Math.Max(terrainHeight, pos.Z); // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is From 597a101b9f65e2f0b67f9f2de99654f2e5979855 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 20 Nov 2012 05:09:44 +0000 Subject: [PATCH 4/7] Minor formatting for 0962a35d and a few one-line comments as to why that code is there --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 342de78916..6f36c0b080 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1698,16 +1698,14 @@ namespace OpenSim.Region.Framework.Scenes // "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}", // Name, pos, m_scene.RegionInfo.RegionName); + // Allow move to another sub-region within a megaregion Vector2 regionSize; IRegionCombinerModule regionCombinerModule = m_scene.RequestModuleInterface(); - if(regionCombinerModule != null) - { + if (regionCombinerModule != null) regionSize = regionCombinerModule.GetSizeOfMegaregion(m_scene.RegionInfo.RegionID); - } else - { regionSize = new Vector2(Constants.RegionSize); - } + if (pos.X < 0 || pos.X >= regionSize.X || pos.Y < 0 || pos.Y >= regionSize.Y || pos.Z < 0) @@ -1723,14 +1721,15 @@ namespace OpenSim.Region.Framework.Scenes // pos.Z = AbsolutePosition.Z; // } + // Get terrain height for sub-region in a megaregion if necessary int X = (int)((m_scene.RegionInfo.RegionLocX * Constants.RegionSize) + pos.X); int Y = (int)((m_scene.RegionInfo.RegionLocY * Constants.RegionSize) + pos.Y); UUID target_regionID = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y).RegionID; Scene targetScene = m_scene; - if(!SceneManager.Instance.TryGetScene(target_regionID, out targetScene)) - { + + if (!SceneManager.Instance.TryGetScene(target_regionID, out targetScene)) targetScene = m_scene; - } + float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % Constants.RegionSize), (int)(pos.Y % Constants.RegionSize)]; pos.Z = Math.Max(terrainHeight, pos.Z); From 5aec4f6dd015185a64de34bc7bdc2ac364f53481 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 20 Nov 2012 05:15:04 +0000 Subject: [PATCH 5/7] Add Iain Oliver to CONTRIBUTORS.txt --- CONTRIBUTORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index e5a6d49413..43dea0bd3b 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -93,6 +93,7 @@ what it is today. * Garmin Kawaguichi * Gryc Ueusp * Hiro Lecker +* Iain Oliver * Imaze Rhiano * Intimidated * Jeremy Bongio (IBM) From ea65a64f7b1867780261c2a01a6323e057ddc097 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 20 Nov 2012 10:11:57 +0000 Subject: [PATCH 6/7] refactor: Move common presence connector code into BasePresenceServiceConnector --- .../Presence/BasePresenceServiceConnector.cs | 133 ++++++++++++++++++ .../Presence/LocalPresenceServiceConnector.cs | 113 +-------------- .../RemotePresenceServiceConnector.cs | 89 +----------- .../Presence/Tests/PresenceConnectorsTests.cs | 3 +- 4 files changed, 145 insertions(+), 193 deletions(-) create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs new file mode 100644 index 0000000000..c84518d083 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs @@ -0,0 +1,133 @@ +/* + * 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 log4net; +using Mono.Addins; +using Nini.Config; +using OpenMetaverse; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; +using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; + +namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence +{ + public class BasePresenceServiceConnector : IPresenceService + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + protected bool m_Enabled; + + protected PresenceDetector m_PresenceDetector; + + /// + /// Underlying presence service. Do not use directly. + /// + public IPresenceService m_PresenceService; + + public Type ReplaceableInterface + { + get { return null; } + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + // m_log.DebugFormat( + // "[LOCAL PRESENCE CONNECTOR]: Registering IPresenceService to scene {0}", scene.RegionInfo.RegionName); + + scene.RegisterModuleInterface(this); + m_PresenceDetector.AddRegion(scene); + + m_log.InfoFormat("[BASE PRESENCE SERVICE CONNECTOR]: Enabled for region {0}", scene.Name); + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + m_PresenceDetector.RemoveRegion(scene); + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + #region IPresenceService + + public bool LoginAgent(string userID, UUID sessionID, UUID secureSessionID) + { + m_log.Warn("[BASE PRESENCE SERVICE CONNECTOR]: LoginAgent connector not implemented at the simulators"); + return false; + } + + public bool LogoutAgent(UUID sessionID) + { + return m_PresenceService.LogoutAgent(sessionID); + } + + public bool LogoutRegionAgents(UUID regionID) + { + return m_PresenceService.LogoutRegionAgents(regionID); + } + + public bool ReportAgent(UUID sessionID, UUID regionID) + { + return m_PresenceService.ReportAgent(sessionID, regionID); + } + + public PresenceInfo GetAgent(UUID sessionID) + { + return m_PresenceService.GetAgent(sessionID); + } + + public PresenceInfo[] GetAgents(string[] userIDs) + { + return m_PresenceService.GetAgents(userIDs); + } + + #endregion + } +} \ No newline at end of file diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs index d8bed1b79d..db5c520be3 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/LocalPresenceServiceConnector.cs @@ -24,53 +24,29 @@ * (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 log4net; +using Mono.Addins; +using Nini.Config; +using OpenMetaverse; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Server.Base; using OpenSim.Services.Interfaces; using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; -using OpenMetaverse; -using log4net; -using Mono.Addins; -using Nini.Config; - namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence { [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LocalPresenceServicesConnector")] - public class LocalPresenceServicesConnector : ISharedRegionModule, IPresenceService + public class LocalPresenceServicesConnector : BasePresenceServiceConnector, ISharedRegionModule, IPresenceService { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private bool m_Enabled = false; - - private PresenceDetector m_PresenceDetector; - - /// - /// Underlying presence service. Do not use directly. - /// - public IPresenceService m_PresenceService; - - public LocalPresenceServicesConnector() - { - } - - public LocalPresenceServicesConnector(IConfigSource source) - { - Initialise(source); - } - #region ISharedRegionModule - public Type ReplaceableInterface - { - get { return null; } - } - public string Name { get { return "LocalPresenceServicesConnector"; } @@ -121,81 +97,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence } } - public void PostInitialise() - { - } - - public void Close() - { - } - - public void AddRegion(Scene scene) - { - if (!m_Enabled) - return; - - // m_log.DebugFormat( - // "[LOCAL PRESENCE CONNECTOR]: Registering IPresenceService to scene {0}", scene.RegionInfo.RegionName); - - scene.RegisterModuleInterface(this); - m_PresenceDetector.AddRegion(scene); - - m_log.InfoFormat("[LOCAL PRESENCE CONNECTOR]: Enabled local presence for region {0}", scene.RegionInfo.RegionName); - - } - - public void RemoveRegion(Scene scene) - { - if (!m_Enabled) - return; - - m_PresenceDetector.RemoveRegion(scene); - } - - public void RegionLoaded(Scene scene) - { - if (!m_Enabled) - return; - - } - #endregion - - #region IPresenceService - - public bool LoginAgent(string userID, UUID sessionID, UUID secureSessionID) - { - m_log.Warn("[LOCAL PRESENCE CONNECTOR]: LoginAgent connector not implemented at the simulators"); - return false; - } - - public bool LogoutAgent(UUID sessionID) - { - return m_PresenceService.LogoutAgent(sessionID); - } - - - public bool LogoutRegionAgents(UUID regionID) - { - return m_PresenceService.LogoutRegionAgents(regionID); - } - - public bool ReportAgent(UUID sessionID, UUID regionID) - { - return m_PresenceService.ReportAgent(sessionID, regionID); - } - - public PresenceInfo GetAgent(UUID sessionID) - { - return m_PresenceService.GetAgent(sessionID); - } - - public PresenceInfo[] GetAgents(string[] userIDs) - { - return m_PresenceService.GetAgents(userIDs); - } - - #endregion - } -} +} \ No newline at end of file diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs index be73932ce4..6ca5c28993 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs @@ -43,22 +43,12 @@ using Nini.Config; namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence { [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RemotePresenceServicesConnector")] - public class RemotePresenceServicesConnector : ISharedRegionModule, IPresenceService + public class RemotePresenceServicesConnector : BasePresenceServiceConnector, ISharedRegionModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); #region ISharedRegionModule - private bool m_Enabled = false; - - private PresenceDetector m_PresenceDetector; - private IPresenceService m_RemoteConnector; - - public Type ReplaceableInterface - { - get { return null; } - } - public string Name { get { return "RemotePresenceServicesConnector"; } @@ -72,7 +62,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence string name = moduleConfig.GetString("PresenceServices", ""); if (name == Name) { - m_RemoteConnector = new PresenceServicesConnector(source); + m_PresenceService = new PresenceServicesConnector(source); m_Enabled = true; @@ -81,81 +71,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence m_log.Info("[REMOTE PRESENCE CONNECTOR]: Remote presence enabled"); } } - - } - - public void PostInitialise() - { - } - - public void Close() - { - } - - public void AddRegion(Scene scene) - { - if (!m_Enabled) - return; - - scene.RegisterModuleInterface(this); - m_PresenceDetector.AddRegion(scene); - - m_log.InfoFormat("[REMOTE PRESENCE CONNECTOR]: Enabled remote presence for region {0}", scene.RegionInfo.RegionName); - - } - - public void RemoveRegion(Scene scene) - { - if (!m_Enabled) - return; - - m_PresenceDetector.RemoveRegion(scene); - } - - public void RegionLoaded(Scene scene) - { - if (!m_Enabled) - return; - } #endregion - - #region IPresenceService - - public bool LoginAgent(string userID, UUID sessionID, UUID secureSessionID) - { - m_log.Warn("[REMOTE PRESENCE CONNECTOR]: LoginAgent connector not implemented at the simulators"); - return false; - } - - public bool LogoutAgent(UUID sessionID) - { - return m_RemoteConnector.LogoutAgent(sessionID); - } - - - public bool LogoutRegionAgents(UUID regionID) - { - return m_RemoteConnector.LogoutRegionAgents(regionID); - } - - public bool ReportAgent(UUID sessionID, UUID regionID) - { - return m_RemoteConnector.ReportAgent(sessionID, regionID); - } - - public PresenceInfo GetAgent(UUID sessionID) - { - return m_RemoteConnector.GetAgent(sessionID); - } - - public PresenceInfo[] GetAgents(string[] userIDs) - { - return m_RemoteConnector.GetAgents(userIDs); - } - - #endregion - } -} +} \ No newline at end of file diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/Tests/PresenceConnectorsTests.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/Tests/PresenceConnectorsTests.cs index 4556df3535..32e47f9dda 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/Tests/PresenceConnectorsTests.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/Tests/PresenceConnectorsTests.cs @@ -56,7 +56,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence.Tests config.Configs["PresenceService"].Set("LocalServiceModule", "OpenSim.Services.PresenceService.dll:PresenceService"); config.Configs["PresenceService"].Set("StorageProvider", "OpenSim.Data.Null.dll"); - m_LocalConnector = new LocalPresenceServicesConnector(config); + m_LocalConnector = new LocalPresenceServicesConnector(); + m_LocalConnector.Initialise(config); // Let's stick in a test presence m_LocalConnector.m_PresenceService.LoginAgent(UUID.Zero.ToString(), UUID.Zero, UUID.Zero); From f656adee31f5210acb4d1c8c89fe0d1e9362feee Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 20 Nov 2012 10:22:49 +0000 Subject: [PATCH 7/7] If GetAgents() is called with an empty userIDs array then don't bother with a useless potentially network call on the scene presence service connector. This also eliminates the "[PRESENCE HANDLER]: GetAgents called without required uuids argument" which has started to pop up in the logs when a call is made with an empty uuid array as occasionally happens. --- .../Presence/BasePresenceServiceConnector.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs index c84518d083..fdbe10a86e 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/BasePresenceServiceConnector.cs @@ -125,6 +125,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence public PresenceInfo[] GetAgents(string[] userIDs) { + // Don't bother potentially making a useless network call if we not going to ask for any users anyway. + if (userIDs.Length == 0) + return new PresenceInfo[0]; + return m_PresenceService.GetAgents(userIDs); }