Merge branch 'master' into careminster

Conflicts:
	OpenSim/Region/Framework/Scenes/Scene.cs
	OpenSim/Services/LLLoginService/LLLoginResponse.cs
	OpenSim/Services/LLLoginService/LLLoginService.cs
	OpenSim/Tests/Common/Mock/TestClient.cs
avinationmerge
Melanie 2013-05-11 02:35:26 +01:00
commit 13cd8c17d7
27 changed files with 206 additions and 139 deletions

View File

@ -1909,7 +1909,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
m_log.Info("[RADMIN]: Received Estate Reload Request"); m_log.Info("[RADMIN]: Received Estate Reload Request");
Hashtable responseData = (Hashtable)response.Value; Hashtable responseData = (Hashtable)response.Value;
Hashtable requestData = (Hashtable)request.Params[0]; // Hashtable requestData = (Hashtable)request.Params[0];
m_application.SceneManager.ForEachScene(s => m_application.SceneManager.ForEachScene(s =>
s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false) s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false)

View File

@ -77,5 +77,11 @@ BEGIN;
ALTER TABLE estate_settings AUTO_INCREMENT = 100; ALTER TABLE estate_settings AUTO_INCREMENT = 100;
COMMIT; COMMIT;
:VERSION 33 #---------------------
BEGIN;
ALTER TABLE estate_settings ADD COLUMN `AllowLandmark` tinyint(4) NOT NULL default '1';
ALTER TABLE estate_settings ADD COLUMN `AllowParcelChanges` tinyint(4) NOT NULL default '1';
ALTER TABLE estate_settings ADD COLUMN `AllowSetHome` tinyint(4) NOT NULL default '1';
COMMIT;

View File

@ -86,3 +86,12 @@ begin;
alter table estate_settings add column DenyMinors tinyint not null default 0; alter table estate_settings add column DenyMinors tinyint not null default 0;
commit; commit;
:VERSION 9
begin;
alter table estate_settings add column AllowLandmark tinyint not null default '1';
alter table estate_settings add column AllowParcelChanges tinyint not null default '1';
alter table estate_settings add column AllowSetHome tinyint not null default '1';
commit;

View File

@ -420,6 +420,21 @@ namespace OpenSim.Framework.Console
SetCursorLeft(0); SetCursorLeft(0);
m_cursorYPosition = SetCursorTop(m_cursorYPosition); m_cursorYPosition = SetCursorTop(m_cursorYPosition);
if (m_echo)
System.Console.Write("{0}{1} ", prompt, m_commandLine);
else
System.Console.Write("{0}", prompt);
break;
case ConsoleKey.Delete:
if (m_cursorXPosition == m_commandLine.Length)
break;
m_commandLine.Remove(m_cursorXPosition, 1);
SetCursorLeft(0);
m_cursorYPosition = SetCursorTop(m_cursorYPosition);
if (m_echo) if (m_echo)
System.Console.Write("{0}{1} ", prompt, m_commandLine); System.Console.Write("{0}{1} ", prompt, m_commandLine);
else else

View File

@ -430,6 +430,5 @@ namespace OpenSim.Framework
{ {
return l_EstateGroups.Contains(groupID); return l_EstateGroups.Contains(groupID);
} }
} }
} }

View File

@ -1109,9 +1109,8 @@ namespace OpenSim.Framework
/// <summary> /// <summary>
/// Tell the client that an object has been deleted /// Tell the client that an object has been deleted
/// </summary> /// </summary>
/// <param name="regionHandle"></param>
/// <param name="localID"></param> /// <param name="localID"></param>
void SendKillObject(ulong regionHandle, List<uint> localID); void SendKillObject(List<uint> localID);
void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs);
void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args);

View File

