aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie2013-05-11 02:35:26 +0100
committerMelanie2013-05-11 02:35:26 +0100
commit13cd8c17d781c517e083cdf9d5cc3b1b95802c2d (patch)
tree41e9d608cc0fbb486ae885d4c9e9a6ad85e39ff3
parentMerge branch 'master' into careminster (diff)
parentMerge branch 'master' of melanie@opensimulator.org:/var/git/opensim (diff)
downloadopensim-SC_OLD-13cd8c17d781c517e083cdf9d5cc3b1b95802c2d.zip
opensim-SC_OLD-13cd8c17d781c517e083cdf9d5cc3b1b95802c2d.tar.gz
opensim-SC_OLD-13cd8c17d781c517e083cdf9d5cc3b1b95802c2d.tar.bz2
opensim-SC_OLD-13cd8c17d781c517e083cdf9d5cc3b1b95802c2d.tar.xz
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
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs2
-rw-r--r--OpenSim/Data/MySQL/Resources/EstateStore.migrations6
-rw-r--r--OpenSim/Data/SQLite/Resources/EstateStore.migrations9
-rw-r--r--OpenSim/Framework/Console/LocalConsole.cs15
-rw-r--r--OpenSim/Framework/EstateSettings.cs1
-rw-r--r--OpenSim/Framework/IClientAPI.cs3
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs5
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs107
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs14
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs2
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs2
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSShapes.cs8
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginResponse.cs20
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs7
-rw-r--r--OpenSim/Tests/Common/Helpers/EntityTransferHelpers.cs2
-rw-r--r--OpenSim/Tests/Common/Helpers/SceneHelpers.cs54
-rw-r--r--OpenSim/Tests/Common/Mock/TestClient.cs26
-rw-r--r--OpenSim/Tests/Common/Mock/TestXInventoryDataPlugin.cs4
-rw-r--r--bin/Robust.HG.ini.example6
-rw-r--r--bin/Robust.ini.example6
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;
77ALTER TABLE estate_settings AUTO_INCREMENT = 100; 77ALTER TABLE estate_settings AUTO_INCREMENT = 100;
78COMMIT; 78COMMIT;
79 79
80:VERSION 33 #---------------------
80 81
82BEGIN;
83ALTER TABLE estate_settings ADD COLUMN `AllowLandmark` tinyint(4) NOT NULL default '1';
84ALTER TABLE estate_settings ADD COLUMN `AllowParcelChanges` tinyint(4) NOT NULL default '1';
85ALTER TABLE estate_settings ADD COLUMN `AllowSetHome` tinyint(4) NOT NULL default '1';
86COMMIT;
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;
86alter table estate_settings add column DenyMinors tinyint not null default 0; 86alter table estate_settings add column DenyMinors tinyint not null default 0;
87 87
88commit; 88commit;
89
90:VERSION 9
91
92begin;
93alter table estate_settings add column AllowLandmark tinyint not null default '1';
94alter table estate_settings add column AllowParcelChanges tinyint not null default '1';
95alter table estate_settings add column AllowSetHome tinyint not null default '1';
96commit;
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;
33using OpenMetaverse; 33using OpenMetaverse;
34using OpenSim.Framework; 34using OpenSim.Framework;
35using OpenSim.Framework.Communications; 35using OpenSim.Framework.Communications;
36using OpenSim.Region.CoreModules.Framework.EntityTransfer;
36using OpenSim.Region.CoreModules.Framework.InventoryAccess; 37using OpenSim.Region.CoreModules.Framework.InventoryAccess;
38using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
37using OpenSim.Region.CoreModules.World.Permissions; 39using OpenSim.Region.CoreModules.World.Permissions;
38using OpenSim.Region.Framework.Scenes; 40using OpenSim.Region.Framework.Scenes;
39using OpenSim.Services.Interfaces; 41using 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