From d1fcd2217327579d21d4c5a33341d4e51c91a089 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 30 Apr 2010 19:28:44 +0100 Subject: Fix a null ref from trying to access a dictionary that was never initialized. --- .../CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs index 9c6e1cd..c97ab9e 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs @@ -52,7 +52,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory protected Dictionary> m_InventoryCache; // A cache of userIDs --> ServiceURLs, for HGBroker only - protected Dictionary m_InventoryURLs; + protected Dictionary m_InventoryURLs = + new Dictionary(); public virtual void Init(IConfigSource source, BaseInventoryConnector connector) { -- cgit v1.1 From 5fda81e6bbb80cbe904e69638f5f405aca78f111 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 30 Apr 2010 11:39:02 -0700 Subject: * XInventory fairly tested, including for HG. Almost ready to switch. * Removed a few buglets and added better exception handling. --- .../CoreModules/Avatar/Friends/FriendsModule.cs | 7 +- .../Resources/CoreModulePlugin.addin.xml | 1 + .../Inventory/HGInventoryBroker2.cs | 212 ++++++++------------- .../Inventory/RemoteXInventoryServiceConnector.cs | 8 +- .../Presence/RemotePresenceServiceConnector.cs | 2 +- .../Hypergrid/HGInventoryServerInConnector.cs | 104 ---------- .../Handlers/Inventory/XInventoryInConnector.cs | 50 ----- .../Connectors/Inventory/XInventoryConnector.cs | 119 ++++++------ .../Presence/PresenceServiceConnector.cs | 2 +- 9 files changed, 140 insertions(+), 365 deletions(-) delete mode 100644 OpenSim/Server/Handlers/Hypergrid/HGInventoryServerInConnector.cs (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index 23d5b3c..febd4ca 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs @@ -365,6 +365,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends List GetOnlineFriends(UUID userID) { List friendList = new List(); + List online = new List(); foreach (FriendInfo fi in m_Friends[userID].Friends) { @@ -372,9 +373,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends friendList.Add(fi.Friend); } - PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); + if (friendList.Count == 0) + // no friends whatsoever + return online; - List online = new List(); + PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); foreach (PresenceInfo pi in presence) { diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml index 0a5ff3f..c738296 100644 --- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml +++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml @@ -47,6 +47,7 @@ + diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker2.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker2.cs index 3509161..fc3393f 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker2.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker2.cs @@ -41,27 +41,22 @@ using OpenMetaverse; namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory { - public class HGInventoryBroker2 : INonSharedRegionModule, IInventoryService + public class HGInventoryBroker2 : ISharedRegionModule, IInventoryService { private static readonly ILog m_log = LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType); - private static bool m_Initialized = false; private static bool m_Enabled = false; private static IInventoryService m_LocalGridInventoryService; - private static ISessionAuthInventoryService m_HGService; // obsolete private Dictionary m_connectors = new Dictionary(); // A cache of userIDs --> ServiceURLs, for HGBroker only - protected Dictionary m_InventoryURLs; + protected Dictionary m_InventoryURLs = new Dictionary(); - private Scene m_Scene; private List m_Scenes = new List(); - private IUserAccountService m_UserAccountService; - public Type ReplaceableInterface { get { return null; } @@ -74,65 +69,45 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public void Initialise(IConfigSource source) { - if (!m_Initialized) + IConfig moduleConfig = source.Configs["Modules"]; + if (moduleConfig != null) { - IConfig moduleConfig = source.Configs["Modules"]; - if (moduleConfig != null) + string name = moduleConfig.GetString("InventoryServices", ""); + if (name == Name) { - string name = moduleConfig.GetString("InventoryServices", ""); - if (name == Name) + IConfig inventoryConfig = source.Configs["InventoryService"]; + if (inventoryConfig == null) { - IConfig inventoryConfig = source.Configs["InventoryService"]; - if (inventoryConfig == null) - { - m_log.Error("[HG INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); - return; - } - - string localDll = inventoryConfig.GetString("LocalGridInventoryService", - String.Empty); - string HGDll = inventoryConfig.GetString("HypergridInventoryService", - String.Empty); - - if (localDll == String.Empty) - { - m_log.Error("[HG INVENTORY CONNECTOR]: No LocalGridInventoryService named in section InventoryService"); - //return; - throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); - } - - if (HGDll == String.Empty) - { - m_log.Error("[HG INVENTORY CONNECTOR]: No HypergridInventoryService named in section InventoryService"); - //return; - throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); - } + m_log.Error("[HG INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); + return; + } - Object[] args = new Object[] { source }; - m_LocalGridInventoryService = - ServerUtils.LoadPlugin(localDll, - args); + string localDll = inventoryConfig.GetString("LocalGridInventoryService", + String.Empty); + //string HGDll = inventoryConfig.GetString("HypergridInventoryService", + // String.Empty); - m_HGService = - ServerUtils.LoadPlugin(HGDll, - args); + if (localDll == String.Empty) + { + m_log.Error("[HG INVENTORY CONNECTOR]: No LocalGridInventoryService named in section InventoryService"); + //return; + throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); + } - if (m_LocalGridInventoryService == null) - { - m_log.Error("[HG INVENTORY CONNECTOR]: Can't load local inventory service"); - return; - } - if (m_HGService == null) - { - m_log.Error("[HG INVENTORY CONNECTOR]: Can't load hypergrid inventory service"); - return; - } + Object[] args = new Object[] { source }; + m_LocalGridInventoryService = + ServerUtils.LoadPlugin(localDll, + args); - m_Enabled = true; - m_log.Info("[HG INVENTORY CONNECTOR]: HG inventory broker enabled"); + if (m_LocalGridInventoryService == null) + { + m_log.Error("[HG INVENTORY CONNECTOR]: Can't load local inventory service"); + return; } + + m_Enabled = true; + m_log.InfoFormat("[HG INVENTORY CONNECTOR]: HG inventory broker enabled with inner connector of type {0}", m_LocalGridInventoryService.GetType()); } - m_Initialized = true; } } @@ -149,13 +124,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (!m_Enabled) return; - m_Scene = scene; m_Scenes.Add(scene); - m_UserAccountService = m_Scene.UserAccountService; scene.RegisterModuleInterface(this); - scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; scene.EventManager.OnClientClosed += OnClientClosed; } @@ -177,13 +149,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } - #region Cache - - void OnMakeRootAgent(ScenePresence presence) - { - if (!m_InventoryURLs.ContainsKey(presence.UUID)) - CacheInventoryServiceURL(presence.Scene, presence.UUID); - } + #region URL Cache void OnClientClosed(UUID clientID, Scene scene) { @@ -200,10 +166,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return; } } - - m_log.DebugFormat( - "[INVENTORY CACHE]: OnClientClosed in {0}, user {1} out of sim. Dropping inventory URL", - scene.RegionInfo.RegionName, clientID); DropInventoryServiceURL(clientID); } } @@ -213,35 +175,47 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory /// and sticks it in the cache /// /// - private void CacheInventoryServiceURL(Scene scene, UUID userID) + private void CacheInventoryServiceURL(UUID userID) { - if (scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, userID) == null) + if (m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, userID) == null) { // The user does not have a local account; let's cache its service URL string inventoryURL = string.Empty; ScenePresence sp = null; - scene.TryGetScenePresence(userID, out sp); - if (sp != null) + foreach (Scene scene in m_Scenes) { - AgentCircuitData aCircuit = scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode); - if (aCircuit.ServiceURLs.ContainsKey("InventoryServerURI")) + scene.TryGetScenePresence(userID, out sp); + if (sp != null) { - inventoryURL = aCircuit.ServiceURLs["InventoryServerURI"].ToString(); - if (inventoryURL != null && inventoryURL != string.Empty) + AgentCircuitData aCircuit = scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode); + if (aCircuit.ServiceURLs.ContainsKey("InventoryServerURI")) { - inventoryURL = inventoryURL.Trim(new char[] { '/' }); - m_InventoryURLs.Add(userID, inventoryURL); + inventoryURL = aCircuit.ServiceURLs["InventoryServerURI"].ToString(); + if (inventoryURL != null && inventoryURL != string.Empty) + { + inventoryURL = inventoryURL.Trim(new char[] { '/' }); + m_InventoryURLs.Add(userID, inventoryURL); + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Added {0} to the cache of inventory URLs", inventoryURL); + return; + } } } } } + + // else put a null; it means that the methods should forward to local grid's inventory + m_InventoryURLs.Add(userID, null); } private void DropInventoryServiceURL(UUID userID) { lock (m_InventoryURLs) if (m_InventoryURLs.ContainsKey(userID)) + { + string url = m_InventoryURLs[userID]; m_InventoryURLs.Remove(userID); + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Removed {0} from the cache of inventory URLs", url); + } } public string GetInventoryServiceURL(UUID userID) @@ -249,7 +223,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (m_InventoryURLs.ContainsKey(userID)) return m_InventoryURLs[userID]; - return null; + else + CacheInventoryServiceURL(userID); + + return m_InventoryURLs[userID]; } #endregion @@ -276,7 +253,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public InventoryFolderBase GetRootFolder(UUID userID) { - m_log.DebugFormat("[HGInventory]: GetRootFolder for {0}", userID); + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetRootFolder for {0}", userID); string invURL = GetInventoryServiceURL(userID); @@ -290,7 +267,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) { - m_log.DebugFormat("[HGInventory]: GetFolderForType {0} type {1}", userID, type); + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetFolderForType {0} type {1}", userID, type); string invURL = GetInventoryServiceURL(userID); @@ -304,7 +281,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public InventoryCollection GetFolderContent(UUID userID, UUID folderID) { - m_log.Debug("[HGInventory]: GetFolderContent " + folderID); + m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolderContent " + folderID); string invURL = GetInventoryServiceURL(userID); @@ -319,7 +296,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public List GetFolderItems(UUID userID, UUID folderID) { - m_log.Debug("[HGInventory]: GetFolderItems " + folderID); + m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolderItems " + folderID); string invURL = GetInventoryServiceURL(userID); @@ -337,7 +314,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (folder == null) return false; - m_log.Debug("[HGInventory]: AddFolder " + folder.ID); + m_log.Debug("[HG INVENTORY CONNECTOR]: AddFolder " + folder.ID); string invURL = GetInventoryServiceURL(folder.Owner); @@ -354,7 +331,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (folder == null) return false; - m_log.Debug("[HGInventory]: UpdateFolder " + folder.ID); + m_log.Debug("[HG INVENTORY CONNECTOR]: UpdateFolder " + folder.ID); string invURL = GetInventoryServiceURL(folder.Owner); @@ -373,7 +350,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (folderIDs.Count == 0) return false; - m_log.Debug("[HGInventory]: DeleteFolders for " + ownerID); + m_log.Debug("[HG INVENTORY CONNECTOR]: DeleteFolders for " + ownerID); string invURL = GetInventoryServiceURL(ownerID); @@ -390,7 +367,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (folder == null) return false; - m_log.Debug("[HGInventory]: MoveFolder for " + folder.Owner); + m_log.Debug("[HG INVENTORY CONNECTOR]: MoveFolder for " + folder.Owner); string invURL = GetInventoryServiceURL(folder.Owner); @@ -407,7 +384,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (folder == null) return false; - m_log.Debug("[HGInventory]: PurgeFolder for " + folder.Owner); + m_log.Debug("[HG INVENTORY CONNECTOR]: PurgeFolder for " + folder.Owner); string invURL = GetInventoryServiceURL(folder.Owner); @@ -424,7 +401,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (item == null) return false; - m_log.Debug("[HGInventory]: AddItem " + item.ID); + m_log.Debug("[HG INVENTORY CONNECTOR]: AddItem " + item.ID); string invURL = GetInventoryServiceURL(item.Owner); @@ -441,7 +418,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (item == null) return false; - m_log.Debug("[HGInventory]: UpdateItem " + item.ID); + m_log.Debug("[HG INVENTORY CONNECTOR]: UpdateItem " + item.ID); string invURL = GetInventoryServiceURL(item.Owner); @@ -460,7 +437,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (items.Count == 0) return true; - m_log.Debug("[HGInventory]: MoveItems for " + ownerID); + m_log.Debug("[HG INVENTORY CONNECTOR]: MoveItems for " + ownerID); string invURL = GetInventoryServiceURL(ownerID); @@ -481,7 +458,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (itemIDs.Count == 0) return true; - m_log.Debug("[HGInventory]: DeleteItems for " + ownerID); + m_log.Debug("[HG INVENTORY CONNECTOR]: DeleteItems for " + ownerID); string invURL = GetInventoryServiceURL(ownerID); @@ -497,7 +474,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory { if (item == null) return null; - m_log.Debug("[HGInventory]: GetItem " + item.ID); + m_log.Debug("[HG INVENTORY CONNECTOR]: GetItem " + item.ID); string invURL = GetInventoryServiceURL(item.Owner); @@ -514,7 +491,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (folder == null) return null; - m_log.Debug("[HGInventory]: GetFolder " + folder.ID); + m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolder " + folder.ID); string invURL = GetInventoryServiceURL(folder.Owner); @@ -538,7 +515,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public int GetAssetPermissions(UUID userID, UUID assetID) { - m_log.Debug("[HGInventory]: GetAssetPermissions " + assetID); + m_log.Debug("[HG INVENTORY CONNECTOR]: GetAssetPermissions " + assetID); string invURL = GetInventoryServiceURL(userID); @@ -575,44 +552,5 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector; } - - private UUID GetSessionID(UUID userID) - { - ScenePresence sp = null; - if (m_Scene.TryGetScenePresence(userID, out sp)) - { - return sp.ControllingClient.SessionId; - } - - m_log.DebugFormat("[HG INVENTORY CONNECTOR]: scene presence for {0} not found", userID); - return UUID.Zero; - } - - private bool IsForeignUser(UUID userID, out string inventoryURL) - { - inventoryURL = string.Empty; - UserAccount account = null; - if (m_Scene.UserAccountService != null) - account = m_Scene.UserAccountService.GetUserAccount(m_Scene.RegionInfo.ScopeID, userID); - - if (account == null) // foreign user - { - ScenePresence sp = null; - m_Scene.TryGetScenePresence(userID, out sp); - if (sp != null) - { - AgentCircuitData aCircuit = m_Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode); - if (aCircuit.ServiceURLs.ContainsKey("InventoryServerURI")) - { - inventoryURL = aCircuit.ServiceURLs["InventoryServerURI"].ToString(); - inventoryURL = inventoryURL.Trim(new char[] { '/' }); - return true; - } - } - } - return false; - } - - } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index ac9e792..277060d 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs @@ -172,11 +172,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.GetFolderForType(userID, type); } - public Dictionary GetSystemFolders(UUID userID) - { - return m_RemoteConnector.GetSystemFolders(userID); - } - public InventoryCollection GetFolderContent(UUID userID, UUID folderID) { return m_RemoteConnector.GetFolderContent(userID, folderID); @@ -267,9 +262,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public InventoryItemBase GetItem(InventoryItemBase item) { + m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID); if (item == null) return null; + if (m_RemoteConnector == null) + m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!"); return m_RemoteConnector.GetItem(item); } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs index 865f99e..5f3666e 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Presence/RemotePresenceServiceConnector.cs @@ -76,7 +76,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence m_PresenceDetector = new PresenceDetector(this); - m_log.Info("[INVENTORY CONNECTOR]: Remote presence enabled"); + m_log.Info("[REMOTE PRESENCE CONNECTOR]: Remote presence enabled"); } } diff --git a/OpenSim/Server/Handlers/Hypergrid/HGInventoryServerInConnector.cs b/OpenSim/Server/Handlers/Hypergrid/HGInventoryServerInConnector.cs deleted file mode 100644 index 41897eb..0000000 --- a/OpenSim/Server/Handlers/Hypergrid/HGInventoryServerInConnector.cs +++ /dev/null @@ -1,104 +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; -using System.Collections.Generic; -using System.Net; -using System.Reflection; -using log4net; -using Nini.Config; -using Nwc.XmlRpc; -using OpenSim.Server.Base; -using OpenSim.Server.Handlers.Inventory; -using OpenSim.Services.Interfaces; -using OpenSim.Framework; -using OpenSim.Framework.Servers.HttpServer; -using OpenSim.Server.Handlers.Base; -using OpenMetaverse; - -namespace OpenSim.Server.Handlers.Hypergrid -{ - public class HGInventoryServiceInConnector : InventoryServiceInConnector - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - //private static readonly int INVENTORY_DEFAULT_SESSION_TIME = 30; // secs - //private AuthedSessionCache m_session_cache = new AuthedSessionCache(INVENTORY_DEFAULT_SESSION_TIME); - - private IUserAgentService m_UserAgentService; - - public HGInventoryServiceInConnector(IConfigSource config, IHttpServer server, string configName) : - base(config, server, configName) - { - IConfig serverConfig = config.Configs[m_ConfigName]; - if (serverConfig == null) - throw new Exception(String.Format("No section '{0}' in config file", m_ConfigName)); - - string userAgentService = serverConfig.GetString("UserAgentService", string.Empty); - string m_userserver_url = serverConfig.GetString("UserAgentURI", String.Empty); - if (m_userserver_url != string.Empty) - { - Object[] args = new Object[] { m_userserver_url }; - m_UserAgentService = ServerUtils.LoadPlugin(userAgentService, args); - } - - AddHttpHandlers(server); - m_log.Debug("[HG INVENTORY HANDLER]: handlers initialized"); - } - - /// - /// Check that the source of an inventory request for a particular agent is a current session belonging to - /// that agent. - /// - /// - /// - /// - public override bool CheckAuthSession(string session_id, string avatar_id) - { - //m_log.InfoFormat("[HG INVENTORY IN CONNECTOR]: checking authed session {0} {1}", session_id, avatar_id); - // This doesn't work - - // if (m_session_cache.getCachedSession(session_id, avatar_id) == null) - // { - // //cache miss, ask userserver - // m_UserAgentService.VerifyAgent(session_id, ???); - // } - // else - // { - // // cache hits - // m_log.Info("[HG INVENTORY IN CONNECTOR]: got authed session from cache"); - // return true; - // } - - // m_log.Warn("[HG INVENTORY IN CONNECTOR]: unknown session_id, request rejected"); - // return false; - - return true; - } - } -} diff --git a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs index 16b05df..b0fee6d 100644 --- a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs @@ -144,8 +144,6 @@ namespace OpenSim.Server.Handlers.Asset return HandleGetActiveGestures(request); case "GETASSETPERMISSIONS": return HandleGetAssetPermissions(request); - case "GETSYSTEMFOLDERS": - return HandleGetSystemFolders(request); } m_log.DebugFormat("[XINVENTORY HANDLER]: unknown method request: {0}", method); } @@ -575,29 +573,6 @@ namespace OpenSim.Server.Handlers.Asset return encoding.GetBytes(xmlString); } - byte[] HandleGetSystemFolders(Dictionary request) - { - Dictionary result = new Dictionary(); - UUID principal = UUID.Zero; - UUID.TryParse(request["PRINCIPAL"].ToString(), out principal); - - Dictionary sfolders = GetSystemFolders(principal); - //m_log.DebugFormat("[XXX]: SystemFolders got {0} folders", sfolders.Count); - - Dictionary folders = new Dictionary(); - int i = 0; - foreach (KeyValuePair kvp in sfolders) - { - folders["folder_" + i.ToString()] = EncodeFolder(kvp.Value); - i++; - } - result["FOLDERS"] = folders; - - string xmlString = ServerUtils.BuildXmlResponse(result); - //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); - UTF8Encoding encoding = new UTF8Encoding(); - return encoding.GetBytes(xmlString); - } private Dictionary EncodeFolder(InventoryFolderBase f) { @@ -683,30 +658,5 @@ namespace OpenSim.Server.Handlers.Asset return item; } - #region Extra - private Dictionary GetSystemFolders(UUID userID) - { - InventoryFolderBase root = m_InventoryService.GetRootFolder(userID); - if (root != null) - { - InventoryCollection content = m_InventoryService.GetFolderContent(userID, root.ID); - if (content != null) - { - Dictionary folders = new Dictionary(); - foreach (InventoryFolderBase folder in content.Folders) - { - if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) - folders[(AssetType)folder.Type] = folder; - } - // Put the root folder there, as type Folder - folders[AssetType.Folder] = root; - return folders; - } - } - m_log.WarnFormat("[XINVENTORY SERVICE]: System folders for {0} not found", userID); - return new Dictionary(); - } - #endregion - } } diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs index 52294da..e25e7eb 100644 --- a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs @@ -158,30 +158,31 @@ namespace OpenSim.Services.Connectors public InventoryCollection GetFolderContent(UUID principalID, UUID folderID) { - Dictionary ret = MakeRequest("GETFOLDERCONTENT", - new Dictionary { - { "PRINCIPAL", principalID.ToString() }, - { "FOLDER", folderID.ToString() } - }); - - if (ret == null) - return null; - if (ret.Count == 0) - return null; - - InventoryCollection inventory = new InventoryCollection(); - inventory.Folders = new List(); - inventory.Items = new List(); - inventory.UserID = principalID; - Dictionary folders = - (Dictionary)ret["FOLDERS"]; - Dictionary items = - (Dictionary)ret["ITEMS"]; - try { + Dictionary ret = MakeRequest("GETFOLDERCONTENT", + new Dictionary { + { "PRINCIPAL", principalID.ToString() }, + { "FOLDER", folderID.ToString() } + }); + + if (ret == null) + return null; + if (ret.Count == 0) + return null; + + + inventory.Folders = new List(); + inventory.Items = new List(); + inventory.UserID = principalID; + + Dictionary folders = + (Dictionary)ret["FOLDERS"]; + Dictionary items = + (Dictionary)ret["ITEMS"]; + foreach (Object o in folders.Values) // getting the values directly, we don't care about the keys folder_i inventory.Folders.Add(BuildFolder((Dictionary)o)); foreach (Object o in items.Values) // getting the values directly, we don't care about the keys item_i @@ -189,7 +190,7 @@ namespace OpenSim.Services.Connectors } catch (Exception e) { - m_log.DebugFormat("[XINVENTORY CONNECTOR STUB]: Exception unwrapping content list: {0}", e.Message); + m_log.DebugFormat("[XINVENTORY CONNECTOR STUB]: Exception in GetFolderContent: {0}", e.Message); } return inventory; @@ -408,32 +409,50 @@ namespace OpenSim.Services.Connectors public InventoryItemBase GetItem(InventoryItemBase item) { - Dictionary ret = MakeRequest("GETITEM", - new Dictionary { + try + { + Dictionary ret = MakeRequest("GETITEM", + new Dictionary { { "ID", item.ID.ToString() } }); - if (ret == null) - return null; - if (ret.Count == 0) - return null; + if (ret == null) + return null; + if (ret.Count == 0) + return null; + + return BuildItem((Dictionary)ret["item"]); + } + catch (Exception e) + { + m_log.DebugFormat("[XINVENTORY CONNECTOR STUB]: Exception in GetItem: {0}", e.Message); + } - return BuildItem((Dictionary)ret["item"]); + return null; } public InventoryFolderBase GetFolder(InventoryFolderBase folder) { - Dictionary ret = MakeRequest("GETFOLDER", - new Dictionary { + try + { + Dictionary ret = MakeRequest("GETFOLDER", + new Dictionary { { "ID", folder.ID.ToString() } }); - if (ret == null) - return null; - if (ret.Count == 0) - return null; + if (ret == null) + return null; + if (ret.Count == 0) + return null; - return BuildFolder((Dictionary)ret["folder"]); + return BuildFolder((Dictionary)ret["folder"]); + } + catch (Exception e) + { + m_log.DebugFormat("[XINVENTORY CONNECTOR STUB]: Exception in GetFolder: {0}", e.Message); + } + + return null; } public List GetActiveGestures(UUID principalID) @@ -468,36 +487,6 @@ namespace OpenSim.Services.Connectors return int.Parse(ret["RESULT"].ToString()); } - public Dictionary GetSystemFolders(UUID userID) - { - Dictionary ret = MakeRequest("GETSYSTEMFOLDERS", - new Dictionary { - { "PRINCIPAL", userID.ToString() }, - }); - - if (ret == null) - return new Dictionary(); - - Dictionary sfolders = new Dictionary(); - - try - { - Dictionary folders = (Dictionary)ret["FOLDERS"]; - - foreach (Object o in folders.Values) // getting the values directly, we don't care about the keys folder_i - { - InventoryFolderBase folder = BuildFolder((Dictionary)o); - sfolders.Add((AssetType)folder.Type, folder); - } - - } - catch (Exception e) - { - m_log.DebugFormat("[XINVENTORY CONNECTOR STUB]: exception {0}", e.Message); - } - - return sfolders; - } // These are either obsolete or unused // diff --git a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs index 4dadd9e..23621b7 100644 --- a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs +++ b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs @@ -329,7 +329,7 @@ namespace OpenSim.Services.Connectors reqString); if (reply == null || (reply != null && reply == string.Empty)) { - m_log.DebugFormat("[PRESENCE CONNECTOR]: GetAgent received null or empty reply"); + m_log.DebugFormat("[PRESENCE CONNECTOR]: GetAgents received null or empty reply"); return null; } } -- cgit v1.1 From 177048a65120c5b15e731802921a31b71a078e6f Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 30 Apr 2010 22:35:07 +0200 Subject: Fix linking issue introduced in my earlier commit --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 6ebfd31..9117224 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1967,8 +1967,17 @@ namespace OpenSim.Region.Framework.Scenes List children = new List(); SceneObjectPart root = GetSceneObjectPart(parentPrimId); - if (Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID)) + if (root == null) + { + m_log.DebugFormat("[LINK]: Can't find linkset root prim {0{", parentPrimId); + return; + } + + if (!Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID)) + { + m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim"); return; + } foreach (uint localID in childPrimIds) { @@ -1987,7 +1996,16 @@ namespace OpenSim.Region.Framework.Scenes // Must be all one owner // if (owners.Count > 1) + { + m_log.DebugFormat("[LINK]: Refusing link. Too many owners"); + return; + } + + if (children.Count == 0) + { + m_log.DebugFormat("[LINK]: Refusing link. No permissions to link any of the children"); return; + } m_sceneGraph.LinkObjects(root, children); } -- cgit v1.1