@ -1580,7 +1580,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(pc, ThrottleOutPacketType.Unknown); OutPacket(pc, ThrottleOutPacketType.Unknown);
} }
public void SendKillObject(ulong regionHandle, List<uint> localIDs) public void SendKillObject(List<uint> localIDs)
{ {
// foreach (uint id in localIDs) // foreach (uint id in localIDs)
// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, id, regionHandle); // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, id, regionHandle);
@ -11961,8 +11961,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (part == null) if (part == null)
{ {
// It's a ghost! tell the client to delete it from view. // It's a ghost! tell the client to delete it from view.
simClient.SendKillObject(Scene.RegionInfo.RegionHandle, simClient.SendKillObject(new List<uint> { localId });
new List<uint> { localId });
} }
else else
{ {

View File

@ -841,7 +841,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
m_scene.ForEachClient( m_scene.ForEachClient(
client => client =>
{ if (client.AgentId != so.AttachedAvatar) { if (client.AgentId != so.AttachedAvatar)
client.SendKillObject(m_scene.RegionInfo.RegionHandle, new List<uint>() { so.LocalId }); client.SendKillObject(new List<uint>() { so.LocalId });
}); });
} }

View File

@ -833,11 +833,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1);
AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID);
TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); TestClient tc = new TestClient(acd, sceneA);
List<TestClient> destinationTestClients = new List<TestClient>(); List<TestClient> destinationTestClients = new List<TestClient>();
EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients);
ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd);
beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32);
InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20);

View File

@ -104,14 +104,8 @@ namespace OpenSim.Region.Framework.Scenes
// better than losing the object for now. // better than losing the object for now.
if (permissionToDelete) if (permissionToDelete)
{ {
List<uint> killIDs = new List<uint>();
foreach (SceneObjectGroup g in objectGroups) foreach (SceneObjectGroup g in objectGroups)
{ killIDs.Add(g.LocalId); g.DeleteGroupFromScene(false);
g.DeleteGroupFromScene(true);
}
m_scene.SendKillObject(killIDs);
} }
} }
@ -160,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes
if (x.permissionToDelete) if (x.permissionToDelete)
{ {
foreach (SceneObjectGroup g in x.objectGroups) foreach (SceneObjectGroup g in x.objectGroups)
m_scene.DeleteSceneObject(g, false); m_scene.DeleteSceneObject(g, true);
} }
} }
catch (Exception e) catch (Exception e)

View File

@ -485,7 +485,10 @@ namespace OpenSim.Region.Framework.Scenes
item.SaleType = itemUpd.SaleType; item.SaleType = itemUpd.SaleType;
InventoryService.UpdateItem(item); InventoryService.UpdateItem(item);
remoteClient.SendBulkUpdateInventory(item);
// We cannot send out a bulk update here, since this will cause editing of clothing to start
// failing frequently. Possibly this is a race with a separate transaction that uploads the asset.
// remoteClient.SendBulkUpdateInventory(item);
} }
if (UUID.Zero != transactionID) if (UUID.Zero != transactionID)

View File

