From fb890e543f1684e0c01f7a57f312ab1d7140cdc0 Mon Sep 17 00:00:00 2001 From: Melanie Date: Mon, 21 Mar 2011 05:52:29 +0100 Subject: [PATCH 01/42] Don't send a windlight profile to clients if windlight is not set for that region. This should restore normal day and night cycles for regions without WL settings. --- OpenSim/Region/CoreModules/LightShare/LightShareModule.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs index 00b0aa9137..2de8d7a29b 100644 --- a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs +++ b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs @@ -148,7 +148,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare public void SendProfileToClient(ScenePresence presence) { IClientAPI client = presence.ControllingClient; - if (m_enableWindlight) + if (m_enableWindlight && m_scene.RegionInfo.WindlightSettings.valid) { if (presence.IsChildAgent == false) { @@ -165,7 +165,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare public void SendProfileToClient(ScenePresence presence, RegionLightShareData wl) { IClientAPI client = presence.ControllingClient; - if (m_enableWindlight) + if (m_enableWindlight && m_scene.RegionInfo.WindlightSettings.valid) { if (presence.IsChildAgent == false) { From d3a20a1e9257ecec417e219ebaf079370015f06d Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 21:37:06 +0000 Subject: [PATCH 02/42] On initial region registration, if the user chooses the option to make the region part of an existing estate, then list the existing region names. --- OpenSim/Data/MSSQL/MSSQLEstateData.cs | 17 ++++++++ OpenSim/Data/MySQL/MySQLEstateData.cs | 40 +++++++++++++++++++ OpenSim/Data/SQLite/SQLiteEstateData.cs | 32 +++++++++++++++ OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs | 33 +++++++++++++++ OpenSim/Region/Application/OpenSimBase.cs | 13 +++++- .../Interfaces/IEstateDataService.cs | 14 +++++++ .../Framework/Interfaces/IEstateDataStore.cs | 14 +++++++ .../Simulation/EstateDataService.cs | 10 +++++ 8 files changed, 172 insertions(+), 1 deletion(-) diff --git a/OpenSim/Data/MSSQL/MSSQLEstateData.cs b/OpenSim/Data/MSSQL/MSSQLEstateData.cs index e9a0935048..92a8d80b9a 100644 --- a/OpenSim/Data/MSSQL/MSSQLEstateData.cs +++ b/OpenSim/Data/MSSQL/MSSQLEstateData.cs @@ -350,26 +350,43 @@ namespace OpenSim.Data.MSSQL public EstateSettings LoadEstateSettings(int estateID) { + // TODO: Implementation! return new EstateSettings(); } + + public List LoadEstateSettingsAll() + { + // TODO: Implementation! + return new List(); + } public List GetEstates(string search) { + // TODO: Implementation! + return new List(); + } + + public List GetEstatesAll() + { + // TODO: Implementation! return new List(); } public bool LinkRegion(UUID regionID, int estateID) { + // TODO: Implementation! return false; } public List GetRegions(int estateID) { + // TODO: Implementation! return new List(); } public bool DeleteEstate(int estateID) { + // TODO: Implementation! return false; } #endregion diff --git a/OpenSim/Data/MySQL/MySQLEstateData.cs b/OpenSim/Data/MySQL/MySQLEstateData.cs index de72a6a931..6d72e82e2b 100644 --- a/OpenSim/Data/MySQL/MySQLEstateData.cs +++ b/OpenSim/Data/MySQL/MySQLEstateData.cs @@ -413,6 +413,46 @@ namespace OpenSim.Data.MySQL return DoLoad(cmd, UUID.Zero, false); } } + + public List LoadEstateSettingsAll() + { + List allEstateSettings = new List(); + + List allEstateIds = GetEstatesAll(); + + foreach (int estateId in allEstateIds) + allEstateSettings.Add(LoadEstateSettings(estateId)); + + return allEstateSettings; + } + + public List GetEstatesAll() + { + List result = new List(); + + using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) + { + dbcon.Open(); + + using (MySqlCommand cmd = dbcon.CreateCommand()) + { + cmd.CommandText = "select estateID from estate_settings"; + + using (IDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + result.Add(Convert.ToInt32(reader["EstateID"])); + } + reader.Close(); + } + } + + dbcon.Close(); + } + + return result; + } public List GetEstates(string search) { diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs index 63252aa3d3..6afc5401d8 100644 --- a/OpenSim/Data/SQLite/SQLiteEstateData.cs +++ b/OpenSim/Data/SQLite/SQLiteEstateData.cs @@ -357,6 +357,17 @@ namespace OpenSim.Data.SQLite return DoLoad(cmd, UUID.Zero, false); } + + public List LoadEstateSettingsAll() + { + List estateSettings = new List(); + + List estateIds = GetEstatesAll(); + foreach (int estateId in estateIds) + estateSettings.Add(LoadEstateSettings(estateId)); + + return estateSettings; + } public List GetEstates(string search) { @@ -379,6 +390,27 @@ namespace OpenSim.Data.SQLite return result; } + + public List GetEstatesAll() + { + List result = new List(); + + string sql = "select EstateID from estate_settings"; + + SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); + + cmd.CommandText = sql; + + IDataReader r = cmd.ExecuteReader(); + + while (r.Read()) + { + result.Add(Convert.ToInt32(r["EstateID"])); + } + r.Close(); + + return result; + } public bool LinkRegion(UUID regionID, int estateID) { diff --git a/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs b/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs index 547ea6b07d..ad28c000c6 100644 --- a/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs +++ b/OpenSim/Data/SQLiteLegacy/SQLiteEstateData.cs @@ -100,6 +100,17 @@ namespace OpenSim.Data.SQLiteLegacy return DoLoad(cmd, regionID, create); } + + public List LoadEstateSettingsAll() + { + List estateSettings = new List(); + + List estateIds = GetEstatesAll(); + foreach (int estateId in estateIds) + estateSettings.Add(LoadEstateSettings(estateId)); + + return estateSettings; + } private EstateSettings DoLoad(SqliteCommand cmd, UUID regionID, bool create) { @@ -369,6 +380,28 @@ namespace OpenSim.Data.SQLiteLegacy return result; } + + public List GetEstatesAll() + { + List result = new List(); + + string sql = "select EstateID from estate_settings"; + + SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); + + cmd.CommandText = sql; + + IDataReader r = cmd.ExecuteReader(); + + while (r.Read()) + { + result.Add(Convert.ToInt32(r["EstateID"])); + } + r.Close(); + + return result; + } + public bool LinkRegion(UUID regionID, int estateID) { SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index e950613e6b..f804cb7f95 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -828,7 +828,18 @@ namespace OpenSim } else { - response = MainConsole.Instance.CmdPrompt("Estate name to join", "None"); + List estates = estateDataService.LoadEstateSettingsAll(); + + List estateNames = new List(); + foreach (EstateSettings estate in estates) + estateNames.Add(estate.EstateName); + + response + = MainConsole.Instance.CmdPrompt( + string.Format( + "Name of estate to join. Existing estate names are ({0})", string.Join(", ", estateNames.ToArray())), + "None"); + if (response == "None") continue; diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs index 95c9659bc1..12ed9e3fa7 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs @@ -36,8 +36,22 @@ namespace OpenSim.Region.Framework.Interfaces { EstateSettings LoadEstateSettings(UUID regionID, bool create); EstateSettings LoadEstateSettings(int estateID); + + /// + /// Load/Get all estate settings. + /// + /// An empty list if no estates were found. + List LoadEstateSettingsAll(); + void StoreEstateSettings(EstateSettings es); List GetEstates(string search); + + /// + /// Get the IDs of all estates. + /// + /// An empty list if no estates were found. + List GetEstatesAll(); + bool LinkRegion(UUID regionID, int estateID); List GetRegions(int estateID); bool DeleteEstate(int estateID); diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs index 87c7a05f6d..d78ad78774 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs @@ -37,8 +37,22 @@ namespace OpenSim.Region.Framework.Interfaces EstateSettings LoadEstateSettings(UUID regionID, bool create); EstateSettings LoadEstateSettings(int estateID); + + /// + /// Load/Get all estate settings. + /// + /// An empty list if no estates were found. + List LoadEstateSettingsAll(); + void StoreEstateSettings(EstateSettings es); List GetEstates(string search); + + /// + /// Get the IDs of all estates. + /// + /// An empty list if no estates were found. + List GetEstatesAll(); + bool LinkRegion(UUID regionID, int estateID); List GetRegions(int estateID); bool DeleteEstate(int estateID); diff --git a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs b/OpenSim/Services/Connectors/Simulation/EstateDataService.cs index b6df5a2595..d0588bff09 100644 --- a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs +++ b/OpenSim/Services/Connectors/Simulation/EstateDataService.cs @@ -90,6 +90,11 @@ namespace OpenSim.Services.Connectors { return m_database.LoadEstateSettings(estateID); } + + public List LoadEstateSettingsAll() + { + return m_database.LoadEstateSettingsAll(); + } public void StoreEstateSettings(EstateSettings es) { @@ -100,6 +105,11 @@ namespace OpenSim.Services.Connectors { return m_database.GetEstates(search); } + + public List GetEstatesAll() + { + return m_database.GetEstatesAll(); + } public bool LinkRegion(UUID regionID, int estateID) { From 793bfb5a663879296789efa8350df0e9cabb2148 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 22:25:20 +0000 Subject: [PATCH 03/42] add method doc to IEstateDataService and IEstateDataStore interfaces --- .../Interfaces/IEstateDataService.cs | 44 ++++++++++++++++- .../Framework/Interfaces/IEstateDataStore.cs | 48 ++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs index 12ed9e3fa7..55adef17c7 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs @@ -34,7 +34,19 @@ namespace OpenSim.Region.Framework.Interfaces { public interface IEstateDataService { + /// + /// Load estate settings for a region. + /// + /// + /// If true, then an estate is created if one is not found. This is used in migration. + /// EstateSettings LoadEstateSettings(UUID regionID, bool create); + + /// + /// Load estate settings for an estate ID. + /// + /// + /// EstateSettings LoadEstateSettings(int estateID); /// @@ -43,7 +55,19 @@ namespace OpenSim.Region.Framework.Interfaces /// An empty list if no estates were found. List LoadEstateSettingsAll(); + /// + /// Store estate settings. + /// + /// + /// This is also called by EstateSettings.Save() + /// void StoreEstateSettings(EstateSettings es); + + /// + /// Get estate IDs. + /// + /// Name of estate to search for. This is the exact name, no parttern matching is done. + /// List GetEstates(string search); /// @@ -52,8 +76,26 @@ namespace OpenSim.Region.Framework.Interfaces /// An empty list if no estates were found. List GetEstatesAll(); + /// + /// Link a region to an estate. + /// + /// + /// + /// true if the link succeeded, false otherwise bool LinkRegion(UUID regionID, int estateID); + + /// + /// Get the UUIDs of all the regions in an estate. + /// + /// + /// List GetRegions(int estateID); + + /// + /// Delete an estate + /// + /// + /// true if the delete succeeded, false otherwise bool DeleteEstate(int estateID); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs index d78ad78774..4974d5d1ff 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs @@ -33,9 +33,25 @@ namespace OpenSim.Region.Framework.Interfaces { public interface IEstateDataStore { + /// + /// Initialise the data store. + /// + /// void Initialise(string connectstring); + /// + /// Load estate settings for a region. + /// + /// + /// If true, then an estate is created if one is not found. This is used in migration. + /// EstateSettings LoadEstateSettings(UUID regionID, bool create); + + /// + /// Load estate settings for an estate ID. + /// + /// + /// EstateSettings LoadEstateSettings(int estateID); /// @@ -44,7 +60,19 @@ namespace OpenSim.Region.Framework.Interfaces /// An empty list if no estates were found. List LoadEstateSettingsAll(); + /// + /// Store estate settings. + /// + /// + /// This is also called by EstateSettings.Save() + /// void StoreEstateSettings(EstateSettings es); + + /// + /// Get estate IDs. + /// + /// Name of estate to search for. This is the exact name, no parttern matching is done. + /// List GetEstates(string search); /// @@ -53,8 +81,26 @@ namespace OpenSim.Region.Framework.Interfaces /// An empty list if no estates were found. List GetEstatesAll(); + /// + /// Link a region to an estate. + /// + /// + /// + /// true if the link succeeded, false otherwise bool LinkRegion(UUID regionID, int estateID); + + /// + /// Get the UUIDs of all the regions in an estate. + /// + /// + /// List GetRegions(int estateID); + + /// + /// Delete an estate + /// + /// + /// true if the delete succeeded, false otherwise bool DeleteEstate(int estateID); } -} +} \ No newline at end of file From 2d1f0d224c355e92997643cf849b8e9774dddbad Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 22:27:16 +0000 Subject: [PATCH 04/42] minor: slightly adjust previous method doc. --- OpenSim/Region/Framework/Interfaces/IEstateDataService.cs | 2 +- OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs index 55adef17c7..38c10a6d1b 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs @@ -38,7 +38,7 @@ namespace OpenSim.Region.Framework.Interfaces /// Load estate settings for a region. /// /// - /// If true, then an estate is created if one is not found. This is used in migration. + /// If true, then an estate is created if one is not found. /// EstateSettings LoadEstateSettings(UUID regionID, bool create); diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs index 4974d5d1ff..c82661db74 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataStore.cs @@ -43,7 +43,7 @@ namespace OpenSim.Region.Framework.Interfaces /// Load estate settings for a region. /// /// - /// If true, then an estate is created if one is not found. This is used in migration. + /// If true, then an estate is created if one is not found. /// EstateSettings LoadEstateSettings(UUID regionID, bool create); From ee7cfc2854aba3572d5342b8c1bfd5bf4ea93841 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 22:47:02 +0000 Subject: [PATCH 05/42] refactor: use EstateDataService property directly instead of loading it into a local variable --- OpenSim/Region/Application/OpenSimBase.cs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index f804cb7f95..eae36869a2 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -798,12 +798,8 @@ namespace OpenSim /// public void PopulateRegionEstateInfo(RegionInfo regInfo) { - IEstateDataService estateDataService = EstateDataService; - - if (estateDataService != null) - { - regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, false); - } + if (EstateDataService != null) + regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, false); if (regInfo.EstateSettings.EstateID == 0) // No record at all { @@ -814,7 +810,7 @@ namespace OpenSim if (response == "no") { // Create a new estate - regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, true); + regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, true); regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); @@ -828,7 +824,7 @@ namespace OpenSim } else { - List estates = estateDataService.LoadEstateSettingsAll(); + List estates = EstateDataService.LoadEstateSettingsAll(); List estateNames = new List(); foreach (EstateSettings estate in estates) @@ -843,7 +839,7 @@ namespace OpenSim if (response == "None") continue; - List estateIDs = estateDataService.GetEstates(response); + List estateIDs = EstateDataService.GetEstates(response); if (estateIDs.Count < 1) { MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); @@ -852,9 +848,9 @@ namespace OpenSim int estateID = estateIDs[0]; - regInfo.EstateSettings = estateDataService.LoadEstateSettings(estateID); + regInfo.EstateSettings = EstateDataService.LoadEstateSettings(estateID); - if (estateDataService.LinkRegion(regInfo.RegionID, estateID)) + if (EstateDataService.LinkRegion(regInfo.RegionID, estateID)) break; MainConsole.Instance.Output("Joining the estate failed. Please try again."); @@ -863,7 +859,6 @@ namespace OpenSim } } } - public class OpenSimConfigSource { From 060a53b896d338309458861161eb0b9e621d4171 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 22:57:20 +0000 Subject: [PATCH 06/42] On initial opensim setup, don't ask the user whether they want to join an existing opensim estate when there aren't any. Proceed directly to estate setup instead. --- OpenSim/Region/Application/OpenSimBase.cs | 102 +++++++++++++--------- 1 file changed, 63 insertions(+), 39 deletions(-) diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index eae36869a2..81a10e3830 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -792,6 +792,25 @@ namespace OpenSim regionnum = m_sceneManager.Scenes.Count; } + /// + /// Create an estate with an initial region. + /// + /// + public void CreateEstate(RegionInfo regInfo) + { + // Create a new estate + regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, true); + + regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); + + // FIXME: Later on, the scene constructor will reload the estate settings no matter what. + // Therefore, we need to do an initial save here otherwise the new estate name will be reset + // back to the default. The reloading of estate settings by scene could be eliminated if it + // knows that the passed in settings in RegionInfo are already valid. Also, it might be + // possible to eliminate some additional later saves made by callers of this method. + regInfo.EstateSettings.Save(); + } + /// /// Load the estate information for the provided RegionInfo object. /// @@ -804,56 +823,61 @@ namespace OpenSim if (regInfo.EstateSettings.EstateID == 0) // No record at all { MainConsole.Instance.Output("Your region is not part of an estate."); + + List estates = EstateDataService.LoadEstateSettingsAll(); + while (true) { - string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List() { "yes", "no" }); - if (response == "no") - { - // Create a new estate - regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, true); - - regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); + if (estates.Count == 0) + { + MainConsole.Instance.Output( + "There aren't any existing estates. You will need to create a new one for this region."); - // FIXME: Later on, the scene constructor will reload the estate settings no matter what. - // Therefore, we need to do an initial save here otherwise the new estate name will be reset - // back to the default. The reloading of estate settings by scene could be eliminated if it - // knows that the passed in settings in RegionInfo are already valid. Also, it might be - // possible to eliminate some additional later saves made by callers of this method. - regInfo.EstateSettings.Save(); + CreateEstate(regInfo); break; } else { - List estates = EstateDataService.LoadEstateSettingsAll(); - - List estateNames = new List(); - foreach (EstateSettings estate in estates) - estateNames.Add(estate.EstateName); - - response + string response = MainConsole.Instance.CmdPrompt( - string.Format( - "Name of estate to join. Existing estate names are ({0})", string.Join(", ", estateNames.ToArray())), - "None"); + "Do you wish to join an existing estate (yes/no)?", "no", new List() { "yes", "no" }); - if (response == "None") - continue; - - List estateIDs = EstateDataService.GetEstates(response); - if (estateIDs.Count < 1) + if (response == "no") { - MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); - continue; - } - - int estateID = estateIDs[0]; - - regInfo.EstateSettings = EstateDataService.LoadEstateSettings(estateID); - - if (EstateDataService.LinkRegion(regInfo.RegionID, estateID)) + CreateEstate(regInfo); break; - - MainConsole.Instance.Output("Joining the estate failed. Please try again."); + } + else + { + List estateNames = new List(); + foreach (EstateSettings estate in estates) + estateNames.Add(estate.EstateName); + + response + = MainConsole.Instance.CmdPrompt( + string.Format( + "Name of estate to join. Existing estate names are ({0})", string.Join(", ", estateNames.ToArray())), + "None"); + + if (response == "None") + continue; + + List estateIDs = EstateDataService.GetEstates(response); + if (estateIDs.Count < 1) + { + MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); + continue; + } + + int estateID = estateIDs[0]; + + regInfo.EstateSettings = EstateDataService.LoadEstateSettings(estateID); + + if (EstateDataService.LinkRegion(regInfo.RegionID, estateID)) + break; + + MainConsole.Instance.Output("Joining the estate failed. Please try again."); + } } } } From 3382de4d8bcfce0c3f8e2e63ee63ed2428322461 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 23:16:57 +0000 Subject: [PATCH 07/42] In initial setup, stop a user being able to create a new estate with the same name as an existing estate. --- OpenSim/Region/Application/OpenSimBase.cs | 45 ++++++++++++++++------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 81a10e3830..3f5e35e6b7 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -795,20 +795,34 @@ namespace OpenSim /// /// Create an estate with an initial region. /// + /// + /// This method doesn't allow an estate to be created with the same name as existing estates. + /// /// - public void CreateEstate(RegionInfo regInfo) + /// A list of estate names that already exist. + /// true if the estate was created, false otherwise + public bool CreateEstate(RegionInfo regInfo, List existingNames) { // Create a new estate regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, true); + string newName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); - regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); + if (existingNames.Contains(newName)) + { + MainConsole.Instance.OutputFormat("An estate named {0} already exists. Please try again.", newName); + return false; + } + + regInfo.EstateSettings.EstateName = newName; // FIXME: Later on, the scene constructor will reload the estate settings no matter what. // Therefore, we need to do an initial save here otherwise the new estate name will be reset // back to the default. The reloading of estate settings by scene could be eliminated if it // knows that the passed in settings in RegionInfo are already valid. Also, it might be // possible to eliminate some additional later saves made by callers of this method. - regInfo.EstateSettings.Save(); + regInfo.EstateSettings.Save(); + + return true; } /// @@ -825,16 +839,21 @@ namespace OpenSim MainConsole.Instance.Output("Your region is not part of an estate."); List estates = EstateDataService.LoadEstateSettingsAll(); + List estateNames = new List(); + foreach (EstateSettings estate in estates) + estateNames.Add(estate.EstateName); while (true) { if (estates.Count == 0) { MainConsole.Instance.Output( - "There aren't any existing estates. You will need to create a new one for this region."); + "No existing estates found. You must create a new one for this region."); - CreateEstate(regInfo); - break; + if (CreateEstate(regInfo, estateNames)) + break; + else + continue; } else { @@ -844,15 +863,13 @@ namespace OpenSim if (response == "no") { - CreateEstate(regInfo); - break; + if (CreateEstate(regInfo, estateNames)) + break; + else + continue; } else - { - List estateNames = new List(); - foreach (EstateSettings estate in estates) - estateNames.Add(estate.EstateName); - + { response = MainConsole.Instance.CmdPrompt( string.Format( @@ -865,7 +882,7 @@ namespace OpenSim List estateIDs = EstateDataService.GetEstates(response); if (estateIDs.Count < 1) { - MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); + MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again."); continue; } From 7acade00b9b34403e63656d5e2efc94322342653 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 21 Mar 2011 23:26:35 +0000 Subject: [PATCH 08/42] On initial setup, include estate and regions names in questions to make it clearer what they relate to. --- OpenSim/Region/Application/OpenSimBase.cs | 10 ++++++---- OpenSim/Region/Framework/Scenes/Scene.cs | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 3f5e35e6b7..640581181c 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -836,7 +836,7 @@ namespace OpenSim if (regInfo.EstateSettings.EstateID == 0) // No record at all { - MainConsole.Instance.Output("Your region is not part of an estate."); + MainConsole.Instance.OutputFormat("Region {0} is not part of an estate.", regInfo.RegionName); List estates = EstateDataService.LoadEstateSettingsAll(); List estateNames = new List(); @@ -847,8 +847,7 @@ namespace OpenSim { if (estates.Count == 0) { - MainConsole.Instance.Output( - "No existing estates found. You must create a new one for this region."); + MainConsole.Instance.Output("No existing estates found. You must create a new one."); if (CreateEstate(regInfo, estateNames)) break; @@ -859,7 +858,10 @@ namespace OpenSim { string response = MainConsole.Instance.CmdPrompt( - "Do you wish to join an existing estate (yes/no)?", "no", new List() { "yes", "no" }); + string.Format( + "Do you wish to join region {0} to an existing estate (yes/no)?", regInfo.RegionName), + "no", + new List() { "yes", "no" }); if (response == "no") { diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 1a6a70bfbe..4d2519d694 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1109,7 +1109,7 @@ namespace OpenSim.Region.Framework.Scenes // while (m_regInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) { - MainConsole.Instance.Output("The current estate has no owner set."); + MainConsole.Instance.OutputFormat("Estate {0} has no owner set.", m_regInfo.EstateSettings.EstateName); List excluded = new List(new char[1]{' '}); string first = MainConsole.Instance.CmdPrompt("Estate owner first name", "Test", excluded); string last = MainConsole.Instance.CmdPrompt("Estate owner last name", "User", excluded); From 97d46648cdde5d8237d1241f3dc47fc455b35d33 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Tue, 22 Mar 2011 16:42:12 -0400 Subject: [PATCH 09/42] More SQLite work. --- bin/Mono.Data.Sqlite.dll.config | 4 ++++ bin/libsqlite3_32.so | Bin 0 -> 635852 bytes bin/{libsqlite3.so.0 => libsqlite3_64.so} | Bin 871398 -> 783200 bytes prebuild.xml | 4 ++-- 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 bin/Mono.Data.Sqlite.dll.config create mode 100755 bin/libsqlite3_32.so rename bin/{libsqlite3.so.0 => libsqlite3_64.so} (89%) diff --git a/bin/Mono.Data.Sqlite.dll.config b/bin/Mono.Data.Sqlite.dll.config new file mode 100644 index 0000000000..456461ea44 --- /dev/null +++ b/bin/Mono.Data.Sqlite.dll.config @@ -0,0 +1,4 @@ + + + + diff --git a/bin/libsqlite3_32.so b/bin/libsqlite3_32.so new file mode 100755 index 0000000000000000000000000000000000000000..171ffcd1ccc9caf6e889910de518cd22e158e49f GIT binary patch literal 635852 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
;MFk-(bLJVRokzNJIjN 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

nyOtVy_#^rv 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

HWGsOso+L?jxHH9VN*4wWdK{SIT0od%3@;!C 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 literal 0 HcmV?d00001 diff --git a/bin/libsqlite3.so.0 b/bin/libsqlite3_64.so similarity index 89% rename from bin/libsqlite3.so.0 rename to bin/libsqlite3_64.so index 0512d8a3c0d09d93c9651848dc6d1ce837bff149..2646a9c41e06b1726030664109e642acab0c8a87 100755 GIT binary patch delta 302 zcmXxgt4l;d6vy!yz56^H91ynnirds6hzREvy8~jhSWG7W02NN(y9&Q-6Tu=_tQMn_ zEC$np53tF-?)o?famt7Ja?XSqV&!SL*za{0-pKu*+^xEX%iXM-IbvZiJRv+OoC(*2 z>%tA;rf^HRea-azf{PC-F}R}K6Jkk>{IH$jw4`-Ehos@;zLsIS()$u(r2|tH>41d| zBn^HG;ZxZ`H1<#!yGX`9!bmwlR0d659O>dQlGQ%KSRdT1ck0+4)0#g+p~0Uc8J7rO n$_=7%i^8}=G7`eK@_=YOqA=c(43FSD-B$1Q?^{YN|Iqv|@t16; delta 85015 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 - - + + From be878795aa67acb486113eb4d9cdf7154f4d8408 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Tue, 22 Mar 2011 17:36:01 -0400 Subject: [PATCH 10/42] Typo fix --- bin/Mono.Data.Sqlite.dll.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/Mono.Data.Sqlite.dll.config b/bin/Mono.Data.Sqlite.dll.config index 456461ea44..de0c17dbee 100644 --- a/bin/Mono.Data.Sqlite.dll.config +++ b/bin/Mono.Data.Sqlite.dll.config @@ -1,4 +1,4 @@ - + From b34743e5fe6b0783caa62c014ff86e2ec76c8184 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 22 Mar 2011 23:47:36 +0000 Subject: [PATCH 11/42] Add an initial confidence-building TestAddObject() for prim counts. --- .../World/Land/LandManagementModule.cs | 29 +++---- .../CoreModules/World/Land/PrimCountModule.cs | 23 ++++-- .../World/Land/Tests/PrimCountModuleTests.cs | 75 +++++++++++++++++++ OpenSim/Region/Framework/Scenes/SceneGraph.cs | 13 ++-- prebuild.xml | 1 + 5 files changed, 116 insertions(+), 25 deletions(-) create mode 100644 OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 98ba8c3c8c..514be4f498 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -306,6 +306,9 @@ namespace OpenSim.Region.CoreModules.World.Land /// The parcel created. protected ILandObject CreateDefaultParcel() { +// m_log.DebugFormat( +// "[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName); + ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; @@ -579,7 +582,7 @@ namespace OpenSim.Region.CoreModules.World.Land } else { - m_log.WarnFormat("[LAND]: Invalid local land ID {0}", landLocalID); + m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Invalid local land ID {0}", landLocalID); } } @@ -630,7 +633,7 @@ namespace OpenSim.Region.CoreModules.World.Land { if (m_landIDList[x, y] == local_id) { - m_log.WarnFormat("[LAND]: Not removing land object {0}; still being used at {1}, {2}", + m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Not removing land object {0}; still being used at {1}, {2}", local_id, x, y); return; //throw new Exception("Could not remove land object. Still being used at " + x + ", " + y); @@ -1198,7 +1201,7 @@ namespace OpenSim.Region.CoreModules.World.Land } else { - m_log.WarnFormat("[PARCEL]: Invalid land object {0} passed for parcel object owner request", local_id); + m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Invalid land object {0} passed for parcel object owner request", local_id); } } @@ -1426,7 +1429,7 @@ namespace OpenSim.Region.CoreModules.World.Land { IClientAPI client; if (! m_scene.TryGetClient(agentID, out client)) { - m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString()); + m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Unable to retrieve IClientAPI for {0}", agentID); return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); } @@ -1475,7 +1478,7 @@ namespace OpenSim.Region.CoreModules.World.Land } else { - m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); + m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Unable to find parcelID {0}", parcelID); } return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); } @@ -1533,17 +1536,17 @@ namespace OpenSim.Region.CoreModules.World.Land } catch (LLSD.LLSDParseException e) { - m_log.ErrorFormat("[LAND] Fetch error: {0}", e.Message); - m_log.ErrorFormat("[LAND] ... in request {0}", request); + m_log.ErrorFormat("[LAND MANAGEMENT MODULE]: Fetch error: {0}", e.Message); + m_log.ErrorFormat("[LAND MANAGEMENT MODULE]: ... in request {0}", request); } - catch(InvalidCastException) + catch (InvalidCastException) { - m_log.ErrorFormat("[LAND] Wrong type in request {0}", request); + m_log.ErrorFormat("[LAND MANAGEMENT MODULE]: Wrong type in request {0}", request); } LLSDRemoteParcelResponse response = new LLSDRemoteParcelResponse(); response.parcel_id = parcelID; - m_log.DebugFormat("[LAND] got parcelID {0}", parcelID); + m_log.DebugFormat("[LAND MANAGEMENT MODULE]: Got parcelID {0}", parcelID); return LLSDHelpers.SerialiseLLSDReply(response); } @@ -1564,7 +1567,7 @@ namespace OpenSim.Region.CoreModules.World.Land ExtendedLandData extLandData = new ExtendedLandData(); Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, out extLandData.X, out extLandData.Y); - m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", + m_log.DebugFormat("[LAND MANAGEMENT MODULE]: Got parcelinfo request for regionHandle {0}, x/y {1}/{2}", extLandData.RegionHandle, extLandData.X, extLandData.Y); // for this region or for somewhere else? @@ -1605,7 +1608,7 @@ namespace OpenSim.Region.CoreModules.World.Land info = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y); } // we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark. - m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...", + m_log.DebugFormat("[LAND MANAGEMENT MODULE]: got parcelinfo for parcel {0} in region {1}; sending...", data.LandData.Name, data.RegionHandle); // HACK for now RegionInfo r = new RegionInfo(); @@ -1616,7 +1619,7 @@ namespace OpenSim.Region.CoreModules.World.Land remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y); } else - m_log.Debug("[LAND] got no parcelinfo; not sending"); + m_log.Debug("[LAND MANAGEMENT MODULE]: got no parcelinfo; not sending"); } public void setParcelOtherCleanTime(IClientAPI remoteClient, int localID, int otherCleanTime) diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index 34ef67f10b..c71264cf18 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs @@ -51,8 +51,8 @@ namespace OpenSim.Region.CoreModules.World.Land public class PrimCountModule : IPrimCountModule, INonSharedRegionModule { - private static readonly ILog m_log = - LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); +// private static readonly ILog m_log = +// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private Scene m_Scene; private Dictionary m_PrimCounts = @@ -64,10 +64,16 @@ namespace OpenSim.Region.CoreModules.World.Land private Dictionary m_ParcelCounts = new Dictionary(); - // For now, a simple simwide taint to get this up. Later parcel based - // taint to allow recounting a parcel if only ownership has changed - // without recounting the whole sim. + + /// + /// For now, a simple simwide taint to get this up. Later parcel based + /// taint to allow recounting a parcel if only ownership has changed + /// without recounting the whole sim. + /// + /// We start out tainted so that the first get call resets the various prim counts. + /// private bool m_Tainted = true; + private Object m_TaintLock = new Object(); public Type ReplaceableInterface @@ -156,6 +162,8 @@ namespace OpenSim.Region.CoreModules.World.Land // NOTE: Call under Taint Lock private void AddObject(SceneObjectGroup obj) { +// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} to prim count", obj.Name); + if (obj.IsAttachment) return; if (((obj.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0)) @@ -299,18 +307,21 @@ namespace OpenSim.Region.CoreModules.World.Land // NOTE: This method MUST be called while holding the taint lock! private void Recount() { +// m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName); + m_OwnerMap.Clear(); m_SimwideCounts.Clear(); m_ParcelCounts.Clear(); List land = m_Scene.LandChannel.AllParcels(); - + foreach (ILandObject l in land) { LandData landData = l.LandData; m_OwnerMap[landData.GlobalID] = landData.OwnerID; m_SimwideCounts[landData.OwnerID] = 0; +// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding parcel count for {0}", landData.GlobalID); m_ParcelCounts[landData.GlobalID] = new ParcelCounts(); } diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs new file mode 100644 index 0000000000..402965fcf7 --- /dev/null +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -0,0 +1,75 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Reflection; +using log4net.Config; +using NUnit.Framework; +using OpenMetaverse; +using OpenMetaverse.Assets; +using OpenSim.Framework; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Tests.Common; +using OpenSim.Tests.Common.Mock; +using OpenSim.Tests.Common.Setup; + +namespace OpenSim.Region.CoreModules.World.Land.Tests +{ + [TestFixture] + public class PrimCountModuleTests + { + [Test] + public void TestAddObject() + { + TestHelper.InMethod(); +// log4net.Config.XmlConfigurator.Configure(); + + PrimCountModule pcm = new PrimCountModule(); + LandManagementModule lmm = new LandManagementModule(); + Scene scene = SceneSetupHelpers.SetupScene(); + SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); + + ILandObject lo = new LandObject(UUID.Zero, false, scene); + lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); + lmm.AddLandObject(lo); + //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); + + string objName = "obj1"; + UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001"); + + SceneObjectPart part + = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + { Name = objName, UUID = objUuid }; + + scene.AddNewSceneObject(new SceneObjectGroup(part), false); + + Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); + } + } +} \ No newline at end of file diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 734ba22e9c..eca2786c97 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -627,7 +627,7 @@ namespace OpenSim.Region.Framework.Scenes if (!Entities.Remove(agentID)) { m_log.WarnFormat( - "[SCENE]: Tried to remove non-existent scene presence with agent ID {0} from scene Entities list", + "[SCENEGRAPH]: Tried to remove non-existent scene presence with agent ID {0} from scene Entities list", agentID); } @@ -650,7 +650,7 @@ namespace OpenSim.Region.Framework.Scenes } else { - m_log.WarnFormat("[SCENE]: Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID); + m_log.WarnFormat("[SCENEGRAPH]: Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID); } } } @@ -1079,7 +1079,8 @@ namespace OpenSim.Region.Framework.Scenes catch (Exception e) { // Catch it and move on. This includes situations where splist has inconsistent info - m_log.WarnFormat("[SCENE]: Problem processing action in ForEachSOG: ", e.ToString()); + m_log.WarnFormat( + "[SCENEGRAPH]: Problem processing action in ForEachSOG: {0} {1}", e.Message, e.StackTrace); } } } @@ -1103,8 +1104,8 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.Info("[BUG] in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString()); - m_log.Info("[BUG] Stack Trace: " + e.StackTrace); + m_log.Info("[SCENEGRAPH]: Error in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString()); + m_log.Info("[SCENEGRAPH]: Stack Trace: " + e.StackTrace); } }); Parallel.ForEach(GetScenePresences(), protectedAction); @@ -1119,7 +1120,7 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.Info("[BUG] in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString()); + m_log.Error("[SCENEGRAPH]: Error in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString()); } } } diff --git a/prebuild.xml b/prebuild.xml index 910cb31bef..d564341901 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -2927,6 +2927,7 @@ + From 9c979dd0fc468ec5b15bb9b3db2eae55db53c0bc Mon Sep 17 00:00:00 2001 From: Marck Date: Wed, 23 Mar 2011 08:35:39 +0100 Subject: [PATCH 12/42] Fix a typo in the SQLite DLL config and amend the instructions for running on Linux. Under Linux (and probably also under OSX), the operating system must be able to find the new SQLite DLL in the library search path. --- README.txt | 2 +- bin/Mono.Data.Sqlite.dll.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.txt b/README.txt index 391a6599d1..8d925b5df6 100644 --- a/README.txt +++ b/README.txt @@ -44,7 +44,7 @@ for more information. To run OpenSim, from the unpacked distribution type: * cd bin - * mono OpenSim.exe + * LD_LIBRARY_PATH=. mono OpenSim.exe Now see the "Configuring OpenSim" section diff --git a/bin/Mono.Data.Sqlite.dll.config b/bin/Mono.Data.Sqlite.dll.config index de0c17dbee..0c5e9412f2 100644 --- a/bin/Mono.Data.Sqlite.dll.config +++ b/bin/Mono.Data.Sqlite.dll.config @@ -1,4 +1,4 @@ - + From d011896341d09ce6c10a801264e663b6a19f0b48 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 21:50:56 +0000 Subject: [PATCH 13/42] Add generic EventManager.OnObjectAddedToScene and get PrimCountModule to listen for that rather than EventManager.OnParcelPrimCountAdd OnParcelPrimCountAdd had the wrong semantics for the PrimCountModule - it was invoked for every entity in the scene, not just new ones, which would screw up the untainted count. Extend automated test for this scenario. --- .../World/Land/LandManagementModule.cs | 4 +++ .../CoreModules/World/Land/PrimCountModule.cs | 10 +++++-- .../World/Land/Tests/PrimCountModuleTests.cs | 2 ++ .../Region/Framework/Scenes/EventManager.cs | 30 +++++++++++++++++++ OpenSim/Region/Framework/Scenes/Scene.cs | 18 +++++++++-- 5 files changed, 59 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 514be4f498..4d887a816e 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -854,6 +854,10 @@ namespace OpenSim.Region.CoreModules.World.Land public void EventManagerOnParcelPrimCountUpdate() { +// m_log.DebugFormat( +// "[LAND MANAGEMENT MODULE]: Triggered EventManagerOnParcelPrimCountUpdate() for {0}", +// m_scene.RegionInfo.RegionName); + ResetAllLandPrimCounts(); EntityBase[] entities = m_scene.Entities.GetEntities(); foreach (EntityBase obj in entities) diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index c71264cf18..5371aaf85c 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs @@ -89,8 +89,7 @@ namespace OpenSim.Region.CoreModules.World.Land { m_Scene = scene; - m_Scene.EventManager.OnParcelPrimCountAdd += - OnParcelPrimCountAdd; + m_Scene.EventManager.OnObjectAddedToScene += OnParcelPrimCountAdd; m_Scene.EventManager.OnObjectBeingRemovedFromScene += OnObjectBeingRemovedFromScene; m_Scene.EventManager.OnParcelPrimCountTainted += @@ -116,6 +115,7 @@ namespace OpenSim.Region.CoreModules.World.Land private void OnParcelPrimCountAdd(SceneObjectGroup obj) { + Console.WriteLine("WIBBLE"); // If we're tainted already, don't bother to add. The next // access will cause a recount anyway lock (m_TaintLock) @@ -172,6 +172,10 @@ namespace OpenSim.Region.CoreModules.World.Land Vector3 pos = obj.AbsolutePosition; ILandObject landObject = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y); LandData landData = landObject.LandData; + +// m_log.DebugFormat( +// "[PRIM COUNT MODULE]: Object {0} is owned by {1} over land owned by {2}", +// obj.Name, obj.OwnerID, landData.OwnerID); ParcelCounts parcelCounts; if (m_ParcelCounts.TryGetValue(landData.GlobalID, out parcelCounts)) @@ -228,6 +232,8 @@ namespace OpenSim.Region.CoreModules.World.Land public int GetOwnerCount(UUID parcelID) { +// m_log.DebugFormat("[PRIM COUNT MODULE]: GetOwnerCount for {0}", parcelID); + lock (m_TaintLock) { if (m_Tainted) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index 402965fcf7..fd332ed50c 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -67,6 +67,8 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = objName, UUID = objUuid }; + Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); + scene.AddNewSceneObject(new SceneObjectGroup(part), false); Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index c321a15866..fd6253533a 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -242,7 +242,15 @@ namespace OpenSim.Region.Framework.Scenes public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID); public event EstateToolsSunUpdate OnEstateToolsSunUpdate; + + ///

+ /// Triggered when an object is added to the scene. + /// + public event Action OnObjectAddedToScene; + /// + /// Triggered when an object is removed from the scene. + /// public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj); public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene; @@ -345,6 +353,7 @@ namespace OpenSim.Region.Framework.Scenes public delegate void Attach(uint localID, UUID itemID, UUID avatarID); public event Attach OnAttach; + /// /// Called immediately after an object is loaded from storage. /// @@ -800,6 +809,27 @@ namespace OpenSim.Region.Framework.Scenes } } + public void TriggerObjectAddedToScene(SceneObjectGroup obj) + { + Action handler = OnObjectAddedToScene; + if (handler != null) + { + foreach (Action d in handler.GetInvocationList()) + { + try + { + d(obj); + } + catch (Exception e) + { + m_log.ErrorFormat( + "[EVENT MANAGER]: Delegate for TriggerObjectAddedToScene failed - continuing. {0} {1}", + e.Message, e.StackTrace); + } + } + } + } + public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) { ObjectBeingRemovedFromScene handlerObjectBeingRemovedFromScene = OnObjectBeingRemovedFromScene; diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 4d2519d694..d407a6f033 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1956,8 +1956,14 @@ namespace OpenSim.Region.Framework.Scenes /// If false, it is left to the caller to schedule the update /// public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates) - { - return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates); + { + if (m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates)) + { + EventManager.TriggerObjectAddedToScene(sceneObject); + return true; + } + + return false; } /// @@ -1974,7 +1980,13 @@ namespace OpenSim.Region.Framework.Scenes public bool AddNewSceneObject( SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) { - return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel); + if (m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel)) + { + EventManager.TriggerObjectAddedToScene(sceneObject); + return true; + } + + return false; } /// From 67cafbd33aeb1038f22aa775cbde96b4c89dd770 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 21:54:02 +0000 Subject: [PATCH 14/42] remove a rogue Console.WriteLine() from the last commit. --- OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index 5371aaf85c..46c7eedb1f 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs @@ -115,7 +115,6 @@ namespace OpenSim.Region.CoreModules.World.Land private void OnParcelPrimCountAdd(SceneObjectGroup obj) { - Console.WriteLine("WIBBLE"); // If we're tainted already, don't bother to add. The next // access will cause a recount anyway lock (m_TaintLock) From 08c3cd6b369e2bb8dfa08709c2ffddaea4cdbaa5 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 22:04:14 +0000 Subject: [PATCH 15/42] Add method doc to the Get*() methods on PrimCountModule --- .../CoreModules/World/Land/PrimCountModule.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index 46c7eedb1f..ae85798172 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs @@ -229,6 +229,12 @@ namespace OpenSim.Region.CoreModules.World.Land return primCounts; } + + /// + /// Get the number of prims on the parcel that are owned by the parcel owner. + /// + /// + /// public int GetOwnerCount(UUID parcelID) { // m_log.DebugFormat("[PRIM COUNT MODULE]: GetOwnerCount for {0}", parcelID); @@ -245,6 +251,11 @@ namespace OpenSim.Region.CoreModules.World.Land return 0; } + /// + /// Get the number of prims on the parcel that have been set to the group that owns the parcel. + /// + /// + /// public int GetGroupCount(UUID parcelID) { lock (m_TaintLock) @@ -259,6 +270,11 @@ namespace OpenSim.Region.CoreModules.World.Land return 0; } + /// + /// Get the number of prims on the parcel that are not owned by the parcel owner or set to the parcel group. + /// + /// + /// public int GetOthersCount(UUID parcelID) { lock (m_TaintLock) @@ -273,6 +289,11 @@ namespace OpenSim.Region.CoreModules.World.Land return 0; } + /// + /// Get the number of prims that are in the entire simulator for the owner of this parcel. + /// + /// + /// public int GetSimulatorCount(UUID parcelID) { lock (m_TaintLock) @@ -291,6 +312,12 @@ namespace OpenSim.Region.CoreModules.World.Land return 0; } + /// + /// Get the number of prims that a particular user owns on this parcel. + /// + /// + /// + /// public int GetUserCount(UUID parcelID, UUID userID) { lock (m_TaintLock) From 654aa7abeb497e024c87e2ef8d610ba3ca512c3e Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 22:12:20 +0000 Subject: [PATCH 16/42] Extend simple PCM add object test to check all counts --- .../World/Land/Tests/PrimCountModuleTests.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index fd332ed50c..88c814edc5 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -55,6 +55,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Scene scene = SceneSetupHelpers.SetupScene(); SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); + UUID dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); ILandObject lo = new LandObject(UUID.Zero, false, scene); lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); lmm.AddLandObject(lo); @@ -68,10 +69,20 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests { Name = objName, UUID = objUuid }; Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, UUID.Zero), Is.EqualTo(0)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); + Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(0)); scene.AddNewSceneObject(new SceneObjectGroup(part), false); Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, UUID.Zero), Is.EqualTo(1)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); + Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(1)); } } } \ No newline at end of file From f1f4985ab6fc98daf2263f72397fe7db79b20ecd Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 22:14:04 +0000 Subject: [PATCH 17/42] user a non UUID.Zero user in pcm test to avoid any special treatment of UUID.Zero --- .../CoreModules/World/Land/Tests/PrimCountModuleTests.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index 88c814edc5..639d78121c 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -55,8 +55,9 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Scene scene = SceneSetupHelpers.SetupScene(); SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); + UUID userId = new UUID("00000000-0000-0000-0000-000000000010"); UUID dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); - ILandObject lo = new LandObject(UUID.Zero, false, scene); + ILandObject lo = new LandObject(userId, false, scene); lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); lmm.AddLandObject(lo); //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); @@ -65,13 +66,13 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001"); SceneObjectPart part - = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) { Name = objName, UUID = objUuid }; Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, UUID.Zero), Is.EqualTo(0)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(0)); Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(0)); @@ -80,7 +81,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, UUID.Zero), Is.EqualTo(1)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(1)); Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(1)); } From 88673c86a4b9cde729c62fbdc92b8c9076c54230 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 22:17:47 +0000 Subject: [PATCH 18/42] use a 3 part object for the pcm test rather than a 1 part, for improved test coverage --- .../World/Land/Tests/PrimCountModuleTests.cs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index 639d78121c..8c1b6a3370 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -61,13 +61,17 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); lmm.AddLandObject(lo); //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); - - string objName = "obj1"; - UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001"); - - SceneObjectPart part + + SceneObjectPart part1 = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) - { Name = objName, UUID = objUuid }; + { Name = "obj1", UUID = new UUID("00000000-0000-0000-0000-000000000001") }; + SceneObjectGroup sog = new SceneObjectGroup(part1); + sog.AddPart( + new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + { Name = "obj2", UUID = new UUID("00000000-0000-0000-0000-000000000002") }); + sog.AddPart( + new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + { Name = "obj3", UUID = new UUID("00000000-0000-0000-0000-000000000003") }); Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); @@ -76,14 +80,14 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(0)); - scene.AddNewSceneObject(new SceneObjectGroup(part), false); + scene.AddNewSceneObject(sog, false); - Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(3)); Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(1)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(3)); Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); - Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(3)); } } } \ No newline at end of file From de88227bc486788197b3a7c842c8b60f82b0a29b Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 22:29:27 +0000 Subject: [PATCH 19/42] refactor: simplify part of AddSceneObject() test setup by moving sog construction into SceneSetupHelpers.CreateSceneObject() --- .../World/Land/Tests/PrimCountModuleTests.cs | 11 +------ .../Tests/Common/Setup/SceneSetupHelpers.cs | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index 8c1b6a3370..72f74fa5c9 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -62,16 +62,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests lmm.AddLandObject(lo); //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); - SceneObjectPart part1 - = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) - { Name = "obj1", UUID = new UUID("00000000-0000-0000-0000-000000000001") }; - SceneObjectGroup sog = new SceneObjectGroup(part1); - sog.AddPart( - new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) - { Name = "obj2", UUID = new UUID("00000000-0000-0000-0000-000000000002") }); - sog.AddPart( - new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) - { Name = "obj3", UUID = new UUID("00000000-0000-0000-0000-000000000003") }); + SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, userId); Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs index aa4b285981..b7b7383bfc 100644 --- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs +++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs @@ -465,5 +465,37 @@ namespace OpenSim.Tests.Common.Setup return part; } + + /// + /// Create a scene object but do not add it to the scene. + /// + /// + /// UUID always starts at 00000000-0000-0000-0000-000000000001 + /// + /// The number of parts that should be in the scene object + /// + /// + public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId) + { + SceneObjectPart rootPart + = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + { Name = "part1", UUID = new UUID("00000000-0000-0000-0000-000000000001") }; + SceneObjectGroup sog = new SceneObjectGroup(rootPart); + + if (parts > 1) + { + for (int i = 2; i <= parts; i++) + { + sog.AddPart( + new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + { + Name = string.Format("obj{0}", i), + UUID = new UUID(string.Format("00000000-0000-0000-0000-{0:D12}", i)) + }); + } + } + + return sog; + } } } From d5c7ae5c6b55ae794f630ae55a100b19eef2362c Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 22:40:23 +0000 Subject: [PATCH 20/42] refactor common sop setup parts into a single method --- .../Tests/Common/Setup/SceneSetupHelpers.cs | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs index b7b7383bfc..87b63894f2 100644 --- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs +++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs @@ -454,9 +454,7 @@ namespace OpenSim.Tests.Common.Setup /// public static SceneObjectPart AddSceneObject(Scene scene, string name) { - SceneObjectPart part - = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); - part.Name = name; + SceneObjectPart part = CreateSceneObjectPart(name, UUID.Random(), UUID.Zero); //part.UpdatePrimFlags(false, false, true); //part.ObjectFlags |= (uint)PrimFlags.Phantom; @@ -466,6 +464,20 @@ namespace OpenSim.Tests.Common.Setup return part; } + /// + /// Create a scene object part. + /// + /// + /// + /// + /// + public static SceneObjectPart CreateSceneObjectPart(string name, UUID id, UUID ownerId) + { + return new SceneObjectPart( + ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) + { Name = name, UUID = id }; + } + /// /// Create a scene object but do not add it to the scene. /// @@ -477,25 +489,19 @@ namespace OpenSim.Tests.Common.Setup /// public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId) { - SceneObjectPart rootPart - = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) - { Name = "part1", UUID = new UUID("00000000-0000-0000-0000-000000000001") }; - SceneObjectGroup sog = new SceneObjectGroup(rootPart); + SceneObjectGroup sog + = new SceneObjectGroup( + CreateSceneObjectPart("part1", new UUID("00000000-0000-0000-0000-000000000001"), ownerId)); if (parts > 1) - { for (int i = 2; i <= parts; i++) - { sog.AddPart( - new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) - { - Name = string.Format("obj{0}", i), - UUID = new UUID(string.Format("00000000-0000-0000-0000-{0:D12}", i)) - }); - } - } + CreateSceneObjectPart( + string.Format("obj{0}", i), + new UUID(string.Format("00000000-0000-0000-0000-{0:D12}", i)), + ownerId)); return sog; } } -} +} \ No newline at end of file From ebbe3afaf15fa07f4a8d1c2db8795065b852ec8d Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 23:14:55 +0000 Subject: [PATCH 21/42] Add PrimCountModuleTests.TestRemoveOwnerObject(). Also adds SceneSetupHelpers methods to easily create sogs with different part UUIDs --- .../World/Land/Tests/PrimCountModuleTests.cs | 39 ++++++++++++++++++- .../Tests/Common/Setup/SceneSetupHelpers.cs | 27 ++++++++++--- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index 72f74fa5c9..e6b8627552 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -44,8 +44,11 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests [TestFixture] public class PrimCountModuleTests { + /// + /// Test count after a parcel owner owned object is added. + /// [Test] - public void TestAddObject() + public void TestAddOwnerObject() { TestHelper.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -80,5 +83,39 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(3)); } + + /// + /// Test count after a parcel owner owned object is removed. + /// + [Test] + public void TestRemoveOwnerObject() + { + TestHelper.InMethod(); +// log4net.Config.XmlConfigurator.Configure(); + + PrimCountModule pcm = new PrimCountModule(); + LandManagementModule lmm = new LandManagementModule(); + Scene scene = SceneSetupHelpers.SetupScene(); + SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); + + UUID userId = new UUID("00000000-0000-0000-0000-000000000010"); + UUID dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); + ILandObject lo = new LandObject(userId, false, scene); + lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); + lmm.AddLandObject(lo); + //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); + + scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, userId, 0x1), false); + SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, userId, 0x10); + scene.AddNewSceneObject(sogToDelete, false); + scene.DeleteSceneObject(sogToDelete, false); + + Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(1)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); + Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(1)); + } } } \ No newline at end of file diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs index 87b63894f2..57850c1cc7 100644 --- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs +++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs @@ -488,20 +488,37 @@ namespace OpenSim.Tests.Common.Setup /// /// public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId) - { + { + return CreateSceneObject(parts, ownerId, 0x1); + } + + /// + /// Create a scene object but do not add it to the scene. + /// + /// The number of parts that should be in the scene object + /// + /// + /// The hexadecimal last part of the UUID for parts created. A UUID of the form "00000000-0000-0000-0000-{0:XD12}" + /// will be given to the root part, and incremented for each part thereafter. + /// + /// + public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId, int uuidTail) + { + string rawSogId = string.Format("00000000-0000-0000-0000-{0:X12}", uuidTail); + SceneObjectGroup sog = new SceneObjectGroup( - CreateSceneObjectPart("part1", new UUID("00000000-0000-0000-0000-000000000001"), ownerId)); + CreateSceneObjectPart("part0", new UUID(rawSogId), ownerId)); if (parts > 1) - for (int i = 2; i <= parts; i++) + for (int i = 1; i < parts; i++) sog.AddPart( CreateSceneObjectPart( string.Format("obj{0}", i), - new UUID(string.Format("00000000-0000-0000-0000-{0:D12}", i)), + new UUID(string.Format("00000000-0000-0000-0000-{0:X12}", uuidTail + i)), ownerId)); return sog; - } + } } } \ No newline at end of file From f001aab8aa5f3ceebe259ff89673c7757b16c637 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 23:19:15 +0000 Subject: [PATCH 22/42] extend TestAddOwnerObject() to add a second object --- .../World/Land/Tests/PrimCountModuleTests.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index e6b8627552..a0e7e4c1ae 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -58,15 +58,13 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Scene scene = SceneSetupHelpers.SetupScene(); SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); - UUID userId = new UUID("00000000-0000-0000-0000-000000000010"); + UUID userId = new UUID("00000000-0000-0000-0000-100000000000"); UUID dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); ILandObject lo = new LandObject(userId, false, scene); lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); lmm.AddLandObject(lo); //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); - - SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, userId); - + Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); @@ -74,6 +72,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(0)); + SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, userId, 0x01); scene.AddNewSceneObject(sog, false); Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(3)); @@ -82,6 +81,17 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(3)); Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(3)); + + // Add a second object and retest + SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, userId, 0x10); + scene.AddNewSceneObject(sog2, false); + + Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(5)); + Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(5)); + Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); + Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(5)); } /// From eaa37d15f26adda05cbcc44404b586551d86e983 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 23 Mar 2011 23:28:10 +0000 Subject: [PATCH 23/42] factor out common test setup code in PCM tests --- .../World/Land/Tests/PrimCountModuleTests.cs | 110 +++++++++--------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index a0e7e4c1ae..45e579e1b7 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -44,6 +44,26 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests [TestFixture] public class PrimCountModuleTests { + protected UUID m_userId = new UUID("00000000-0000-0000-0000-100000000000"); + protected UUID m_dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); + protected TestScene m_scene; + protected PrimCountModule m_pcm; + protected ILandObject m_lo; + + [SetUp] + public void SetUp() + { + m_pcm = new PrimCountModule(); + LandManagementModule lmm = new LandManagementModule(); + m_scene = SceneSetupHelpers.SetupScene(); + SceneSetupHelpers.SetupSceneModules(m_scene, lmm, m_pcm); + + m_lo = new LandObject(m_userId, false, m_scene); + m_lo.SetLandBitmap(m_lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); + lmm.AddLandObject(m_lo); + //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); + } + /// /// Test count after a parcel owner owned object is added. /// @@ -51,47 +71,35 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests public void TestAddOwnerObject() { TestHelper.InMethod(); -// log4net.Config.XmlConfigurator.Configure(); - - PrimCountModule pcm = new PrimCountModule(); - LandManagementModule lmm = new LandManagementModule(); - Scene scene = SceneSetupHelpers.SetupScene(); - SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); - - UUID userId = new UUID("00000000-0000-0000-0000-100000000000"); - UUID dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); - ILandObject lo = new LandObject(userId, false, scene); - lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); - lmm.AddLandObject(lo); - //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); +// log4net.Config.XmlConfigurator.Configure(); - Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); - Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(0)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); + Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, userId, 0x01); - scene.AddNewSceneObject(sog, false); + SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); + m_scene.AddNewSceneObject(sog, false); - Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(3)); - Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(3)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); - Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(3)); + Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(3)); + Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(3)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); + Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(3)); // Add a second object and retest - SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, userId, 0x10); - scene.AddNewSceneObject(sog2, false); + SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, 0x10); + m_scene.AddNewSceneObject(sog2, false); - Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(5)); - Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(5)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); - Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(5)); + Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(5)); + Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(5)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); + Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(5)); } /// @@ -103,29 +111,17 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests TestHelper.InMethod(); // log4net.Config.XmlConfigurator.Configure(); - PrimCountModule pcm = new PrimCountModule(); - LandManagementModule lmm = new LandManagementModule(); - Scene scene = SceneSetupHelpers.SetupScene(); - SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm); + m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_userId, 0x1), false); + SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x10); + m_scene.AddNewSceneObject(sogToDelete, false); + m_scene.DeleteSceneObject(sogToDelete, false); - UUID userId = new UUID("00000000-0000-0000-0000-000000000010"); - UUID dummyUserId = new UUID("99999999-9999-9999-9999-999999999999"); - ILandObject lo = new LandObject(userId, false, scene); - lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); - lmm.AddLandObject(lo); - //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); - - scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, userId, 0x1), false); - SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, userId, 0x10); - scene.AddNewSceneObject(sogToDelete, false); - scene.DeleteSceneObject(sogToDelete, false); - - Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1)); - Assert.That(pcm.GetGroupCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetOthersCount(lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, userId), Is.EqualTo(1)); - Assert.That(pcm.GetUserCount(lo.LandData.GlobalID, dummyUserId), Is.EqualTo(0)); - Assert.That(pcm.GetSimulatorCount(lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(1)); + Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); + Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(1)); } } } \ No newline at end of file From 7f5019b0f23959ca049f87b596bc2bd47725eb0d Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 25 Mar 2011 21:47:54 +0000 Subject: [PATCH 24/42] Add ILandObject.IPrimCounts for the new prim count module. Not functional yet, but tests now act against this object rather than interrogating the module directly --- .../World/Land/LandManagementModule.cs | 12 +++- .../CoreModules/World/Land/LandObject.cs | 4 +- .../CoreModules/World/Land/PrimCountModule.cs | 2 + .../World/Land/Tests/PrimCountModuleTests.cs | 60 ++++++++++--------- .../Framework/Interfaces/ILandObject.cs | 5 ++ 5 files changed, 52 insertions(+), 31 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 4d887a816e..d0727d958c 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -72,6 +72,7 @@ namespace OpenSim.Region.CoreModules.World.Land protected Commander m_commander = new Commander("land"); protected IUserManagement m_userManager; + protected IPrimCountModule m_primCountModule; // Minimum for parcels to work is 64m even if we don't actually use them. #pragma warning disable 0429 @@ -147,6 +148,7 @@ namespace OpenSim.Region.CoreModules.World.Land public void RegionLoaded(Scene scene) { m_userManager = m_scene.RequestModuleInterface(); + m_primCountModule = m_scene.RequestModuleInterface(); } public void RemoveRegion(Scene scene) @@ -309,10 +311,11 @@ namespace OpenSim.Region.CoreModules.World.Land // m_log.DebugFormat( // "[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName); - ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); + ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch(); + return AddLandObject(fullSimParcel); } @@ -593,6 +596,11 @@ namespace OpenSim.Region.CoreModules.World.Land public ILandObject AddLandObject(ILandObject land) { ILandObject new_land = land.Copy(); + + // Only now can we add the prim counts to the land object - we rely on the global ID which is generated + // as a random UUID inside LandData initialization + if (m_primCountModule != null) + new_land.PrimCounts = m_primCountModule.GetPrimCounts(new_land.LandData.GlobalID); lock (m_landList) { @@ -1368,7 +1376,7 @@ namespace OpenSim.Region.CoreModules.World.Land { ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene); new_land.LandData = data.Copy(); - new_land.SetLandBitmapFromByteArray(); + new_land.SetLandBitmapFromByteArray(); AddLandObject(new_land); } diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 46c15ed2c3..749bb3d8cd 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs @@ -51,7 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Land private int m_lastSeqId = 0; - protected LandData m_landData = new LandData(); + protected LandData m_landData = new LandData(); protected Scene m_scene; protected List primsOverMe = new List(); protected Dictionary m_listTransactions = new Dictionary(); @@ -79,6 +79,8 @@ namespace OpenSim.Region.CoreModules.World.Land set { m_landData = value; } } + + public IPrimCounts PrimCounts { get; set; } public UUID RegionUUID { diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index ae85798172..9fd347e371 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs @@ -88,6 +88,8 @@ namespace OpenSim.Region.CoreModules.World.Land public void AddRegion(Scene scene) { m_Scene = scene; + + m_Scene.RegisterModuleInterface(this); m_Scene.EventManager.OnObjectAddedToScene += OnParcelPrimCountAdd; m_Scene.EventManager.OnObjectBeingRemovedFromScene += diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index 45e579e1b7..c9d393f4d6 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs @@ -58,9 +58,9 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests m_scene = SceneSetupHelpers.SetupScene(); SceneSetupHelpers.SetupSceneModules(m_scene, lmm, m_pcm); - m_lo = new LandObject(m_userId, false, m_scene); - m_lo.SetLandBitmap(m_lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); - lmm.AddLandObject(m_lo); + ILandObject lo = new LandObject(m_userId, false, m_scene); + lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); + m_lo = lmm.AddLandObject(lo); //scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID); } @@ -72,34 +72,36 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests { TestHelper.InMethod(); // log4net.Config.XmlConfigurator.Configure(); - - Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(0)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); - Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); + + IPrimCounts pc = m_lo.PrimCounts; + + Assert.That(pc.Owner, Is.EqualTo(0)); + Assert.That(pc.Group, Is.EqualTo(0)); + Assert.That(pc.Others, Is.EqualTo(0)); + Assert.That(pc.Users[m_userId], Is.EqualTo(0)); + Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); + Assert.That(pc.Simulator, Is.EqualTo(0)); SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); m_scene.AddNewSceneObject(sog, false); - Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(3)); - Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(3)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); - Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(3)); + Assert.That(pc.Owner, Is.EqualTo(3)); + Assert.That(pc.Group, Is.EqualTo(0)); + Assert.That(pc.Others, Is.EqualTo(0)); + Assert.That(pc.Users[m_userId], Is.EqualTo(3)); + Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); + Assert.That(pc.Simulator, Is.EqualTo(3)); // Add a second object and retest SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, 0x10); m_scene.AddNewSceneObject(sog2, false); - Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(5)); - Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(5)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); - Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(5)); + Assert.That(pc.Owner, Is.EqualTo(5)); + Assert.That(pc.Group, Is.EqualTo(0)); + Assert.That(pc.Others, Is.EqualTo(0)); + Assert.That(pc.Users[m_userId], Is.EqualTo(5)); + Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); + Assert.That(pc.Simulator, Is.EqualTo(5)); } /// @@ -111,17 +113,19 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests TestHelper.InMethod(); // log4net.Config.XmlConfigurator.Configure(); + IPrimCounts pc = m_lo.PrimCounts; + m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_userId, 0x1), false); SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x10); m_scene.AddNewSceneObject(sogToDelete, false); m_scene.DeleteSceneObject(sogToDelete, false); - Assert.That(m_pcm.GetOwnerCount(m_lo.LandData.GlobalID), Is.EqualTo(1)); - Assert.That(m_pcm.GetGroupCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetOthersCount(m_lo.LandData.GlobalID), Is.EqualTo(0)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_userId), Is.EqualTo(1)); - Assert.That(m_pcm.GetUserCount(m_lo.LandData.GlobalID, m_dummyUserId), Is.EqualTo(0)); - Assert.That(m_pcm.GetSimulatorCount(m_lo.LandData.GlobalID), Is.EqualTo(1)); + Assert.That(pc.Owner, Is.EqualTo(1)); + Assert.That(pc.Group, Is.EqualTo(0)); + Assert.That(pc.Others, Is.EqualTo(0)); + Assert.That(pc.Users[m_userId], Is.EqualTo(1)); + Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); + Assert.That(pc.Simulator, Is.EqualTo(1)); } } } \ No newline at end of file diff --git a/OpenSim/Region/Framework/Interfaces/ILandObject.cs b/OpenSim/Region/Framework/Interfaces/ILandObject.cs index eeb9d3ad1d..9c0abdeedc 100644 --- a/OpenSim/Region/Framework/Interfaces/ILandObject.cs +++ b/OpenSim/Region/Framework/Interfaces/ILandObject.cs @@ -45,6 +45,11 @@ namespace OpenSim.Region.Framework.Interfaces bool[,] LandBitmap { get; set; } UUID RegionUUID { get; } + /// + /// Prim counts for this land object. + /// + IPrimCounts PrimCounts { get; set; } + /// /// The start point for the land object. This is the western-most point as one scans land working from /// north to south. From ea72745d43c2c6eced8329801ff8765746be7ddd Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 25 Mar 2011 23:18:47 +0000 Subject: [PATCH 25/42] Log the xml/ini regions config files that opensim loads from, and the regions that it loaded from them This will show up with the lines [REGION LOADER FILE SYSTEM]: Loading config files from ./Regions, etc. --- .../Filesystem/RegionLoaderFileSystem.cs | 24 +++++++++++++++---- prebuild.xml | 1 + 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index 63e09ae401..7cbd5edb62 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs @@ -25,15 +25,19 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using log4net; using System; using System.Collections.Generic; using System.IO; +using System.Reflection; using Nini.Config; namespace OpenSim.Framework.RegionLoader.Filesystem { public class RegionLoaderFileSystem : IRegionLoader { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private IConfigSource m_configSource; public void SetIniConfigSource(IConfigSource configSource) @@ -63,36 +67,48 @@ namespace OpenSim.Framework.RegionLoader.Filesystem string[] configFiles = Directory.GetFiles(regionConfigPath, "*.xml"); string[] iniFiles = Directory.GetFiles(regionConfigPath, "*.ini"); + // Create an empty Regions.ini if there are no existing config files. if (configFiles.Length == 0 && iniFiles.Length == 0) - { + { new RegionInfo("DEFAULT REGION CONFIG", Path.Combine(regionConfigPath, "Regions.ini"), false, m_configSource); iniFiles = Directory.GetFiles(regionConfigPath, "*.ini"); } + + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loading config files from {0}", regionConfigPath); List regionInfos = new List(); int i = 0; foreach (string file in iniFiles) { + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loading config file {0}", file); + IConfigSource source = new IniConfigSource(file); foreach (IConfig config in source.Configs) - { - //m_log.Info("[REGIONLOADERFILESYSTEM]: Creating RegionInfo for " + config.Name); + { RegionInfo regionInfo = new RegionInfo("REGION CONFIG #" + (i + 1), file, false, m_configSource, config.Name); regionInfos.Add(regionInfo); + + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loaded region {0}", regionInfo.RegionName); + i++; } } foreach (string file in configFiles) { + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loading config file {0}", file); + RegionInfo regionInfo = new RegionInfo("REGION CONFIG #" + (i + 1), file, false, m_configSource); regionInfos.Add(regionInfo); + + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loaded region {0}", regionInfo.RegionName); + i++; } return regionInfos.ToArray(); } } -} +} \ No newline at end of file diff --git a/prebuild.xml b/prebuild.xml index d564341901..fac3f208af 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -402,6 +402,7 @@ + From 3a55d59b45dc0cbff938f0101bb6338bd8949e86 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 25 Mar 2011 23:29:06 +0000 Subject: [PATCH 26/42] in region web loader, print out url that config is being loaded from (this wasn't being done anywhere). --- OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs index 0ec4af5c17..de4898a0d7 100644 --- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs @@ -66,9 +66,9 @@ namespace OpenSim.Framework.RegionLoader.Web { HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url); webRequest.Timeout = 30000; //30 Second Timeout - m_log.Debug("[WEBLOADER]: Sending Download Request..."); + m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url); HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); - m_log.Debug("[WEBLOADER]: Downloading Region Information From Remote Server..."); + m_log.Debug("[WEBLOADER]: Downloading region information..."); StreamReader reader = new StreamReader(webResponse.GetResponseStream()); string xmlSource = String.Empty; string tempStr = reader.ReadLine(); From d8e1c380e67512e0476b2a7b7441ae3acbb4606f Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 25 Mar 2011 23:36:58 +0000 Subject: [PATCH 27/42] minor: make it clearer in the log where we're loading region config files and not the regions themselves --- .../LoadRegions/LoadRegionsPlugin.cs | 28 +++++++++---------- .../Filesystem/RegionLoaderFileSystem.cs | 4 +-- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs index f37c399050..e26c1d23b4 100644 --- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs +++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs @@ -68,7 +68,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions public void Initialise() { - m_log.Error("[LOADREGIONS]: " + Name + " cannot be default-initialized!"); + m_log.Error("[LOAD REGIONS PLUGIN]: " + Name + " cannot be default-initialized!"); throw new PluginNotInitialisedException(Name); } @@ -85,41 +85,39 @@ namespace OpenSim.ApplicationPlugins.LoadRegions IRegionLoader regionLoader; if (m_openSim.ConfigSource.Source.Configs["Startup"].GetString("region_info_source", "filesystem") == "filesystem") { - m_log.Info("[LOADREGIONS]: Loading region configurations from filesystem"); + m_log.Info("[LOAD REGIONS PLUGIN]: Loading region configurations from filesystem"); regionLoader = new RegionLoaderFileSystem(); } else { - m_log.Info("[LOADREGIONSPLUGIN]: Loading region configurations from web"); + m_log.Info("[LOAD REGIONS PLUGIN]: Loading region configurations from web"); regionLoader = new RegionLoaderWebServer(); } - m_log.Info("[LOADREGIONSPLUGIN]: Loading region configurations..."); - regionLoader.SetIniConfigSource(m_openSim.ConfigSource.Source); RegionInfo[] regionsToLoad = regionLoader.LoadRegions(); - m_log.Info("[LOADREGIONSPLUGIN]: Loading specific shared modules..."); - m_log.Info("[LOADREGIONSPLUGIN]: DynamicTextureModule..."); + m_log.Info("[LOAD REGIONS PLUGIN]: Loading specific shared modules..."); + m_log.Info("[LOAD REGIONS PLUGIN]: DynamicTextureModule..."); m_openSim.ModuleLoader.LoadDefaultSharedModule(new DynamicTextureModule()); - m_log.Info("[LOADREGIONSPLUGIN]: LoadImageURLModule..."); + m_log.Info("[LOAD REGIONS PLUGIN]: LoadImageURLModule..."); m_openSim.ModuleLoader.LoadDefaultSharedModule(new LoadImageURLModule()); - m_log.Info("[LOADREGIONSPLUGIN]: XMLRPCModule..."); + m_log.Info("[LOAD REGIONS PLUGIN]: XMLRPCModule..."); m_openSim.ModuleLoader.LoadDefaultSharedModule(new XMLRPCModule()); // m_log.Info("[LOADREGIONSPLUGIN]: AssetTransactionModule..."); // m_openSim.ModuleLoader.LoadDefaultSharedModule(new AssetTransactionModule()); - m_log.Info("[LOADREGIONSPLUGIN]: Done."); + m_log.Info("[LOAD REGIONS PLUGIN]: Done."); if (!CheckRegionsForSanity(regionsToLoad)) { - m_log.Error("[LOADREGIONS]: Halting startup due to conflicts in region configurations"); + m_log.Error("[LOAD REGIONS PLUGIN]: Halting startup due to conflicts in region configurations"); Environment.Exit(1); } for (int i = 0; i < regionsToLoad.Length; i++) { IScene scene; - m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + + m_log.Debug("[LOAD REGIONS PLUGIN]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + Thread.CurrentThread.ManagedThreadId.ToString() + ")"); @@ -164,7 +162,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions if (regions[i].RegionID == regions[j].RegionID) { m_log.ErrorFormat( - "[LOADREGIONS]: Regions {0} and {1} have the same UUID {2}", + "[LOAD REGIONS PLUGIN]: Regions {0} and {1} have the same UUID {2}", regions[i].RegionName, regions[j].RegionName, regions[i].RegionID); return false; } @@ -172,14 +170,14 @@ namespace OpenSim.ApplicationPlugins.LoadRegions regions[i].RegionLocX == regions[j].RegionLocX && regions[i].RegionLocY == regions[j].RegionLocY) { m_log.ErrorFormat( - "[LOADREGIONS]: Regions {0} and {1} have the same grid location ({2}, {3})", + "[LOAD REGIONS PLUGIN]: Regions {0} and {1} have the same grid location ({2}, {3})", regions[i].RegionName, regions[j].RegionName, regions[i].RegionLocX, regions[i].RegionLocY); return false; } else if (regions[i].InternalEndPoint.Port == regions[j].InternalEndPoint.Port) { m_log.ErrorFormat( - "[LOADREGIONS]: Regions {0} and {1} have the same internal IP port {2}", + "[LOAD REGIONS PLUGIN]: Regions {0} and {1} have the same internal IP port {2}", regions[i].RegionName, regions[j].RegionName, regions[i].InternalEndPoint.Port); return false; } diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index 7cbd5edb62..0aae4ff353 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs @@ -90,7 +90,7 @@ namespace OpenSim.Framework.RegionLoader.Filesystem RegionInfo regionInfo = new RegionInfo("REGION CONFIG #" + (i + 1), file, false, m_configSource, config.Name); regionInfos.Add(regionInfo); - m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loaded region {0}", regionInfo.RegionName); + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loaded config for region {0}", regionInfo.RegionName); i++; } @@ -103,7 +103,7 @@ namespace OpenSim.Framework.RegionLoader.Filesystem RegionInfo regionInfo = new RegionInfo("REGION CONFIG #" + (i + 1), file, false, m_configSource); regionInfos.Add(regionInfo); - m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loaded region {0}", regionInfo.RegionName); + m_log.InfoFormat("[REGION LOADER FILE SYSTEM]: Loaded config for region {0}", regionInfo.RegionName); i++; } From f30bf429c274c9d6d0cfc99513820f759ca94d3e Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 00:42:48 +0000 Subject: [PATCH 28/42] refactor: rename SOG collections in SceneGraph to make it clearer that they are indexing each part's UUID, not just the root part. --- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index eca2786c97..345ed7a5ef 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -89,8 +89,8 @@ namespace OpenSim.Region.Framework.Scenes protected internal PhysicsScene _PhyScene; - protected internal Dictionary SceneObjectGroupsByLocalID = new Dictionary(); - protected internal Dictionary SceneObjectGroupsByFullID = new Dictionary(); + protected internal Dictionary SceneObjectGroupsByLocalPartID = new Dictionary(); + protected internal Dictionary SceneObjectGroupsByFullPartID = new Dictionary(); private Object m_updateLock = new Object(); @@ -131,10 +131,10 @@ namespace OpenSim.Region.Framework.Scenes m_scenePresenceArray = newlist; } - lock (SceneObjectGroupsByFullID) - SceneObjectGroupsByFullID.Clear(); - lock (SceneObjectGroupsByLocalID) - SceneObjectGroupsByLocalID.Clear(); + lock (SceneObjectGroupsByFullPartID) + SceneObjectGroupsByFullPartID.Clear(); + lock (SceneObjectGroupsByLocalPartID) + SceneObjectGroupsByLocalPartID.Clear(); Entities.Clear(); } @@ -384,18 +384,18 @@ namespace OpenSim.Region.Framework.Scenes if (OnObjectCreate != null) OnObjectCreate(sceneObject); - lock (SceneObjectGroupsByFullID) + lock (SceneObjectGroupsByFullPartID) { - SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; + SceneObjectGroupsByFullPartID[sceneObject.UUID] = sceneObject; foreach (SceneObjectPart part in children) - SceneObjectGroupsByFullID[part.UUID] = sceneObject; + SceneObjectGroupsByFullPartID[part.UUID] = sceneObject; } - lock (SceneObjectGroupsByLocalID) + lock (SceneObjectGroupsByLocalPartID) { - SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject; + SceneObjectGroupsByLocalPartID[sceneObject.LocalId] = sceneObject; foreach (SceneObjectPart part in children) - SceneObjectGroupsByLocalID[part.LocalId] = sceneObject; + SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject; } return true; @@ -427,20 +427,20 @@ namespace OpenSim.Region.Framework.Scenes if (OnObjectRemove != null) OnObjectRemove(Entities[uuid]); - lock (SceneObjectGroupsByFullID) + lock (SceneObjectGroupsByFullPartID) { SceneObjectPart[] parts = grp.Parts; for (int i = 0; i < parts.Length; i++) - SceneObjectGroupsByFullID.Remove(parts[i].UUID); - SceneObjectGroupsByFullID.Remove(grp.RootPart.UUID); + SceneObjectGroupsByFullPartID.Remove(parts[i].UUID); + SceneObjectGroupsByFullPartID.Remove(grp.RootPart.UUID); } - lock (SceneObjectGroupsByLocalID) + lock (SceneObjectGroupsByLocalPartID) { SceneObjectPart[] parts = grp.Parts; for (int i = 0; i < parts.Length; i++) - SceneObjectGroupsByLocalID.Remove(parts[i].LocalId); - SceneObjectGroupsByLocalID.Remove(grp.RootPart.LocalId); + SceneObjectGroupsByLocalPartID.Remove(parts[i].LocalId); + SceneObjectGroupsByLocalPartID.Remove(grp.RootPart.LocalId); } return Entities.Remove(uuid); @@ -854,14 +854,14 @@ namespace OpenSim.Region.Framework.Scenes //m_log.DebugFormat("Entered GetGroupByPrim with localID {0}", localID); SceneObjectGroup sog; - lock (SceneObjectGroupsByLocalID) - SceneObjectGroupsByLocalID.TryGetValue(localID, out sog); + lock (SceneObjectGroupsByLocalPartID) + SceneObjectGroupsByLocalPartID.TryGetValue(localID, out sog); if (sog != null) { if (sog.HasChildPrim(localID)) return sog; - SceneObjectGroupsByLocalID.Remove(localID); + SceneObjectGroupsByLocalPartID.Remove(localID); } EntityBase[] entityList = GetEntities(); @@ -873,8 +873,8 @@ namespace OpenSim.Region.Framework.Scenes sog = (SceneObjectGroup)ent; if (sog.HasChildPrim(localID)) { - lock (SceneObjectGroupsByLocalID) - SceneObjectGroupsByLocalID[localID] = sog; + lock (SceneObjectGroupsByLocalPartID) + SceneObjectGroupsByLocalPartID[localID] = sog; return sog; } } @@ -891,16 +891,16 @@ namespace OpenSim.Region.Framework.Scenes private SceneObjectGroup GetGroupByPrim(UUID fullID) { SceneObjectGroup sog; - lock (SceneObjectGroupsByFullID) - SceneObjectGroupsByFullID.TryGetValue(fullID, out sog); + lock (SceneObjectGroupsByFullPartID) + SceneObjectGroupsByFullPartID.TryGetValue(fullID, out sog); if (sog != null) { if (sog.ContainsPart(fullID)) return sog; - lock (SceneObjectGroupsByFullID) - SceneObjectGroupsByFullID.Remove(fullID); + lock (SceneObjectGroupsByFullPartID) + SceneObjectGroupsByFullPartID.Remove(fullID); } EntityBase[] entityList = GetEntities(); @@ -911,8 +911,8 @@ namespace OpenSim.Region.Framework.Scenes sog = (SceneObjectGroup)ent; if (sog.HasChildPrim(fullID)) { - lock (SceneObjectGroupsByFullID) - SceneObjectGroupsByFullID[fullID] = sog; + lock (SceneObjectGroupsByFullPartID) + SceneObjectGroupsByFullPartID[fullID] = sog; return sog; } } @@ -1069,7 +1069,7 @@ namespace OpenSim.Region.Framework.Scenes /// protected internal void ForEachSOG(Action action) { - List objlist = new List(SceneObjectGroupsByFullID.Values); + List objlist = new List(SceneObjectGroupsByFullPartID.Values); foreach (SceneObjectGroup obj in objlist) { try From 26d16567e1e2bf28a3eafce6d3acf8d9646aaf84 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 00:53:19 +0000 Subject: [PATCH 29/42] Make SceneGraph.ForEachSOG() execute once for each SOG, not once for each prim (e.g. a SOG with 3 prims would have the action executed three times). To do this, a new SceneObjectGroupsByFullID index in SceneGraph which just index's prims by their root part UUID, in order to avoid the inefficiency of filtering existing lists. Existing callers to SceneGraph.ForEachSOG() did not fail due to the multiple per SOG action executions - they were probably just much less efficient. Code suggests that no callers expected ForEachSOG() to execute actions on sog multiple times --- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 345ed7a5ef..1621398bcb 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -88,9 +88,21 @@ namespace OpenSim.Region.Framework.Scenes protected internal object m_syncRoot = new object(); protected internal PhysicsScene _PhyScene; - - protected internal Dictionary SceneObjectGroupsByLocalPartID = new Dictionary(); + + /// + /// Index the SceneObjectGroup for each part by the root part's UUID. + /// + protected internal Dictionary SceneObjectGroupsByFullID = new Dictionary(); + + /// + /// Index the SceneObjectGroup for each part by that part's UUID. + /// protected internal Dictionary SceneObjectGroupsByFullPartID = new Dictionary(); + + /// + /// Index the SceneObjectGroup for each part by that part's local ID. + /// + protected internal Dictionary SceneObjectGroupsByLocalPartID = new Dictionary(); private Object m_updateLock = new Object(); @@ -131,6 +143,8 @@ namespace OpenSim.Region.Framework.Scenes m_scenePresenceArray = newlist; } + lock (SceneObjectGroupsByFullID) + SceneObjectGroupsByFullID.Clear(); lock (SceneObjectGroupsByFullPartID) SceneObjectGroupsByFullPartID.Clear(); lock (SceneObjectGroupsByLocalPartID) @@ -384,6 +398,9 @@ namespace OpenSim.Region.Framework.Scenes if (OnObjectCreate != null) OnObjectCreate(sceneObject); + lock (SceneObjectGroupsByFullID) + SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; + lock (SceneObjectGroupsByFullPartID) { SceneObjectGroupsByFullPartID[sceneObject.UUID] = sceneObject; @@ -426,6 +443,9 @@ namespace OpenSim.Region.Framework.Scenes if (OnObjectRemove != null) OnObjectRemove(Entities[uuid]); + + lock (SceneObjectGroupsByFullID) + SceneObjectGroupsByFullID.Remove(grp.UUID); lock (SceneObjectGroupsByFullPartID) { @@ -1064,12 +1084,13 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Performs action on all scene object groups. + /// Performs action once on all scene object groups. /// /// protected internal void ForEachSOG(Action action) { - List objlist = new List(SceneObjectGroupsByFullPartID.Values); + // FIXME: Need to lock here, really. + List objlist = new List(SceneObjectGroupsByFullID.Values); foreach (SceneObjectGroup obj in objlist) { try @@ -1084,7 +1105,6 @@ namespace OpenSim.Region.Framework.Scenes } } } - /// /// Performs action on all scene presences. This can ultimately run the actions in parallel but From f2d2470c256486df585705313a7fdfdf3d344c1f Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 02:24:32 +0000 Subject: [PATCH 30/42] When an object is duplicated, add it to the full/local id SOG indexes as well as Entities --- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1621398bcb..60855b2c36 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -363,6 +363,10 @@ namespace OpenSim.Region.Framework.Scenes if (Entities.ContainsKey(sceneObject.UUID)) return false; + +// m_log.DebugFormat( +// "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}", +// sceneObject.Name, sceneObject.UUID, sceneObject.Parts.Length, m_parentScene.RegionInfo.RegionName); SceneObjectPart[] children = sceneObject.Parts; @@ -1798,7 +1802,10 @@ namespace OpenSim.Region.Framework.Scenes /// public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) { - //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); +// m_log.DebugFormat( +// "[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", +// originalPrimID, offset, AgentID); + SceneObjectGroup original = GetGroupByPrim(originalPrimID); if (original != null) { @@ -1829,7 +1836,28 @@ namespace OpenSim.Region.Framework.Scenes copy.RootPart.SalePrice = 10; } + // FIXME: This section needs to be refactored so that it just calls AddSceneObject() Entities.Add(copy); + + lock (SceneObjectGroupsByFullID) + SceneObjectGroupsByFullID[copy.UUID] = copy; + + SceneObjectPart[] children = copy.Parts; + + lock (SceneObjectGroupsByFullPartID) + { + SceneObjectGroupsByFullPartID[copy.UUID] = copy; + foreach (SceneObjectPart part in children) + SceneObjectGroupsByFullPartID[part.UUID] = copy; + } + + lock (SceneObjectGroupsByLocalPartID) + { + SceneObjectGroupsByLocalPartID[copy.LocalId] = copy; + foreach (SceneObjectPart part in children) + SceneObjectGroupsByLocalPartID[copy.LocalId] = copy; + } + // PROBABLE END OF FIXME // Since we copy from a source group that is in selected // state, but the copy is shown deselected in the viewer, From 482686daab055d4d2d878b238059b442e64122f4 Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Tue, 15 Mar 2011 10:29:24 +0000 Subject: [PATCH 31/42] WebkeyAuthenticationService is now no longer a stub! Signed-off-by: SignpostMarv Martin --- .../WebkeyAuthenticationService.cs | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs index d1a5b0f041..a0729580c8 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs @@ -31,6 +31,9 @@ using OpenSim.Services.Interfaces; using log4net; using Nini.Config; using System.Reflection; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Framework.Console; namespace OpenSim.Services.AuthenticationService { @@ -43,17 +46,44 @@ namespace OpenSim.Services.AuthenticationService public class WebkeyAuthenticationService : AuthenticationServiceBase, IAuthenticationService { -// private static readonly ILog m_log = -// LogManager.GetLogger( -// MethodBase.GetCurrentMethod().DeclaringType); - + private static readonly ILog m_log = + LogManager.GetLogger( + MethodBase.GetCurrentMethod().DeclaringType); + public WebkeyAuthenticationService(IConfigSource config) : - base(config) + base(config) { } public string Authenticate(UUID principalID, string password, int lifetime) { + m_log.InfoFormat("[Authenticate]: Trying a web key authenticate"); + if (new UUID(password) == UUID.Zero) + { + m_log.InfoFormat("[Authenticate]: NULL_KEY is not a valid web_login_key"); + } + else + { + AuthenticationData data = m_Database.Get(principalID); + if (data != null && data.Data != null) + { + if (data.Data.ContainsKey("webLoginKey")) + { + m_log.InfoFormat("[Authenticate]: Trying a web key authentication"); + string key = data.Data["webLoginKey"].ToString(); + m_log.DebugFormat("[WEB LOGIN AUTH]: got {0} for key in db vs {1}", key, password); + if (key == password) + { + data.Data["webLoginKey"] = UUID.Zero.ToString(); + m_Database.Store(data); + return GetToken(principalID, lifetime); + } + }else{ + m_log.InfoFormat("[Authenticate]: no col webLoginKey in passwd.db"); + } + } + m_log.DebugFormat("[AUTH SERVICE]: PrincipalID {0} or its data not found", principalID); + } return String.Empty; } } From af3956348fc58613948889e5f85030a454684970 Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Tue, 15 Mar 2011 10:29:42 +0000 Subject: [PATCH 32/42] Adding a combined auth service, allowing users to login with either web login or password Signed-off-by: SignpostMarv Martin --- .../WebkeyOrPasswordAuthenticationService.cs | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs new file mode 100644 index 0000000000..0f2fd939a1 --- /dev/null +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Services.Interfaces; +using log4net; +using Nini.Config; +using System.Reflection; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Framework.Console; + +namespace OpenSim.Services.AuthenticationService +{ + public class WebkeyOrPasswordAuthenticationService : AuthenticationServiceBase, IAuthenticationService + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + public WebkeyOrPasswordAuthenticationService(IConfigSource config) + : base(config) + { + } + + public string Authenticate(UUID principalID, string password, int lifetime) + { + AuthenticationData data = m_Database.Get(principalID); + if (data != null && data.Data != null) + { + if (data.Data.ContainsKey("webLoginKey")) + { + m_log.InfoFormat("[Authenticate]: Trying a web key authentication"); + if (new UUID(password) == UUID.Zero) + { + m_log.InfoFormat("[Authenticate]: NULL_KEY is not a valid web_login_key"); + } + else + { + string key = data.Data["webLoginKey"].ToString(); + m_log.DebugFormat("[WEB LOGIN AUTH]: got {0} for key in db vs {1}", key, password); + if (key == password) + { + data.Data["webLoginKey"] = UUID.Zero.ToString(); + m_Database.Store(data); + return GetToken(principalID, lifetime); + } + } + } + if (data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) + { + m_log.InfoFormat("[Authenticate]: Trying a password authentication"); + string hashed = Util.Md5Hash(password + ":" + data.Data["passwordSalt"].ToString()); + m_log.DebugFormat("[PASS AUTH]: got {0}; hashed = {1}; stored = {2}", password, hashed, data.Data["passwordHash"].ToString()); + if (data.Data["passwordHash"].ToString() == hashed) + { + return GetToken(principalID, lifetime); + } + } + m_log.DebugFormat("[AUTH SERVICE]: Both password and webLoginKey-based login failed for PrincipalID {0}", principalID); + } + else + { + m_log.DebugFormat("[AUTH SERVICE]: PrincipalID {0} or its data not found", principalID); + } + return string.Empty; + } + } +} From 6153c4597322ccef6bdb7662b6461faa260b13ea Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Tue, 15 Mar 2011 10:29:51 +0000 Subject: [PATCH 33/42] LLLoginHandlers now supports both password & web login Signed-off-by: SignpostMarv Martin --- .../Server/Handlers/Login/LLLoginHandlers.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs index 48f5f99ed3..8048f861de 100644 --- a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs +++ b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs @@ -74,12 +74,23 @@ namespace OpenSim.Server.Handlers.Login if (requestData != null) { if (requestData.ContainsKey("first") && requestData["first"] != null && - requestData.ContainsKey("last") && requestData["last"] != null && - requestData.ContainsKey("passwd") && requestData["passwd"] != null) + requestData.ContainsKey("last") && requestData["last"] != null && ( + (requestData.ContainsKey("passwd") && requestData["passwd"] != null) || + (!requestData.ContainsKey("passwd") && requestData.ContainsKey("web_login_key") && requestData["web_login_key"] != null && requestData["web_login_key"].ToString() != UUID.Zero.ToString()) + )) { string first = requestData["first"].ToString(); string last = requestData["last"].ToString(); - string passwd = requestData["passwd"].ToString(); + string passwd = null; + if (requestData.ContainsKey("passwd")) + { + passwd = requestData["passwd"].ToString(); + } + else if (requestData.ContainsKey("web_login_key")) + { + passwd = "$1$" + requestData["web_login_key"].ToString(); + m_log.InfoFormat("[LOGIN]: XMLRPC Login Req key {0}", passwd); + } string startLocation = string.Empty; UUID scopeID = UUID.Zero; if (requestData["scope_id"] != null) @@ -103,7 +114,7 @@ namespace OpenSim.Server.Handlers.Login string id0 = "Unknown"; if (requestData.Contains("id0") && requestData["id0"] != null) id0 = requestData["id0"].ToString(); - + //m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion); LoginResponse reply = null; From 0e808950fbb54271d478d29669bf035949731114 Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Mon, 21 Mar 2011 14:47:10 +0000 Subject: [PATCH 34/42] InfoFormat > DebugFormat Signed-off-by: SignpostMarv Martin --- .../AuthenticationService/WebkeyAuthenticationService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs index a0729580c8..59240264e6 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs @@ -79,7 +79,7 @@ namespace OpenSim.Services.AuthenticationService return GetToken(principalID, lifetime); } }else{ - m_log.InfoFormat("[Authenticate]: no col webLoginKey in passwd.db"); + m_log.DebugFormat("[Authenticate]: no col webLoginKey in passwd.db"); } } m_log.DebugFormat("[AUTH SERVICE]: PrincipalID {0} or its data not found", principalID); From 3bc859a834c50634281df3d52166fc68d7c3c3ba Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Mon, 21 Mar 2011 15:42:57 +0000 Subject: [PATCH 35/42] Making combined auth service re-use the existing auth services instead of duplicating code Signed-off-by: SignpostMarv Martin --- .../WebkeyOrPasswordAuthenticationService.cs | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index 0f2fd939a1..b8bb090552 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -8,58 +8,56 @@ using System.Reflection; using OpenSim.Data; using OpenSim.Framework; using OpenSim.Framework.Console; +using OpenSim.Server.Base; namespace OpenSim.Services.AuthenticationService { public class WebkeyOrPasswordAuthenticationService : AuthenticationServiceBase, IAuthenticationService { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private IConfigSource config; public WebkeyOrPasswordAuthenticationService(IConfigSource config) : base(config) { + this.config = config; } public string Authenticate(UUID principalID, string password, int lifetime) { AuthenticationData data = m_Database.Get(principalID); + IAuthenticationService svc; + Object[] args = new Object[] { config }; + string result = String.Empty; if (data != null && data.Data != null) { if (data.Data.ContainsKey("webLoginKey")) { - m_log.InfoFormat("[Authenticate]: Trying a web key authentication"); - if (new UUID(password) == UUID.Zero) + svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "WebkeyAuthenticationService", args); + result = svc.Authenticate(principalID, password, lifetime); + if (result == String.Empty) { - m_log.InfoFormat("[Authenticate]: NULL_KEY is not a valid web_login_key"); - } - else - { - string key = data.Data["webLoginKey"].ToString(); - m_log.DebugFormat("[WEB LOGIN AUTH]: got {0} for key in db vs {1}", key, password); - if (key == password) - { - data.Data["webLoginKey"] = UUID.Zero.ToString(); - m_Database.Store(data); - return GetToken(principalID, lifetime); - } + m_log.DebugFormat("[Authenticate]: Web Login failed for PrincipalID {0}", principalID); } } if (data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) { - m_log.InfoFormat("[Authenticate]: Trying a password authentication"); - string hashed = Util.Md5Hash(password + ":" + data.Data["passwordSalt"].ToString()); - m_log.DebugFormat("[PASS AUTH]: got {0}; hashed = {1}; stored = {2}", password, hashed, data.Data["passwordHash"].ToString()); - if (data.Data["passwordHash"].ToString() == hashed) + svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "PasswordAuthenticationService", args); + result = svc.Authenticate(principalID, password, lifetime); + if (result == String.Empty) { - return GetToken(principalID, lifetime); + m_log.DebugFormat("[Authenticate]: Password login failed for PrincipalID {0}", principalID); } } - m_log.DebugFormat("[AUTH SERVICE]: Both password and webLoginKey-based login failed for PrincipalID {0}", principalID); + if (result == string.Empty) + { + m_log.DebugFormat("[AUTH SERVICE]: Both password and webLoginKey-based login failed for PrincipalID {0}", principalID); + } } else { m_log.DebugFormat("[AUTH SERVICE]: PrincipalID {0} or its data not found", principalID); } - return string.Empty; + return result; } } } From e93531e1240348f18abb4ef88a0def227026e8f3 Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Thu, 24 Mar 2011 16:21:12 +0000 Subject: [PATCH 36/42] Fixing bug that occurs when using web login- the result was not checked --- .../WebkeyOrPasswordAuthenticationService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index b8bb090552..3a47e97de6 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -39,7 +39,7 @@ namespace OpenSim.Services.AuthenticationService m_log.DebugFormat("[Authenticate]: Web Login failed for PrincipalID {0}", principalID); } } - if (data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) + if (result == string.Empty && data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) { svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "PasswordAuthenticationService", args); result = svc.Authenticate(principalID, password, lifetime); From 3f4be42a87f77d5da7e6cafd4fb98ff6a502636d Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Thu, 24 Mar 2011 16:46:21 +0000 Subject: [PATCH 37/42] Altering log feedback --- .../WebkeyAuthenticationService.cs | 23 ++++++++++--------- .../WebkeyOrPasswordAuthenticationService.cs | 8 ++++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs index 59240264e6..2344c0ed4e 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs @@ -57,10 +57,9 @@ namespace OpenSim.Services.AuthenticationService public string Authenticate(UUID principalID, string password, int lifetime) { - m_log.InfoFormat("[Authenticate]: Trying a web key authenticate"); if (new UUID(password) == UUID.Zero) { - m_log.InfoFormat("[Authenticate]: NULL_KEY is not a valid web_login_key"); + m_log.DebugFormat("[AUTH SERVICE]: UUID.Zero is not a valid web_login_key on PrincipalID {0}", principalID); } else { @@ -69,17 +68,19 @@ namespace OpenSim.Services.AuthenticationService { if (data.Data.ContainsKey("webLoginKey")) { - m_log.InfoFormat("[Authenticate]: Trying a web key authentication"); string key = data.Data["webLoginKey"].ToString(); - m_log.DebugFormat("[WEB LOGIN AUTH]: got {0} for key in db vs {1}", key, password); - if (key == password) - { - data.Data["webLoginKey"] = UUID.Zero.ToString(); - m_Database.Store(data); - return GetToken(principalID, lifetime); - } + if (key == password) + { + data.Data["webLoginKey"] = UUID.Zero.ToString(); + m_Database.Store(data); + return GetToken(principalID, lifetime); + } + else + { + m_log.DebugFormat("[AUTH SERVICE]: web login auth failed, got PrincipalID {0} gave {1} instead of {2}", principalID, password, key); + } }else{ - m_log.DebugFormat("[Authenticate]: no col webLoginKey in passwd.db"); + m_log.DebugFormat("[AUTH SERVICE]: no col webLoginKey in passwd.db"); } } m_log.DebugFormat("[AUTH SERVICE]: PrincipalID {0} or its data not found", principalID); diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index 3a47e97de6..c315ef2bd8 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -32,25 +32,27 @@ namespace OpenSim.Services.AuthenticationService { if (data.Data.ContainsKey("webLoginKey")) { + m_log.DebugFormat("[AUTH SERVICE]: Attempting web key authentication for PrincipalID {0}", principalID); svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "WebkeyAuthenticationService", args); result = svc.Authenticate(principalID, password, lifetime); if (result == String.Empty) { - m_log.DebugFormat("[Authenticate]: Web Login failed for PrincipalID {0}", principalID); + m_log.DebugFormat("[AUTH SERVICE]: Web Login failed for PrincipalID {0}", principalID); } } if (result == string.Empty && data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) { + m_log.DebugFormat("[AUTH SERVICE]: Attempting password authentication for PrincipalID {0}", principalID); svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "PasswordAuthenticationService", args); result = svc.Authenticate(principalID, password, lifetime); if (result == String.Empty) { - m_log.DebugFormat("[Authenticate]: Password login failed for PrincipalID {0}", principalID); + m_log.DebugFormat("[AUTH SERVICE]: Password login failed for PrincipalID {0}", principalID); } } if (result == string.Empty) { - m_log.DebugFormat("[AUTH SERVICE]: Both password and webLoginKey-based login failed for PrincipalID {0}", principalID); + m_log.DebugFormat("[AUTH SERVICE]: Both password and webLoginKey-based authentication failed for PrincipalID {0}", principalID); } } else From 361b3e7ab8313b89475bc644fdcd348e071b951a Mon Sep 17 00:00:00 2001 From: SignpostMarv Martin Date: Thu, 24 Mar 2011 17:04:29 +0000 Subject: [PATCH 38/42] Removing hard-coded plugin loading in favour of direct class instantiation --- .../WebkeyOrPasswordAuthenticationService.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index c315ef2bd8..15dc5be554 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -16,25 +16,25 @@ namespace OpenSim.Services.AuthenticationService { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private IConfigSource config; + private Dictionary svc_checks; public WebkeyOrPasswordAuthenticationService(IConfigSource config) : base(config) { this.config = config; + svc_checks["web_login_key"] = new WebkeyAuthenticationService(config); + svc_checks["password"] = new PasswordAuthenticationService(config); } public string Authenticate(UUID principalID, string password, int lifetime) { AuthenticationData data = m_Database.Get(principalID); - IAuthenticationService svc; - Object[] args = new Object[] { config }; string result = String.Empty; if (data != null && data.Data != null) { if (data.Data.ContainsKey("webLoginKey")) { m_log.DebugFormat("[AUTH SERVICE]: Attempting web key authentication for PrincipalID {0}", principalID); - svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "WebkeyAuthenticationService", args); - result = svc.Authenticate(principalID, password, lifetime); + result = svc_checks["web_login_key"].Authenticate(principalID, password, lifetime); if (result == String.Empty) { m_log.DebugFormat("[AUTH SERVICE]: Web Login failed for PrincipalID {0}", principalID); @@ -43,8 +43,7 @@ namespace OpenSim.Services.AuthenticationService if (result == string.Empty && data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) { m_log.DebugFormat("[AUTH SERVICE]: Attempting password authentication for PrincipalID {0}", principalID); - svc = ServerUtils.LoadPlugin("OpenSim.Services.AuthenticationService.dll", "PasswordAuthenticationService", args); - result = svc.Authenticate(principalID, password, lifetime); + result = svc_checks["password"].Authenticate(principalID, password, lifetime); if (result == String.Empty) { m_log.DebugFormat("[AUTH SERVICE]: Password login failed for PrincipalID {0}", principalID); From de0730a54ca8b2ede0727212bfc2474c0eff979f Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 02:42:50 +0000 Subject: [PATCH 39/42] Add OpenSim.Server.Base reference in prebuild.xml. Initialize svc_checks dictionary in WebkeyOrPasswordAuthenticationService, which was what was causing the load failure. --- .../WebkeyOrPasswordAuthenticationService.cs | 5 ++++- prebuild.xml | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index 15dc5be554..bcfd03dd49 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -15,8 +15,11 @@ namespace OpenSim.Services.AuthenticationService public class WebkeyOrPasswordAuthenticationService : AuthenticationServiceBase, IAuthenticationService { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private IConfigSource config; - private Dictionary svc_checks; + private Dictionary svc_checks + = new Dictionary(); + public WebkeyOrPasswordAuthenticationService(IConfigSource config) : base(config) { diff --git a/prebuild.xml b/prebuild.xml index fac3f208af..c818908d80 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1059,6 +1059,7 @@ + From 83f48c26d62b148c11776af6d4947fc2397a675d Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 02:43:41 +0000 Subject: [PATCH 40/42] add header file --- .../WebkeyOrPasswordAuthenticationService.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index bcfd03dd49..00056a6ff1 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -1,4 +1,31 @@ -using System; +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; using System.Collections.Generic; using OpenMetaverse; using OpenSim.Services.Interfaces; From 797128a6ad89ea4944074f99db0a30ad7a5e7a3d Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 02:44:46 +0000 Subject: [PATCH 41/42] Rename some member fields to standard m_ OpenSim code convention --- .../WebkeyOrPasswordAuthenticationService.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs index 00056a6ff1..3590e128b1 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyOrPasswordAuthenticationService.cs @@ -43,16 +43,16 @@ namespace OpenSim.Services.AuthenticationService { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private IConfigSource config; - private Dictionary svc_checks + private IConfigSource m_config; + private Dictionary m_svcChecks = new Dictionary(); public WebkeyOrPasswordAuthenticationService(IConfigSource config) : base(config) { - this.config = config; - svc_checks["web_login_key"] = new WebkeyAuthenticationService(config); - svc_checks["password"] = new PasswordAuthenticationService(config); + this.m_config = config; + m_svcChecks["web_login_key"] = new WebkeyAuthenticationService(config); + m_svcChecks["password"] = new PasswordAuthenticationService(config); } public string Authenticate(UUID principalID, string password, int lifetime) @@ -64,7 +64,7 @@ namespace OpenSim.Services.AuthenticationService if (data.Data.ContainsKey("webLoginKey")) { m_log.DebugFormat("[AUTH SERVICE]: Attempting web key authentication for PrincipalID {0}", principalID); - result = svc_checks["web_login_key"].Authenticate(principalID, password, lifetime); + result = m_svcChecks["web_login_key"].Authenticate(principalID, password, lifetime); if (result == String.Empty) { m_log.DebugFormat("[AUTH SERVICE]: Web Login failed for PrincipalID {0}", principalID); @@ -73,7 +73,7 @@ namespace OpenSim.Services.AuthenticationService if (result == string.Empty && data.Data.ContainsKey("passwordHash") && data.Data.ContainsKey("passwordSalt")) { m_log.DebugFormat("[AUTH SERVICE]: Attempting password authentication for PrincipalID {0}", principalID); - result = svc_checks["password"].Authenticate(principalID, password, lifetime); + result = m_svcChecks["password"].Authenticate(principalID, password, lifetime); if (result == String.Empty) { m_log.DebugFormat("[AUTH SERVICE]: Password login failed for PrincipalID {0}", principalID); @@ -91,4 +91,4 @@ namespace OpenSim.Services.AuthenticationService return result; } } -} +} \ No newline at end of file From 435d72f10651b8c468aa40e866053672c991b210 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 26 Mar 2011 02:46:00 +0000 Subject: [PATCH 42/42] Add SignpostMarv to contributors --- CONTRIBUTORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index a0af1ca941..ef00c19b04 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -117,6 +117,7 @@ what it is today. * SachaMagne * Salahzar Stenvaag * sempuki +* SignpostMarv * Snoopy * Strawberry Fride * tglion