From 5d099182c3ef563c112a22f2cda5c721214964b7 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 11 Jun 2010 13:14:07 -0700 Subject: [PATCH 01/14] Reinstated the check on im.binaryBucket.Length, this time on the local handler for inventory offers. --- .../Avatar/Inventory/Transfer/InventoryTransferModule.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index c3338120a4..2f1e9dd74e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs @@ -154,17 +154,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer private void OnInstantMessage(IClientAPI client, GridInstantMessage im) { m_log.InfoFormat("[INVENTORY TRANSFER]: OnInstantMessage {0}", im.dialog); + 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])); + if (im.binaryBucket.Length < 17) // Invalid + return; + UUID receipientID = new UUID(im.toAgentID); ScenePresence user = scene.GetScenePresence(receipientID); UUID copyID; @@ -420,8 +423,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer { // Check if this is ours to handle // - m_log.Info("OnGridInstantMessage"); - Scene scene = FindClientScene(new UUID(msg.toAgentID)); if (scene == null) From 1a16a92a62069a50efd618b8fd6cbc0d530c7654 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 11 Jun 2010 21:18:09 +0100 Subject: [PATCH 02/14] create inactive test for iar folders/items merged with existing paths add various helper functions for simplifying test readability --- .../Archiver/InventoryArchiveReadRequest.cs | 34 ------------- .../Archiver/Tests/InventoryArchiverTests.cs | 50 ++++++++++++++++++- OpenSim/Tests/Common/Setup/AssetHelpers.cs | 50 +++++++++++++------ .../Common/Setup/UserInventoryTestUtils.cs | 18 +++++++ 4 files changed, 102 insertions(+), 50 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 60d1720ba7..b4f1ed6205 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs @@ -219,40 +219,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver CreateFoldersForPath(destFolder, archivePathSectionToCreate, resolvedFolders, loadedNodes); return destFolder; - - /* - string[] rawFolders = filePath.Split(new char[] { '/' }); - - // Find the folders that do exist along the path given - int i = 0; - bool noFolder = false; - InventoryFolderImpl foundFolder = rootDestinationFolder; - while (!noFolder && i < rawFolders.Length) - { - InventoryFolderImpl folder = foundFolder.FindFolderByPath(rawFolders[i]); - if (null != folder) - { - m_log.DebugFormat("[INVENTORY ARCHIVER]: Found folder {0}", folder.Name); - foundFolder = folder; - i++; - } - else - { - noFolder = true; - } - } - - // Create any folders that did not previously exist - while (i < rawFolders.Length) - { - m_log.DebugFormat("[INVENTORY ARCHIVER]: Creating folder {0}", rawFolders[i]); - - UUID newFolderId = UUID.Random(); - m_userInfo.CreateFolder( - rawFolders[i++], newFolderId, (ushort)AssetType.Folder, foundFolder.ID); - foundFolder = foundFolder.GetChildFolder(newFolderId); - } - */ } /// diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index 59cd386c0c..00bd27aaba 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs @@ -279,7 +279,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests public void TestIarV0_1WithEscapedChars() { TestHelper.InMethod(); - log4net.Config.XmlConfigurator.Configure(); +// log4net.Config.XmlConfigurator.Configure(); string itemName = "You & you are a mean/man/"; string humanEscapedItemName = @"You & you are a mean\/man\/"; @@ -505,7 +505,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests /// Test replication of an archive path to the user's inventory. /// [Test] - public void TestReplicateArchivePathToUserInventory() + public void TestNewIarPath() { TestHelper.InMethod(); //log4net.Config.XmlConfigurator.Configure(); @@ -540,5 +540,51 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b"); Assert.That(folder2, Is.Not.Null, "Could not find folder b"); } + + /// + /// Test replication of a partly existing archive path to the user's inventory. + /// + [Test] + public void TestPartExistingIarPath() + { + TestHelper.InMethod(); + //log4net.Config.XmlConfigurator.Configure(); + + Scene scene = SceneSetupHelpers.SetupScene("inventory"); + UserAccount ua1 = UserProfileTestUtils.CreateUserWithInventory(scene); + + string folder1ExistingName = "a"; + string folder2Name = "b"; + string itemName = "c.lsl"; + + InventoryFolderBase folder1 + = UserInventoryTestUtils.CreateInventoryFolder( + scene.InventoryService, ua1.PrincipalID, folder1ExistingName); + + string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); + string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); + string itemArchiveName = InventoryArchiveWriteRequest.CreateArchiveItemName(itemName, UUID.Random()); + + string itemArchivePath + = string.Format( + "{0}{1}{2}{3}", + ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName); + + new InventoryArchiveReadRequest(scene, ua1, null, (Stream)null) + .ReplicateArchivePathToUserInventory( + itemArchivePath, scene.InventoryService.GetRootFolder(ua1.PrincipalID), + new Dictionary(), new List()); + + InventoryFolderBase folder1Post + = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); + Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID)); + /* + InventoryFolderBase folder2 + = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); + Assert.That(folder2, Is.Not.Null); + InventoryItemBase item = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, folder2, itemName); + Assert.That(item, Is.Not.Null); + */ + } } } \ No newline at end of file diff --git a/OpenSim/Tests/Common/Setup/AssetHelpers.cs b/OpenSim/Tests/Common/Setup/AssetHelpers.cs index 6dc993f069..f9a80b05b2 100644 --- a/OpenSim/Tests/Common/Setup/AssetHelpers.cs +++ b/OpenSim/Tests/Common/Setup/AssetHelpers.cs @@ -36,25 +36,29 @@ namespace OpenSim.Tests.Common public class AssetHelpers { /// - /// Create an asset from the given data + /// Create a notecard asset with a random uuid and dummy text. /// - public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, byte[] data, UUID creatorID) + /// /param> + /// + public static AssetBase CreateAsset(UUID creatorId) { - AssetBase asset = new AssetBase(assetUuid, assetUuid.ToString(), (sbyte)assetType, creatorID.ToString()); - asset.Data = data; - return asset; - } - - /// - /// Create an asset from the given data - /// - public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, string data, UUID creatorID) - { - return CreateAsset(assetUuid, assetType, Encoding.ASCII.GetBytes(data), creatorID); + return CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId); } /// - /// Create an asset from the given scene object + /// Create and store a notecard asset with a random uuid and dummy text. + /// + /// /param> + /// + public static AssetBase CreateAsset(Scene scene, UUID creatorId) + { + AssetBase asset = CreateAsset(UUID.Random(), AssetType.Notecard, "hello", creatorId); + scene.AssetService.Store(asset); + return asset; + } + + /// + /// Create an asset from the given scene object. /// /// /// @@ -67,5 +71,23 @@ namespace OpenSim.Tests.Common Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(sog)), sog.OwnerID); } + + /// + /// Create an asset from the given data. + /// + public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, string data, UUID creatorID) + { + return CreateAsset(assetUuid, assetType, Encoding.ASCII.GetBytes(data), creatorID); + } + + /// + /// Create an asset from the given data. + /// + public static AssetBase CreateAsset(UUID assetUuid, AssetType assetType, byte[] data, UUID creatorID) + { + AssetBase asset = new AssetBase(assetUuid, assetUuid.ToString(), (sbyte)assetType, creatorID.ToString()); + asset.Data = data; + return asset; + } } } diff --git a/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs b/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs index 7e0c5672df..c57363aa94 100644 --- a/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs +++ b/OpenSim/Tests/Common/Setup/UserInventoryTestUtils.cs @@ -28,6 +28,7 @@ using System; using OpenMetaverse; using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; using OpenSim.Services.Interfaces; namespace OpenSim.Tests.Common @@ -39,6 +40,23 @@ namespace OpenSim.Tests.Common { public static readonly string PATH_DELIMITER = "/"; + public static InventoryItemBase CreateInventoryItem( + Scene scene, string itemName, UUID itemId, string folderPath, UUID userId) + { + InventoryItemBase item = new InventoryItemBase(); + item.Name = itemName; + item.AssetID = AssetHelpers.CreateAsset(scene, userId).FullID; + item.ID = itemId; + + // Really quite bad since the objs folder could be moved in the future and confuse the tests + InventoryFolderBase objsFolder = scene.InventoryService.GetFolderForType(userId, AssetType.Object); + + item.Folder = objsFolder.ID; + scene.AddInventoryItem(userId, item); + + return item; + } + /// /// Create inventory folders starting from the user's root folder. /// From 3525195bc9b5fdfd9799411edd452981ef1f4ebd Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 11 Jun 2010 21:52:43 +0100 Subject: [PATCH 03/14] Allow IInventoryService.GetFolder(folderId, userId) as well as GetFolder(InventoryFolderBase folder) This involves no wire changes since the methods often just construct an InventoryFolderBase under the hood. This is in line with other methods that alraedy allow requests via uuid --- .../Archiver/Tests/InventoryArchiverTests.cs | 4 ++-- .../Framework/Library/LocalInventoryService.cs | 6 ++++-- .../Inventory/BaseInventoryConnector.cs | 2 ++ .../Inventory/HGInventoryBroker.cs | 15 ++++++++++----- .../Inventory/LocalInventoryServiceConnector.cs | 5 +++++ .../RemoteInventoryServiceConnector.cs | 5 +++++ .../RemoteXInventoryServiceConnector.cs | 17 +++++++++++------ .../QuickAndDirtyInventoryServiceConnector.cs | 5 +++++ .../Connectors/Inventory/XInventoryConnector.cs | 5 +++++ .../SimianInventoryServiceConnector.cs | 7 ++++++- .../Services/Interfaces/IInventoryService.cs | 8 ++++++++ .../InventoryService/InventoryService.cs | 17 +++++++++++------ .../InventoryService/XInventoryService.cs | 5 +++++ .../Tests/Common/Mock/MockInventoryService.cs | 5 +++++ 14 files changed, 84 insertions(+), 22 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index 00bd27aaba..d003d2d013 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs @@ -575,9 +575,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests itemArchivePath, scene.InventoryService.GetRootFolder(ua1.PrincipalID), new Dictionary(), new List()); - InventoryFolderBase folder1Post - = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); + InventoryFolderBase folder1Post = scene.InventoryService.GetFolder(folder1.ID, ua1.PrincipalID); Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID)); + /* InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); diff --git a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs index 49589fd3c0..112ccd8dc5 100644 --- a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs +++ b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -229,12 +229,14 @@ namespace OpenSim.Region.CoreModules.Framework.Library /// public InventoryItemBase GetItem(InventoryItemBase item) { return null; } + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) { return null; } + /// /// Get a folder, given by its UUID /// /// /// - public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } /// /// Does the given user have an inventory structure? diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index 1e51187900..5b13d58f5f 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs @@ -205,6 +205,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public abstract InventoryItemBase GetItem(InventoryItemBase item); + public abstract InventoryFolderBase GetFolder(UUID folderId, UUID userId); + public abstract InventoryFolderBase GetFolder(InventoryFolderBase folder); /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index e09db154aa..fc30347d0b 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -470,7 +470,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector.DeleteItems(ownerID, itemIDs); } - public InventoryItemBase GetItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { if (item == null) return null; @@ -486,7 +486,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector.GetItem(item); } - public InventoryFolderBase GetFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } + + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { if (folder == null) return null; @@ -503,12 +508,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector.GetFolder(folder); } - public bool HasInventoryForUser(UUID userID) + public bool HasInventoryForUser(UUID userID) { return false; } - public List GetActiveGestures(UUID userId) + public List GetActiveGestures(UUID userId) { return new List(); } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index 22bd04cd65..76be79148b 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -267,6 +267,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return item; } + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return m_InventoryService.GetFolder(folder); diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index aa3b30d55e..6d43280d29 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -307,6 +307,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID); } + public override InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } + public override InventoryFolderBase GetFolder(InventoryFolderBase folder) { if (folder == null) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index 277060d2aa..b1e21a151b 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs @@ -250,7 +250,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } - public bool DeleteItems(UUID ownerID, List itemIDs) + public bool DeleteItems(UUID ownerID, List itemIDs) { if (itemIDs == null) return false; @@ -260,7 +260,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.DeleteItems(ownerID, itemIDs); } - public InventoryItemBase GetItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID); if (item == null) @@ -271,7 +271,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.GetItem(item); } - public InventoryFolderBase GetFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } + + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID); if (folder == null) @@ -280,17 +285,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.GetFolder(folder); } - public bool HasInventoryForUser(UUID userID) + public bool HasInventoryForUser(UUID userID) { return false; } - public List GetActiveGestures(UUID userId) + public List GetActiveGestures(UUID userId) { return new List(); } - public int GetAssetPermissions(UUID userID, UUID assetID) + public int GetAssetPermissions(UUID userID, UUID assetID) { return m_RemoteConnector.GetAssetPermissions(userID, assetID); } diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index a7aa1382c4..5a23687288 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs @@ -171,6 +171,11 @@ namespace OpenSim.Services.Connectors { return null; } + + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return null; + } public InventoryFolderBase GetFolder(InventoryFolderBase folder) { diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs index e25e7ebd3c..e7acb59d5f 100644 --- a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs @@ -431,6 +431,11 @@ namespace OpenSim.Services.Connectors return null; } + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { try diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index dc68259d93..6bf43d5fa9 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -314,6 +314,11 @@ namespace OpenSim.Services.Connectors.SimianGrid m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + item.ID + " owned by " + item.Owner + " not found"); return null; } + + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } /// /// Get a folder, given by its UUID diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index 1b78fb3912..b0ffd8fb5f 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -169,6 +169,14 @@ namespace OpenSim.Services.Interfaces /// InventoryItemBase GetItem(InventoryItemBase item); + /// + /// Get a folder. + /// + /// + /// + /// + InventoryFolderBase GetFolder(UUID folderId, UUID userId); + /// /// Get a folder, given by its UUID /// diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index fbcd6634e7..9f1c4a4f93 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -439,15 +439,20 @@ namespace OpenSim.Services.InventoryService m_log.DebugFormat("[INVENTORY SERVICE]: GetItem failed to find item {0}", item.ID); return null; } - - public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) - { - InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID); + + public virtual InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + InventoryFolderBase result = m_Database.getInventoryFolder(folderId); if (result != null) return result; - m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folder.ID); - return null; + m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folderId); + return null; + } + + public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) + { + return GetFolder(folder.ID, folder.Owner); } public virtual bool DeleteFolders(UUID ownerID, List folderIDs) diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index af831fdf94..00aadc5460 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -368,6 +368,11 @@ namespace OpenSim.Services.InventoryService return ConvertToOpenSim(items[0]); } + + public virtual InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return GetFolder(new InventoryFolderBase(folderId, userId)); + } public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) { diff --git a/OpenSim/Tests/Common/Mock/MockInventoryService.cs b/OpenSim/Tests/Common/Mock/MockInventoryService.cs index 1ea4bc1059..fc27487ea0 100644 --- a/OpenSim/Tests/Common/Mock/MockInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/MockInventoryService.cs @@ -162,6 +162,11 @@ namespace OpenSim.Tests.Common.Mock { return null; } + + public InventoryFolderBase GetFolder(UUID folderId, UUID userId) + { + return null; + } public InventoryFolderBase GetFolder(InventoryFolderBase folder) { From 694c8ab588b1d9a94c1cdba5e05ef4e0492f0354 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 11 Jun 2010 22:08:43 +0100 Subject: [PATCH 04/14] Remove the lastmap stuff from the map module, also remove a bunch of comments that no longer reflect actual conditions --- .../World/WorldMap/WorldMapModule.cs | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index c6fb18d8f3..0e849e542c 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs @@ -1002,41 +1002,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap public void RegenerateMaptile(byte[] data) { - // Overwrites the local Asset cache with new maptile data - // Assets are single write, this causes the asset server to ignore this update, - // but the local asset cache does not - - // this is on purpose! The net result of this is the region always has the most up to date - // map tile while protecting the (grid) asset database from bloat caused by a new asset each - // time a mapimage is generated! - UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID; - int lastMapRefresh = 0; - int twoDays = 172800; -// int RefreshSeconds = twoDays; - - try - { - lastMapRefresh = Convert.ToInt32(m_scene.RegionInfo.lastMapRefresh); - } - catch (ArgumentException) - { - } - catch (FormatException) - { - } - catch (OverflowException) - { - } - m_log.Debug("[MAPTILE]: STORING MAPTILE IMAGE"); m_scene.RegionInfo.RegionSettings.TerrainImageID = UUID.Random(); AssetBase asset = new AssetBase( m_scene.RegionInfo.RegionSettings.TerrainImageID, - "terrainImage_" + m_scene.RegionInfo.RegionID.ToString() + "_" + lastMapRefresh.ToString(), + "terrainImage_" + m_scene.RegionInfo.RegionID.ToString(), (sbyte)AssetType.Texture, m_scene.RegionInfo.RegionID.ToString()); asset.Data = data; From 0dce4f1997c57cbdf6bc1f322182c318d3838e40 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 11 Jun 2010 22:11:33 +0100 Subject: [PATCH 05/14] Revert "Allow IInventoryService.GetFolder(folderId, userId) as well as GetFolder(InventoryFolderBase folder)" This reverts commit 3525195bc9b5fdfd9799411edd452981ef1f4ebd. --- .../Archiver/Tests/InventoryArchiverTests.cs | 4 ++-- .../Framework/Library/LocalInventoryService.cs | 6 ++---- .../Inventory/BaseInventoryConnector.cs | 2 -- .../Inventory/HGInventoryBroker.cs | 15 +++++---------- .../Inventory/LocalInventoryServiceConnector.cs | 5 ----- .../RemoteInventoryServiceConnector.cs | 5 ----- .../RemoteXInventoryServiceConnector.cs | 17 ++++++----------- .../QuickAndDirtyInventoryServiceConnector.cs | 5 ----- .../Connectors/Inventory/XInventoryConnector.cs | 5 ----- .../SimianInventoryServiceConnector.cs | 7 +------ .../Services/Interfaces/IInventoryService.cs | 8 -------- .../InventoryService/InventoryService.cs | 17 ++++++----------- .../InventoryService/XInventoryService.cs | 5 ----- .../Tests/Common/Mock/MockInventoryService.cs | 5 ----- 14 files changed, 22 insertions(+), 84 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index d003d2d013..00bd27aaba 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs @@ -575,9 +575,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests itemArchivePath, scene.InventoryService.GetRootFolder(ua1.PrincipalID), new Dictionary(), new List()); - InventoryFolderBase folder1Post = scene.InventoryService.GetFolder(folder1.ID, ua1.PrincipalID); + InventoryFolderBase folder1Post + = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID)); - /* InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); diff --git a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs index 112ccd8dc5..49589fd3c0 100644 --- a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs +++ b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -229,14 +229,12 @@ namespace OpenSim.Region.CoreModules.Framework.Library /// public InventoryItemBase GetItem(InventoryItemBase item) { return null; } - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) { return null; } - /// /// Get a folder, given by its UUID /// /// /// - public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } /// /// Does the given user have an inventory structure? diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index 5b13d58f5f..1e51187900 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs @@ -205,8 +205,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public abstract InventoryItemBase GetItem(InventoryItemBase item); - public abstract InventoryFolderBase GetFolder(UUID folderId, UUID userId); - public abstract InventoryFolderBase GetFolder(InventoryFolderBase folder); /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index fc30347d0b..e09db154aa 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -470,7 +470,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector.DeleteItems(ownerID, itemIDs); } - public InventoryItemBase GetItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { if (item == null) return null; @@ -486,12 +486,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector.GetItem(item); } - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } - - public InventoryFolderBase GetFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { if (folder == null) return null; @@ -508,12 +503,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return connector.GetFolder(folder); } - public bool HasInventoryForUser(UUID userID) + public bool HasInventoryForUser(UUID userID) { return false; } - public List GetActiveGestures(UUID userId) + public List GetActiveGestures(UUID userId) { return new List(); } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index 76be79148b..22bd04cd65 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -267,11 +267,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return item; } - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } - public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return m_InventoryService.GetFolder(folder); diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 6d43280d29..aa3b30d55e 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -307,11 +307,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID); } - public override InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } - public override InventoryFolderBase GetFolder(InventoryFolderBase folder) { if (folder == null) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index b1e21a151b..277060d2aa 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs @@ -250,7 +250,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } - public bool DeleteItems(UUID ownerID, List itemIDs) + public bool DeleteItems(UUID ownerID, List itemIDs) { if (itemIDs == null) return false; @@ -260,7 +260,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.DeleteItems(ownerID, itemIDs); } - public InventoryItemBase GetItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID); if (item == null) @@ -271,12 +271,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.GetItem(item); } - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } - - public InventoryFolderBase GetFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID); if (folder == null) @@ -285,17 +280,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.GetFolder(folder); } - public bool HasInventoryForUser(UUID userID) + public bool HasInventoryForUser(UUID userID) { return false; } - public List GetActiveGestures(UUID userId) + public List GetActiveGestures(UUID userId) { return new List(); } - public int GetAssetPermissions(UUID userID, UUID assetID) + public int GetAssetPermissions(UUID userID, UUID assetID) { return m_RemoteConnector.GetAssetPermissions(userID, assetID); } diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index 5a23687288..a7aa1382c4 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs @@ -171,11 +171,6 @@ namespace OpenSim.Services.Connectors { return null; } - - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return null; - } public InventoryFolderBase GetFolder(InventoryFolderBase folder) { diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs index e7acb59d5f..e25e7ebd3c 100644 --- a/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/XInventoryConnector.cs @@ -431,11 +431,6 @@ namespace OpenSim.Services.Connectors return null; } - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } - public InventoryFolderBase GetFolder(InventoryFolderBase folder) { try diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index 6bf43d5fa9..dc68259d93 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -314,11 +314,6 @@ namespace OpenSim.Services.Connectors.SimianGrid m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + item.ID + " owned by " + item.Owner + " not found"); return null; } - - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } /// /// Get a folder, given by its UUID diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index b0ffd8fb5f..1b78fb3912 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -169,14 +169,6 @@ namespace OpenSim.Services.Interfaces /// InventoryItemBase GetItem(InventoryItemBase item); - /// - /// Get a folder. - /// - /// - /// - /// - InventoryFolderBase GetFolder(UUID folderId, UUID userId); - /// /// Get a folder, given by its UUID /// diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 9f1c4a4f93..fbcd6634e7 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -439,20 +439,15 @@ namespace OpenSim.Services.InventoryService m_log.DebugFormat("[INVENTORY SERVICE]: GetItem failed to find item {0}", item.ID); return null; } - - public virtual InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - InventoryFolderBase result = m_Database.getInventoryFolder(folderId); - if (result != null) - return result; - - m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folderId); - return null; - } public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) { - return GetFolder(folder.ID, folder.Owner); + InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID); + if (result != null) + return result; + + m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folder.ID); + return null; } public virtual bool DeleteFolders(UUID ownerID, List folderIDs) diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index 00aadc5460..af831fdf94 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -368,11 +368,6 @@ namespace OpenSim.Services.InventoryService return ConvertToOpenSim(items[0]); } - - public virtual InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return GetFolder(new InventoryFolderBase(folderId, userId)); - } public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) { diff --git a/OpenSim/Tests/Common/Mock/MockInventoryService.cs b/OpenSim/Tests/Common/Mock/MockInventoryService.cs index fc27487ea0..1ea4bc1059 100644 --- a/OpenSim/Tests/Common/Mock/MockInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/MockInventoryService.cs @@ -162,11 +162,6 @@ namespace OpenSim.Tests.Common.Mock { return null; } - - public InventoryFolderBase GetFolder(UUID folderId, UUID userId) - { - return null; - } public InventoryFolderBase GetFolder(InventoryFolderBase folder) { From d1a324888be2a0db247999928dff12d0bb62cddd Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 11 Jun 2010 15:37:25 -0700 Subject: [PATCH 06/14] * Added a new method to IMapImageGenerator for getting the map tile before it is JPEG2000 compressed * Aesthetically improved map tile water * SimianGrid connector now uploads a PNG tile to the AddMapTile API --- .../World/WorldMap/MapImageModule.cs | 54 ++++++------ .../World/WorldMap/ShadedMapTileRenderer.cs | 5 +- .../World/WorldMap/TexturedMapTileRenderer.cs | 5 +- .../Region/Framework/Interfaces/ITerrain.cs | 1 + .../SimianGrid/SimianGridServiceConnector.cs | 84 ++++++++++++++++++- 5 files changed, 116 insertions(+), 33 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs index b71b5f61a5..b96d95a09c 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs @@ -70,10 +70,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap #region IMapImageGenerator Members - public byte[] WriteJpeg2000Image(string gradientmap) + public Bitmap CreateMapTile(string gradientmap) { - byte[] imageData = null; - bool drawPrimVolume = true; bool textureTerrain = false; @@ -98,32 +96,36 @@ namespace OpenSim.Region.CoreModules.World.WorldMap } terrainRenderer.Initialise(m_scene, m_config); - using (Bitmap mapbmp = new Bitmap((int)Constants.RegionSize, (int)Constants.RegionSize)) + Bitmap mapbmp = new Bitmap((int)Constants.RegionSize, (int)Constants.RegionSize, System.Drawing.Imaging.PixelFormat.Format24bppRgb); + //long t = System.Environment.TickCount; + //for (int i = 0; i < 10; ++i) { + terrainRenderer.TerrainToBitmap(mapbmp); + //} + //t = System.Environment.TickCount - t; + //m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t); + + + if (drawPrimVolume) { - //long t = System.Environment.TickCount; - //for (int i = 0; i < 10; ++i) { - terrainRenderer.TerrainToBitmap(mapbmp); - //} - //t = System.Environment.TickCount - t; - //m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t); - - - if (drawPrimVolume) - { - DrawObjectVolume(m_scene, mapbmp); - } - - try - { - imageData = OpenJPEG.EncodeFromImage(mapbmp, true); - } - catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke - { - m_log.Error("Failed generating terrain map: " + e); - } + DrawObjectVolume(m_scene, mapbmp); } - return imageData; + return mapbmp; + } + + public byte[] WriteJpeg2000Image(string gradientmap) + { + try + { + using (Bitmap mapbmp = CreateMapTile(gradientmap)) + return OpenJPEG.EncodeFromImage(mapbmp, true); + } + catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke + { + m_log.Error("Failed generating terrain map: " + e); + } + + return null; } #endregion diff --git a/OpenSim/Region/CoreModules/World/WorldMap/ShadedMapTileRenderer.cs b/OpenSim/Region/CoreModules/World/WorldMap/ShadedMapTileRenderer.cs index a297cf310b..fef2ef3995 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/ShadedMapTileRenderer.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/ShadedMapTileRenderer.cs @@ -37,6 +37,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap { public class ShadedMapTileRenderer : IMapTileTerrainRenderer { + private static readonly Color WATER_COLOR = Color.FromArgb(29, 71, 95); + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -221,8 +223,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap try { - Color water = Color.FromArgb((int)heightvalue, (int)heightvalue, 255); - mapbmp.SetPixel(x, yr, water); + mapbmp.SetPixel(x, yr, WATER_COLOR); } catch (ArgumentException) { diff --git a/OpenSim/Region/CoreModules/World/WorldMap/TexturedMapTileRenderer.cs b/OpenSim/Region/CoreModules/World/WorldMap/TexturedMapTileRenderer.cs index 4ecad74316..8b34f6ebdc 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/TexturedMapTileRenderer.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/TexturedMapTileRenderer.cs @@ -136,6 +136,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap private static readonly UUID defaultTerrainTexture4 = new UUID("53a2f406-4895-1d13-d541-d2e3b86bc19c"); private static readonly Color defaultColor4 = Color.FromArgb(200, 200, 200); + private static readonly Color WATER_COLOR = Color.FromArgb(29, 71, 95); + #endregion @@ -406,8 +408,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap heightvalue = 100f - (heightvalue * 100f) / 19f; // 0 - 19 => 100 - 0 - Color water = Color.FromArgb((int)heightvalue, (int)heightvalue, 255); - mapbmp.SetPixel(x, yr, water); + mapbmp.SetPixel(x, yr, WATER_COLOR); } } } diff --git a/OpenSim/Region/Framework/Interfaces/ITerrain.cs b/OpenSim/Region/Framework/Interfaces/ITerrain.cs index f5662cbcf6..b42e872e6f 100644 --- a/OpenSim/Region/Framework/Interfaces/ITerrain.cs +++ b/OpenSim/Region/Framework/Interfaces/ITerrain.cs @@ -73,6 +73,7 @@ namespace OpenSim.Region.Framework.Interfaces public interface IMapImageGenerator { + System.Drawing.Bitmap CreateMapTile(string gradientmap); byte[] WriteJpeg2000Image(string gradientmap); } } diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs index 3a612267c5..cc8080f0a6 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs @@ -28,17 +28,18 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; using System.Net; using System.Reflection; using log4net; using Mono.Addins; using Nini.Config; using OpenSim.Framework; -using OpenSim.Framework.Servers.HttpServer; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Services.Interfaces; -using OpenSim.Server.Base; using OpenMetaverse; using OpenMetaverse.StructuredData; @@ -62,7 +63,7 @@ namespace OpenSim.Services.Connectors.SimianGrid #region ISharedRegionModule public Type ReplaceableInterface { get { return null; } } - public void RegionLoaded(Scene scene) { } + public void RegionLoaded(Scene scene) { UploadMapTile(scene); } public void PostInitialise() { } public void Close() { } @@ -356,6 +357,83 @@ namespace OpenSim.Services.Connectors.SimianGrid #endregion IGridService + private void UploadMapTile(IScene scene) + { + string errorMessage = null; + + // Create a PNG map tile and upload it to the AddMapTile API + byte[] pngData = Utils.EmptyBytes; + IMapImageGenerator tileGenerator = scene.RequestModuleInterface(); + if (tileGenerator == null) + { + m_log.Warn("[SIMIAN GRID CONNECTOR]: Cannot upload PNG map tile without an IMapImageGenerator"); + return; + } + + using (Image mapTile = tileGenerator.CreateMapTile("defaultstripe.png")) + { + using (MemoryStream stream = new MemoryStream()) + { + mapTile.Save(stream, ImageFormat.Png); + pngData = stream.ToArray(); + } + } + + List postParameters = new List() + { + new MultipartForm.Parameter("X", scene.RegionInfo.RegionLocX.ToString()), + new MultipartForm.Parameter("Y", scene.RegionInfo.RegionLocY.ToString()), + new MultipartForm.File("Tile", "tile.png", "image/png", pngData) + }; + + // Make the remote storage request + try + { + HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(m_serverUrl); + + HttpWebResponse response = MultipartForm.Post(request, postParameters); + using (Stream responseStream = response.GetResponseStream()) + { + string responseStr = null; + + try + { + responseStr = responseStream.GetStreamString(); + OSD responseOSD = OSDParser.Deserialize(responseStr); + if (responseOSD.Type == OSDType.Map) + { + OSDMap responseMap = (OSDMap)responseOSD; + if (responseMap["Success"].AsBoolean()) + m_log.Info("[SIMIAN GRID CONNECTOR]: Uploaded " + pngData.Length + " byte PNG map tile to AddMapTile"); + else + errorMessage = "Upload failed: " + responseMap["Message"].AsString(); + } + else + { + errorMessage = "Response format was invalid:\n" + responseStr; + } + } + catch (Exception ex) + { + if (!String.IsNullOrEmpty(responseStr)) + errorMessage = "Failed to parse the response:\n" + responseStr; + else + errorMessage = "Failed to retrieve the response: " + ex.Message; + } + } + } + catch (WebException ex) + { + errorMessage = ex.Message; + } + + if (!String.IsNullOrEmpty(errorMessage)) + { + m_log.WarnFormat("[SIMIAN GRID CONNECTOR]: Failed to store {0} byte PNG map tile for {1}: {2}", + pngData.Length, scene.RegionInfo.RegionName, errorMessage); + } + } + private GridRegion GetNearestRegion(Vector3d position, bool onlyEnabled) { NameValueCollection requestArgs = new NameValueCollection From ed38b4a140d8a7d184ede1b53b97180505928270 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 12 Jun 2010 00:32:54 +0100 Subject: [PATCH 07/14] Some people don't use Simian. Make the connector respect that it's disabled and not try to send a map tile in that case. --- .../Connectors/SimianGrid/SimianGridServiceConnector.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs index cc8080f0a6..db9027a17a 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs @@ -63,7 +63,7 @@ namespace OpenSim.Services.Connectors.SimianGrid #region ISharedRegionModule public Type ReplaceableInterface { get { return null; } } - public void RegionLoaded(Scene scene) { UploadMapTile(scene); } + public void RegionLoaded(Scene scene) { if (!String.IsNullOrEmpty(m_serverUrl)) { UploadMapTile(scene); } } public void PostInitialise() { } public void Close() { } From c8ed9724437d9bf1972d4ef3e2b10dd9fa3e7e70 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 12 Jun 2010 01:25:25 +0100 Subject: [PATCH 08/14] Move "StopFlying()" into LLSpace. Try to reinstate the carefully crafted packet we used to send before slimupdates and explicitly send it --- .../Client/MXP/ClientStack/MXPClientView.cs | 4 ++ .../ClientStack/SirikataClientView.cs | 4 ++ .../VWoHTTP/ClientStack/VWHClientView.cs | 4 ++ OpenSim/Framework/IClientAPI.cs | 2 + .../ClientStack/LindenUDP/LLClientView.cs | 40 +++++++++++++++++++ .../Examples/SimpleModule/MyNpcCharacter.cs | 4 ++ .../Region/Framework/Scenes/ScenePresence.cs | 20 +--------- .../Server/IRCClientView.cs | 4 ++ .../OptionalModules/World/NPC/NPCAvatar.cs | 4 ++ OpenSim/Tests/Common/Mock/TestClient.cs | 4 ++ 10 files changed, 71 insertions(+), 19 deletions(-) diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs index d742039115..fa1f0d8614 100644 --- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs +++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs @@ -1711,5 +1711,9 @@ namespace OpenSim.Client.MXP.ClientStack public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) { } + + public void StopFlying(ISceneEntity presence) + { + } } } diff --git a/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs b/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs index d725943197..cf7aaf2313 100644 --- a/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs +++ b/OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs @@ -1199,6 +1199,10 @@ namespace OpenSim.Client.Sirikata.ClientStack { } + public void StopFlying(ISceneEntity presence) + { + } + #endregion } } diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs index 2eec844b9d..ab23484454 100644 --- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs +++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs @@ -1214,5 +1214,9 @@ namespace OpenSim.Client.VWoHTTP.ClientStack public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) { } + + public void StopFlying(ISceneEntity presence) + { + } } } diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index c1333fc285..556a53260b 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -1308,5 +1308,7 @@ namespace OpenSim.Framework void SendChangeUserRights(UUID agentID, UUID friendID, int rights); void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId); + + void StopFlying(ISceneEntity presence); } } diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index fc5bb28398..85a313314d 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -11843,5 +11843,45 @@ namespace OpenSim.Region.ClientStack.LindenUDP dialog.Buttons = buttons; OutPacket(dialog, ThrottleOutPacketType.Task); } + + public void StopFlying(ISceneEntity p) + { + ScenePresence presence = p as ScenePresence; + // It turns out to get the agent to stop flying, you have to feed it stop flying velocities + // There's no explicit message to send the client to tell it to stop flying.. it relies on the + // velocity, collision plane and avatar height + + // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air + // when the avatar stands up + + Vector3 pos = presence.AbsolutePosition; + + if (presence.Appearance.AvatarHeight != 127.0f) + pos += new Vector3(0f, 0f, (presence.Appearance.AvatarHeight / 6f)); + else + pos += new Vector3(0f, 0f, (1.56f / 6f)); + + presence.AbsolutePosition = pos; + + ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = + CreateImprovedTerseBlock(p, false); + + const float TIME_DILATION = 1.0f; + ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); + + + ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); + packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; + packet.RegionData.TimeDilation = timeDilation; + packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; + + packet.ObjectData[0] = block; + + OutPacket(packet, ThrottleOutPacketType.Task, true); + + //ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, + // AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient))); + + } } } diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 2681d4fcf3..af9df45bf7 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -1155,5 +1155,9 @@ namespace OpenSim.Region.Examples.SimpleModule public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) { } + + public void StopFlying(ISceneEntity presence) + { + } } } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 15b9446c91..c1e835e85a 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1015,25 +1015,7 @@ namespace OpenSim.Region.Framework.Scenes public void StopFlying() { - // It turns out to get the agent to stop flying, you have to feed it stop flying velocities - // There's no explicit message to send the client to tell it to stop flying.. it relies on the - // velocity, collision plane and avatar height - - // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air - // when the avatar stands up - - if (m_avHeight != 127.0f) - { - AbsolutePosition = AbsolutePosition + new Vector3(0f, 0f, (m_avHeight / 6f)); - } - else - { - AbsolutePosition = AbsolutePosition + new Vector3(0f, 0f, (1.56f / 6f)); - } - - ControllingClient.SendPrimUpdate(this, PrimUpdateFlags.Position); - //ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, - // AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient))); + ControllingClient.StopFlying(this); } public void AddNeighbourRegion(ulong regionHandle, string cap) diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 7453eae63e..754b925bb8 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs @@ -1680,5 +1680,9 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) { } + + public void StopFlying(ISceneEntity presence) + { + } } } diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 146b3d6f32..12d6643e23 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs @@ -1162,5 +1162,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) { } + + public void StopFlying(ISceneEntity presence) + { + } } } diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 94d9d72b02..496cfb854b 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs @@ -1216,5 +1216,9 @@ namespace OpenSim.Tests.Common.Mock public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) { } + + public void StopFlying(ISceneEntity presence) + { + } } } From 99f2a1c347f2c97007a467e76c1455c9a54b3c26 Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Fri, 11 Jun 2010 21:46:01 -0400 Subject: [PATCH 09/14] * Tweak the StopFlying() method in LLClientView to fabricate a suitable landing collision plane regardless of the actual physics situation. position.Z - AvatarHeight / 6f --- .../ClientStack/LindenUDP/LLClientView.cs | 57 ++++++++++++------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 85a313314d..cdd22def16 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -11846,38 +11846,53 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void StopFlying(ISceneEntity p) { - ScenePresence presence = p as ScenePresence; - // It turns out to get the agent to stop flying, you have to feed it stop flying velocities - // There's no explicit message to send the client to tell it to stop flying.. it relies on the - // velocity, collision plane and avatar height + if (p is ScenePresence) + { + ScenePresence presence = p as ScenePresence; + // It turns out to get the agent to stop flying, you have to feed it stop flying velocities + // There's no explicit message to send the client to tell it to stop flying.. it relies on the + // velocity, collision plane and avatar height - // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air - // when the avatar stands up + // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air + // when the avatar stands up - Vector3 pos = presence.AbsolutePosition; + Vector3 pos = presence.AbsolutePosition; - if (presence.Appearance.AvatarHeight != 127.0f) - pos += new Vector3(0f, 0f, (presence.Appearance.AvatarHeight / 6f)); - else - pos += new Vector3(0f, 0f, (1.56f / 6f)); + if (presence.Appearance.AvatarHeight != 127.0f) + pos += new Vector3(0f, 0f, (presence.Appearance.AvatarHeight/6f)); + else + pos += new Vector3(0f, 0f, (1.56f/6f)); - presence.AbsolutePosition = pos; + presence.AbsolutePosition = pos; - ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = + // attach a suitable collision plane regardless of the actual situation to force the LLClient to land. + // Collision plane below the avatar's position a 6th of the avatar's height is suitable. + // Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a + // certain amount.. because the LLClient wouldn't land in that situation anyway. + + // why are we still testing for this really old height value default??? + if (presence.Appearance.AvatarHeight != 127.0f) + presence.CollisionPlane = new Vector4(0, 0, 0, pos.Z - presence.Appearance.AvatarHeight/6f); + else + presence.CollisionPlane = new Vector4(0, 0, 0, pos.Z - (1.56f/6f)); + + + ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = CreateImprovedTerseBlock(p, false); - const float TIME_DILATION = 1.0f; - ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); + const float TIME_DILATION = 1.0f; + ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); - ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); - packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; - packet.RegionData.TimeDilation = timeDilation; - packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; + ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); + packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; + packet.RegionData.TimeDilation = timeDilation; + packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; - packet.ObjectData[0] = block; + packet.ObjectData[0] = block; - OutPacket(packet, ThrottleOutPacketType.Task, true); + OutPacket(packet, ThrottleOutPacketType.Task, true); + } //ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, // AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient))); From 85d2e215580609b270deb9d3f6e8d3b3a50e2b2f Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 12 Jun 2010 02:45:21 +0100 Subject: [PATCH 10/14] Change trunk versio to 0.7.1 Dev --- OpenSim/Framework/Servers/VersionInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs index 90b5f57929..100bf1fd52 100644 --- a/OpenSim/Framework/Servers/VersionInfo.cs +++ b/OpenSim/Framework/Servers/VersionInfo.cs @@ -29,7 +29,7 @@ namespace OpenSim { public class VersionInfo { - private const string VERSION_NUMBER = "0.7"; + private const string VERSION_NUMBER = "0.7.1"; private const Flavour VERSION_FLAVOUR = Flavour.Dev; public enum Flavour @@ -71,4 +71,4 @@ namespace OpenSim /// public readonly static int MajorInterfaceVersion = 6; } -} \ No newline at end of file +} From 92fea025cb90eea1a972f25d64a13824ff954d69 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 12 Jun 2010 06:13:27 +0100 Subject: [PATCH 11/14] Resume scripts that have been rezzed from a prim --- .../Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 5400a4f42f..59ab26bee5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -2699,6 +2699,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // objects rezzed with this method are die_at_edge by default. new_group.RootPart.SetDieAtEdge(true); + new_group.ResumeScripts(); + m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams( "object_rez", new Object[] { new LSL_String( From 57a60282f5746a3aa73c0cac34059fbdbd319c0c Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 12 Jun 2010 06:57:10 +0100 Subject: [PATCH 12/14] Don't filre CHANGED_INVENTORY if a prim comes in from storage --- OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index c4cff126e3..c3cdca8604 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -681,7 +681,7 @@ namespace OpenSim.Region.Framework.Scenes foreach (TaskInventoryItem item in items) { m_items.Add(item.ItemID, item); - m_part.TriggerScriptChangedEvent(Changed.INVENTORY); +// m_part.TriggerScriptChangedEvent(Changed.INVENTORY); } m_items.LockItemsForWrite(false); From e337c9130f8e25f81d9d9c9d98da8dee89f38aeb Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 12 Jun 2010 07:34:22 +0200 Subject: [PATCH 13/14] Make local teleports send CHANGED_TELEPORT --- .../Framework/EntityTransfer/EntityTransferModule.cs | 3 +++ .../Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 266621f924..5e2c04c488 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -180,6 +180,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); sp.Teleport(position); + + foreach (SceneObjectGroup grp in sp.Attachments) + sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); } else // Another region possibly in another simulator { diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp index 23138efc4a..f02d2d90dc 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp @@ -18,10 +18,10 @@ - + From 03a48f87e418e79ca780b29a696e5e878213e7ef Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 12 Jun 2010 08:29:20 +0200 Subject: [PATCH 14/14] Preserving the link numbers is a serializer's highest duty. Prevent region crossings from screwing up complex attachments by preserving link numbers. --- .../Scenes/Serialization/SceneObjectSerializer.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index f7544ac2ee..5bdaa17f69 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs @@ -221,7 +221,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization sr = new StringReader(parts[i].OuterXml); reader = new XmlTextReader(sr); SceneObjectPart part = SceneObjectPart.FromXml(reader); + + int originalLinkNum = part.LinkNum; + sceneObject.AddPart(part); + + // SceneObjectGroup.AddPart() tries to be smart and automatically set the LinkNum. + // We override that here + if (originalLinkNum != 0) + part.LinkNum = originalLinkNum; + part.StoreUndoState(); reader.Close(); sr.Close();