@ -3648,7 +3648,7 @@ namespace OpenSim.Region.Framework.Scenes
delegate(IClientAPI client) delegate(IClientAPI client)
{ {
//We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway
try { client.SendKillObject(avatar.RegionHandle, new List<uint> { avatar.LocalId }); } try { client.SendKillObject(new List<uint> { avatar.LocalId }); }
catch (NullReferenceException) { } catch (NullReferenceException) { }
}); });
} }
@ -3729,7 +3729,8 @@ namespace OpenSim.Region.Framework.Scenes
} }
deleteIDs.Add(localID); deleteIDs.Add(localID);
} }
ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, deleteIDs); });
ForEachClient(c => c.SendKillObject(deleteIDs));
} }
#endregion #endregion
@ -4382,8 +4383,6 @@ namespace OpenSim.Region.Framework.Scenes
m_log.DebugFormat( m_log.DebugFormat(
"[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName);
// XPTO: if this agent is not allowed here as root, always return false
// We have to wait until the viewer contacts this region after receiving EAC. // We have to wait until the viewer contacts this region after receiving EAC.
// That calls AddNewClient, which finally creates the ScenePresence // That calls AddNewClient, which finally creates the ScenePresence
int flags = GetUserFlags(cAgentData.AgentID); int flags = GetUserFlags(cAgentData.AgentID);

View File

@ -1857,11 +1857,11 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary> /// <summary>
/// Delete this group from its scene. /// Delete this group from its scene.
/// </summary> /// </summary>
/// /// <remarks>
/// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood
/// up and all avatars receive notification of its removal. Removal of the scene object from database backup /// up and all avatars receive notification of its removal. Removal of the scene object from database backup
/// must be handled by the caller. /// must be handled by the caller.
/// /// </remarks>
/// <param name="silent">If true then deletion is not broadcast to clients</param> /// <param name="silent">If true then deletion is not broadcast to clients</param>
public void DeleteGroupFromScene(bool silent) public void DeleteGroupFromScene(bool silent)
{ {
@ -1875,10 +1875,10 @@ namespace OpenSim.Region.Framework.Scenes
{ {
SceneObjectPart part = parts[i]; SceneObjectPart part = parts[i];
Scene.ForEachRootScenePresence(delegate(ScenePresence avatar) Scene.ForEachScenePresence(sp =>
{ {
if (avatar.ParentID == LocalId) if (!sp.IsChildAgent && sp.ParentID == LocalId)
avatar.StandUp(); sp.StandUp();
if (!silent) if (!silent)
{ {
@ -1886,9 +1886,9 @@ namespace OpenSim.Region.Framework.Scenes
if (part == m_rootPart) if (part == m_rootPart)
{ {
if (!IsAttachment if (!IsAttachment
|| AttachedAvatar == avatar.ControllingClient.AgentId || AttachedAvatar == sp.UUID
|| !HasPrivateAttachmentPoint) || !HasPrivateAttachmentPoint)
avatar.ControllingClient.SendKillObject(m_regionHandle, new List<uint> { part.LocalId }); sp.ControllingClient.SendKillObject(new List<uint> { part.LocalId });
} }
} }
}); });

View File

@ -33,7 +33,9 @@ using NUnit.Framework;
using OpenMetaverse; using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Communications; using OpenSim.Framework.Communications;
using OpenSim.Region.CoreModules.Framework.EntityTransfer;
using OpenSim.Region.CoreModules.Framework.InventoryAccess; using OpenSim.Region.CoreModules.Framework.InventoryAccess;
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
using OpenSim.Region.CoreModules.World.Permissions; using OpenSim.Region.CoreModules.World.Permissions;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
@ -52,6 +54,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[TestFixture] [TestFixture]
public class SceneObjectDeRezTests : OpenSimTestCase public class SceneObjectDeRezTests : OpenSimTestCase
{ {
[TestFixtureSetUp]
public void FixtureInit()
{
// Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
// This facility was added after the original async delete tests were written, so it may be possible now
// to not bother explicitly disabling their async (since everything will be running sync).
Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
}
[TestFixtureTearDown]
public void TearDown()
{
// We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
// threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
// tests really shouldn't).
Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
}
/// <summary> /// <summary>
/// Test deleting an object from a scene. /// Test deleting an object from a scene.
/// </summary> /// </summary>
@ -59,46 +79,96 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestDeRezSceneObject() public void TestDeRezSceneObject()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
// log4net.Config.XmlConfigurator.Configure();
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
TestScene scene = new SceneHelpers().SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
IConfigSource configSource = new IniConfigSource(); SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
IConfig config = configSource.AddConfig("Startup"); TestClient client = (TestClient)SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
config.Set("serverside_object_permissions", true);
SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test. // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
sogd.Enabled = false; sogd.Enabled = false;
SceneObjectPart part SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, "so1", userId);
= new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); uint soLocalId = so.LocalId;
part.Name = "obj1";
scene.AddNewSceneObject(new SceneObjectGroup(part), false);
List<uint> localIds = new List<uint>(); List<uint> localIds = new List<uint>();
localIds.Add(part.LocalId); localIds.Add(so.LocalId);
scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
// Check that object isn't deleted until we crank the sogd handle. // Check that object isn't deleted until we crank the sogd handle.
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); SceneObjectPart retrievedPart = scene.GetSceneObjectPart(so.LocalId);
Assert.That(retrievedPart, Is.Not.Null); Assert.That(retrievedPart, Is.Not.Null);
Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False); Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False);
sogd.InventoryDeQueueAndDelete(); sogd.InventoryDeQueueAndDelete();
SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId); SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(so.LocalId);
Assert.That(retrievedPart2, Is.Null); Assert.That(retrievedPart2, Is.Null);
Assert.That(client.ReceivedKills.Count, Is.EqualTo(1));
Assert.That(client.ReceivedKills[0], Is.EqualTo(soLocalId));
}
/// <summary>
/// Test that child and root agents correctly receive KillObject notifications.
/// </summary>
[Test]
public void TestDeRezSceneObjectToAgents()
{
TestHelpers.InMethod();
// TestHelpers.EnableLogging();
SceneHelpers sh = new SceneHelpers();
TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000);
TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1000, 999);
// We need this so that the creation of the root client for userB in sceneB can trigger the creation of a child client in sceneA
LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule();
EntityTransferModule etmB = new EntityTransferModule();
IConfigSource config = new IniConfigSource();
IConfig modulesConfig = config.AddConfig("Modules");
modulesConfig.Set("EntityTransferModule", etmB.Name);
modulesConfig.Set("SimulationServices", lscm.Name);
SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm);
SceneHelpers.SetupSceneModules(sceneB, config, etmB);
// We need this for derez
SceneHelpers.SetupSceneModules(sceneA, new PermissionsModule());
UserAccount uaA = UserAccountHelpers.CreateUserWithInventory(sceneA, "Andy", "AAA", 0x1, "");
UserAccount uaB = UserAccountHelpers.CreateUserWithInventory(sceneA, "Brian", "BBB", 0x2, "");
TestClient clientA = (TestClient)SceneHelpers.AddScenePresence(sceneA, uaA).ControllingClient;
// This is the more long-winded route we have to take to get a child client created for userB in sceneA
// rather than just calling AddScenePresence() as for userA
AgentCircuitData acd = SceneHelpers.GenerateAgentData(uaB);
TestClient clientB = new TestClient(acd, sceneB);
List<TestClient> childClientsB = new List<TestClient>();
EntityTransferHelpers.SetUpInformClientOfNeighbour(clientB, childClientsB);
SceneHelpers.AddScenePresence(sceneB, clientB, acd);
SceneObjectGroup so = SceneHelpers.AddSceneObject(sceneA);
uint soLocalId = so.LocalId;
sceneA.DeleteSceneObject(so, false);
Assert.That(clientA.ReceivedKills.Count, Is.EqualTo(1));
Assert.That(clientA.ReceivedKills[0], Is.EqualTo(soLocalId));
Assert.That(childClientsB[0].ReceivedKills.Count, Is.EqualTo(1));
Assert.That(childClientsB[0].ReceivedKills[0], Is.EqualTo(soLocalId));
} }
/// <summary> /// <summary>
/// Test deleting an object from a scene where the deleter is not the owner /// Test deleting an object from a scene where the deleter is not the owner
/// </summary> /// </summary>
/// /// <remarks>
/// This test assumes that the deleter is not a god. /// This test assumes that the deleter is not a god.
/// </remarks>
[Test] [Test]
public void TestDeRezSceneObjectNotOwner() public void TestDeRezSceneObjectNotOwner()
{ {
@ -109,10 +179,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001");
TestScene scene = new SceneHelpers().SetupScene(); TestScene scene = new SceneHelpers().SetupScene();
IConfigSource configSource = new IniConfigSource(); SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
IConfig config = configSource.AddConfig("Startup");
config.Set("serverside_object_permissions", true);
SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test. // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.

View File

@ -95,11 +95,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB); SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB);
AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId);
TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); TestClient tc = new TestClient(acd, sceneA);
List<TestClient> destinationTestClients = new List<TestClient>(); List<TestClient> destinationTestClients = new List<TestClient>();
EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients);
ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd);
originalSp.AbsolutePosition = new Vector3(128, 32, 10); originalSp.AbsolutePosition = new Vector3(128, 32, 10);
// originalSp.Flying = true; // originalSp.Flying = true;

