diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
index 7ef0f5f455..f37c399050 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
@@ -122,9 +122,11 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
Thread.CurrentThread.ManagedThreadId.ToString() +
")");
+
m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]);
m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
regionsToLoad[i].EstateSettings.Save();
+
if (scene != null)
{
m_newRegionCreatedHandler = OnNewRegionCreated;
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 05933419b9..4f5add9320 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -29,6 +29,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
+using System.Globalization;
using System.IO;
using System.Net;
using System.Net.Security;
@@ -557,34 +558,27 @@ namespace OpenSim.Framework
{
float qx = GetQ(x);
float qy = GetQ(y);
- if (qx < qy)
- return -1;
- if (qx == qy)
- return 0;
- return 1;
+ return qy.CompareTo(qx); // descending order
}
private float GetQ(Object o)
{
// Example: image/png;q=0.9
+ float qvalue = 1F;
if (o is String)
{
string mime = (string)o;
- string[] parts = mime.Split(new char[] { ';' });
+ string[] parts = mime.Split(';');
if (parts.Length > 1)
{
- string[] kvp = parts[1].Split(new char[] { '=' });
+ string[] kvp = parts[1].Split('=');
if (kvp.Length == 2 && kvp[0] == "q")
- {
- float qvalue = 1F;
- float.TryParse(kvp[1], out qvalue);
- return qvalue;
- }
+ float.TryParse(kvp[1], NumberStyles.Number, CultureInfo.InvariantCulture, out qvalue);
}
}
- return 1F;
+ return qvalue;
}
}
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index b74a392e6b..9960a54f0b 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -877,9 +877,7 @@ namespace OpenSim
///
/// Load the estate information for the provided RegionInfo object.
///
- ///
- /// A
- ///
+ ///
public void PopulateRegionEstateInfo(RegionInfo regInfo)
{
IEstateDataService estateDataService = EstateDataService;
@@ -901,7 +899,13 @@ namespace OpenSim
regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, true);
regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName);
- //regInfo.EstateSettings.Save();
+
+ // 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();
break;
}
else
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index ca29a7c5c6..e8f18e7eac 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -244,7 +244,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
}
catch (Exception e)
{
- m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Exception on teleport: {0}\n{1}", e.Message, e.StackTrace);
+ m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Exception on teleport: {0} {1}", e.Message, e.StackTrace);
sp.ControllingClient.SendTeleportFailed("Internal error");
}
}
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs
index 14f5b1ef94..f6d1a826c7 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs
@@ -30,21 +30,29 @@ using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Security;
+using System.Text;
using log4net;
using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using OpenSim.Region.CoreModules.Framework.InterfaceCommander;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
namespace OpenSim.Region.CoreModules.World.Estate
{
+ ///
+ /// Estate management console commands.
+ ///
public class EstateManagementCommands
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected EstateManagementModule m_module;
+ protected Commander m_commander = new Commander("estate");
+
public EstateManagementCommands(EstateManagementModule module)
{
m_module = module;
@@ -52,20 +60,60 @@ namespace OpenSim.Region.CoreModules.World.Estate
public void Initialise()
{
- m_module.Scene.AddCommand(this, "set terrain texture",
+ m_log.DebugFormat("[ESTATE MODULE]: Setting up estate commands for region {0}", m_module.Scene.RegionInfo.RegionName);
+
+ m_module.Scene.AddCommand(m_module, "set terrain texture",
"set terrain texture [] []",
"Sets the terrain to , if or are specified, it will only " +
"set it on regions with a matching coordinate. Specify -1 in or to wildcard" +
" that coordinate.",
consoleSetTerrainTexture);
- m_module.Scene.AddCommand(this, "set terrain heights",
+ m_module.Scene.AddCommand(m_module, "set terrain heights",
"set terrain heights [] []",
"Sets the terrain texture heights on corner # to /, if or are specified, it will only " +
"set it on regions with a matching coordinate. Specify -1 in or to wildcard" +
" that coordinate. Corner # SW = 0, NW = 1, SE = 2, NE = 3.",
consoleSetTerrainHeights);
- }
+
+ Command showCommand
+ = new Command("show", CommandIntentions.COMMAND_STATISTICAL, ShowEstatesCommand, "Shows all estates on the simulator.");
+
+ m_commander.RegisterCommand("show", showCommand);
+
+ m_module.Scene.RegisterModuleCommander(m_commander);
+
+ m_module.Scene.EventManager.OnPluginConsole += EventManagerOnPluginConsole;
+ }
+
+ public void Close()
+ {
+ m_module.Scene.EventManager.OnPluginConsole -= EventManagerOnPluginConsole;
+ m_module.Scene.UnregisterModuleCommander(m_commander.Name);
+ }
+
+ ///
+ /// Processes commandline input. Do not call directly.
+ ///
+ /// Commandline arguments
+ protected void EventManagerOnPluginConsole(string[] args)
+ {
+ if (args[0] == "estate")
+ {
+ if (args.Length == 1)
+ {
+ m_commander.ProcessConsoleCommand("help", new string[0]);
+ return;
+ }
+
+ string[] tmpArgs = new string[args.Length - 2];
+ int i;
+ for (i = 2; i < args.Length; i++)
+ tmpArgs[i - 2] = args[i];
+
+ m_commander.ProcessConsoleCommand(args[1], tmpArgs);
+ }
+ }
protected void consoleSetTerrainTexture(string module, string[] args)
{
@@ -152,5 +200,25 @@ namespace OpenSim.Region.CoreModules.World.Estate
}
}
}
+
+ protected void ShowEstatesCommand(Object[] args)
+ {
+ StringBuilder report = new StringBuilder();
+ RegionInfo ri = m_module.Scene.RegionInfo;
+ EstateSettings es = ri.EstateSettings;
+
+ report.AppendFormat("Estate information for region {0}\n", ri.RegionName);
+ report.AppendFormat(
+ "{0,-20} {1,-7} {2,-20}\n",
+ "Estate Name",
+ "ID",
+ "Owner");
+
+ report.AppendFormat(
+ "{0,-20} {1,-7} {2,-20}\n",
+ es.EstateName, es.EstateID, m_module.UserManager.GetUserName(es.EstateOwner));
+
+ MainConsole.Instance.Output(report.ToString());
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 0652ca79fb..34d0cfcd67 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -32,6 +32,7 @@ using System.Reflection;
using System.Security;
using System.Timers;
using log4net;
+using Mono.Addins;
using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
@@ -40,7 +41,8 @@ using OpenSim.Region.Framework.Scenes;
namespace OpenSim.Region.CoreModules.World.Estate
{
- public class EstateManagementModule : IEstateModule
+ [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "EstateManagementModule")]
+ public class EstateManagementModule : IEstateModule, INonSharedRegionModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -48,8 +50,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
private Timer m_regionChangeTimer = new Timer();
public Scene Scene { get; private set; }
+ public IUserManagement UserManager { get; private set; }
- protected EstateManagementCommands m_commands;
+ protected EstateManagementCommands m_commands;
private EstateTerrainXferHandler TerrainUploader;
@@ -909,9 +912,15 @@ namespace OpenSim.Region.CoreModules.World.Estate
#endregion
#region IRegionModule Members
+
+ public string Name { get { return "EstateManagementModule"; } }
+
+ public Type ReplaceableInterface { get { return null; } }
- public void Initialise(Scene scene, IConfigSource source)
- {
+ public void Initialise(IConfigSource source) {}
+
+ public void AddRegion(Scene scene)
+ {
m_regionChangeTimer.AutoReset = false;
m_regionChangeTimer.Interval = 2000;
m_regionChangeTimer.Elapsed += RaiseRegionInfoChange;
@@ -924,26 +933,21 @@ namespace OpenSim.Region.CoreModules.World.Estate
m_commands = new EstateManagementCommands(this);
m_commands.Initialise();
}
-
- public void PostInitialise()
+
+ public void RemoveRegion(Scene scene) {}
+
+ public void RegionLoaded(Scene scene)
{
// Sets up the sun module based no the saved Estate and Region Settings
// DO NOT REMOVE or the sun will stop working
- Scene.TriggerEstateSunUpdate();
+ scene.TriggerEstateSunUpdate();
+
+ UserManager = scene.RequestModuleInterface();
}
- public void Close()
+ public void Close()
{
- }
-
- public string Name
- {
- get { return "EstateManagementModule"; }
- }
-
- public bool IsSharedModule
- {
- get { return false; }
+ m_commands.Close();
}
#endregion
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
index c850f7fd81..721f0eedea 100644
--- a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
@@ -32,7 +32,7 @@ namespace OpenSim.Region.Framework.Interfaces
public delegate void ChangeDelegate(UUID regionID);
public delegate void MessageDelegate(UUID regionID, UUID fromID, string fromName, string message);
- public interface IEstateModule : IRegionModule
+ public interface IEstateModule
{
event ChangeDelegate OnRegionInfoChange;
event ChangeDelegate OnEstateInfoChange;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index d4f3dfe2d4..9b9f2806aa 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2142,7 +2142,7 @@ namespace OpenSim.Region.Framework.Scenes
{
Quaternion newRot;
- if (this.LinkNum < 2) //KF Single or root prim
+ if (this.LinkNum == 0 || this.LinkNum == 1)
{
newRot = RotationOffset;
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 4d299d6a27..c2e5c13fa8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -711,6 +711,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// and convert the regionName to the target region
if (regionName.Contains(".") && regionName.Contains(":"))
{
+ // Even though we use none of the results, we need to perform this call because it appears
+ // to have some the side effect of setting up hypergrid teleport locations.
World.GridService.GetRegionsByName(World.RegionInfo.ScopeID, regionName, 1);
// List regions = World.GridService.GetRegionsByName(World.RegionInfo.ScopeID, regionName, 1);
diff --git a/OpenSim/Services/AssetService/AssetService.cs b/OpenSim/Services/AssetService/AssetService.cs
index 81ef225ca1..c29bce8136 100644
--- a/OpenSim/Services/AssetService/AssetService.cs
+++ b/OpenSim/Services/AssetService/AssetService.cs
@@ -93,7 +93,7 @@ namespace OpenSim.Services.AssetService
if (!UUID.TryParse(id, out assetID))
{
- m_log.WarnFormat("[ASSET SERVICE]: Could not parse requested sset id {0}", id);
+ m_log.WarnFormat("[ASSET SERVICE]: Could not parse requested asset id {0}", id);
return null;
}
diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll
index d7503a0915..95ea5dd7ff 100644
Binary files a/bin/HttpServer_OpenSim.dll and b/bin/HttpServer_OpenSim.dll differ
diff --git a/bin/HttpServer_OpenSim.pdb b/bin/HttpServer_OpenSim.pdb
index 4151588c66..b6b77f75eb 100644
Binary files a/bin/HttpServer_OpenSim.pdb and b/bin/HttpServer_OpenSim.pdb differ