From 39d7945efc8daa6e5cd0f4728b499e7a624526cd Mon Sep 17 00:00:00 2001 From: Kevin Houlihan & Michelle Argus Date: Wed, 21 Sep 2011 22:46:14 +0100 Subject: Added a setting to [Startup] section of config that will allow the simulator to start up with no regions configured. I added the boolean config setting "allow_regionless", defaulting to false. If set to true, opensim will start up ok if no region configurations are found in the specified region_info_source. It will not ask the user to create a region. --- .../Filesystem/RegionLoaderFileSystem.cs | 4 +- .../RegionLoader/Web/RegionLoaderWebServer.cs | 68 +++++++++++++++------- 2 files changed, 51 insertions(+), 21 deletions(-) (limited to 'OpenSim/Framework/RegionLoader') diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index 0aae4ff..8332c14 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs @@ -48,11 +48,13 @@ namespace OpenSim.Framework.RegionLoader.Filesystem public RegionInfo[] LoadRegions() { string regionConfigPath = Path.Combine(Util.configDir(), "Regions"); + bool allowRegionless = false; try { IConfig startupConfig = (IConfig)m_configSource.Configs["Startup"]; regionConfigPath = startupConfig.GetString("regionload_regionsdir", regionConfigPath).Trim(); + allowRegionless = startupConfig.GetBoolean("allow_regionless", false); } catch (Exception) { @@ -68,7 +70,7 @@ namespace OpenSim.Framework.RegionLoader.Filesystem 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) + if (!allowRegionless && configFiles.Length == 0 && iniFiles.Length == 0) { new RegionInfo("DEFAULT REGION CONFIG", Path.Combine(regionConfigPath, "Regions.ini"), false, m_configSource); iniFiles = Directory.GetFiles(regionConfigPath, "*.ini"); diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs index de4898a..a2f5d9c 100644 --- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs @@ -57,6 +57,8 @@ namespace OpenSim.Framework.RegionLoader.Web { IConfig startupConfig = (IConfig) m_configSource.Configs["Startup"]; string url = startupConfig.GetString("regionload_webserver_url", String.Empty).Trim(); + bool allowRegionless = startupConfig.GetBoolean("allow_regionless", false); + if (url == String.Empty) { m_log.Error("[WEBLOADER]: Unable to load webserver URL - URL was empty."); @@ -64,37 +66,63 @@ namespace OpenSim.Framework.RegionLoader.Web } else { + RegionInfo[] regionInfos = new RegionInfo[] {}; + int regionCount = 0; HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url); webRequest.Timeout = 30000; //30 Second Timeout m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url); - HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); - m_log.Debug("[WEBLOADER]: Downloading region information..."); - StreamReader reader = new StreamReader(webResponse.GetResponseStream()); - string xmlSource = String.Empty; - string tempStr = reader.ReadLine(); - while (tempStr != null) + + try { - xmlSource = xmlSource + tempStr; - tempStr = reader.ReadLine(); + HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); + m_log.Debug("[WEBLOADER]: Downloading region information..."); + StreamReader reader = new StreamReader(webResponse.GetResponseStream()); + string xmlSource = String.Empty; + string tempStr = reader.ReadLine(); + while (tempStr != null) + { + xmlSource = xmlSource + tempStr; + tempStr = reader.ReadLine(); + } + m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " + + xmlSource.Length); + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(xmlSource); + if (xmlDoc.FirstChild.Name == "Regions") + { + regionCount = xmlDoc.FirstChild.ChildNodes.Count; + + if (regionCount > 0) + { + regionInfos = new RegionInfo[regionCount]; + int i; + for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) + { + m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); + regionInfos[i] = + new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); + } + } + } } - m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " + - xmlSource.Length); - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.LoadXml(xmlSource); - if (xmlDoc.FirstChild.Name == "Regions") + catch (WebException ex) { - RegionInfo[] regionInfos = new RegionInfo[xmlDoc.FirstChild.ChildNodes.Count]; - int i; - for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) + if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) { - m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); - regionInfos[i] = - new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); + if (!allowRegionless) + throw ex; } + else + throw ex; + } + if (regionCount > 0 | allowRegionless) return regionInfos; + else + { + m_log.Error("[WEBLOADER]: No region configs were available."); + return null; } - return null; } } } -- cgit v1.1