From 53fb20880c4cdf72b4f28fd9a458f8f224766a7c Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 10 Jan 2012 22:02:35 +0000 Subject: minor: Fix wrong column length in image queues report --- .../Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs index 58b9b9f..db70e56 100644 --- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs @@ -289,7 +289,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden if (images.Length > 0) { report.AppendFormat( - "{0,-36} {1,-8} {2,-9} {3,-9} {4,-9} {5,-7}\n", + "{0,-36} {1,-8} {2,-10} {3,-9} {4,-9} {5,-7}\n", "Texture ID", "Last Seq", "Priority", @@ -299,7 +299,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden foreach (J2KImage image in images) report.AppendFormat( - "{0,36} {1,8} {2,9} {3,10} {4,9} {5,7}\n", + "{0,36} {1,8} {2,10} {3,10} {4,9} {5,7}\n", image.TextureID, image.LastSequence, image.Priority, image.StartPacket, image.HasAsset, image.IsDecoded); } } -- cgit v1.1 From 5f7e392c7cc9410262dfb3333d9b60f6ff26eb79 Mon Sep 17 00:00:00 2001 From: Mic Bowman Date: Tue, 10 Jan 2012 16:26:01 -0800 Subject: Add a check to see if an asset exists before recreating it while loading an archive. This does add an extra roundtrip to the asset server if loading new assets but it protects against overwriting (and potentially corrupting) existing assets. --- OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 587d260..edc5ba4 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -404,6 +404,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver string extension = filename.Substring(i); string uuid = filename.Remove(filename.Length - extension.Length); + if (m_scene.AssetService.GetMetadata(uuid) != null) + { + // m_log.DebugFormat("[ARCHIVER]: found existing asset {0}",uuid); + return true; + } + if (ArchiveConstants.EXTENSION_TO_ASSET_TYPE.ContainsKey(extension)) { sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension]; -- cgit v1.1 From 38db87475528f48752623fcb7e8b40ef728f50e9 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 11 Jan 2012 14:33:26 +0000 Subject: If deserializing a scene object fails during IAR load then ignore the object rather than halting the IAR load with an exception. --- .../Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | 5 ++++- .../Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 6b24718..ee10d04 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs @@ -493,7 +493,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver } else { - sceneObjects.Add(SceneObjectSerializer.FromOriginalXmlFormat(xmlData)); + SceneObjectGroup deserializedObject = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); + + if (deserializedObject != null) + sceneObjects.Add(deserializedObject); } foreach (SceneObjectGroup sog in sceneObjects) diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index bca49f7..38d1231 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs @@ -54,7 +54,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization /// Deserialize a scene object from the original xml format /// /// - /// + /// The scene object deserialized. Null on failure. public static SceneObjectGroup FromOriginalXmlFormat(string xmlData) { //m_log.DebugFormat("[SOG]: Starting deserialization of SOG"); -- cgit v1.1 From 8bdd80abfa3830142b16615d97d555dad417e08d Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 12 Jan 2012 09:56:35 -0800 Subject: HG: normalize all externalized user ULRs to be the Home URL, i.e. the location of the user's UAS. This corrects an earlier design which had some cases pointing to the profile server. WARNING: CONFIGURATION CHANGES in both the sims (*Common.ini) and the Robust configs (Robust.HG.ini). Please check diff of the example files, but basically all vars that were pointing to profile should point to the UAS instead and should be called HomeURI. --- .../Serialization/External/ExternalRepresentationUtils.cs | 8 ++++---- .../CoreModules/Framework/InventoryAccess/HGAssetMapper.cs | 10 +++++----- .../Framework/InventoryAccess/HGInventoryAccessModule.cs | 9 ++++++--- OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs | 8 ++++++-- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 ++-- .../Framework/Scenes/Serialization/SceneObjectSerializer.cs | 8 ++++---- OpenSim/Services/HypergridService/HGAssetService.cs | 11 +++++++---- OpenSim/Services/HypergridService/HGInventoryService.cs | 9 ++++++--- 8 files changed, 40 insertions(+), 27 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs index 6e8c2ee..7447ac2 100644 --- a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs +++ b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs @@ -44,13 +44,13 @@ namespace OpenSim.Framework.Serialization.External /// with creator data added to it. /// /// The SceneObjectPart represented in XML2 - /// The URL of the profile service for the creator + /// The URL of the user agents service (home) for the creator /// The service for retrieving user account information /// The scope of the user account information (Grid ID) /// The SceneObjectPart represented in XML2 - public static string RewriteSOP(string xml, string profileURL, IUserAccountService userService, UUID scopeID) + public static string RewriteSOP(string xml, string homeURL, IUserAccountService userService, UUID scopeID) { - if (xml == string.Empty || profileURL == string.Empty || userService == null) + if (xml == string.Empty || homeURL == string.Empty || userService == null) return xml; XmlDocument doc = new XmlDocument(); @@ -83,7 +83,7 @@ namespace OpenSim.Framework.Serialization.External if (!hasCreatorData && creator != null) { XmlElement creatorData = doc.CreateElement("CreatorData"); - creatorData.InnerText = profileURL + "/" + creator.PrincipalID + ";" + creator.FirstName + " " + creator.LastName; + creatorData.InnerText = homeURL + ";" + creator.FirstName + " " + creator.LastName; sop.AppendChild(creatorData); } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs index d20c9eb..eaadc1b 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs @@ -55,16 +55,16 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess // private Dictionary m_inventoryServers = new Dictionary(); private Scene m_scene; - private string m_ProfileServerURI; + private string m_HomeURI; #endregion #region Constructor - public HGAssetMapper(Scene scene, string profileURL) + public HGAssetMapper(Scene scene, string homeURL) { m_scene = scene; - m_ProfileServerURI = profileURL; + m_HomeURI = homeURL; } #endregion @@ -150,7 +150,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess UUID.TryParse(meta.CreatorID, out uuid); UserAccount creator = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, uuid); if (creator != null) - meta.CreatorID = m_ProfileServerURI + "/" + meta.CreatorID + ";" + creator.FirstName + " " + creator.LastName; + meta.CreatorID = m_HomeURI + ";" + creator.FirstName + " " + creator.LastName; } } @@ -193,7 +193,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess if (!hasCreatorData && creator != null) { XmlElement creatorData = doc.CreateElement("CreatorData"); - creatorData.InnerText = m_ProfileServerURI + "/" + creator.PrincipalID + ";" + creator.FirstName + " " + creator.LastName; + creatorData.InnerText = m_HomeURI + ";" + creator.FirstName + " " + creator.LastName; sop.AppendChild(creatorData); } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index bf24ebc..0c4ff7f 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs @@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess get { return m_assMapper; } } - private string m_ProfileServerURI; + private string m_HomeURI; private bool m_OutboundPermission; private string m_ThisGatekeeper; @@ -84,7 +84,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess IConfig thisModuleConfig = source.Configs["HGInventoryAccessModule"]; if (thisModuleConfig != null) { - m_ProfileServerURI = thisModuleConfig.GetString("ProfileServerURI", string.Empty); + // legacy configuration [obsolete] + m_HomeURI = thisModuleConfig.GetString("ProfileServerURI", string.Empty); + // preferred + m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI); m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); } @@ -100,7 +103,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess return; base.AddRegion(scene); - m_assMapper = new HGAssetMapper(scene, m_ProfileServerURI); + m_assMapper = new HGAssetMapper(scene, m_HomeURI); scene.EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem; } diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs index f44a3ba..0707cbe 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs @@ -125,8 +125,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver Dictionary options = new Dictionary(); OptionSet ops = new OptionSet(); -// ops.Add("v|version=", delegate(string v) { options["version"] = v; }); - ops.Add("p|profile=", delegate(string v) { options["profile"] = v; }); + + // legacy argument [obsolete] + ops.Add("p|profile=", delegate(string v) { Console.WriteLine("\n WARNING: -profile option is obsolete and it will not work. Use -home instead.\n"); }); + // preferred + ops.Add("h|home=", delegate(string v) { options["home"] = v; }); + ops.Add("noassets", delegate(string v) { options["noassets"] = v != null; }); ops.Add("perm=", delegate(string v) { options["checkPermissions"] = v; }); diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 51d3586..e9c33eb 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -394,7 +394,7 @@ namespace OpenSim.Region.Framework.Scenes private string m_creatorData = string.Empty; /// - /// Data about the creator in the form profile_url;name + /// Data about the creator in the form home_url;name /// public string CreatorData { @@ -405,7 +405,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// Used by the DB layer to retrieve / store the entire user identification. /// The identification can either be a simple UUID or a string of the form - /// uuid[;profile_url[;name]] + /// uuid[;home_url[;name]] /// public string CreatorIdentification { diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index 38d1231..7c60ddd 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs @@ -1134,12 +1134,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization if (sop.CreatorData != null && sop.CreatorData != string.Empty) writer.WriteElementString("CreatorData", sop.CreatorData); - else if (options.ContainsKey("profile")) + else if (options.ContainsKey("home")) { if (m_UserManagement == null) m_UserManagement = sop.ParentGroup.Scene.RequestModuleInterface(); string name = m_UserManagement.GetUserName(sop.CreatorID); - writer.WriteElementString("CreatorData", (string)options["profile"] + "/" + sop.CreatorID + ";" + name); + writer.WriteElementString("CreatorData", (string)options["home"] + ";" + name); } WriteUUID(writer, "FolderID", sop.FolderID, options); @@ -1282,12 +1282,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization if (item.CreatorData != null && item.CreatorData != string.Empty) writer.WriteElementString("CreatorData", item.CreatorData); - else if (options.ContainsKey("profile")) + else if (options.ContainsKey("home")) { if (m_UserManagement == null) m_UserManagement = scene.RequestModuleInterface(); string name = m_UserManagement.GetUserName(item.CreatorID); - writer.WriteElementString("CreatorData", (string)options["profile"] + "/" + item.CreatorID + ";" + name); + writer.WriteElementString("CreatorData", (string)options["home"] + ";" + name); } writer.WriteElementString("Description", item.Description); diff --git a/OpenSim/Services/HypergridService/HGAssetService.cs b/OpenSim/Services/HypergridService/HGAssetService.cs index e518329..22e233a 100644 --- a/OpenSim/Services/HypergridService/HGAssetService.cs +++ b/OpenSim/Services/HypergridService/HGAssetService.cs @@ -53,7 +53,7 @@ namespace OpenSim.Services.HypergridService LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType); - private string m_ProfileServiceURL; + private string m_HomeURL; private IUserAccountService m_UserAccountService; private UserAccountCache m_Cache; @@ -74,7 +74,10 @@ namespace OpenSim.Services.HypergridService if (m_UserAccountService == null) throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); - m_ProfileServiceURL = assetConfig.GetString("ProfileServerURI", string.Empty); + // legacy configuration [obsolete] + m_HomeURL = assetConfig.GetString("ProfileServerURI", string.Empty); + // Preferred + m_HomeURL = assetConfig.GetString("HomeURI", m_HomeURL); m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); } @@ -134,13 +137,13 @@ namespace OpenSim.Services.HypergridService UserAccount creator = m_Cache.GetUser(meta.CreatorID); if (creator != null) - meta.CreatorID = m_ProfileServiceURL + "/" + meta.CreatorID + ";" + creator.FirstName + " " + creator.LastName; + meta.CreatorID = meta.CreatorID + ";" + m_HomeURL + "/" + creator.FirstName + " " + creator.LastName; } protected byte[] AdjustIdentifiers(byte[] data) { string xml = Utils.BytesToString(data); - return Utils.StringToBytes(ExternalRepresentationUtils.RewriteSOP(xml, m_ProfileServiceURL, m_Cache, UUID.Zero)); + return Utils.StringToBytes(ExternalRepresentationUtils.RewriteSOP(xml, m_HomeURL, m_Cache, UUID.Zero)); } } diff --git a/OpenSim/Services/HypergridService/HGInventoryService.cs b/OpenSim/Services/HypergridService/HGInventoryService.cs index 4eb61ba..daf8c3a 100644 --- a/OpenSim/Services/HypergridService/HGInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGInventoryService.cs @@ -55,7 +55,7 @@ namespace OpenSim.Services.HypergridService protected new IXInventoryData m_Database; - private string m_ProfileServiceURL; + private string m_HomeURL; private IUserAccountService m_UserAccountService; private UserAccountCache m_Cache; @@ -100,7 +100,10 @@ namespace OpenSim.Services.HypergridService if (m_UserAccountService == null) throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); - m_ProfileServiceURL = invConfig.GetString("ProfileServerURI", string.Empty); + // legacy configuration [obsolete] + m_HomeURL = invConfig.GetString("ProfileServerURI", string.Empty); + // Preferred + m_HomeURL = invConfig.GetString("HomeURI", m_HomeURL); m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); } @@ -321,7 +324,7 @@ namespace OpenSim.Services.HypergridService // Adjust the creator data if (user != null && it != null && (it.CreatorData == null || it.CreatorData == string.Empty)) - it.CreatorData = m_ProfileServiceURL + "/" + it.CreatorId + ";" + user.FirstName + " " + user.LastName; + it.CreatorData = m_HomeURL + ";" + user.FirstName + " " + user.LastName; return it; } -- cgit v1.1 From 6214e6a217cfe206e127739b141bdcceb253c98d Mon Sep 17 00:00:00 2001 From: Bo Iwu Date: Thu, 12 Jan 2012 17:43:20 +0100 Subject: Allow update of stored entries within User Management Module-this is needed for proper work of HG friends. See http://opensimulator.org/mantis/view.php?id=5847 --- .../UserManagement/UserManagementModule.cs | 100 +++++++++++---------- 1 file changed, 52 insertions(+), 48 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 37292d6..2ad30a0 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs @@ -423,58 +423,62 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement AddUser(uuid, profileURL + ";" + first + " " + last); } - public void AddUser(UUID id, string creatorData) + public void AddUser (UUID id, string creatorData) { - lock (m_UserCache) - { - if (m_UserCache.ContainsKey(id)) - return; - } - -// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, craetorData {1}", id, creatorData); - - UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, id); - - if (account != null) - { - AddUser(id, account.FirstName, account.LastName); - } - else - { - UserData user = new UserData(); - user.Id = id; - user.Flags = -1; - user.Created = -1; - - if (creatorData != null && creatorData != string.Empty) - { - //creatorData = ; - - string[] parts = creatorData.Split(';'); - if (parts.Length >= 1) - { - user.HomeURL = parts[0]; - try - { - Uri uri = new Uri(parts[0]); - user.LastName = "@" + uri.Authority; - } - catch (UriFormatException) - { - m_log.DebugFormat("[SCENE]: Unable to parse Uri {0}", parts[0]); - user.LastName = "@unknown"; - } + UserData oldUser; + //lock the whole block - prevent concurrent update + lock (m_UserCache) { + m_UserCache.TryGetValue (id, out oldUser); + if (oldUser != null) { + if (creatorData == null || creatorData == String.Empty) { + //ignore updates without creator data + return; + } + //try update unknown users + //and creator's home URL's + if ((oldUser.FirstName == "Unknown" && !creatorData.Contains ("Unknown")) || (oldUser.HomeURL != null && !creatorData.StartsWith (oldUser.HomeURL))) { + m_UserCache.Remove (id); +// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Re-adding user with id {0}, creatorData [{1}] and old HomeURL {2}", id, creatorData,oldUser.HomeURL); + } else { + //we have already a valid user within the cache + return; } - if (parts.Length >= 2) - user.FirstName = parts[1].Replace(' ', '.'); } - else - { - user.FirstName = "Unknown"; - user.LastName = "User"; +// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, creatorData {1}", id, creatorData); + + UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount (m_Scenes[0].RegionInfo.ScopeID, id); + + if (account != null) { + AddUser (id, account.FirstName, account.LastName); + } else { + UserData user = new UserData (); + user.Id = id; + user.Flags = -1; + user.Created = -1; + + if (creatorData != null && creatorData != string.Empty) { + //creatorData = ; + + string[] parts = creatorData.Split (';'); + if (parts.Length >= 1) { + user.HomeURL = parts[0]; + try { + Uri uri = new Uri (parts[0]); + user.LastName = "@" + uri.Authority; + } catch (UriFormatException) { + m_log.DebugFormat ("[SCENE]: Unable to parse Uri {0}", parts[0]); + user.LastName = "@unknown"; + } + } + if (parts.Length >= 2) + user.FirstName = parts[1].Replace (' ', '.'); + } else { + user.FirstName = "Unknown"; + user.LastName = "User"; + } + + AddUserInternal (user); } - - AddUserInternal(user); } } -- cgit v1.1