From 0138fdc5fddbe30924484686716465984e8f59c2 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 2 Jan 2009 17:41:12 +0000 Subject: [PATCH] Allow some values that are set in OpenSim.ini to be set from region config XML as well. --- OpenSim/Framework/RegionInfo.cs | 67 ++++++++++++++++++- .../Filesystem/RegionLoaderFileSystem.cs | 4 +- .../RegionLoader/Web/RegionLoaderWebServer.cs | 10 +-- OpenSim/Region/Application/OpenSim.cs | 2 +- OpenSim/Region/Environment/Scenes/Scene.cs | 20 ++++++ 5 files changed, 93 insertions(+), 10 deletions(-) diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index dc00059b18..057f021f28 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs @@ -199,6 +199,7 @@ namespace OpenSim.Framework public bool isSandbox = false; private EstateSettings m_estateSettings; private RegionSettings m_regionSettings; + private IConfigSource m_configSource = null; public UUID MasterAvatarAssignedUUID = UUID.Zero; public string MasterAvatarFirstName = String.Empty; @@ -212,6 +213,11 @@ namespace OpenSim.Framework public UUID lastMapUUID = UUID.Zero; public string lastMapRefresh = "0"; + private int m_nonphysPrimMax = 0; + private int m_physPrimMax = 0; + private bool m_clampPrimSize = false; + private int m_objectCapacity = 0; + // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. // MT: Yes. Estates can't span trust boundaries. Therefore, it can be @@ -219,16 +225,18 @@ namespace OpenSim.Framework // access the same database server. Since estate settings are lodaed // from there, that should be sufficient for full remote administration - public RegionInfo(string description, string filename, bool skipConsoleConfig) + public RegionInfo(string description, string filename, bool skipConsoleConfig, IConfigSource configSource) { + m_configSource = configSource; configMember = new ConfigurationMember(filename, description, loadConfigurationOptions, handleIncomingConfiguration, !skipConsoleConfig); configMember.performConfigurationRetrieve(); RegionFile = filename; } - public RegionInfo(string description, XmlNode xmlNode, bool skipConsoleConfig) + public RegionInfo(string description, XmlNode xmlNode, bool skipConsoleConfig, IConfigSource configSource) { + m_configSource = configSource; configMember = new ConfigurationMember(xmlNode, description, loadConfigurationOptions, handleIncomingConfiguration, !skipConsoleConfig); configMember.performConfigurationRetrieve(); @@ -302,6 +310,26 @@ namespace OpenSim.Framework set { m_regionSettings = value; } } + public int NonphysPrimMax + { + get { return m_nonphysPrimMax; } + } + + public int PhysPrimMax + { + get { return m_physPrimMax; } + } + + public bool ClampPrimSize + { + get { return m_clampPrimSize; } + } + + public int ObjectCapacity + { + get { return m_objectCapacity; } + } + public void SetEndPoint(string ipaddr, int port) { IPAddress tmpIP = IPAddress.Parse(ipaddr); @@ -414,6 +442,17 @@ namespace OpenSim.Framework configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true); + configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Maximum size for nonphysical prims", m_nonphysPrimMax.ToString(), true); + + configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Maximum size for physical prims", m_physPrimMax.ToString(), true); + + configMember.addConfigurationOption("clamp_prim_size", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN, + "Clamp prims to max size", m_clampPrimSize.ToString(), true); + + configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Max objects this sim will hold", m_objectCapacity.ToString(), true); } public void loadConfigurationOptions() @@ -462,6 +501,18 @@ namespace OpenSim.Framework configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true); + + configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Maximum size for nonphysical prims", "0", true); + + configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Maximum size for physical prims", "0", true); + + configMember.addConfigurationOption("clamp_prim_size", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN, + "Clamp prims to max size", "false", true); + + configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Max objects this sim will hold", "0", true); } public bool shouldMasterAvatarDetailsBeAsked(string configuration_key) @@ -527,6 +578,18 @@ namespace OpenSim.Framework case "lastmap_refresh": lastMapRefresh = (string)configuration_result; break; + case "nonphysical_prim_max": + m_nonphysPrimMax = (int)configuration_result; + break; + case "physical_prim_max": + m_physPrimMax = (int)configuration_result; + break; + case "clamp_prim_size": + m_clampPrimSize = (bool)configuration_result; + break; + case "object_capacity": + m_objectCapacity = (int)configuration_result; + break; } return true; diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index a371851e3d..05ccc4db9c 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs @@ -63,14 +63,14 @@ namespace OpenSim.Framework.RegionLoader.Filesystem if (configFiles.Length == 0) { - new RegionInfo("DEFAULT REGION CONFIG", Path.Combine(regionConfigPath, "default.xml"), false); + new RegionInfo("DEFAULT REGION CONFIG", Path.Combine(regionConfigPath, "default.xml"), false, m_configSource); configFiles = Directory.GetFiles(regionConfigPath, "*.xml"); } RegionInfo[] regionInfos = new RegionInfo[configFiles.Length]; for (int i = 0; i < configFiles.Length; i++) { - RegionInfo regionInfo = new RegionInfo("REGION CONFIG #" + (i + 1), configFiles[i], false); + RegionInfo regionInfo = new RegionInfo("REGION CONFIG #" + (i + 1), configFiles[i], false, m_configSource); regionInfos[i] = regionInfo; } diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs index 029d3961bd..60242e6838 100644 --- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs @@ -39,23 +39,23 @@ namespace OpenSim.Framework.RegionLoader.Web { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private IConfigSource m_configSouce; + private IConfigSource m_configSource; public void SetIniConfigSource(IConfigSource configSource) { - m_configSouce = configSource; + m_configSource = configSource; } public RegionInfo[] LoadRegions() { - if (m_configSouce == null) + if (m_configSource == null) { m_log.Error("[WEBLOADER]: Unable to load configuration source!"); return null; } else { - IConfig startupConfig = (IConfig) m_configSouce.Configs["Startup"]; + IConfig startupConfig = (IConfig) m_configSource.Configs["Startup"]; string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim(); if (url == String.Empty) { @@ -89,7 +89,7 @@ namespace OpenSim.Framework.RegionLoader.Web { m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); regionInfos[i] = - new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false); + new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); } return regionInfos; diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index b3ca651c87..2ef33081e1 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -341,7 +341,7 @@ namespace OpenSim if (cmdparams[1].StartsWith("/") || cmdparams[1].StartsWith("\\") || cmdparams[1].StartsWith("..")) regionFile = cmdparams[1]; - CreateRegion(new RegionInfo(cmdparams[0], regionFile, false), true); + CreateRegion(new RegionInfo(cmdparams[0], regionFile, false, ConfigSource.Source), true); break; case "remove-region": diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 13b9169b2b..f652e2112e 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -370,10 +370,25 @@ namespace OpenSim.Region.Environment.Scenes try { + // Region config overrides global config + // IConfig startupConfig = m_config.Configs["Startup"]; m_maxNonphys = startupConfig.GetFloat("NonPhysicalPrimMax", 65536.0f); + if (RegionInfo.NonphysPrimMax > 0) + m_maxNonphys = RegionInfo.NonphysPrimMax; + m_maxPhys = startupConfig.GetFloat("PhysicalPrimMax", 10.0f); + + if (RegionInfo.PhysPrimMax > 0) + m_maxPhys = RegionInfo.PhysPrimMax; + + // Here, if clamping is requested in either global or + // local config, it will be used + // m_clampPrimSize = startupConfig.GetBoolean("ClampPrimSize", false); + if (RegionInfo.ClampPrimSize) + m_clampPrimSize = true; + m_trustBinaries = startupConfig.GetBoolean("TrustBinaries", false); m_allowScriptCrossings = startupConfig.GetBoolean("AllowScriptCrossing", false); m_dontPersistBefore = @@ -3290,6 +3305,11 @@ namespace OpenSim.Region.Environment.Scenes public void SetObjectCapacity(int objects) { + // Region specific config overrides global + // + if (RegionInfo.ObjectCapacity != 0) + objects = RegionInfo.ObjectCapacity; + if (m_statsReporter != null) { m_statsReporter.SetObjectCapacity(objects);