diff --git a/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs b/OpenSim/Framework/RegionLoader/Filesystem/RegionLoaderFileSystem.cs index 0aae4ff353..8332c14478 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 f0ffc2c577..c7caf6feb4 100644 --- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs @@ -60,6 +60,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."); @@ -67,39 +69,60 @@ namespace OpenSim.Framework.RegionLoader.Web } else { - while (tries > 0) - { - HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url); - webRequest.Timeout = 30000; //30 Second Timeout - m_log.Debug("[WEBLOADER]: Sending Download Request..."); - HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); - m_log.Debug("[WEBLOADER]: Downloading Region Information From Remote Server..."); - 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") - { - RegionInfo[] regionInfos = new RegionInfo[xmlDoc.FirstChild.ChildNodes.Count]; - 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); - } + while(tries > 0) + { + 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); - if (i > 0) - return regionInfos; - } + try + { + 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); + } + } + } + } + catch (WebException ex) + { + if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) + { + if (!allowRegionless) + throw ex; + } + else + throw ex; + } + + if (regionCount > 0 | allowRegionless) + return regionInfos; m_log.Debug("[WEBLOADER]: Request yielded no regions."); tries--; @@ -108,8 +131,10 @@ namespace OpenSim.Framework.RegionLoader.Web m_log.Debug("[WEBLOADER]: Retrying"); System.Threading.Thread.Sleep(wait); } - } - return null; + } + + m_log.Error("[WEBLOADER]: No region configs were available."); + return null; } } } diff --git a/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs b/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs index ed3e516631..6f839485ec 100644 --- a/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs @@ -112,10 +112,13 @@ namespace OpenSim.Region.CoreModules.Scripting.LoadImageURL public void PostInitialise() { - m_textureManager = m_scene.RequestModuleInterface(); - if (m_textureManager != null) + if (m_scene != null) { - m_textureManager.RegisterRender(GetContentType(), this); + m_textureManager = m_scene.RequestModuleInterface(); + if (m_textureManager != null) + { + m_textureManager.RegisterRender(GetContentType(), this); + } } } diff --git a/OpenSim/Tools/Configger/ConfigurationLoader.cs b/OpenSim/Tools/Configger/ConfigurationLoader.cs index 39146527b8..28bcc99ff4 100644 --- a/OpenSim/Tools/Configger/ConfigurationLoader.cs +++ b/OpenSim/Tools/Configger/ConfigurationLoader.cs @@ -233,6 +233,7 @@ namespace OpenSim.Tools.Configger config = defaultConfig.AddConfig("Startup"); config.Set("region_info_source", "filesystem"); + config.Set("allow_regionless", false); config.Set("gridmode", false); config.Set("physics", "OpenDynamicsEngine"); diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 57a2e06165..ce86d5637d 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -71,6 +71,11 @@ ;; in a tag. ; regionload_webserver_url = "http://example.com/regions.xml"; + ;# {allow_regionless} {} {Allow simulator to start up with no regions configured.} {true false} false + ;; Allow the simulator to start up if there are no region configuration available + ;; from the selected region_info_source. + ; allow_regionless = false + ;# {NonPhysicalPrimMax} {} {Maximum size of nonphysical prims?} {} 256 ;; Maximum size for non-physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). ; NonPhysicalPrimMax = 256 diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index f5d7f4ab3c..a456f4d30e 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -70,6 +70,10 @@ ; except that everything is also enclosed in a tag. ; regionload_webserver_url = "http://example.com/regions.xml"; + ;; Allow the simulator to start up if there are no region configuration available + ;; from the selected region_info_source. + allow_regionless = false + ; Maximum size of non physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). NonPhysicalPrimMax = 256