View File

@ -139,7 +139,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Vector3 teleportPosition = new Vector3(10, 11, 12); Vector3 teleportPosition = new Vector3(10, 11, 12);
Vector3 teleportLookAt = new Vector3(20, 21, 22); Vector3 teleportLookAt = new Vector3(20, 21, 22);
ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
sp.AbsolutePosition = new Vector3(30, 31, 32); sp.AbsolutePosition = new Vector3(30, 31, 32);
List<TestClient> destinationTestClients = new List<TestClient>(); List<TestClient> destinationTestClients = new List<TestClient>();
@ -224,7 +224,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Vector3 teleportPosition = new Vector3(10, 11, 12); Vector3 teleportPosition = new Vector3(10, 11, 12);
Vector3 teleportLookAt = new Vector3(20, 21, 22); Vector3 teleportLookAt = new Vector3(20, 21, 22);
ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
sp.AbsolutePosition = preTeleportPosition; sp.AbsolutePosition = preTeleportPosition;
// Make sceneB return false on query access // Make sceneB return false on query access
@ -300,7 +300,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Vector3 teleportPosition = new Vector3(10, 11, 12); Vector3 teleportPosition = new Vector3(10, 11, 12);
Vector3 teleportLookAt = new Vector3(20, 21, 22); Vector3 teleportLookAt = new Vector3(20, 21, 22);
ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
sp.AbsolutePosition = preTeleportPosition; sp.AbsolutePosition = preTeleportPosition;
// Make sceneB refuse CreateAgent // Make sceneB refuse CreateAgent
@ -389,7 +389,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Vector3 teleportPosition = new Vector3(10, 11, 12); Vector3 teleportPosition = new Vector3(10, 11, 12);
Vector3 teleportLookAt = new Vector3(20, 21, 22); Vector3 teleportLookAt = new Vector3(20, 21, 22);
ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId);
sp.AbsolutePosition = preTeleportPosition; sp.AbsolutePosition = preTeleportPosition;
sceneA.RequestTeleportLocation( sceneA.RequestTeleportLocation(
@ -428,7 +428,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestSameSimulatorNeighbouringRegions() public void TestSameSimulatorNeighbouringRegions()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
TestHelpers.EnableLogging(); // TestHelpers.EnableLogging();
UUID userId = TestHelpers.ParseTail(0x1); UUID userId = TestHelpers.ParseTail(0x1);
@ -458,11 +458,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Vector3 teleportLookAt = new Vector3(20, 21, 22); Vector3 teleportLookAt = new Vector3(20, 21, 22);
AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId);
TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); TestClient tc = new TestClient(acd, sceneA);
List<TestClient> destinationTestClients = new List<TestClient>(); List<TestClient> destinationTestClients = new List<TestClient>();
EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients);
ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd);
beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32); beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32);
Assert.That(beforeSceneASp, Is.Not.Null); Assert.That(beforeSceneASp, Is.Not.Null);

