From 180be7de07014aa33bc6066f12a0819b731c1c9d Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Tue, 10 Feb 2009 13:10:57 +0000 Subject: this is step 2 of 2 of the OpenSim.Region.Environment refactor. NOTHING has been deleted or moved off to forge at this point. what has happened is that OpenSim.Region.Environment.Modules has been split in two: - OpenSim.Region.CoreModules: all those modules that are either directly or indirectly referenced from other OpenSim packages, or that provide functionality that the OpenSim developer community considers core functionality: CoreModules/Agent/AssetTransaction CoreModules/Agent/Capabilities CoreModules/Agent/TextureDownload CoreModules/Agent/TextureSender CoreModules/Agent/TextureSender/Tests CoreModules/Agent/Xfer CoreModules/Avatar/AvatarFactory CoreModules/Avatar/Chat/ChatModule CoreModules/Avatar/Combat CoreModules/Avatar/Currency/SampleMoney CoreModules/Avatar/Dialog CoreModules/Avatar/Friends CoreModules/Avatar/Gestures CoreModules/Avatar/Groups CoreModules/Avatar/InstantMessage CoreModules/Avatar/Inventory CoreModules/Avatar/Inventory/Archiver CoreModules/Avatar/Inventory/Transfer CoreModules/Avatar/Lure CoreModules/Avatar/ObjectCaps CoreModules/Avatar/Profiles CoreModules/Communications/Local CoreModules/Communications/REST CoreModules/Framework/EventQueue CoreModules/Framework/InterfaceCommander CoreModules/Hypergrid CoreModules/InterGrid CoreModules/Scripting/DynamicTexture CoreModules/Scripting/EMailModules CoreModules/Scripting/HttpRequest CoreModules/Scripting/LoadImageURL CoreModules/Scripting/VectorRender CoreModules/Scripting/WorldComm CoreModules/Scripting/XMLRPC CoreModules/World/Archiver CoreModules/World/Archiver/Tests CoreModules/World/Estate CoreModules/World/Land CoreModules/World/Permissions CoreModules/World/Serialiser CoreModules/World/Sound CoreModules/World/Sun CoreModules/World/Terrain CoreModules/World/Terrain/DefaultEffects CoreModules/World/Terrain/DefaultEffects/bin CoreModules/World/Terrain/DefaultEffects/bin/Debug CoreModules/World/Terrain/Effects CoreModules/World/Terrain/FileLoaders CoreModules/World/Terrain/FloodBrushes CoreModules/World/Terrain/PaintBrushes CoreModules/World/Terrain/Tests CoreModules/World/Vegetation CoreModules/World/Wind CoreModules/World/WorldMap - OpenSim.Region.OptionalModules: all those modules that are not core modules: OptionalModules/Avatar/Chat/IRC-stuff OptionalModules/Avatar/Concierge OptionalModules/Avatar/Voice/AsterixVoice OptionalModules/Avatar/Voice/SIPVoice OptionalModules/ContentManagementSystem OptionalModules/Grid/Interregion OptionalModules/Python OptionalModules/SvnSerialiser OptionalModules/World/NPC OptionalModules/World/TreePopulator --- .../Archiver/InventoryArchiveReadRequest.cs | 279 --------------- .../Archiver/InventoryArchiveWriteRequest.cs | 247 ------------- .../Inventory/Transfer/InventoryTransferModule.cs | 389 --------------------- 3 files changed, 915 deletions(-) delete mode 100644 OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs delete mode 100644 OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs delete mode 100644 OpenSim/Region/Environment/Modules/Avatar/Inventory/Transfer/InventoryTransferModule.cs (limited to 'OpenSim/Region/Environment/Modules/Avatar/Inventory') diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs deleted file mode 100644 index 3a58202..0000000 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ /dev/null @@ -1,279 +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 OpenSim 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.IO; -using System.IO.Compression; -using System.Reflection; -using System.Xml; -using OpenMetaverse; -using OpenSim.Region.Framework.Scenes; -using OpenSim.Region.Environment.Modules.World.Archiver; -using OpenSim.Framework; -using OpenSim.Framework.Communications; -using OpenSim.Framework.Communications.Cache; -using log4net; -using OpenSim.Region.Environment.Modules.World.Serialiser; - - -namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver -{ - public class InventoryArchiveReadRequest - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - protected Scene scene; - protected TarArchiveReader archive; - private static System.Text.ASCIIEncoding m_asciiEncoding = new System.Text.ASCIIEncoding(); - - CommunicationsManager commsManager; - - public InventoryArchiveReadRequest(Scene currentScene, CommunicationsManager commsManager) - { - //List serialisedObjects = new List(); - scene = currentScene; - this.commsManager = commsManager; - } - - protected InventoryItemBase loadInvItem(string path, string contents) - { - InventoryItemBase item = new InventoryItemBase(); - StringReader sr = new StringReader(contents); - XmlTextReader reader = new XmlTextReader(sr); - - if (contents.Equals("")) return null; - - reader.ReadStartElement("InventoryObject"); - reader.ReadStartElement("Name"); - item.Name = reader.ReadString(); - reader.ReadEndElement(); - reader.ReadStartElement("ID"); - item.ID = UUID.Parse(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("InvType"); - item.InvType = System.Convert.ToInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("CreatorUUID"); - item.Creator = UUID.Parse(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("CreationDate"); - item.CreationDate = System.Convert.ToInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("Owner"); - item.Owner = UUID.Parse(reader.ReadString()); - reader.ReadEndElement(); - //No description would kill it - if (reader.IsEmptyElement) - { - reader.ReadStartElement("Description"); - } - else - { - reader.ReadStartElement("Description"); - item.Description = reader.ReadString(); - reader.ReadEndElement(); - } - reader.ReadStartElement("AssetType"); - item.AssetType = System.Convert.ToInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("AssetID"); - item.AssetID = UUID.Parse(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("SaleType"); - item.SaleType = System.Convert.ToByte(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("SalePrice"); - item.SalePrice = System.Convert.ToInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("BasePermissions"); - item.BasePermissions = System.Convert.ToUInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("CurrentPermissions"); - item.CurrentPermissions = System.Convert.ToUInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("EveryOnePermssions"); - item.EveryOnePermissions = System.Convert.ToUInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("NextPermissions"); - item.NextPermissions = System.Convert.ToUInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("Flags"); - item.Flags = System.Convert.ToUInt32(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("GroupID"); - item.GroupID = UUID.Parse(reader.ReadString()); - reader.ReadEndElement(); - reader.ReadStartElement("GroupOwned"); - item.GroupOwned = System.Convert.ToBoolean(reader.ReadString()); - reader.ReadEndElement(); - //reader.ReadStartElement("ParentFolderID"); - //item.Folder = UUID.Parse(reader.ReadString()); - //reader.ReadEndElement(); - //reader.ReadEndElement(); - - return item; - } - - public void execute(string firstName, string lastName, string invPath, string loadPath) - { - string filePath = "ERROR"; - int successfulAssetRestores = 0; - int failedAssetRestores = 0; - int successfulItemRestores = 0; - - UserProfileData userProfile = commsManager.UserService.GetUserProfile(firstName, lastName); - if (null == userProfile) - { - m_log.ErrorFormat("[CONSOLE]: Failed to find user {0} {1}", firstName, lastName); - return; - } - - CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userProfile.ID); - if (null == userInfo) - { - m_log.ErrorFormat( - "[CONSOLE]: Failed to find user info for {0} {1} {2}", - firstName, lastName, userProfile.ID); - - return; - } - - if (!userInfo.HasReceivedInventory) - { - m_log.ErrorFormat( - "[CONSOLE]: Have not yet received inventory info for user {0} {1} {2}", - firstName, lastName, userProfile.ID); - - return; - } - - InventoryFolderImpl inventoryFolder = userInfo.RootFolder.FindFolderByPath(invPath); - - if (null == inventoryFolder) - { - // TODO: Later on, automatically create this folder if it does not exist - m_log.ErrorFormat("[ARCHIVER]: Inventory path {0} does not exist", invPath); - - return; - } - - archive - = new TarArchiveReader(new GZipStream( - new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress)); - - byte[] data; - TarArchiveReader.TarEntryType entryType; - while ((data = archive.ReadEntry(out filePath, out entryType)) != null) - { - if (entryType == TarArchiveReader.TarEntryType.TYPE_DIRECTORY) { - m_log.WarnFormat("[ARCHIVER]: Ignoring directory entry {0}", filePath); - } else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) - { - if (LoadAsset(filePath, data)) - successfulAssetRestores++; - else - failedAssetRestores++; - } - else - { - InventoryItemBase item = loadInvItem(filePath, m_asciiEncoding.GetString(data)); - - if (item != null) - { - item.Creator = userProfile.ID; - item.Owner = userProfile.ID; - - // Reset folder ID to the one in which we want to load it - // TODO: Properly restore entire folder structure. At the moment all items are dumped in this - // single folder no matter where in the saved folder structure they are. - item.Folder = inventoryFolder.ID; - - userInfo.AddItem(item); - successfulItemRestores++; - } - } - } - - archive.Close(); - - m_log.DebugFormat("[ARCHIVER]: Restored {0} assets", successfulAssetRestores); - m_log.InfoFormat("[ARCHIVER]: Restored {0} items", successfulItemRestores); - } - - /// - /// Load an asset - /// - /// - /// - /// true if asset was successfully loaded, false otherwise - private bool LoadAsset(string assetPath, byte[] data) - { - //IRegionSerialiser serialiser = scene.RequestModuleInterface(); - // Right now we're nastily obtaining the UUID from the filename - string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length); - int i = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR); - - if (i == -1) - { - m_log.ErrorFormat( - "[ARCHIVER]: Could not find extension information in asset path {0} since it's missing the separator {1}. Skipping", - assetPath, ArchiveConstants.ASSET_EXTENSION_SEPARATOR); - - return false; - } - - string extension = filename.Substring(i); - string uuid = filename.Remove(filename.Length - extension.Length); - - if (ArchiveConstants.EXTENSION_TO_ASSET_TYPE.ContainsKey(extension)) - { - sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension]; - - m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType); - - AssetBase asset = new AssetBase(new UUID(uuid), "RandomName"); - - asset.Metadata.Type = assetType; - asset.Data = data; - - scene.AssetCache.AddAsset(asset); - - - return true; - } - else - { - m_log.ErrorFormat( - "[ARCHIVER]: Tried to dearchive data with path {0} with an unknown type extension {1}", - assetPath, extension); - - return false; - } - } - } -} diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs deleted file mode 100644 index e23f2a8..0000000 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ /dev/null @@ -1,247 +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 OpenSim 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.IO; -using System.IO.Compression; -using System.Reflection; -using System.Xml; -using OpenMetaverse; -using OpenSim.Region.Framework.Scenes; -using OpenSim.Region.Environment.Modules.World.Archiver; -using OpenSim.Framework; -using OpenSim.Framework.Communications; -using OpenSim.Framework.Communications.Cache; -using log4net; - - -namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver -{ - public class InventoryArchiveWriteRequest - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - protected Scene scene; - protected TarArchiveWriter archive; - protected CommunicationsManager commsManager; - Dictionary assetUuids; - - /// - /// The path to which the inventory archive will be saved. - /// - private string m_savePath; - - public InventoryArchiveWriteRequest(Scene currentScene, CommunicationsManager commsManager) - { - scene = currentScene; - archive = new TarArchiveWriter(); - this.commsManager = commsManager; - assetUuids = new Dictionary(); - } - - protected void ReceivedAllAssets(IDictionary assetsFound, ICollection assetsNotFoundUuids) - { - AssetsArchiver assetsArchiver = new AssetsArchiver(assetsFound); - assetsArchiver.Archive(archive); - archive.WriteTar(new GZipStream(new FileStream(m_savePath, FileMode.Create), CompressionMode.Compress)); - } - - protected void saveInvItem(InventoryItemBase inventoryItem, string path) - { - string filename - = string.Format("{0}{1}_{2}.xml", - path, inventoryItem.Name, inventoryItem.ID); - StringWriter sw = new StringWriter(); - XmlTextWriter writer = new XmlTextWriter(sw); - writer.WriteStartElement("InventoryObject"); - writer.WriteStartElement("Name"); - writer.WriteString(inventoryItem.Name); - writer.WriteEndElement(); - writer.WriteStartElement("ID"); - writer.WriteString(inventoryItem.ID.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("InvType"); - writer.WriteString(inventoryItem.InvType.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("CreatorUUID"); - writer.WriteString(inventoryItem.Creator.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("CreationDate"); - writer.WriteString(inventoryItem.CreationDate.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("Owner"); - writer.WriteString(inventoryItem.Owner.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("Description"); - if (inventoryItem.Description.Length > 0) - writer.WriteString(inventoryItem.Description); - else writer.WriteString("No Description"); - writer.WriteEndElement(); - writer.WriteStartElement("AssetType"); - writer.WriteString(inventoryItem.AssetType.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("AssetID"); - writer.WriteString(inventoryItem.AssetID.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("SaleType"); - writer.WriteString(inventoryItem.SaleType.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("SalePrice"); - writer.WriteString(inventoryItem.SalePrice.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("BasePermissions"); - writer.WriteString(inventoryItem.BasePermissions.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("CurrentPermissions"); - writer.WriteString(inventoryItem.CurrentPermissions.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("EveryOnePermssions"); - writer.WriteString(inventoryItem.EveryOnePermissions.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("NextPermissions"); - writer.WriteString(inventoryItem.NextPermissions.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("Flags"); - writer.WriteString(inventoryItem.Flags.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("GroupID"); - writer.WriteString(inventoryItem.GroupID.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("GroupOwned"); - writer.WriteString(inventoryItem.GroupOwned.ToString()); - writer.WriteEndElement(); - writer.WriteStartElement("ParentFolderID"); - writer.WriteString(inventoryItem.Folder.ToString()); - writer.WriteEndElement(); - writer.WriteEndElement(); - - archive.AddFile(filename, sw.ToString()); - - assetUuids[inventoryItem.AssetID] = 1; - } - - protected void saveInvDir(InventoryFolderImpl inventoryFolder, string path) - { - List inventories = inventoryFolder.RequestListOfFolderImpls(); - List items = inventoryFolder.RequestListOfItems(); - string newPath = path + inventoryFolder.Name + InventoryFolderImpl.PATH_DELIMITER; - archive.AddDir(newPath); - foreach (InventoryFolderImpl folder in inventories) - { - saveInvDir(folder, newPath); - } - foreach (InventoryItemBase item in items) - { - saveInvItem(item, newPath); - } - } - - public void execute(string firstName, string lastName, string invPath, string savePath) - { - m_savePath = savePath; - - UserProfileData userProfile = commsManager.UserService.GetUserProfile(firstName, lastName); - if (null == userProfile) - { - m_log.ErrorFormat("[CONSOLE]: Failed to find user {0} {1}", firstName, lastName); - return; - } - - CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userProfile.ID); - if (null == userInfo) - { - m_log.ErrorFormat("[CONSOLE]: Failed to find user info for {0} {1} {2}", firstName, lastName, userProfile.ID); - return; - } - - InventoryFolderImpl inventoryFolder = null; - InventoryItemBase inventoryItem = null; - - if (userInfo.HasReceivedInventory) - { - // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl - // itself (possibly at a small loss in efficiency). - string[] components - = invPath.Split(new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries); - invPath = String.Empty; - foreach (string c in components) - { - invPath += c + InventoryFolderImpl.PATH_DELIMITER; - } - - // Annoyingly Split actually returns the original string if the input string consists only of delimiters - // Therefore if we still start with a / after the split, then we need the root folder - if (invPath.Length == 0) - { - inventoryFolder = userInfo.RootFolder; - } - else - { - invPath = invPath.Remove(invPath.LastIndexOf(InventoryFolderImpl.PATH_DELIMITER)); - inventoryFolder = userInfo.RootFolder.FindFolderByPath(invPath); - } - - // The path may point to an item instead - if (inventoryFolder == null) - { - inventoryItem = userInfo.RootFolder.FindItemByPath(invPath); - } - } - else - { - m_log.ErrorFormat("[CONSOLE]: Have not yet received inventory info for user {0} {1} {2}", firstName, lastName, userProfile.ID); - return; - } - - if (null == inventoryFolder) - { - if (null == inventoryItem) - { - m_log.ErrorFormat("[CONSOLE]: Could not find inventory entry at path {0}", invPath); - return; - } - else - { - m_log.InfoFormat("[CONSOLE]: Found item {0} {1} at {2}", inventoryItem.Name, inventoryItem.ID, - invPath); - //get and export item info - saveInvItem(inventoryItem, invPath); - } - } - else - { - m_log.InfoFormat("[CONSOLE]: Found folder {0} {1} at {2}", inventoryFolder.Name, inventoryFolder.ID, - invPath); - //recurse through all dirs getting dirs and files - saveInvDir(inventoryFolder, ""); - } - - new AssetsRequest(assetUuids.Keys, scene.AssetCache, ReceivedAllAssets).Execute(); - } - } -} diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Transfer/InventoryTransferModule.cs deleted file mode 100644 index 62fb3a2..0000000 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ /dev/null @@ -1,389 +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 OpenSim 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.Reflection; -using OpenMetaverse; -using log4net; -using Nini.Config; -using OpenSim.Framework; -using OpenSim.Region.Framework.Interfaces; -using OpenSim.Region.Framework.Scenes; -using OpenSim.Framework.Communications.Cache; - -namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Transfer -{ - public class InventoryTransferModule : IInventoryTransferModule, IRegionModule - { - private static readonly ILog m_log - = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - /// - private List m_Scenelist = new List(); - private Dictionary m_AgentRegions = - new Dictionary(); - - private IMessageTransferModule m_TransferModule = null; - - #region IRegionModule Members - - public void Initialise(Scene scene, IConfigSource config) - { - if (config.Configs["Messaging"] != null) - { - // Allow disabling this module in config - // - if (config.Configs["Messaging"].GetString( - "InventoryTransferModule", "InventoryTransferModule") != - "InventoryTransferModule") - return; - } - - if (!m_Scenelist.Contains(scene)) - { - if (m_Scenelist.Count == 0) - { - m_TransferModule = scene.RequestModuleInterface(); - if (m_TransferModule == null) - m_log.Error("[INVENTORY TRANSFER] No Message transfer module found, transfers will be local only"); - } - - m_Scenelist.Add(scene); - - scene.RegisterModuleInterface(this); - - scene.EventManager.OnNewClient += OnNewClient; - scene.EventManager.OnClientClosed += ClientLoggedOut; - } - } - - public void PostInitialise() - { - } - - public void Close() - { - } - - public string Name - { - get { return "InventoryModule"; } - } - - public bool IsSharedModule - { - get { return true; } - } - - #endregion - - private void OnNewClient(IClientAPI client) - { - // Inventory giving is conducted via instant message - client.OnInstantMessage += OnInstantMessage; - } - - private Scene FindClientScene(UUID agentId) - { - lock (m_Scenelist) - { - foreach (Scene scene in m_Scenelist) - { - ScenePresence presence = scene.GetScenePresence(agentId); - if (presence != null) - { - if (!presence.IsChildAgent) - return scene; - } - } - } - return null; - } - - private void OnInstantMessage(IClientAPI client, GridInstantMessage im) - { - Scene scene = FindClientScene(client.AgentId); - - if (scene == null) // Something seriously wrong here. - return; - - if (im.dialog == (byte) InstantMessageDialog.InventoryOffered) - { - //m_log.DebugFormat("Asset type {0}", ((AssetType)im.binaryBucket[0])); - - ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); - UUID copyID; - - // First byte is the asset type - AssetType assetType = (AssetType)im.binaryBucket[0]; - - if (AssetType.Folder == assetType) - { - UUID folderID = new UUID(im.binaryBucket, 1); - - m_log.DebugFormat("[AGENT INVENTORY]: Inserting original folder {0} "+ - "into agent {1}'s inventory", - folderID, new UUID(im.toAgentID)); - - InventoryFolderImpl folderCopy - = scene.GiveInventoryFolder(new UUID(im.toAgentID), client.AgentId, folderID, UUID.Zero); - - if (folderCopy == null) - { - client.SendAgentAlertMessage("Can't find folder to give. Nothing given.", false); - return; - } - - // The outgoing binary bucket should contain only the byte which signals an asset folder is - // being copied and the following bytes for the copied folder's UUID - copyID = folderCopy.ID; - byte[] copyIDBytes = copyID.GetBytes(); - im.binaryBucket = new byte[1 + copyIDBytes.Length]; - im.binaryBucket[0] = (byte)AssetType.Folder; - Array.Copy(copyIDBytes, 0, im.binaryBucket, 1, copyIDBytes.Length); - - if (user != null && !user.IsChildAgent) - { - user.ControllingClient.SendBulkUpdateInventory(folderCopy); - } - } - else - { - // First byte of the array is probably the item type - // Next 16 bytes are the UUID - - UUID itemID = new UUID(im.binaryBucket, 1); - - m_log.DebugFormat("[AGENT INVENTORY]: Inserting item {0} "+ - "into agent {1}'s inventory", - itemID, new UUID(im.toAgentID)); - - InventoryItemBase itemCopy = scene.GiveInventoryItem( - new UUID(im.toAgentID), - client.AgentId, itemID); - - if (itemCopy == null) - { - client.SendAgentAlertMessage("Can't find item to give. Nothing given.", false); - return; - } - - copyID = itemCopy.ID; - Array.Copy(copyID.GetBytes(), 0, im.binaryBucket, 1, 16); - - if (user != null && !user.IsChildAgent) - { - user.ControllingClient.SendBulkUpdateInventory(itemCopy); - } - } - - // Send the IM to the recipient. The item is already - // in their inventory, so it will not be lost if - // they are offline. - // - if (user != null && !user.IsChildAgent) - { - // And notify. Transaction ID is the item ID. We get that - // same ID back on the reply so we know what to act on - // - user.ControllingClient.SendInstantMessage( - new UUID(im.fromAgentID), im.message, - new UUID(im.toAgentID), - im.fromAgentName, im.dialog, im.timestamp, - copyID, false, im.binaryBucket); - - return; - } - else - { - if (m_TransferModule != null) - m_TransferModule.SendInstantMessage(im, delegate(bool success) {} ); - } - } - else if (im.dialog == (byte) InstantMessageDialog.InventoryAccepted) - { - ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); - - if (user != null) // Local - { - user.ControllingClient.SendInstantMessage( - new UUID(im.fromAgentID), im.message, - new UUID(im.toAgentID), - im.fromAgentName, im.dialog, im.timestamp, - UUID.Zero, false, im.binaryBucket); - } - else - { - if (m_TransferModule != null) - m_TransferModule.SendInstantMessage(im, delegate(bool success) {} ); - } - } - else if (im.dialog == (byte) InstantMessageDialog.InventoryDeclined) - { - // Here, the recipient is local and we can assume that the - // inventory is loaded. Courtesy of the above bulk update, - // It will have been pushed to the client, too - // - - CachedUserInfo userInfo = - scene.CommsManager.UserProfileCacheService. - GetUserDetails(client.AgentId); - - if (userInfo != null) - { - InventoryFolderImpl trashFolder = - userInfo.FindFolderForType((int)AssetType.TrashFolder); - - UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip - - InventoryItemBase item = userInfo.RootFolder.FindItem(inventoryEntityID); - InventoryFolderBase folder = null; - - if (item != null && trashFolder != null) - { - item.Folder = trashFolder.ID; - - userInfo.DeleteItem(inventoryEntityID); - - scene.AddInventoryItem(client, item); - } - else - { - folder = userInfo.RootFolder.FindFolder(inventoryEntityID); - - if (folder != null & trashFolder != null) - { - userInfo.MoveFolder(inventoryEntityID, trashFolder.ID); - } - } - - if ((null == item && null == folder) | null == trashFolder) - { - string reason = String.Empty; - - if (trashFolder == null) - reason += " Trash folder not found."; - if (item == null) - reason += " Item not found."; - if (folder == null) - reason += " Folder not found."; - - client.SendAgentAlertMessage("Unable to delete "+ - "received inventory" + reason, false); - } - } - - ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); - - if (user != null) // Local - { - user.ControllingClient.SendInstantMessage( - new UUID(im.fromAgentID), im.message, - new UUID(im.toAgentID), - im.fromAgentName, im.dialog, im.timestamp, - UUID.Zero, false, im.binaryBucket); - } - else - { - if (m_TransferModule != null) - m_TransferModule.SendInstantMessage(im, delegate(bool success) {} ); - } - } - } - - public void SetRootAgentScene(UUID agentID, Scene scene) - { - m_AgentRegions[agentID] = scene; - } - - public bool NeedSceneCacheClear(UUID agentID, Scene scene) - { - if (!m_AgentRegions.ContainsKey(agentID)) - { - // Since we can get here two ways, we need to scan - // the scenes here. This is somewhat more expensive - // but helps avoid a nasty bug - // - - foreach (Scene s in m_Scenelist) - { - ScenePresence presence; - - if (s.TryGetAvatar(agentID, out presence)) - { - // If the agent is in this scene, then we - // are being called twice in a single - // teleport. This is wasteful of cycles - // but harmless due to this 2nd level check - // - // If the agent is found in another scene - // then the list wasn't current - // - // If the agent is totally unknown, then what - // are we even doing here?? - // - if (s == scene) - { - //m_log.Debug("[INVTRANSFERMOD]: s == scene. Returning true in " + scene.RegionInfo.RegionName); - return true; - } - else - { - //m_log.Debug("[INVTRANSFERMOD]: s != scene. Returning false in " + scene.RegionInfo.RegionName); - return false; - } - } - } - //m_log.Debug("[INVTRANSFERMOD]: agent not in scene. Returning true in " + scene.RegionInfo.RegionName); - return true; - } - - // The agent is left in current Scene, so we must be - // going to another instance - // - if (m_AgentRegions[agentID] == scene) - { - //m_log.Debug("[INVTRANSFERMOD]: m_AgentRegions[agentID] == scene. Returning true in " + scene.RegionInfo.RegionName); - m_AgentRegions.Remove(agentID); - return true; - } - - // Another region has claimed the agent - // - //m_log.Debug("[INVTRANSFERMOD]: last resort. Returning false in " + scene.RegionInfo.RegionName); - return false; - } - - public void ClientLoggedOut(UUID agentID) - { - if (m_AgentRegions.ContainsKey(agentID)) - m_AgentRegions.Remove(agentID); - } - } -} -- cgit v1.1