diff options
27 files changed, 206 insertions, 139 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 50d8a73..729667c 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -1909,7 +1909,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1909 | m_log.Info("[RADMIN]: Received Estate Reload Request"); | 1909 | m_log.Info("[RADMIN]: Received Estate Reload Request"); |
1910 | 1910 | ||
1911 | Hashtable responseData = (Hashtable)response.Value; | 1911 | Hashtable responseData = (Hashtable)response.Value; |
1912 | Hashtable requestData = (Hashtable)request.Params[0]; | 1912 | // Hashtable requestData = (Hashtable)request.Params[0]; |
1913 | 1913 | ||
1914 | m_application.SceneManager.ForEachScene(s => | 1914 | m_application.SceneManager.ForEachScene(s => |
1915 | s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false) | 1915 | s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false) |
diff --git a/OpenSim/Data/MySQL/Resources/EstateStore.migrations b/OpenSim/Data/MySQL/Resources/EstateStore.migrations index df82a2e..2d1c2b5 100644 --- a/OpenSim/Data/MySQL/Resources/EstateStore.migrations +++ b/OpenSim/Data/MySQL/Resources/EstateStore.migrations | |||
@@ -77,5 +77,11 @@ BEGIN; | |||
77 | ALTER TABLE estate_settings AUTO_INCREMENT = 100; | 77 | ALTER TABLE estate_settings AUTO_INCREMENT = 100; |
78 | COMMIT; | 78 | COMMIT; |
79 | 79 | ||
80 | :VERSION 33 #--------------------- | ||
80 | 81 | ||
82 | BEGIN; | ||
83 | ALTER TABLE estate_settings ADD COLUMN `AllowLandmark` tinyint(4) NOT NULL default '1'; | ||
84 | ALTER TABLE estate_settings ADD COLUMN `AllowParcelChanges` tinyint(4) NOT NULL default '1'; | ||
85 | ALTER TABLE estate_settings ADD COLUMN `AllowSetHome` tinyint(4) NOT NULL default '1'; | ||
86 | COMMIT; | ||
81 | 87 | ||
diff --git a/OpenSim/Data/SQLite/Resources/EstateStore.migrations b/OpenSim/Data/SQLite/Resources/EstateStore.migrations index 62f6464..0aec49b 100644 --- a/OpenSim/Data/SQLite/Resources/EstateStore.migrations +++ b/OpenSim/Data/SQLite/Resources/EstateStore.migrations | |||
@@ -86,3 +86,12 @@ begin; | |||
86 | alter table estate_settings add column DenyMinors tinyint not null default 0; | 86 | alter table estate_settings add column DenyMinors tinyint not null default 0; |
87 | 87 | ||
88 | commit; | 88 | commit; |
89 | |||
90 | :VERSION 9 | ||
91 | |||
92 | begin; | ||
93 | alter table estate_settings add column AllowLandmark tinyint not null default '1'; | ||
94 | alter table estate_settings add column AllowParcelChanges tinyint not null default '1'; | ||
95 | alter table estate_settings add column AllowSetHome tinyint not null default '1'; | ||
96 | commit; | ||
97 | |||
diff --git a/OpenSim/Framework/Console/LocalConsole.cs b/OpenSim/Framework/Console/LocalConsole.cs index d41481f..a967db6 100644 --- a/OpenSim/Framework/Console/LocalConsole.cs +++ b/OpenSim/Framework/Console/LocalConsole.cs | |||
@@ -426,6 +426,21 @@ namespace OpenSim.Framework.Console | |||
426 | System.Console.Write("{0}", prompt); | 426 | System.Console.Write("{0}", prompt); |
427 | 427 | ||
428 | break; | 428 | break; |
429 | case ConsoleKey.Delete: | ||
430 | if (m_cursorXPosition == m_commandLine.Length) | ||
431 | break; | ||
432 | |||
433 | m_commandLine.Remove(m_cursorXPosition, 1); | ||
434 | |||
435 | SetCursorLeft(0); | ||
436 | m_cursorYPosition = SetCursorTop(m_cursorYPosition); | ||
437 | |||
438 | if (m_echo) | ||
439 | System.Console.Write("{0}{1} ", prompt, m_commandLine); | ||
440 | else | ||
441 | System.Console.Write("{0}", prompt); | ||
442 | |||
443 | break; | ||
429 | case ConsoleKey.End: | 444 | case ConsoleKey.End: |
430 | m_cursorXPosition = m_commandLine.Length; | 445 | m_cursorXPosition = m_commandLine.Length; |
431 | break; | 446 | break; |
diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs index e03750b..5ddbd61 100644 --- a/OpenSim/Framework/EstateSettings.cs +++ b/OpenSim/Framework/EstateSettings.cs | |||
@@ -430,6 +430,5 @@ namespace OpenSim.Framework | |||
430 | { | 430 | { |
431 | return l_EstateGroups.Contains(groupID); | 431 | return l_EstateGroups.Contains(groupID); |
432 | } | 432 | } |
433 | |||
434 | } | 433 | } |
435 | } | 434 | } |
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 9631a46..34c240a 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -1109,9 +1109,8 @@ namespace OpenSim.Framework | |||
1109 | /// <summary> | 1109 | /// <summary> |
1110 | /// Tell the client that an object has been deleted | 1110 | /// Tell the client that an object has been deleted |
1111 | /// </summary> | 1111 | /// </summary> |
1112 | /// <param name="regionHandle"></param> | ||
1113 | /// <param name="localID"></param> | 1112 | /// <param name="localID"></param> |
1114 | void SendKillObject(ulong regionHandle, List<uint> localID); | 1113 | void SendKillObject(List<uint> localID); |
1115 | 1114 | ||
1116 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); | 1115 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); |
1117 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); | 1116 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 17b59da..9de564b 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -1580,7 +1580,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1580 | OutPacket(pc, ThrottleOutPacketType.Unknown); | 1580 | OutPacket(pc, ThrottleOutPacketType.Unknown); |
1581 | } | 1581 | } |
1582 | 1582 | ||
1583 | public void SendKillObject(ulong regionHandle, List<uint> localIDs) | 1583 | public void SendKillObject(List<uint> localIDs) |
1584 | { | 1584 | { |
1585 | // foreach (uint id in localIDs) | 1585 | // foreach (uint id in localIDs) |
1586 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, id, regionHandle); | 1586 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, id, regionHandle); |
@@ -11961,8 +11961,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11961 | if (part == null) | 11961 | if (part == null) |
11962 | { | 11962 | { |
11963 | // It's a ghost! tell the client to delete it from view. | 11963 | // It's a ghost! tell the client to delete it from view. |
11964 | simClient.SendKillObject(Scene.RegionInfo.RegionHandle, | 11964 | simClient.SendKillObject(new List<uint> { localId }); |
11965 | new List<uint> { localId }); | ||
11966 | } | 11965 | } |
11967 | else | 11966 | else |
11968 | { | 11967 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index cb724aa..0f03ad0 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -841,7 +841,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
841 | m_scene.ForEachClient( | 841 | m_scene.ForEachClient( |
842 | client => | 842 | client => |
843 | { if (client.AgentId != so.AttachedAvatar) | 843 | { if (client.AgentId != so.AttachedAvatar) |
844 | client.SendKillObject(m_scene.RegionInfo.RegionHandle, new List<uint>() { so.LocalId }); | 844 | client.SendKillObject(new List<uint>() { so.LocalId }); |
845 | }); | 845 | }); |
846 | } | 846 | } |
847 | 847 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index 1a38619..8f9b17e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -833,11 +833,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
833 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); | 833 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); |
834 | 834 | ||
835 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); | 835 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); |
836 | TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); | 836 | TestClient tc = new TestClient(acd, sceneA); |
837 | List<TestClient> destinationTestClients = new List<TestClient>(); | 837 | List<TestClient> destinationTestClients = new List<TestClient>(); |
838 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | 838 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); |
839 | 839 | ||
840 | ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); | 840 | ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd); |
841 | beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); | 841 | beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); |
842 | 842 | ||
843 | InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); | 843 | InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); |
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs index f555b49..11a0146 100644 --- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs +++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs | |||
@@ -104,14 +104,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
104 | // better than losing the object for now. | 104 | // better than losing the object for now. |
105 | if (permissionToDelete) | 105 | if (permissionToDelete) |
106 | { | 106 | { |
107 | List<uint> killIDs = new List<uint>(); | ||
108 | |||
109 | foreach (SceneObjectGroup g in objectGroups) | 107 | foreach (SceneObjectGroup g in objectGroups) |
110 | { killIDs.Add(g.LocalId); | 108 | g.DeleteGroupFromScene(false); |
111 | g.DeleteGroupFromScene(true); | ||
112 | } | ||
113 | |||
114 | m_scene.SendKillObject(killIDs); | ||
115 | } | 109 | } |
116 | } | 110 | } |
117 | 111 | ||
@@ -160,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
160 | if (x.permissionToDelete) | 154 | if (x.permissionToDelete) |
161 | { | 155 | { |
162 | foreach (SceneObjectGroup g in x.objectGroups) | 156 | foreach (SceneObjectGroup g in x.objectGroups) |
163 | m_scene.DeleteSceneObject(g, false); | 157 | m_scene.DeleteSceneObject(g, true); |
164 | } | 158 | } |
165 | } | 159 | } |
166 | catch (Exception e) | 160 | catch (Exception e) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index d2e41f8..257e070 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -485,7 +485,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
485 | item.SaleType = itemUpd.SaleType; | 485 | item.SaleType = itemUpd.SaleType; |
486 | 486 | ||
487 | InventoryService.UpdateItem(item); | 487 | InventoryService.UpdateItem(item); |
488 | remoteClient.SendBulkUpdateInventory(item); | 488 | |
489 | // We cannot send out a bulk update here, since this will cause editing of clothing to start | ||
490 | // failing frequently. Possibly this is a race with a separate transaction that uploads the asset. | ||
491 | // remoteClient.SendBulkUpdateInventory(item); | ||
489 | } | 492 | } |
490 | 493 | ||
491 | if (UUID.Zero != transactionID) | 494 | if (UUID.Zero != transactionID) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 5860c9a..1023e25 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3648,7 +3648,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3648 | delegate(IClientAPI client) | 3648 | delegate(IClientAPI client) |
3649 | { | 3649 | { |
3650 | //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway | 3650 | //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway |
3651 | try { client.SendKillObject(avatar.RegionHandle, new List<uint> { avatar.LocalId }); } | 3651 | try { client.SendKillObject(new List<uint> { avatar.LocalId }); } |
3652 | catch (NullReferenceException) { } | 3652 | catch (NullReferenceException) { } |
3653 | }); | 3653 | }); |
3654 | } | 3654 | } |
@@ -3729,7 +3729,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3729 | } | 3729 | } |
3730 | deleteIDs.Add(localID); | 3730 | deleteIDs.Add(localID); |
3731 | } | 3731 | } |
3732 | ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, deleteIDs); }); | 3732 | |
3733 | ForEachClient(c => c.SendKillObject(deleteIDs)); | ||
3733 | } | 3734 | } |
3734 | 3735 | ||
3735 | #endregion | 3736 | #endregion |
@@ -4382,8 +4383,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
4382 | m_log.DebugFormat( | 4383 | m_log.DebugFormat( |
4383 | "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); | 4384 | "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); |
4384 | 4385 | ||
4385 | // XPTO: if this agent is not allowed here as root, always return false | ||
4386 | |||
4387 | // We have to wait until the viewer contacts this region after receiving EAC. | 4386 | // We have to wait until the viewer contacts this region after receiving EAC. |
4388 | // That calls AddNewClient, which finally creates the ScenePresence | 4387 | // That calls AddNewClient, which finally creates the ScenePresence |
4389 | int flags = GetUserFlags(cAgentData.AgentID); | 4388 | int flags = GetUserFlags(cAgentData.AgentID); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 69fb6df..92e4fce 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1857,11 +1857,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1857 | /// <summary> | 1857 | /// <summary> |
1858 | /// Delete this group from its scene. | 1858 | /// Delete this group from its scene. |
1859 | /// </summary> | 1859 | /// </summary> |
1860 | /// | 1860 | /// <remarks> |
1861 | /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood | 1861 | /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood |
1862 | /// up and all avatars receive notification of its removal. Removal of the scene object from database backup | 1862 | /// up and all avatars receive notification of its removal. Removal of the scene object from database backup |
1863 | /// must be handled by the caller. | 1863 | /// must be handled by the caller. |
1864 | /// | 1864 | /// </remarks> |
1865 | /// <param name="silent">If true then deletion is not broadcast to clients</param> | 1865 | /// <param name="silent">If true then deletion is not broadcast to clients</param> |
1866 | public void DeleteGroupFromScene(bool silent) | 1866 | public void DeleteGroupFromScene(bool silent) |
1867 | { | 1867 | { |
@@ -1875,10 +1875,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1875 | { | 1875 | { |
1876 | SceneObjectPart part = parts[i]; | 1876 | SceneObjectPart part = parts[i]; |
1877 | 1877 | ||
1878 | Scene.ForEachRootScenePresence(delegate(ScenePresence avatar) | 1878 | Scene.ForEachScenePresence(sp => |
1879 | { | 1879 | { |
1880 | if (avatar.ParentID == LocalId) | 1880 | if (!sp.IsChildAgent && sp.ParentID == LocalId) |
1881 | avatar.StandUp(); | 1881 | sp.StandUp(); |
1882 | 1882 | ||
1883 | if (!silent) | 1883 | if (!silent) |
1884 | { | 1884 | { |
@@ -1886,9 +1886,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1886 | if (part == m_rootPart) | 1886 | if (part == m_rootPart) |
1887 | { | 1887 | { |
1888 | if (!IsAttachment | 1888 | if (!IsAttachment |
1889 | || AttachedAvatar == avatar.ControllingClient.AgentId | 1889 | || AttachedAvatar == sp.UUID |
1890 | || !HasPrivateAttachmentPoint) | 1890 | || !HasPrivateAttachmentPoint) |
1891 | avatar.ControllingClient.SendKillObject(m_regionHandle, new List<uint> { part.LocalId }); | 1891 | sp.ControllingClient.SendKillObject(new List<uint> { part.LocalId }); |
1892 | } | 1892 | } |
1893 | } | 1893 | } |
1894 | }); | 1894 | }); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs index 52ad538..d670dad 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs | |||
@@ -33,7 +33,9 @@ using NUnit.Framework; | |||
33 | using OpenMetaverse; | 33 | using OpenMetaverse; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.Communications; | 35 | using OpenSim.Framework.Communications; |
36 | using OpenSim.Region.CoreModules.Framework.EntityTransfer; | ||
36 | using OpenSim.Region.CoreModules.Framework.InventoryAccess; | 37 | using OpenSim.Region.CoreModules.Framework.InventoryAccess; |
38 | using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation; | ||
37 | using OpenSim.Region.CoreModules.World.Permissions; | 39 | using OpenSim.Region.CoreModules.World.Permissions; |
38 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
39 | using OpenSim.Services.Interfaces; | 41 | using OpenSim.Services.Interfaces; |
@@ -52,6 +54,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
52 | [TestFixture] | 54 | [TestFixture] |
53 | public class SceneObjectDeRezTests : OpenSimTestCase | 55 | public class SceneObjectDeRezTests : OpenSimTestCase |
54 | { | 56 | { |
57 | [TestFixtureSetUp] | ||
58 | public void FixtureInit() | ||
59 | { | ||
60 | // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread. | ||
61 | // This facility was added after the original async delete tests were written, so it may be possible now | ||
62 | // to not bother explicitly disabling their async (since everything will be running sync). | ||
63 | Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest; | ||
64 | } | ||
65 | |||
66 | [TestFixtureTearDown] | ||
67 | public void TearDown() | ||
68 | { | ||
69 | // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple | ||
70 | // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression | ||
71 | // tests really shouldn't). | ||
72 | Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod; | ||
73 | } | ||
74 | |||
55 | /// <summary> | 75 | /// <summary> |
56 | /// Test deleting an object from a scene. | 76 | /// Test deleting an object from a scene. |
57 | /// </summary> | 77 | /// </summary> |
@@ -59,46 +79,96 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
59 | public void TestDeRezSceneObject() | 79 | public void TestDeRezSceneObject() |
60 | { | 80 | { |
61 | TestHelpers.InMethod(); | 81 | TestHelpers.InMethod(); |
62 | // log4net.Config.XmlConfigurator.Configure(); | ||
63 | 82 | ||
64 | UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); | 83 | UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); |
65 | 84 | ||
66 | TestScene scene = new SceneHelpers().SetupScene(); | 85 | TestScene scene = new SceneHelpers().SetupScene(); |
67 | IConfigSource configSource = new IniConfigSource(); | 86 | SceneHelpers.SetupSceneModules(scene, new PermissionsModule()); |
68 | IConfig config = configSource.AddConfig("Startup"); | 87 | TestClient client = (TestClient)SceneHelpers.AddScenePresence(scene, userId).ControllingClient; |
69 | config.Set("serverside_object_permissions", true); | ||
70 | SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); | ||
71 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; | ||
72 | 88 | ||
73 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. | 89 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. |
74 | AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; | 90 | AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; |
75 | sogd.Enabled = false; | 91 | sogd.Enabled = false; |
76 | 92 | ||
77 | SceneObjectPart part | 93 | SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, "so1", userId); |
78 | = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); | 94 | uint soLocalId = so.LocalId; |
79 | part.Name = "obj1"; | ||
80 | scene.AddNewSceneObject(new SceneObjectGroup(part), false); | ||
81 | 95 | ||
82 | List<uint> localIds = new List<uint>(); | 96 | List<uint> localIds = new List<uint>(); |
83 | localIds.Add(part.LocalId); | 97 | localIds.Add(so.LocalId); |
84 | scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); | 98 | scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); |
85 | 99 | ||
86 | // Check that object isn't deleted until we crank the sogd handle. | 100 | // Check that object isn't deleted until we crank the sogd handle. |
87 | SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); | 101 | SceneObjectPart retrievedPart = scene.GetSceneObjectPart(so.LocalId); |
88 | Assert.That(retrievedPart, Is.Not.Null); | 102 | Assert.That(retrievedPart, Is.Not.Null); |
89 | Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False); | 103 | Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False); |
90 | 104 | ||
91 | sogd.InventoryDeQueueAndDelete(); | 105 | sogd.InventoryDeQueueAndDelete(); |
92 | 106 | ||
93 | SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId); | 107 | SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(so.LocalId); |
94 | Assert.That(retrievedPart2, Is.Null); | 108 | Assert.That(retrievedPart2, Is.Null); |
109 | |||
110 | Assert.That(client.ReceivedKills.Count, Is.EqualTo(1)); | ||
111 | Assert.That(client.ReceivedKills[0], Is.EqualTo(soLocalId)); | ||
112 | } | ||
113 | |||
114 | /// <summary> | ||
115 | /// Test that child and root agents correctly receive KillObject notifications. | ||
116 | /// </summary> | ||
117 | [Test] | ||
118 | public void TestDeRezSceneObjectToAgents() | ||
119 | { | ||
120 | TestHelpers.InMethod(); | ||
121 | // TestHelpers.EnableLogging(); | ||
122 | |||
123 | SceneHelpers sh = new SceneHelpers(); | ||
124 | TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); | ||
125 | TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1000, 999); | ||
126 | |||
127 | // 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 | ||
128 | LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule(); | ||
129 | EntityTransferModule etmB = new EntityTransferModule(); | ||
130 | IConfigSource config = new IniConfigSource(); | ||
131 | IConfig modulesConfig = config.AddConfig("Modules"); | ||
132 | modulesConfig.Set("EntityTransferModule", etmB.Name); | ||
133 | modulesConfig.Set("SimulationServices", lscm.Name); | ||
134 | SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm); | ||
135 | SceneHelpers.SetupSceneModules(sceneB, config, etmB); | ||
136 | |||
137 | // We need this for derez | ||
138 | SceneHelpers.SetupSceneModules(sceneA, new PermissionsModule()); | ||
139 | |||
140 | UserAccount uaA = UserAccountHelpers.CreateUserWithInventory(sceneA, "Andy", "AAA", 0x1, ""); | ||
141 | UserAccount uaB = UserAccountHelpers.CreateUserWithInventory(sceneA, "Brian", "BBB", 0x2, ""); | ||
142 | |||
143 | TestClient clientA = (TestClient)SceneHelpers.AddScenePresence(sceneA, uaA).ControllingClient; | ||
144 | |||
145 | // This is the more long-winded route we have to take to get a child client created for userB in sceneA | ||
146 | // rather than just calling AddScenePresence() as for userA | ||
147 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(uaB); | ||
148 | TestClient clientB = new TestClient(acd, sceneB); | ||
149 | List<TestClient> childClientsB = new List<TestClient>(); | ||
150 | EntityTransferHelpers.SetUpInformClientOfNeighbour(clientB, childClientsB); | ||
151 | |||
152 | SceneHelpers.AddScenePresence(sceneB, clientB, acd); | ||
153 | |||
154 | SceneObjectGroup so = SceneHelpers.AddSceneObject(sceneA); | ||
155 | uint soLocalId = so.LocalId; | ||
156 | |||
157 | sceneA.DeleteSceneObject(so, false); | ||
158 | |||
159 | Assert.That(clientA.ReceivedKills.Count, Is.EqualTo(1)); | ||
160 | Assert.That(clientA.ReceivedKills[0], Is.EqualTo(soLocalId)); | ||
161 | |||
162 | Assert.That(childClientsB[0].ReceivedKills.Count, Is.EqualTo(1)); | ||
163 | Assert.That(childClientsB[0].ReceivedKills[0], Is.EqualTo(soLocalId)); | ||
95 | } | 164 | } |
96 | 165 | ||
97 | /// <summary> | 166 | /// <summary> |
98 | /// Test deleting an object from a scene where the deleter is not the owner | 167 | /// Test deleting an object from a scene where the deleter is not the owner |
99 | /// </summary> | 168 | /// </summary> |
100 | /// | 169 | /// <remarks> |
101 | /// This test assumes that the deleter is not a god. | 170 | /// This test assumes that the deleter is not a god. |
171 | /// </remarks> | ||
102 | [Test] | 172 | [Test] |
103 | public void TestDeRezSceneObjectNotOwner() | 173 | public void TestDeRezSceneObjectNotOwner() |
104 | { | 174 | { |
@@ -109,10 +179,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
109 | UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); | 179 | UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); |
110 | 180 | ||
111 | TestScene scene = new SceneHelpers().SetupScene(); | 181 | TestScene scene = new SceneHelpers().SetupScene(); |
112 | IConfigSource configSource = new IniConfigSource(); | 182 | SceneHelpers.SetupSceneModules(scene, new PermissionsModule()); |
113 | IConfig config = configSource.AddConfig("Startup"); | ||
114 | config.Set("serverside_object_permissions", true); | ||
115 | SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); | ||
116 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; | 183 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; |
117 | 184 | ||
118 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. | 185 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs index 8775949..5a72239 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs | |||
@@ -95,11 +95,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
95 | SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB); | 95 | SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB); |
96 | 96 | ||
97 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); | 97 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); |
98 | TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); | 98 | TestClient tc = new TestClient(acd, sceneA); |
99 | List<TestClient> destinationTestClients = new List<TestClient>(); | 99 | List<TestClient> destinationTestClients = new List<TestClient>(); |
100 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | 100 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); |
101 | 101 | ||
102 | ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); | 102 | ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd); |
103 | originalSp.AbsolutePosition = new Vector3(128, 32, 10); | 103 | originalSp.AbsolutePosition = new Vector3(128, 32, 10); |
104 | 104 | ||
105 | // originalSp.Flying = true; | 105 | // originalSp.Flying = true; |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs index de4458d..297c66b 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs | |||
@@ -139,7 +139,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
139 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 139 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
140 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 140 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
141 | 141 | ||
142 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 142 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
143 | sp.AbsolutePosition = new Vector3(30, 31, 32); | 143 | sp.AbsolutePosition = new Vector3(30, 31, 32); |
144 | 144 | ||
145 | List<TestClient> destinationTestClients = new List<TestClient>(); | 145 | List<TestClient> destinationTestClients = new List<TestClient>(); |
@@ -224,7 +224,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
224 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 224 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
225 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 225 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
226 | 226 | ||
227 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 227 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
228 | sp.AbsolutePosition = preTeleportPosition; | 228 | sp.AbsolutePosition = preTeleportPosition; |
229 | 229 | ||
230 | // Make sceneB return false on query access | 230 | // Make sceneB return false on query access |
@@ -300,7 +300,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
300 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 300 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
301 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 301 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
302 | 302 | ||
303 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 303 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
304 | sp.AbsolutePosition = preTeleportPosition; | 304 | sp.AbsolutePosition = preTeleportPosition; |
305 | 305 | ||
306 | // Make sceneB refuse CreateAgent | 306 | // Make sceneB refuse CreateAgent |
@@ -389,7 +389,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
389 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 389 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
390 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 390 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
391 | 391 | ||
392 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 392 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
393 | sp.AbsolutePosition = preTeleportPosition; | 393 | sp.AbsolutePosition = preTeleportPosition; |
394 | 394 | ||
395 | sceneA.RequestTeleportLocation( | 395 | sceneA.RequestTeleportLocation( |
@@ -428,7 +428,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
428 | public void TestSameSimulatorNeighbouringRegions() | 428 | public void TestSameSimulatorNeighbouringRegions() |
429 | { | 429 | { |
430 | TestHelpers.InMethod(); | 430 | TestHelpers.InMethod(); |
431 | TestHelpers.EnableLogging(); | 431 | // TestHelpers.EnableLogging(); |
432 | 432 | ||
433 | UUID userId = TestHelpers.ParseTail(0x1); | 433 | UUID userId = TestHelpers.ParseTail(0x1); |
434 | 434 | ||
@@ -458,11 +458,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
458 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 458 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
459 | 459 | ||
460 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); | 460 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); |
461 | TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); | 461 | TestClient tc = new TestClient(acd, sceneA); |
462 | List<TestClient> destinationTestClients = new List<TestClient>(); | 462 | List<TestClient> destinationTestClients = new List<TestClient>(); |
463 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | 463 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); |
464 | 464 | ||
465 | ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); | 465 | ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd); |
466 | beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32); | 466 | beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32); |
467 | 467 | ||
468 | Assert.That(beforeSceneASp, Is.Not.Null); | 468 | Assert.That(beforeSceneASp, Is.Not.Null); |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 550f089..f7b837c 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -955,7 +955,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
955 | 955 | ||
956 | } | 956 | } |
957 | 957 | ||
958 | public void SendKillObject(ulong regionHandle, List<uint> localID) | 958 | public void SendKillObject(List<uint> localID) |
959 | { | 959 | { |
960 | 960 | ||
961 | } | 961 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index d1bb547..a6a53aa 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -596,7 +596,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
596 | 596 | ||
597 | } | 597 | } |
598 | 598 | ||
599 | public virtual void SendKillObject(ulong regionHandle, List<uint> localID) | 599 | public virtual void SendKillObject(List<uint> localID) |
600 | { | 600 | { |
601 | } | 601 | } |
602 | 602 | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs index f89c52f..2dc029e 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs | |||
@@ -368,9 +368,10 @@ public class BSShapeMesh : BSShape | |||
368 | 368 | ||
369 | // Check to see if mesh was created (might require an asset). | 369 | // Check to see if mesh was created (might require an asset). |
370 | newShape = VerifyMeshCreated(physicsScene, newShape, prim); | 370 | newShape = VerifyMeshCreated(physicsScene, newShape, prim); |
371 | if (!newShape.isNativeShape) | 371 | if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed) |
372 | { | 372 | { |
373 | // If a mesh was what was created, remember the built shape for later sharing. | 373 | // If a mesh was what was created, remember the built shape for later sharing. |
374 | // Also note that if meshing failed we put it in the mesh list as there is nothing else to do about the mesh. | ||
374 | Meshes.Add(newMeshKey, retMesh); | 375 | Meshes.Add(newMeshKey, retMesh); |
375 | } | 376 | } |
376 | 377 | ||
@@ -483,8 +484,11 @@ public class BSShapeMesh : BSShape | |||
483 | } | 484 | } |
484 | else | 485 | else |
485 | { | 486 | { |
487 | // Force the asset condition to 'failed' so we won't try to keep fetching and processing this mesh. | ||
488 | prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed; | ||
486 | physicsScene.Logger.DebugFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}", | 489 | physicsScene.Logger.DebugFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}", |
487 | LogHeader, prim.PhysObjectName, prim.RawPosition, physicsScene.Name); | 490 | LogHeader, prim.PhysObjectName, prim.RawPosition, physicsScene.Name); |
491 | physicsScene.DetailLog("{0},BSShapeMesh.CreatePhysicalMesh,allDegenerate,key={1}", prim.LocalID, newMeshKey); | ||
488 | } | 492 | } |
489 | } | 493 | } |
490 | newShape.shapeKey = newMeshKey; | 494 | newShape.shapeKey = newMeshKey; |
@@ -523,7 +527,7 @@ public class BSShapeHull : BSShape | |||
523 | 527 | ||
524 | // Check to see if hull was created (might require an asset). | 528 | // Check to see if hull was created (might require an asset). |
525 | newShape = VerifyMeshCreated(physicsScene, newShape, prim); | 529 | newShape = VerifyMeshCreated(physicsScene, newShape, prim); |
526 | if (!newShape.isNativeShape) | 530 | if (!newShape.isNativeShape || prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed) |
527 | { | 531 | { |
528 | // If a mesh was what was created, remember the built shape for later sharing. | 532 | // If a mesh was what was created, remember the built shape for later sharing. |
529 | Hulls.Add(newHullKey, retHull); | 533 | Hulls.Add(newHullKey, retHull); |
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs index e2f947c..da6c016 100644 --- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs +++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs | |||
@@ -233,7 +233,7 @@ namespace OpenSim.Services.LLLoginService | |||
233 | GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, | 233 | GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, |
234 | string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, | 234 | string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, |
235 | GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency, | 235 | GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency, |
236 | string DSTZone, UUID realID) | 236 | string DSTZone, string destinationsURL, string avatarsURL, UUID realID) |
237 | : this() | 237 | : this() |
238 | { | 238 | { |
239 | FillOutInventoryData(invSkel, libService); | 239 | FillOutInventoryData(invSkel, libService); |
@@ -253,6 +253,8 @@ namespace OpenSim.Services.LLLoginService | |||
253 | MapTileURL = mapTileURL; | 253 | MapTileURL = mapTileURL; |
254 | ProfileURL = profileURL; | 254 | ProfileURL = profileURL; |
255 | OpenIDURL = openIDURL; | 255 | OpenIDURL = openIDURL; |
256 | DestinationsURL = destinationsURL; | ||
257 | AvatarsURL = avatarsURL; | ||
256 | 258 | ||
257 | SearchURL = searchURL; | 259 | SearchURL = searchURL; |
258 | Currency = currency; | 260 | Currency = currency; |
@@ -543,6 +545,12 @@ namespace OpenSim.Services.LLLoginService | |||
543 | if (profileURL != String.Empty) | 545 | if (profileURL != String.Empty) |
544 | responseData["profile-server-url"] = profileURL; | 546 | responseData["profile-server-url"] = profileURL; |
545 | 547 | ||
548 | if (DestinationsURL != String.Empty) | ||
549 | responseData["destination_guide_url"] = DestinationsURL; | ||
550 | |||
551 | if (AvatarsURL != String.Empty) | ||
552 | responseData["avatar_picker_url"] = AvatarsURL; | ||
553 | |||
546 | // We need to send an openid_token back in the response too | 554 | // We need to send an openid_token back in the response too |
547 | if (openIDURL != String.Empty) | 555 | if (openIDURL != String.Empty) |
548 | responseData["openid_url"] = openIDURL; | 556 | responseData["openid_url"] = openIDURL; |
@@ -1073,6 +1081,16 @@ namespace OpenSim.Services.LLLoginService | |||
1073 | set { currency = value; } | 1081 | set { currency = value; } |
1074 | } | 1082 | } |
1075 | 1083 | ||
1084 | public string DestinationsURL | ||
1085 | { | ||
1086 | get; set; | ||
1087 | } | ||
1088 | |||
1089 | public string AvatarsURL | ||
1090 | { | ||
1091 | get; set; | ||
1092 | } | ||
1093 | |||
1076 | #endregion | 1094 | #endregion |
1077 | 1095 | ||
1078 | public class UserInfo | 1096 | public class UserInfo |
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index ede2353..351c1ac 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -78,6 +78,8 @@ namespace OpenSim.Services.LLLoginService | |||
78 | protected string m_OpenIDURL; | 78 | protected string m_OpenIDURL; |
79 | protected string m_SearchURL; | 79 | protected string m_SearchURL; |
80 | protected string m_Currency; | 80 | protected string m_Currency; |
81 | protected string m_DestinationGuide; | ||
82 | protected string m_AvatarPicker; | ||
81 | 83 | ||
82 | protected string m_AllowedClients; | 84 | protected string m_AllowedClients; |
83 | protected string m_DeniedClients; | 85 | protected string m_DeniedClients; |
@@ -117,6 +119,8 @@ namespace OpenSim.Services.LLLoginService | |||
117 | m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty); | 119 | m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty); |
118 | m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty); | 120 | m_SearchURL = m_LoginServerConfig.GetString("SearchURL", string.Empty); |
119 | m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty); | 121 | m_Currency = m_LoginServerConfig.GetString("Currency", string.Empty); |
122 | m_DestinationGuide = m_LoginServerConfig.GetString ("DestinationGuide", string.Empty); | ||
123 | m_AvatarPicker = m_LoginServerConfig.GetString ("AvatarPicker", string.Empty); | ||
120 | 124 | ||
121 | m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty); | 125 | m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty); |
122 | m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty); | 126 | m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty); |
@@ -461,7 +465,8 @@ namespace OpenSim.Services.LLLoginService | |||
461 | = new LLLoginResponse( | 465 | = new LLLoginResponse( |
462 | account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, | 466 | account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, |
463 | where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, | 467 | where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, |
464 | m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone, realID); | 468 | m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone, |
469 | m_DestinationGuide, m_AvatarPicker, realID); | ||
465 | 470 | ||
466 | m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName); | 471 | m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName); |
467 | 472 | ||
diff --git a/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs b/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs index 6cc7ff2..1b960b1 100644 --- a/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs +++ b/OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs | |||
@@ -82,7 +82,7 @@ namespace OpenSim.Tests.Common | |||
82 | Scene neighbourScene; | 82 | Scene neighbourScene; |
83 | SceneManager.Instance.TryGetScene(x, y, out neighbourScene); | 83 | SceneManager.Instance.TryGetScene(x, y, out neighbourScene); |
84 | 84 | ||
85 | TestClient neighbourTc = new TestClient(newAgent, neighbourScene, SceneManager.Instance); | 85 | TestClient neighbourTc = new TestClient(newAgent, neighbourScene); |
86 | neighbourTcs.Add(neighbourTc); | 86 | neighbourTcs.Add(neighbourTc); |
87 | neighbourScene.AddNewClient(neighbourTc, PresenceType.User); | 87 | neighbourScene.AddNewClient(neighbourTc, PresenceType.User); |
88 | }; | 88 | }; |
diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs index bdd9093..d9bb85e 100644 --- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs +++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs | |||
@@ -447,9 +447,6 @@ namespace OpenSim.Tests.Common | |||
447 | /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test | 447 | /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test |
448 | /// </summary> | 448 | /// </summary> |
449 | /// <remarks> | 449 | /// <remarks> |
450 | /// This can be used for tests where there is only one region or where there are multiple non-neighbour regions | ||
451 | /// and teleport doesn't take place. | ||
452 | /// | ||
453 | /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will | 450 | /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will |
454 | /// make the agent circuit data (e.g. first, lastname) consistent with the user account data. | 451 | /// make the agent circuit data (e.g. first, lastname) consistent with the user account data. |
455 | /// </remarks> | 452 | /// </remarks> |
@@ -462,22 +459,6 @@ namespace OpenSim.Tests.Common | |||
462 | } | 459 | } |
463 | 460 | ||
464 | /// <summary> | 461 | /// <summary> |
465 | /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test | ||
466 | /// </summary> | ||
467 | /// <remarks> | ||
468 | /// XXX: Use the version of this method that takes the UserAccount structure wherever possible - this will | ||
469 | /// make the agent circuit data (e.g. first, lastname) consistent with the user account data. | ||
470 | /// </remarks> | ||
471 | /// <param name="scene"></param> | ||
472 | /// <param name="agentId"></param> | ||
473 | /// <param name="sceneManager"></param> | ||
474 | /// <returns></returns> | ||
475 | public static ScenePresence AddScenePresence(Scene scene, UUID agentId, SceneManager sceneManager) | ||
476 | { | ||
477 | return AddScenePresence(scene, GenerateAgentData(agentId), sceneManager); | ||
478 | } | ||
479 | |||
480 | /// <summary> | ||
481 | /// Add a root agent. | 462 | /// Add a root agent. |
482 | /// </summary> | 463 | /// </summary> |
483 | /// <param name="scene"></param> | 464 | /// <param name="scene"></param> |
@@ -508,31 +489,7 @@ namespace OpenSim.Tests.Common | |||
508 | /// <returns></returns> | 489 | /// <returns></returns> |
509 | public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData) | 490 | public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData) |
510 | { | 491 | { |
511 | return AddScenePresence(scene, agentData, null); | 492 | return AddScenePresence(scene, new TestClient(agentData, scene), agentData); |
512 | } | ||
513 | |||
514 | /// <summary> | ||
515 | /// Add a root agent. | ||
516 | /// </summary> | ||
517 | /// <remarks> | ||
518 | /// This function | ||
519 | /// | ||
520 | /// 1) Tells the scene that an agent is coming. Normally, the login service (local if standalone, from the | ||
521 | /// userserver if grid) would give initial login data back to the client and separately tell the scene that the | ||
522 | /// agent was coming. | ||
523 | /// | ||
524 | /// 2) Connects the agent with the scene | ||
525 | /// | ||
526 | /// This function performs actions equivalent with notifying the scene that an agent is | ||
527 | /// coming and then actually connecting the agent to the scene. The one step missed out is the very first | ||
528 | /// </remarks> | ||
529 | /// <param name="scene"></param> | ||
530 | /// <param name="agentData"></param> | ||
531 | /// <param name="sceneManager"></param> | ||
532 | /// <returns></returns> | ||
533 | public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData, SceneManager sceneManager) | ||
534 | { | ||
535 | return AddScenePresence(scene, new TestClient(agentData, scene, sceneManager), agentData, sceneManager); | ||
536 | } | 493 | } |
537 | 494 | ||
538 | /// <summary> | 495 | /// <summary> |
@@ -552,10 +509,9 @@ namespace OpenSim.Tests.Common | |||
552 | /// </remarks> | 509 | /// </remarks> |
553 | /// <param name="scene"></param> | 510 | /// <param name="scene"></param> |
554 | /// <param name="agentData"></param> | 511 | /// <param name="agentData"></param> |
555 | /// <param name="sceneManager"></param> | ||
556 | /// <returns></returns> | 512 | /// <returns></returns> |
557 | public static ScenePresence AddScenePresence( | 513 | public static ScenePresence AddScenePresence( |
558 | Scene scene, IClientAPI client, AgentCircuitData agentData, SceneManager sceneManager) | 514 | Scene scene, IClientAPI client, AgentCircuitData agentData) |
559 | { | 515 | { |
560 | // We emulate the proper login sequence here by doing things in four stages | 516 | // We emulate the proper login sequence here by doing things in four stages |
561 | 517 | ||
@@ -578,10 +534,6 @@ namespace OpenSim.Tests.Common | |||
578 | /// Introduce an agent into the scene by adding a new client. | 534 | /// Introduce an agent into the scene by adding a new client. |
579 | /// </summary> | 535 | /// </summary> |
580 | /// <returns>The scene presence added</returns> | 536 | /// <returns>The scene presence added</returns> |
581 | /// <param name='sceneManager'> | ||
582 | /// Scene manager. Can be null if there is only one region in the test or multiple regions that are not | ||
583 | /// neighbours and where no teleporting takes place. | ||
584 | /// </param> | ||
585 | /// <param name='scene'></param> | 537 | /// <param name='scene'></param> |
586 | /// <param name='testClient'></param> | 538 | /// <param name='testClient'></param> |
587 | /// <param name='agentData'></param> | 539 | /// <param name='agentData'></param> |
@@ -607,7 +559,7 @@ namespace OpenSim.Tests.Common | |||
607 | acd.child = true; | 559 | acd.child = true; |
608 | 560 | ||
609 | // XXX: ViaLogin may not be correct for child agents | 561 | // XXX: ViaLogin may not be correct for child agents |
610 | TestClient client = new TestClient(acd, scene, null); | 562 | TestClient client = new TestClient(acd, scene); |
611 | return IntroduceClientToScene(scene, client, acd, TeleportFlags.ViaLogin); | 563 | return IntroduceClientToScene(scene, client, acd, TeleportFlags.ViaLogin); |
612 | } | 564 | } |
613 | 565 | ||
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 32f6a64..26479be 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs | |||
@@ -47,9 +47,9 @@ namespace OpenSim.Tests.Common.Mock | |||
47 | EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); | 47 | EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); |
48 | 48 | ||
49 | private Scene m_scene; | 49 | private Scene m_scene; |
50 | private SceneManager m_sceneManager; | ||
51 | 50 | ||
52 | // Properties so that we can get at received data for test purposes | 51 | // Properties so that we can get at received data for test purposes |
52 | public List<uint> ReceivedKills { get; private set; } | ||
53 | public List<UUID> ReceivedOfflineNotifications { get; private set; } | 53 | public List<UUID> ReceivedOfflineNotifications { get; private set; } |
54 | public List<UUID> ReceivedOnlineNotifications { get; private set; } | 54 | public List<UUID> ReceivedOnlineNotifications { get; private set; } |
55 | public List<UUID> ReceivedFriendshipTerminations { get; private set; } | 55 | public List<UUID> ReceivedFriendshipTerminations { get; private set; } |
@@ -437,33 +437,21 @@ namespace OpenSim.Tests.Common.Mock | |||
437 | /// <summary> | 437 | /// <summary> |
438 | /// Constructor | 438 | /// Constructor |
439 | /// </summary> | 439 | /// </summary> |
440 | /// <remarks> | ||
441 | /// Can be used for a test where there is only one region or where there are multiple regions that are not | ||
442 | /// neighbours and where no teleporting takes place. In other situations, the constructor that takes in a | ||
443 | /// scene manager should be used. | ||
444 | /// </remarks> | ||
445 | /// <param name="agentData"></param> | ||
446 | /// <param name="scene"></param> | ||
447 | public TestClient(AgentCircuitData agentData, Scene scene) : this(agentData, scene, null) {} | ||
448 | |||
449 | /// <summary> | ||
450 | /// Constructor | ||
451 | /// </summary> | ||
452 | /// <param name="agentData"></param> | 440 | /// <param name="agentData"></param> |
453 | /// <param name="scene"></param> | 441 | /// <param name="scene"></param> |
454 | /// <param name="sceneManager"></param> | 442 | /// <param name="sceneManager"></param> |
455 | public TestClient(AgentCircuitData agentData, Scene scene, SceneManager sceneManager) | 443 | public TestClient(AgentCircuitData agentData, Scene scene) |
456 | { | 444 | { |
457 | m_agentId = agentData.AgentID; | 445 | m_agentId = agentData.AgentID; |
458 | m_firstName = agentData.firstname; | 446 | m_firstName = agentData.firstname; |
459 | m_lastName = agentData.lastname; | 447 | m_lastName = agentData.lastname; |
460 | m_circuitCode = agentData.circuitcode; | 448 | m_circuitCode = agentData.circuitcode; |
461 | m_scene = scene; | 449 | m_scene = scene; |
462 | m_sceneManager = sceneManager; | ||
463 | SessionId = agentData.SessionID; | 450 | SessionId = agentData.SessionID; |
464 | SecureSessionId = agentData.SecureSessionID; | 451 | SecureSessionId = agentData.SecureSessionID; |
465 | CapsSeedUrl = agentData.CapsPath; | 452 | CapsSeedUrl = agentData.CapsPath; |
466 | 453 | ||
454 | ReceivedKills = new List<uint>(); | ||
467 | ReceivedOfflineNotifications = new List<UUID>(); | 455 | ReceivedOfflineNotifications = new List<UUID>(); |
468 | ReceivedOnlineNotifications = new List<UUID>(); | 456 | ReceivedOnlineNotifications = new List<UUID>(); |
469 | ReceivedFriendshipTerminations = new List<UUID>(); | 457 | ReceivedFriendshipTerminations = new List<UUID>(); |
@@ -532,11 +520,11 @@ namespace OpenSim.Tests.Common.Mock | |||
532 | 520 | ||
533 | public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) | 521 | public virtual void SendAgentDataUpdate(UUID agentid, UUID activegroupid, string firstname, string lastname, ulong grouppowers, string groupname, string grouptitle) |
534 | { | 522 | { |
535 | |||
536 | } | 523 | } |
537 | 524 | ||
538 | public virtual void SendKillObject(ulong regionHandle, List<uint> localID) | 525 | public virtual void SendKillObject(List<uint> localID) |
539 | { | 526 | { |
527 | ReceivedKills.AddRange(localID); | ||
540 | } | 528 | } |
541 | 529 | ||
542 | public virtual void SetChildAgentThrottle(byte[] throttle) | 530 | public virtual void SetChildAgentThrottle(byte[] throttle) |
@@ -545,15 +533,13 @@ namespace OpenSim.Tests.Common.Mock | |||
545 | 533 | ||
546 | public void SetAgentThrottleSilent(int throttle, int setting) | 534 | public void SetAgentThrottleSilent(int throttle, int setting) |
547 | { | 535 | { |
548 | |||
549 | |||
550 | } | 536 | } |
537 | |||
551 | public byte[] GetThrottlesPacked(float multiplier) | 538 | public byte[] GetThrottlesPacked(float multiplier) |
552 | { | 539 | { |
553 | return new byte[0]; | 540 | return new byte[0]; |
554 | } | 541 | } |
555 | 542 | ||
556 | |||
557 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) | 543 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) |
558 | { | 544 | { |
559 | } | 545 | } |
diff --git a/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs b/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs index 30b1f38..2be5524 100644 --- a/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs +++ b/OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs | |||
@@ -118,8 +118,8 @@ namespace OpenSim.Tests.Common.Mock | |||
118 | 118 | ||
119 | folder.parentFolderID = new UUID(newParent); | 119 | folder.parentFolderID = new UUID(newParent); |
120 | 120 | ||
121 | XInventoryFolder[] newParentFolders | 121 | // XInventoryFolder[] newParentFolders |
122 | = GetFolders(new string[] { "folderID" }, new string[] { folder.parentFolderID.ToString() }); | 122 | // = GetFolders(new string[] { "folderID" }, new string[] { folder.parentFolderID.ToString() }); |
123 | 123 | ||
124 | // Console.WriteLine( | 124 | // Console.WriteLine( |
125 | // "Moved folder {0} {1}, to {2} {3}", | 125 | // "Moved folder {0} {1}, to {2} {3}", |
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index fee2a87..bc2b4cf 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example | |||
@@ -325,6 +325,12 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset | |||
325 | ; For V2/V3 webapp authentication SSO | 325 | ; For V2/V3 webapp authentication SSO |
326 | ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" | 326 | ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" |
327 | 327 | ||
328 | ; For V3 destination guide | ||
329 | ; DestinationGuide = "http://127.0.0.1/guide" | ||
330 | |||
331 | ; For V3 avatar picker (( work in progress )) | ||
332 | ; AvatarPicker = "http://127.0.0.1/avatars" | ||
333 | |||
328 | ; If you run this login server behind a proxy, set this to true | 334 | ; If you run this login server behind a proxy, set this to true |
329 | ; HasProxy = false | 335 | ; HasProxy = false |
330 | 336 | ||
diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index 2d5aa8c..1d66b7f 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example | |||
@@ -288,6 +288,12 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto | |||
288 | ; For V2/V3 webapp authentication SSO | 288 | ; For V2/V3 webapp authentication SSO |
289 | ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" | 289 | ; OpenIDServerURL = "http://127.0.0.1/openid/openidserver/" |
290 | 290 | ||
291 | ; For V3 destination guide | ||
292 | ; DestinationGuide = "http://127.0.0.1/guide" | ||
293 | |||
294 | ; For V3 avatar picker (( work in progress )) | ||
295 | ; AvatarPicker = "http://127.0.0.1/avatars" | ||
296 | |||
291 | ; If you run this login server behind a proxy, set this to true | 297 | ; If you run this login server behind a proxy, set this to true |
292 | ; HasProxy = false | 298 | ; HasProxy = false |
293 | 299 | ||