View File

@ -955,7 +955,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
} }
public void SendKillObject(ulong regionHandle, List<uint> localID) public void SendKillObject(List<uint> localID)
{ {
} }

View File

@ -596,7 +596,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
} }
public virtual void SendKillObject(ulong regionHandle, List<uint> localID) public virtual void SendKillObject(List<uint> localID)
{ {
} }

View File

@ -368,9 +368,10 @@ public class BSShapeMesh : BSShape
// Check to see if mesh was created (might require an asset). // Check to see if mesh was created (might require an asset).
newShape = VerifyMeshCreated(physicsScene, newShape, prim); newShape = VerifyMeshCreated(physicsScene, newShape, prim);
if (!newShape.isNativeShape) if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
{ {
// If a mesh was what was created, remember the built shape for later sharing. // If a mesh was what was created, remember the built shape for later sharing.
// Also note that if meshing failed we put it in the mesh list as there is nothing else to do about the mesh.
Meshes.Add(newMeshKey, retMesh); Meshes.Add(newMeshKey, retMesh);
} }
@ -483,8 +484,11 @@ public class BSShapeMesh : BSShape
} }
else else
{ {
// Force the asset condition to 'failed' so we won't try to keep fetching and processing this mesh.
prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
physicsScene.Logger.DebugFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}", physicsScene.Logger.DebugFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}",
LogHeader, prim.PhysObjectName, prim.RawPosition, physicsScene.Name); LogHeader, prim.PhysObjectName, prim.RawPosition, physicsScene.Name);
physicsScene.DetailLog("{0},BSShapeMesh.CreatePhysicalMesh,allDegenerate,key={1}", prim.LocalID, newMeshKey);
} }
} }
newShape.shapeKey = newMeshKey; newShape.shapeKey = newMeshKey;
@ -523,7 +527,7 @@ public class BSShapeHull : BSShape
// Check to see if hull was created (might require an asset). // Check to see if hull was created (might require an asset).
newShape = VerifyMeshCreated(physicsScene, newShape, prim); newShape = VerifyMeshCreated(physicsScene, newShape, prim);
if (!newShape.isNativeShape) if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
{ {
// If a mesh was what was created, remember the built shape for later sharing. // If a mesh was what was created, remember the built shape for later sharing.
Hulls.Add(newHullKey, retHull); Hulls.Add(newHullKey, retHull);

View File

@ -233,7 +233,7 @@ namespace OpenSim.Services.LLLoginService
GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService,
string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message,
GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency, GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency,
string DSTZone, UUID realID) string DSTZone, string destinationsURL, string avatarsURL, UUID realID)
: this() : this()
{ {
FillOutInventoryData(invSkel, libService); FillOutInventoryData(invSkel, libService);
@ -253,6 +253,8 @@ namespace OpenSim.Services.LLLoginService
MapTileURL = mapTileURL; MapTileURL = mapTileURL;
ProfileURL = profileURL; ProfileURL = profileURL;
OpenIDURL = openIDURL; OpenIDURL = openIDURL;
DestinationsURL = destinationsURL;
AvatarsURL = avatarsURL;
SearchURL = searchURL; SearchURL = searchURL;
Currency = currency; Currency = currency;
@ -543,6 +545,12 @@ namespace OpenSim.Services.LLLoginService
if (profileURL != String.Empty) if (profileURL != String.Empty)
responseData["profile-server-url"] = profileURL; responseData["profile-server-url"] = profileURL;
if (DestinationsURL != String.Empty)
responseData["destination_guide_url"] = DestinationsURL;
if (AvatarsURL != String.Empty)
responseData["avatar_picker_url"] = AvatarsURL;
// We need to send an openid_token back in the response too // We need to send an openid_token back in the response too
if (openIDURL != String.Empty) if (openIDURL != String.Empty)
responseData["openid_url"] = openIDURL; responseData["openid_url"] = openIDURL;
@ -1073,6 +1081,16 @@ namespace OpenSim.Services.LLLoginService
set { currency = value; } set { currency = value; }
} }
public string DestinationsURL
{
get; set;
}
public string AvatarsURL
{
get; set;
}
#endregion #endregion
public class UserInfo public class UserInfo

View File

@ -78,6 +78,8 @@ namespace OpenSim.Services.LLLoginService
protected string m_OpenIDURL; protected string m_OpenIDURL;
protected string m_SearchURL; protected string m_SearchURL;
protected string m_Currency; protected string m_Currency;
protected string m_DestinationGuide;
protected string m_AvatarPicker;
protected string m_AllowedClients; protected string m_AllowedClients;
protected string m_DeniedClients; protected string m_DeniedClients;
@ -117,6 +119,8 @@ namespace OpenSim.Services.LLLoginService
m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty); m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty);
m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty); m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty);
m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty); m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty);
m_DestinationGuide = m_LoginServerConfig.GetString ("DestinationGuide", string.Empty);
m_AvatarPicker = m_LoginServerConfig.GetString ("AvatarPicker", string.Empty);
m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty); m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty);
m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty); m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty);
@ -461,7 +465,8 @@ namespace OpenSim.Services.LLLoginService
= new LLLoginResponse( = new LLLoginResponse(
account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService,
where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP,
m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone, realID); m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone,
m_DestinationGuide, m_AvatarPicker, realID);
m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName); m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName);

View File

@ -82,7 +82,7 @@ namespace OpenSim.Tests.Common
Scene neighbourScene; Scene neighbourScene;
SceneManager.Instance.TryGetScene(x, y, out neighbourScene); SceneManager.Instance.TryGetScene(x, y, out neighbourScene);
TestClient neighbourTc = new TestClient(newAgent, neighbourScene, SceneManager.Instance); TestClient neighbourTc = new TestClient(newAgent, neighbourScene);
neighbourTcs.Add(neighbourTc); neighbourTcs.Add(neighbourTc);
neighbourScene.AddNewClient(neighbourTc, PresenceType.User); neighbourScene.AddNewClient(neighbourTc, PresenceType.User);
}; };

View File

@ -447,9 +447,6 @@ namespace OpenSim.Tests.Common
/// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// This can be used for tests where there is only one region or where there are multiple non-neighbour regions
/// and teleport doesn't take place.
///
/// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will
/// make the agent circuit data (e.g. first, lastname) consistent with the user account data. /// make the agent circuit data (e.g. first, lastname) consistent with the user account data.
/// </remarks> /// </remarks>
@ -461,22 +458,6 @@ namespace OpenSim.Tests.Common
return AddScenePresence(scene, GenerateAgentData(agentId)); return AddScenePresence(scene, GenerateAgentData(agentId));
} }
/// <summary>
/// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test
/// </summary>
/// <remarks>
/// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will
/// make the agent circuit data (e.g. first, lastname) consistent with the user account data.
/// </remarks>
/// <param name="scene"></param>
/// <param name="agentId"></param>
/// <param name="sceneManager"></param>
/// <returns></returns>
public static ScenePresence AddScenePresence(Scene scene, UUID agentId, SceneManager sceneManager)
{
return AddScenePresence(scene, GenerateAgentData(agentId), sceneManager);
}
/// <summary> /// <summary>
/// Add a root agent. /// Add a root agent.
/// </summary> /// </summary>
@ -508,7 +489,7 @@ namespace OpenSim.Tests.Common
/// <returns></returns> /// <returns></returns>
public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData) public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData)
{ {
return AddScenePresence(scene, agentData, null); return AddScenePresence(scene, new TestClient(agentData, scene), agentData);
} }
/// <summary> /// <summary>
@ -528,34 +509,9 @@ namespace OpenSim.Tests.Common
/// </remarks> /// </remarks>
/// <param name="scene"></param> /// <param name="scene"></param>
/// <param name="agentData"></param> /// <param name="agentData"></param>
/// <param name="sceneManager"></param>
/// <returns></returns>
public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData, SceneManager sceneManager)
{
return AddScenePresence(scene, new TestClient(agentData, scene, sceneManager), agentData, sceneManager);
}
/// <summary>
/// Add a root agent.
/// </summary>
/// <remarks>
/// This function
///
/// 1) Tells the scene that an agent is coming. Normally, the login service (local if standalone, from the
/// userserver if grid) would give initial login data back to the client and separately tell the scene that the
/// agent was coming.
///
/// 2) Connects the agent with the scene
///
/// This function performs actions equivalent with notifying the scene that an agent is
/// coming and then actually connecting the agent to the scene. The one step missed out is the very first
/// </remarks>
/// <param name="scene"></param>
/// <param name="agentData"></param>
/// <param name="sceneManager"></param>
/// <returns></returns> /// <returns></returns>
public static ScenePresence AddScenePresence( public static ScenePresence AddScenePresence(
Scene scene, IClientAPI client, AgentCircuitData agentData, SceneManager sceneManager) Scene scene, IClientAPI client, AgentCircuitData agentData)
{ {
// We emulate the proper login sequence here by doing things in four stages // We emulate the proper login sequence here by doing things in four stages
@ -578,10 +534,6 @@ namespace OpenSim.Tests.Common
/// Introduce an agent into the scene by adding a new client. /// Introduce an agent into the scene by adding a new client.
/// </summary> /// </summary>
/// <returns>The scene presence added</returns> /// <returns>The scene presence added</returns>
/// <param name='sceneManager'>
/// Scene manager. Can be null if there is only one region in the test or multiple regions that are not
/// neighbours and where no teleporting takes place.
/// </param>
/// <param name='scene'></param> /// <param name='scene'></param>
/// <param name='testClient'></param> /// <param name='testClient'></param>
/// <param name='agentData'></param> /// <param name='agentData'></param>
@ -607,7 +559,7 @@ namespace OpenSim.Tests.Common
acd.child = true; acd.child = true;
// XXX: ViaLogin may not be correct for child agents // XXX: ViaLogin may not be correct for child agents
TestClient client = new TestClient(acd, scene, null); TestClient client = new TestClient(acd, scene);
return IntroduceClientToScene(scene, client, acd, TeleportFlags.ViaLogin); return IntroduceClientToScene(scene, client, acd, TeleportFlags.ViaLogin);
} }

View File

@ -47,9 +47,9 @@ namespace OpenSim.Tests.Common.Mock
EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing");
private Scene m_scene; private Scene m_scene;
private SceneManager m_sceneManager;
// Properties so that we can get at received data for test purposes // Properties so that we can get at received data for test purposes
public List<uint> ReceivedKills { get; private set; }
public List<UUID> ReceivedOfflineNotifications { get; private set; } public List<UUID> ReceivedOfflineNotifications { get; private set; }
public List<UUID> ReceivedOnlineNotifications { get; private set; } public List<UUID> ReceivedOnlineNotifications { get; private set; }
public List<UUID> ReceivedFriendshipTerminations { get; private set; } public List<UUID> ReceivedFriendshipTerminations { get; private set; }
@ -434,36 +434,24 @@ namespace OpenSim.Tests.Common.Mock
get { return new IPEndPoint(IPAddress.Loopback, (ushort)m_circuitCode); } get { return new IPEndPoint(IPAddress.Loopback, (ushort)m_circuitCode); }
} }
/// <summary>
/// Constructor
/// </summary>
/// <remarks>
/// Can be used for a test where there is only one region or where there are multiple regions that are not
/// neighbours and where no teleporting takes place. In other situations, the constructor that takes in a
/// scene manager should be used.
/// </remarks>
/// <param name="agentData"></param>
/// <param name="scene"></param>
public TestClient(AgentCircuitData agentData, Scene scene) : this(agentData, scene, null) {}
/// <summary> /// <summary>
/// Constructor /// Constructor
/// </summary> /// </summary>
/// <param name="agentData"></param> /// <param name="agentData"></param>
/// <param name="scene"></param> /// <param name="scene"></param>
/// <param name="sceneManager"></param> /// <param name="sceneManager"></param>
public TestClient(AgentCircuitData agentData, Scene scene, SceneManager sceneManager) public TestClient(AgentCircuitData agentData, Scene scene)
{ {
m_agentId = agentData.AgentID; m_agentId = agentData.AgentID;
m_firstName = agentData.firstname; m_firstName = agentData.firstname;
m_lastName = agentData.lastname; m_lastName = agentData.lastname;
m_circuitCode = agentData.circuitcode; m_circuitCode = agentData.circuitcode;
m_scene = scene; m_scene = scene;
m_sceneManager = sceneManager;
SessionId = agentData.SessionID; SessionId = agentData.SessionID;
SecureSessionId = agentData.SecureSessionID; SecureSessionId = agentData.SecureSessionID;
CapsSeedUrl = agentData.CapsPath; CapsSeedUrl = agentData.CapsPath;
ReceivedKills = new List<uint>();
ReceivedOfflineNotifications = new List<UUID>(); ReceivedOfflineNotifications = new List<UUID>();
ReceivedOnlineNotifications = new List<UUID>(); ReceivedOnlineNotifications = new List<UUID>();
ReceivedFriendshipTerminations = new List<UUID>(); ReceivedFriendshipTerminations = new List<UUID>();
@ -532,11 +520,11 @@ namespace OpenSim.Tests.Common.Mock
public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle)
{ {
} }
public virtual void SendKillObject(ulong regionHandle, List<uint> localID) public virtual void SendKillObject(List<uint> localID)
{ {
ReceivedKills.AddRange(localID);
} }
public virtual void SetChildAgentThrottle(byte[] throttle) public virtual void SetChildAgentThrottle(byte[] throttle)
@ -545,15 +533,13 @@ namespace OpenSim.Tests.Common.Mock
public void SetAgentThrottleSilent(int throttle, int setting) public void SetAgentThrottleSilent(int throttle, int setting)
{ {
} }
public byte[] GetThrottlesPacked(float multiplier) public byte[] GetThrottlesPacked(float multiplier)
{ {
return new byte[0]; return new byte[0];
} }
public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
{ {
} }

View File

@ -118,8 +118,8 @@ namespace OpenSim.Tests.Common.Mock
folder.parentFolderID = new UUID(newParent); folder.parentFolderID = new UUID(newParent);
XInventoryFolder[] newParentFolders // XInventoryFolder[] newParentFolders
= GetFolders(new string[] { "folderID" }, new string[] { folder.parentFolderID.ToString() }); // = GetFolders(new string[] { "folderID" }, new string[] { folder.parentFolderID.ToString() });
// Console.WriteLine( // Console.WriteLine(
// "Moved folder {0} {1}, to {2} {3}", // "Moved folder {0} {1}, to {2} {3}",

View File

@ -325,6 +325,12 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
; For V2/V3 webapp authentication SSO ; For V2/V3 webapp authentication SSO
; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/"
; For V3 destination guide
; DestinationGuide = "http://127.0.0.1/guide"
; For V3 avatar picker (( work in progress ))
; AvatarPicker = "http://127.0.0.1/avatars"
; If you run this login server behind a proxy, set this to true ; If you run this login server behind a proxy, set this to true
; HasProxy = false ; HasProxy = false

View File

@ -288,6 +288,12 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto
; For V2/V3 webapp authentication SSO ; For V2/V3 webapp authentication SSO
; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/"
; For V3 destination guide
; DestinationGuide = "http://127.0.0.1/guide"
; For V3 avatar picker (( work in progress ))
; AvatarPicker = "http://127.0.0.1/avatars"
; If you run this login server behind a proxy, set this to true ; If you run this login server behind a proxy, set this to true
; HasProxy = false ; HasProxy = false