From 70c870972a4b534f38eaa3ae1c9b076b472f7d75 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 21 Aug 2009 00:25:50 +0100 Subject: [PATCH 01/34] Fix the user and password defaults int he remote console setup --- OpenSim/Framework/GridConfig.cs | 4 ++-- OpenSim/Framework/MessageServerConfig.cs | 4 ++-- OpenSim/Framework/UserConfig.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenSim/Framework/GridConfig.cs b/OpenSim/Framework/GridConfig.cs index 87fd3f0275..9aa5d03b8c 100644 --- a/OpenSim/Framework/GridConfig.cs +++ b/OpenSim/Framework/GridConfig.cs @@ -98,10 +98,10 @@ namespace OpenSim.Framework "True", false); m_configMember.addConfigurationOption("console_user", ConfigurationOption.ConfigurationTypes.TYPE_STRING, - "Remote console access user name [Default: disabled]", "0", false); + "Remote console access user name [Default: disabled]", "", false); m_configMember.addConfigurationOption("console_pass", ConfigurationOption.ConfigurationTypes.TYPE_STRING, - "Remote console access password [Default: disabled]", "0", false); + "Remote console access password [Default: disabled]", "", false); } diff --git a/OpenSim/Framework/MessageServerConfig.cs b/OpenSim/Framework/MessageServerConfig.cs index 61e5ea7550..884c0eab23 100644 --- a/OpenSim/Framework/MessageServerConfig.cs +++ b/OpenSim/Framework/MessageServerConfig.cs @@ -91,10 +91,10 @@ namespace OpenSim.Framework m_configMember.addConfigurationOption("published_ip", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "My Published IP Address", "127.0.0.1", false); m_configMember.addConfigurationOption("console_user", ConfigurationOption.ConfigurationTypes.TYPE_STRING, - "Remote console access user name [Default: disabled]", "0", false); + "Remote console access user name [Default: disabled]", "", false); m_configMember.addConfigurationOption("console_pass", ConfigurationOption.ConfigurationTypes.TYPE_STRING, - "Remote console access password [Default: disabled]", "0", false); + "Remote console access password [Default: disabled]", "", false); } diff --git a/OpenSim/Framework/UserConfig.cs b/OpenSim/Framework/UserConfig.cs index b9e366553c..16f265cf70 100644 --- a/OpenSim/Framework/UserConfig.cs +++ b/OpenSim/Framework/UserConfig.cs @@ -158,10 +158,10 @@ namespace OpenSim.Framework "Minimum Level a user should have to login [0 default]", "0", false); m_configMember.addConfigurationOption("console_user", ConfigurationOption.ConfigurationTypes.TYPE_STRING, - "Remote console access user name [Default: disabled]", "0", false); + "Remote console access user name [Default: disabled]", "", false); m_configMember.addConfigurationOption("console_pass", ConfigurationOption.ConfigurationTypes.TYPE_STRING, - "Remote console access password [Default: disabled]", "0", false); + "Remote console access password [Default: disabled]", "", false); } From 01f394d2037be62a3d74e2d28ab9e5644f86a9a2 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 11:14:55 +1000 Subject: [PATCH 02/34] * Fleshes more of NPCModule out. * Implements some OSSL commands: key osNpcCreate(string user, string name, vector position, key cloneFrom); void osNpcMoveTo(key npc, vector position); void osNpcSay(key npc, string message); void osNpcRemove(key npc); * Untested. Requires ThreatLevel.High. --- .../CoreModules/Avatar/NPC/INPCModule.cs | 13 +++++ .../OptionalModules/World/NPC/NPCModule.cs | 32 +++++++----- .../Shared/Api/Implementation/OSSL_Api.cs | 52 +++++++++++++++++++ .../Shared/Api/Interface/IOSSL_Api.cs | 6 +++ 4 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs diff --git a/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs b/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs new file mode 100644 index 0000000000..7d5c310c55 --- /dev/null +++ b/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs @@ -0,0 +1,13 @@ +using OpenMetaverse; +using OpenSim.Region.Framework.Scenes; + +namespace OpenSim.Region.CoreModules.Avatar.NPC +{ + public interface INPCModule + { + UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom); + void Autopilot(UUID agentID, Scene scene, Vector3 pos); + void Say(UUID agentID, Scene scene, string text); + void DeleteNPC(UUID agentID, Scene scene); + } +} \ No newline at end of file diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index a3cefc95bc..94349f6043 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -30,18 +30,11 @@ using OpenMetaverse; using Nini.Config; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.CoreModules.Avatar.NPC; using OpenSim.Framework; namespace OpenSim.Region.OptionalModules.World.NPC { - public interface INPCModule - { - UUID CreateNPC(string firstname, string lastname,Vector3 position, Scene scene, UUID cloneAppearanceFrom); - void Autopilot(UUID agentID, Scene scene, Vector3 pos); - void Say(UUID agentID, Scene scene, string text); - void DeleteNPC(UUID agentID, Scene scene); - } - public class NPCModule : IRegionModule, INPCModule { // private const bool m_enabled = false; @@ -74,19 +67,32 @@ namespace OpenSim.Region.OptionalModules.World.NPC public void Autopilot(UUID agentID, Scene scene, Vector3 pos) { - ScenePresence sp; - scene.TryGetAvatar(agentID, out sp); - sp.DoAutoPilot(0,pos,m_avatars[agentID]); + lock (m_avatars) + if (m_avatars.ContainsKey(agentID)) + { + ScenePresence sp; + scene.TryGetAvatar(agentID, out sp); + sp.DoAutoPilot(0, pos, m_avatars[agentID]); + } } public void Say(UUID agentID, Scene scene, string text) { - m_avatars[agentID].Say(text); + lock (m_avatars) + if (m_avatars.ContainsKey(agentID)) + { + m_avatars[agentID].Say(text); + } } public void DeleteNPC(UUID agentID, Scene scene) { - scene.RemoveClient(agentID); + lock(m_avatars) + if (m_avatars.ContainsKey(agentID)) + { + scene.RemoveClient(agentID); + m_avatars.Remove(agentID); + } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 6e3a3abb61..fcfa9fc482 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -37,6 +37,7 @@ using OpenSim; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Console; +using OpenSim.Region.CoreModules.Avatar.NPC; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes.Hypergrid; @@ -1762,5 +1763,56 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return retVal; } + public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, LSL_Key cloneFrom) + { + CheckThreatLevel(ThreatLevel.High, "osNpcCreate"); + + INPCModule module = World.RequestModuleInterface(); + if (module != null) + { + UUID x = module.CreateNPC(firstname, + lastname, + new Vector3((float) position.x, (float) position.y, (float) position.z), + World, + new UUID(cloneFrom)); + + return new LSL_Key(x.ToString()); + } + return new LSL_Key(UUID.Zero.ToString()); + } + + public void osNpcMoveTo(LSL_Key npc, LSL_Vector position) + { + CheckThreatLevel(ThreatLevel.High, "osNpcMoveTo"); + + INPCModule module = World.RequestModuleInterface(); + if (module != null) + { + Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z); + module.Autopilot(new UUID(npc.m_string), World, pos); + } + } + + public void osNpcSay(LSL_Key npc, string message) + { + CheckThreatLevel(ThreatLevel.High, "osNpcSay"); + + INPCModule module = World.RequestModuleInterface(); + if (module != null) + { + module.Say(new UUID(npc.m_string), World, message); + } + } + + public void osNpcRemove(LSL_Key npc) + { + CheckThreatLevel(ThreatLevel.High, "osNpcRemove"); + + INPCModule module = World.RequestModuleInterface(); + if (module != null) + { + module.DeleteNPC(new UUID(npc.m_string), World); + } + } } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 0be29f2e07..c24dae850b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -149,5 +149,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules); + + key osNpcCreate(string user, string name, vector position, key cloneFrom); + void osNpcMoveTo(key npc, vector position); + void osNpcSay(key npc, string message); + void osNpcRemove(key npc); + } } From c7e140171e107f373d43d45f2b5969410d4b2d7f Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 11:35:19 +1000 Subject: [PATCH 03/34] * Addendum to previous --- .../Shared/Api/Runtime/OSSL_Stub.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index abdba05f7c..1227ec40b6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -393,6 +393,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_OSSL_Functions.osGetLinkPrimitiveParams(linknumber, rules); } + key osNpcCreate(string user, string name, vector position, key cloneFrom) + { + return m_OSSL_Functions.osNpcCreate(user, name, position, cloneFrom); + } + void osNpcMoveTo(key npc, vector position) + { + m_OSSL_Functions.osNpcMoveTo(npc, position); + } + + void osNpcSay(key npc, string message) + { + m_OSSL_Functions.osNpcSay(npc, message); + } + void osNpcRemove(key npc) + { + m_OSSL_Functions.osNpcRemove(npc); + } public OSSLPrim Prim; From 7ef3e5f41cf226a5c5ba13fe5ee2f1d1d6ccc7ea Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 11:43:45 +1000 Subject: [PATCH 04/34] * Protip: Declare publically accessible functions, as public functions. --- .../ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 1227ec40b6..605f67be34 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -393,20 +393,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_OSSL_Functions.osGetLinkPrimitiveParams(linknumber, rules); } - key osNpcCreate(string user, string name, vector position, key cloneFrom) + public key osNpcCreate(string user, string name, vector position, key cloneFrom) { return m_OSSL_Functions.osNpcCreate(user, name, position, cloneFrom); } - void osNpcMoveTo(key npc, vector position) + + public void osNpcMoveTo(key npc, vector position) { m_OSSL_Functions.osNpcMoveTo(npc, position); } - void osNpcSay(key npc, string message) + public void osNpcSay(key npc, string message) { m_OSSL_Functions.osNpcSay(npc, message); } - void osNpcRemove(key npc) + + public void osNpcRemove(key npc) { m_OSSL_Functions.osNpcRemove(npc); } From bce98f9670ae027bbf727a4ba20f52cd17765793 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 13:12:51 +1000 Subject: [PATCH 05/34] * Fixing an issue with NPC's and Circuit Codes. --- OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 94349f6043..775dc91048 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -44,6 +44,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC public UUID CreateNPC(string firstname, string lastname,Vector3 position, Scene scene, UUID cloneAppearanceFrom) { NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, scene); + npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue); + + scene.ClientManager.Add(npcAvatar.CircuitCode, npcAvatar); scene.AddNewClient(npcAvatar); ScenePresence sp; From d4600eec4d4555eec8c2815503a2aa7a75d6d928 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 13:35:13 +1000 Subject: [PATCH 06/34] * Attempting to diagnose a connection bug. --- OpenSim/Region/Framework/Scenes/Scene.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index d1f7a4b8a1..b50d0cb1df 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2044,9 +2044,11 @@ namespace OpenSim.Region.Framework.Scenes { AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode); - m_log.DebugFormat( - "[SCENE]: Adding new {0} agent for {1} in {2}", - ((aCircuit.child == true) ? "child" : "root"), client.Name, RegionInfo.RegionName); + string logMsg = string.Format("[SCENE]: Adding new {0} agent for {1} in {2}", + ((aCircuit.child == true) ? "child" : "root"), client.Name, + RegionInfo.RegionName); + + m_log.Debug(logMsg); CommsManager.UserProfileCacheService.AddNewUser(client.AgentId); From 25dbf16cfb1d4c74792eae170bc766d3eb522a24 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 13:44:20 +1000 Subject: [PATCH 07/34] * Once more into the breach! --- OpenSim/Region/Framework/Scenes/Scene.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index b50d0cb1df..6118a70538 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2044,11 +2044,14 @@ namespace OpenSim.Region.Framework.Scenes { AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode); + m_log.Debug("[Scene] Adding new agent " + client.Name + " to scene " + RegionInfo.RegionName); + /* string logMsg = string.Format("[SCENE]: Adding new {0} agent for {1} in {2}", ((aCircuit.child == true) ? "child" : "root"), client.Name, RegionInfo.RegionName); m_log.Debug(logMsg); + */ CommsManager.UserProfileCacheService.AddNewUser(client.AgentId); @@ -2057,7 +2060,7 @@ namespace OpenSim.Region.Framework.Scenes // HERE!!! Do the initial attachments right here // first agent upon login is a root agent by design. // All other AddNewClient calls find aCircuit.child to be true - if (aCircuit.child == false) + if (aCircuit == null || aCircuit.child == false) { sp.IsChildAgent = false; sp.RezAttachments(); From 29e2067ec354435c2cde8f4cd7c9fd869fd931b3 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 14:10:21 +1000 Subject: [PATCH 08/34] * Implements a cache in NPCModule for Appearance. --- .../Region/OptionalModules/World/NPC/NPCModule.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 775dc91048..d6b90e1097 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -41,6 +41,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC private Dictionary m_avatars = new Dictionary(); + private Dictionary m_appearanceCache = new Dictionary(); + + private AvatarAppearance GetAppearance(UUID target, Scene scene) + { + if (m_appearanceCache.ContainsKey(target)) + return m_appearanceCache[target]; + + return scene.CommsManager.AvatarService.GetUserAppearance(target); + } + public UUID CreateNPC(string firstname, string lastname,Vector3 position, Scene scene, UUID cloneAppearanceFrom) { NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, scene); @@ -52,7 +62,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC ScenePresence sp; if(scene.TryGetAvatar(npcAvatar.AgentId, out sp)) { - AvatarAppearance x = scene.CommsManager.AvatarService.GetUserAppearance(cloneAppearanceFrom); + AvatarAppearance x = GetAppearance(cloneAppearanceFrom, scene); List wearbyte = new List(); for (int i = 0; i < x.VisualParams.Length; i++) From 98da8e9b16de75aba2a5af175e7ca8c528fa418c Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 14:20:05 +1000 Subject: [PATCH 09/34] * Make cache, actually cache. --- OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index d6b90e1097..eeb74d9320 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -48,7 +48,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC if (m_appearanceCache.ContainsKey(target)) return m_appearanceCache[target]; - return scene.CommsManager.AvatarService.GetUserAppearance(target); + AvatarAppearance x = scene.CommsManager.AvatarService.GetUserAppearance(target); + + m_appearanceCache.Add(target, x); + + return x; } public UUID CreateNPC(string firstname, string lastname,Vector3 position, Scene scene, UUID cloneAppearanceFrom) From 922007443e7344f6696fbfc66ceec8f18bec65b9 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 20 Aug 2009 21:36:57 -0700 Subject: [PATCH 10/34] Changed most of inventory packets to LowPriority, to see if that helps with freezing on searching large inventories. --- OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index a7a5aa3788..ce4b03bd31 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -1961,7 +1961,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { descend.Header.Zerocoded = true; AddNullFolderBlockToDecendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.Asset); + OutPacket(descend, ThrottleOutPacketType.LowPriority); if ((items.Count - count) > 0) { @@ -1983,7 +1983,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (0 < i && i < MAX_ITEMS_PER_PACKET) { AddNullFolderBlockToDecendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.Asset); + OutPacket(descend, ThrottleOutPacketType.LowPriority); } } @@ -2021,7 +2021,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (i == MAX_ITEMS_PER_PACKET) { AddNullItemBlockToDescendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.Asset); + OutPacket(descend, ThrottleOutPacketType.LowPriority); if ((folders.Count - count) > 0) { @@ -2045,7 +2045,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (0 < i && i < MAX_ITEMS_PER_PACKET) { AddNullItemBlockToDescendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.Asset); + OutPacket(descend, ThrottleOutPacketType.LowPriority); } } @@ -2056,7 +2056,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP descend.AgentData.Descendents = 0; AddNullItemBlockToDescendentsPacket(ref descend); AddNullFolderBlockToDecendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.Asset); + OutPacket(descend, ThrottleOutPacketType.LowPriority); } } @@ -2153,7 +2153,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); inventoryReply.Header.Zerocoded = true; - OutPacket(inventoryReply, ThrottleOutPacketType.Asset); + OutPacket(inventoryReply, ThrottleOutPacketType.LowPriority); } protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase) From 9e64427262e05ac03032f686ceaff8828d02e5df Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 20 Aug 2009 21:56:06 -0700 Subject: [PATCH 11/34] Putting the inventory packets back to ThrottleOutPacketType.Asset, because that didn't work. --- OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index ce4b03bd31..a7a5aa3788 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -1961,7 +1961,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { descend.Header.Zerocoded = true; AddNullFolderBlockToDecendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.LowPriority); + OutPacket(descend, ThrottleOutPacketType.Asset); if ((items.Count - count) > 0) { @@ -1983,7 +1983,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (0 < i && i < MAX_ITEMS_PER_PACKET) { AddNullFolderBlockToDecendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.LowPriority); + OutPacket(descend, ThrottleOutPacketType.Asset); } } @@ -2021,7 +2021,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (i == MAX_ITEMS_PER_PACKET) { AddNullItemBlockToDescendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.LowPriority); + OutPacket(descend, ThrottleOutPacketType.Asset); if ((folders.Count - count) > 0) { @@ -2045,7 +2045,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (0 < i && i < MAX_ITEMS_PER_PACKET) { AddNullItemBlockToDescendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.LowPriority); + OutPacket(descend, ThrottleOutPacketType.Asset); } } @@ -2056,7 +2056,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP descend.AgentData.Descendents = 0; AddNullItemBlockToDescendentsPacket(ref descend); AddNullFolderBlockToDecendentsPacket(ref descend); - OutPacket(descend, ThrottleOutPacketType.LowPriority); + OutPacket(descend, ThrottleOutPacketType.Asset); } } @@ -2153,7 +2153,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); inventoryReply.Header.Zerocoded = true; - OutPacket(inventoryReply, ThrottleOutPacketType.LowPriority); + OutPacket(inventoryReply, ThrottleOutPacketType.Asset); } protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase) From f7c5eca978717c0adc16ad28b30b02678ba75892 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 15:12:50 +1000 Subject: [PATCH 12/34] * Moves NPC Creation across AppDomains to prevent a major perfomance issue. --- .../OptionalModules/World/NPC/NPCModule.cs | 86 +++++++++++++++---- .../Shared/Api/Implementation/OSSL_Api.cs | 2 + 2 files changed, 70 insertions(+), 18 deletions(-) diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index eeb74d9320..c710723812 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -26,12 +26,14 @@ */ using System.Collections.Generic; +using System.Threading; using OpenMetaverse; using Nini.Config; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.CoreModules.Avatar.NPC; using OpenSim.Framework; +using Timer=System.Timers.Timer; namespace OpenSim.Region.OptionalModules.World.NPC { @@ -39,10 +41,25 @@ namespace OpenSim.Region.OptionalModules.World.NPC { // private const bool m_enabled = false; + private Mutex m_createMutex = new Mutex(false); + + private Timer m_timer = new Timer(500); + private Dictionary m_avatars = new Dictionary(); private Dictionary m_appearanceCache = new Dictionary(); + // Timer vars. + private bool p_inUse = false; + private readonly object p_lock = new object(); + // Private Temporary Variables. + private string p_firstname; + private string p_lastname; + private Vector3 p_position; + private Scene p_scene; + private UUID p_cloneAppearanceFrom; + private UUID p_returnUuid; + private AvatarAppearance GetAppearance(UUID target, Scene scene) { if (m_appearanceCache.ContainsKey(target)) @@ -57,29 +74,23 @@ namespace OpenSim.Region.OptionalModules.World.NPC public UUID CreateNPC(string firstname, string lastname,Vector3 position, Scene scene, UUID cloneAppearanceFrom) { - NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, scene); - npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue); + // Block. + m_createMutex.WaitOne(); - scene.ClientManager.Add(npcAvatar.CircuitCode, npcAvatar); - scene.AddNewClient(npcAvatar); - - ScenePresence sp; - if(scene.TryGetAvatar(npcAvatar.AgentId, out sp)) + // Copy Temp Variables for Timer to pick up. + lock (p_lock) { - AvatarAppearance x = GetAppearance(cloneAppearanceFrom, scene); - - List wearbyte = new List(); - for (int i = 0; i < x.VisualParams.Length; i++) - { - wearbyte.Add(x.VisualParams[i]); - } - - sp.SetAppearance(x.Texture.GetBytes(), wearbyte); + p_firstname = firstname; + p_lastname = lastname; + p_position = position; + p_scene = scene; + p_cloneAppearanceFrom = cloneAppearanceFrom; + p_inUse = true; } - m_avatars.Add(npcAvatar.AgentId, npcAvatar); + m_createMutex.ReleaseMutex(); - return npcAvatar.AgentId; + return p_returnUuid; } public void Autopilot(UUID agentID, Scene scene, Vector3 pos) @@ -116,6 +127,45 @@ namespace OpenSim.Region.OptionalModules.World.NPC public void Initialise(Scene scene, IConfigSource source) { scene.RegisterModuleInterface(this); + + m_timer.Elapsed += m_timer_Elapsed; + m_timer.Start(); + } + + void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + lock (p_lock) + { + if (p_inUse) + { + p_inUse = false; + + + NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene); + npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue); + + p_scene.ClientManager.Add(npcAvatar.CircuitCode, npcAvatar); + p_scene.AddNewClient(npcAvatar); + + ScenePresence sp; + if (p_scene.TryGetAvatar(npcAvatar.AgentId, out sp)) + { + AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene); + + List wearbyte = new List(); + for (int i = 0; i < x.VisualParams.Length; i++) + { + wearbyte.Add(x.VisualParams[i]); + } + + sp.SetAppearance(x.Texture.GetBytes(), wearbyte); + } + + m_avatars.Add(npcAvatar.AgentId, npcAvatar); + + p_returnUuid = npcAvatar.AgentId; + } + } } public void PostInitialise() diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index fcfa9fc482..61903498cc 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.Runtime.Remoting.Lifetime; using System.Text; using System.Net; +using System.Threading; using OpenMetaverse; using Nini.Config; using OpenSim; @@ -1766,6 +1767,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, LSL_Key cloneFrom) { CheckThreatLevel(ThreatLevel.High, "osNpcCreate"); + //QueueUserWorkItem INPCModule module = World.RequestModuleInterface(); if (module != null) From bd7757de22ee07b344b470eadbf55264dfb8ec1b Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 21 Aug 2009 15:15:15 +1000 Subject: [PATCH 13/34] * oops. Mistake with value return. --- OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index c710723812..a43a5f59f6 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -86,6 +86,12 @@ namespace OpenSim.Region.OptionalModules.World.NPC p_scene = scene; p_cloneAppearanceFrom = cloneAppearanceFrom; p_inUse = true; + p_returnUuid = UUID.Zero; + } + + while(p_returnUuid == UUID.Zero) + { + Thread.Sleep(250); } m_createMutex.ReleaseMutex(); From e4f64dd7147001e1e0ac9bd4a51efec086727b29 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 20 Aug 2009 22:36:47 -0700 Subject: [PATCH 14/34] Made HandleFetchInventoryDescendents async, so that the client thread doesn't wait for the download of the entire inventory. --- .../Framework/Scenes/Scene.PacketHandlers.cs | 19 +++++++++++++++++-- .../InventoryService/InventoryService.cs | 4 +--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index d722e2368b..2b815a2764 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -441,9 +441,24 @@ namespace OpenSim.Region.Framework.Scenes return; } + // We're going to send the reply async, because there may be + // an enormous quantity of packets -- basically the entire inventory! + // We don't want to block the client thread while all that is happening. + SendInventoryDelegate d = SendInventoryAsync; + d.BeginInvoke(remoteClient, folderID, ownerID, fetchFolders, fetchItems, sortOrder, SendInventoryComplete, d); + } + + delegate void SendInventoryDelegate(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder); + + void SendInventoryAsync(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder) + { SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems); - } - + } + + void SendInventoryComplete(IAsyncResult iar) + { + } + /// /// Handle the caps inventory descendents fetch. /// diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 63102547f5..45bbd3716e 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -235,8 +235,6 @@ namespace OpenSim.Services.InventoryService public InventoryCollection GetFolderContent(UUID userID, UUID folderID) { - m_log.Info("[INVENTORY SERVICE]: Processing request for folder " + folderID); - // Uncomment me to simulate a slow responding inventory server //Thread.Sleep(16000); @@ -249,7 +247,7 @@ namespace OpenSim.Services.InventoryService invCollection.Folders = folders; invCollection.Items = items; - m_log.DebugFormat("[INVENTORY SERVICE]: Found {0} items and {1} folders", items.Count, folders.Count); + m_log.DebugFormat("[INVENTORY SERVICE]: Found {0} items and {1} folders in folder {2}", items.Count, folders.Count, folderID); return invCollection; } From 158ad39df0de1c569d24d4ea28dc3952402df101 Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Fri, 21 Aug 2009 15:42:36 +0900 Subject: [PATCH 15/34] Add copyright header. Formatting cleanup. --- .../CoreModules/Avatar/NPC/INPCModule.cs | 29 ++++++++++++++++- .../Avatar/Chat/ChannelState.cs | 2 +- .../OptionalModules/World/NPC/NPCModule.cs | 11 +++++-- .../Shared/Api/Implementation/LSL_Api.cs | 32 ++++++++++--------- 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs b/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs index 7d5c310c55..cd2fe4fc85 100644 --- a/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/NPC/INPCModule.cs @@ -1,4 +1,31 @@ -using OpenMetaverse; +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using OpenMetaverse; using OpenSim.Region.Framework.Scenes; namespace OpenSim.Region.CoreModules.Avatar.NPC diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs index b61959f04b..3c5e8c9e65 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs @@ -213,7 +213,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat m_log.DebugFormat("[IRC-Channel-{0}] AccessPassword : <{1}>", cs.idn, cs.AccessPassword); string[] excludes = config.GetString("exclude_list", "").Trim().Split(new Char[] { ',' }); cs.ExcludeList = new List(excludes.Length); - foreach(string name in excludes) + foreach (string name in excludes) { cs.ExcludeList.Add(name.Trim().ToLower()); } diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index a43a5f59f6..b3bfe07cc1 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -89,7 +89,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC p_returnUuid = UUID.Zero; } - while(p_returnUuid == UUID.Zero) + while (p_returnUuid == UUID.Zero) { Thread.Sleep(250); } @@ -102,31 +102,37 @@ namespace OpenSim.Region.OptionalModules.World.NPC public void Autopilot(UUID agentID, Scene scene, Vector3 pos) { lock (m_avatars) + { if (m_avatars.ContainsKey(agentID)) { ScenePresence sp; scene.TryGetAvatar(agentID, out sp); sp.DoAutoPilot(0, pos, m_avatars[agentID]); } + } } public void Say(UUID agentID, Scene scene, string text) { lock (m_avatars) + { if (m_avatars.ContainsKey(agentID)) { m_avatars[agentID].Say(text); } + } } public void DeleteNPC(UUID agentID, Scene scene) { - lock(m_avatars) + lock (m_avatars) + { if (m_avatars.ContainsKey(agentID)) { scene.RemoveClient(agentID); m_avatars.Remove(agentID); } + } } @@ -146,7 +152,6 @@ namespace OpenSim.Region.OptionalModules.World.NPC { p_inUse = false; - NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene); npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 972e71cb28..16dd8341c5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -1978,25 +1978,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return new LSL_Rotation(q.X, q.Y, q.Z, q.W); } - private LSL_Rotation GetPartRot( SceneObjectPart part ) + private LSL_Rotation GetPartRot(SceneObjectPart part) { Quaternion q; if (part.LinkNum == 0 || part.LinkNum == 1) // unlinked or root prim { - if (part.ParentGroup.RootPart.AttachmentPoint != 0) - { - ScenePresence avatar = World.GetScenePresence(part.AttachedAvatar); - if (avatar != null) - if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) - q = avatar.CameraRotation; // Mouselook - else - q = avatar.Rotation; // Currently infrequently updated so may be inaccurate - else - q = part.ParentGroup.GroupRotation; // Likely never get here but just in case - } - else - q = part.ParentGroup.GroupRotation; // just the group rotation - return new LSL_Rotation(q.X, q.Y, q.Z, q.W); + if (part.ParentGroup.RootPart.AttachmentPoint != 0) + { + ScenePresence avatar = World.GetScenePresence(part.AttachedAvatar); + if (avatar != null) + { + if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) + q = avatar.CameraRotation; // Mouselook + else + q = avatar.Rotation; // Currently infrequently updated so may be inaccurate + } + else + q = part.ParentGroup.GroupRotation; // Likely never get here but just in case + } + else + q = part.ParentGroup.GroupRotation; // just the group rotation + return new LSL_Rotation(q.X, q.Y, q.Z, q.W); } q = part.GetWorldRotation(); return new LSL_Rotation(q.X, q.Y, q.Z, q.W); From 7daf6dbbd3ae70f43793c360bc3ab08efd89e850 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 21 Aug 2009 11:35:40 +0100 Subject: [PATCH 16/34] Add -xmlfile= option to UGM, to let the files be outside bin if desired --- OpenSim/Grid/GridServer/GridServerBase.cs | 3 ++- OpenSim/Grid/GridServer/Program.cs | 2 ++ OpenSim/Grid/MessagingServer/Main.cs | 4 +++- OpenSim/Grid/UserServer/Main.cs | 5 ++++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/OpenSim/Grid/GridServer/GridServerBase.cs b/OpenSim/Grid/GridServer/GridServerBase.cs index e3ad52abb1..d63ac2eb30 100644 --- a/OpenSim/Grid/GridServer/GridServerBase.cs +++ b/OpenSim/Grid/GridServer/GridServerBase.cs @@ -49,6 +49,7 @@ namespace OpenSim.Grid.GridServer protected GridConfig m_config; public string m_consoleType = "local"; public IConfigSource m_configSource = null; + public string m_configFile = "GridServer_Config.xml"; public GridConfig Config { @@ -91,7 +92,7 @@ namespace OpenSim.Grid.GridServer break; } MainConsole.Instance = m_console; - m_config = new GridConfig("GRID SERVER", (Path.Combine(Util.configDir(), "GridServer_Config.xml"))); + m_config = new GridConfig("GRID SERVER", (Path.Combine(Util.configDir(), m_configFile))); m_log.Info("[GRID]: Starting HTTP process"); m_httpServer = new BaseHttpServer(m_config.HttpPort); diff --git a/OpenSim/Grid/GridServer/Program.cs b/OpenSim/Grid/GridServer/Program.cs index c7ba897b9a..741a01b94a 100644 --- a/OpenSim/Grid/GridServer/Program.cs +++ b/OpenSim/Grid/GridServer/Program.cs @@ -36,6 +36,7 @@ namespace OpenSim.Grid.GridServer { ArgvConfigSource argvSource = new ArgvConfigSource(args); argvSource.AddSwitch("Startup", "console", "c"); + argvSource.AddSwitch("Startup", "xmlfile", "x"); XmlConfigurator.Configure(); @@ -45,6 +46,7 @@ namespace OpenSim.Grid.GridServer if (startupConfig != null) { app.m_consoleType = startupConfig.GetString("console", "local"); + app.m_configFile = startupConfig.GetString("xmlfile", "GridServer_Config.xml"); } app.m_configSource = argvSource; diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs index 654e770dfd..c8035a4381 100644 --- a/OpenSim/Grid/MessagingServer/Main.cs +++ b/OpenSim/Grid/MessagingServer/Main.cs @@ -59,6 +59,7 @@ namespace OpenSim.Grid.MessagingServer protected static string m_consoleType = "local"; protected static IConfigSource m_config = null; + protected static string m_configFile = "MessagingServer_Config.xml"; public static void Main(string[] args) { @@ -69,6 +70,7 @@ namespace OpenSim.Grid.MessagingServer if (startupConfig != null) { m_consoleType = startupConfig.GetString("console", "local"); + m_configFile = startupConfig.GetString("xmlfile", "MessagingServer_Config.xml"); } m_config = argvSource; @@ -164,7 +166,7 @@ namespace OpenSim.Grid.MessagingServer protected override void StartupSpecific() { - Cfg = new MessageServerConfig("MESSAGING SERVER", (Path.Combine(Util.configDir(), "MessagingServer_Config.xml"))); + Cfg = new MessageServerConfig("MESSAGING SERVER", (Path.Combine(Util.configDir(), m_configFile))); m_userDataBaseService = new UserDataBaseService(); m_userDataBaseService.AddPlugin(Cfg.DatabaseProvider, Cfg.DatabaseConnect); diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs index 1ee53ef6ec..baf0fd3145 100644 --- a/OpenSim/Grid/UserServer/Main.cs +++ b/OpenSim/Grid/UserServer/Main.cs @@ -76,16 +76,19 @@ namespace OpenSim.Grid.UserServer protected static string m_consoleType = "local"; protected static IConfigSource m_config = null; + protected static string m_configFile = "UserServer_Config.xml"; public static void Main(string[] args) { ArgvConfigSource argvSource = new ArgvConfigSource(args); argvSource.AddSwitch("Startup", "console", "c"); + argvSource.AddSwitch("Startup", "xmlfile", "x"); IConfig startupConfig = argvSource.Configs["Startup"]; if (startupConfig != null) { m_consoleType = startupConfig.GetString("console", "local"); + m_configFile = startupConfig.GetString("xmlfile", "UserServer_Config.xml"); } m_config = argvSource; @@ -151,7 +154,7 @@ namespace OpenSim.Grid.UserServer protected virtual IInterServiceInventoryServices StartupCoreComponents() { - Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); + Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), m_configFile))); m_httpServer = new BaseHttpServer(Cfg.HttpPort); From de3cca6061d73e8b2be30e980c220a8b3a543bf6 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 21 Aug 2009 17:00:18 +0100 Subject: [PATCH 17/34] Fix Messaging server so -xmlfile actually works --- OpenSim/Grid/MessagingServer/Main.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs index c8035a4381..f2631a7b8b 100644 --- a/OpenSim/Grid/MessagingServer/Main.cs +++ b/OpenSim/Grid/MessagingServer/Main.cs @@ -65,6 +65,7 @@ namespace OpenSim.Grid.MessagingServer { ArgvConfigSource argvSource = new ArgvConfigSource(args); argvSource.AddSwitch("Startup", "console", "c"); + argvSource.AddSwitch("Startup", "xmlfile", "x"); IConfig startupConfig = argvSource.Configs["Startup"]; if (startupConfig != null) From 33186527235091f95a7251ea66a713fdaee1c689 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 21 Aug 2009 11:00:45 -0700 Subject: [PATCH 18/34] Added a more sane InventoryServerMoveItemsHandler. Changed SynchronousRestObjectRequester so that it also understands PUTs. --- .../SynchronousRestObjectRequester.cs | 2 +- .../Inventory/InventoryServerInConnector.cs | 3 + .../InventoryServerMoveItemsHandler.cs | 81 +++++++++++++++++++ .../Inventory/InventoryServiceConnector.cs | 21 ++++- 4 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs diff --git a/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs b/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs index 09ef95b4c4..ec9bd4fce1 100644 --- a/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs +++ b/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs @@ -62,7 +62,7 @@ namespace OpenSim.Framework.Servers.HttpServer WebRequest request = WebRequest.Create(requestUrl); request.Method = verb; - if (verb == "POST") + if ((verb == "POST") || (verb == "PUT")) { request.ContentType = "text/xml"; diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index 6ef1d9d32f..10336b00fd 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs @@ -143,6 +143,9 @@ namespace OpenSim.Server.Handlers.Inventory m_httpServer.AddStreamHandler( new RestDeserialiseSecureHandler, bool>( "POST", "/MoveItems/", MoveItems, CheckAuthSession)); + + m_httpServer.AddStreamHandler(new InventoryServerMoveItemsHandler(m_InventoryService)); + // for persistent active gestures m_httpServer.AddStreamHandler( diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs new file mode 100644 index 0000000000..850bf14b39 --- /dev/null +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs @@ -0,0 +1,81 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using Nini.Config; +using log4net; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.IO; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Serialization; +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; +using OpenSim.Framework; +using OpenSim.Framework.Servers.HttpServer; +using OpenMetaverse; + +namespace OpenSim.Server.Handlers.Inventory +{ + public class InventoryServerMoveItemsHandler : BaseStreamHandler + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private IInventoryService m_InventoryService; + + public InventoryServerMoveItemsHandler(IInventoryService service) : + base("PUT", "/inventory") + { + m_InventoryService = service; + } + + public override byte[] Handle(string path, Stream request, + OSHttpRequest httpRequest, OSHttpResponse httpResponse) + { + XmlSerializer xs = new XmlSerializer(typeof (List)); + List items = (List)xs.Deserialize(request); + + bool result = false; + string[] p = SplitParams(path); + + if (p.Length > 0) + { + UUID ownerID = UUID.Zero; + UUID.TryParse(p[0], out ownerID); + result = m_InventoryService.MoveItems(ownerID, items); + } + else + m_log.WarnFormat("[MOVEITEMS HANDLER]: ownerID not provided in request. Unable to serve."); + + xs = new XmlSerializer(typeof(bool)); + return ServerUtils.SerializeResult(xs, result); + } + } +} diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index b573a06cb1..7c35bde932 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -397,13 +397,28 @@ namespace OpenSim.Services.Connectors private void MoveItemsAsync(string userID, List items, UUID sessionID) { + if (items == null) + { + m_log.WarnFormat("[INVENTORY CONNECTOR]: request to move items got a null list."); + return; + } + try { - SynchronousRestSessionObjectPoster, bool>.BeginPostObject( - "POST", m_ServerURI + "/MoveItems/", items, sessionID.ToString(), userID.ToString()); + //SynchronousRestSessionObjectPoster, bool>.BeginPostObject( + // "POST", m_ServerURI + "/MoveItems/", items, sessionID.ToString(), userID.ToString()); + + //// Success + //return; + string uri = m_ServerURI + "/inventory/" + userID; + if (SynchronousRestObjectRequester. + MakeRequest, bool>("PUT", uri, items)) + m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster succeeded {1}", items.Count, uri); + else + m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster failed {1}", items.Count, uri); ; - // Success return; + } catch (Exception e) { From 604ef5ba799c4ac6af4a965ede726faf42916ad6 Mon Sep 17 00:00:00 2001 From: Arthur Valadares Date: Fri, 21 Aug 2009 17:48:45 -0300 Subject: [PATCH 19/34] Fix issue where conversion of temporary boolean variable fails on MySQL --- OpenSim/Data/MySQL/MySQLAssetData.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs index 1b4377acaf..66c34fef4f 100644 --- a/OpenSim/Data/MySQL/MySQLAssetData.cs +++ b/OpenSim/Data/MySQL/MySQLAssetData.cs @@ -168,7 +168,7 @@ namespace OpenSim.Data.MySQL } asset.Name = (string) dbReader["name"]; asset.Type = (sbyte) dbReader["assetType"]; - asset.Temporary = (bool)dbReader["temporary"]; + asset.Temporary = Convert.ToBoolean(dbReader["temporary"]); } dbReader.Close(); cmd.Dispose(); @@ -359,7 +359,7 @@ namespace OpenSim.Data.MySQL metadata.Name = (string) dbReader["name"]; metadata.Description = (string) dbReader["description"]; metadata.Type = (sbyte) dbReader["assetType"]; - metadata.Temporary = (bool) dbReader["temporary"]; // Not sure if this is correct. + metadata.Temporary = Convert.ToBoolean(dbReader["temporary"]); // Not sure if this is correct. metadata.FullID = new UUID((string) dbReader["id"]); // Current SHA1s are not stored/computed. From 7923fd29a019eae168b6793ed6e388bc27bc288e Mon Sep 17 00:00:00 2001 From: Arthur Valadares Date: Fri, 21 Aug 2009 21:12:22 -0300 Subject: [PATCH 20/34] Adds osDrawPolygon to OSSL. Works a little different then other OS Drawing functions, this one has no start and end point, but a number of points that will form the desired polygon. Only FilledPolygon implemented so far. * Also added some LSL transparent type conversion, as it's done in LSL scripting (string to integer, float to string, etc) --- .../VectorRender/VectorRenderModule.cs | 48 ++++++++++++++----- .../Shared/Api/Implementation/OSSL_Api.cs | 19 ++++++++ .../Shared/Api/Interface/IOSSL_Api.cs | 1 + .../Shared/Api/Runtime/OSSL_Stub.cs | 5 ++ .../Region/ScriptEngine/Shared/LSL_Types.cs | 43 ++++++++++++++--- 5 files changed, 98 insertions(+), 18 deletions(-) diff --git a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs index 2640f08c83..d7f39b0582 100644 --- a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs @@ -469,13 +469,19 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender startPoint.X += endPoint.X; startPoint.Y += endPoint.Y; } + else if (nextLine.StartsWith("FillPolygon")) + { + PointF[] points = null; + GetParams(partsDelimiter, ref nextLine, 11, ref points); + graph.FillPolygon(myBrush, points); + } else if (nextLine.StartsWith("Ellipse")) { float x = 0; float y = 0; GetParams(partsDelimiter, ref nextLine, 7, ref x, ref y); - endPoint.X = (int) x; - endPoint.Y = (int) y; + endPoint.X = (int)x; + endPoint.Y = (int)y; graph.DrawEllipse(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y); startPoint.X += endPoint.X; startPoint.Y += endPoint.Y; @@ -492,30 +498,31 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender nextLine = nextLine.Remove(0, 8); nextLine = nextLine.Trim(); - string [] fprops = nextLine.Split(partsDelimiter); - foreach (string prop in fprops) { - + string[] fprops = nextLine.Split(partsDelimiter); + foreach (string prop in fprops) + { + switch (prop) { case "B": if (!(myFont.Bold)) myFont = new Font(myFont, myFont.Style | FontStyle.Bold); - break; + break; case "I": if (!(myFont.Italic)) myFont = new Font(myFont, myFont.Style | FontStyle.Italic); - break; + break; case "U": if (!(myFont.Underline)) myFont = new Font(myFont, myFont.Style | FontStyle.Underline); - break; + break; case "S": if (!(myFont.Strikeout)) myFont = new Font(myFont, myFont.Style | FontStyle.Strikeout); - break; + break; case "R": myFont = new Font(myFont, FontStyle.Regular); - break; + break; } } } @@ -542,7 +549,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender if (Int32.TryParse(nextLine, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out hex)) { newColour = Color.FromArgb(hex); - } + } else { // this doesn't fail, it just returns black if nothing is found @@ -582,6 +589,25 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender } } + private static void GetParams(char[] partsDelimiter, ref string line, int startLength, ref PointF[] points) + { + line = line.Remove(0, startLength); + string[] parts = line.Split(partsDelimiter); + if (parts.Length > 1 && parts.Length % 2 == 0) + { + points = new PointF[parts.Length / 2]; + for (int i = 0; i < parts.Length; i = i + 2) + { + string xVal = parts[i].Trim(); + string yVal = parts[i+1].Trim(); + float x = Convert.ToSingle(xVal, CultureInfo.InvariantCulture); + float y = Convert.ToSingle(yVal, CultureInfo.InvariantCulture); + PointF point = new PointF(x, y); + points[i / 2] = point; + } + } + } + private Bitmap ImageHttpRequest(string url) { WebRequest request = HttpWebRequest.Create(url); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 61903498cc..b40e441315 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -833,6 +833,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return drawList; } + public string osDrawFilledPolygon(string drawList, LSL_List x, LSL_List y) + { + CheckThreatLevel(ThreatLevel.None, "osDrawFilledPolygon"); + + m_host.AddScriptLPS(1); + + if (x.Length != y.Length || x.Length < 3) + { + return ""; + } + drawList += "FillPolygon " + x.GetLSLStringItem(0) + "," + y.GetLSLStringItem(0); + for (int i = 1; i < x.Length; i++) + { + drawList += "," + x.GetLSLStringItem(i) + "," + y.GetLSLStringItem(i); + } + drawList += "; "; + return drawList; + } + public string osSetFontSize(string drawList, int fontSize) { CheckThreatLevel(ThreatLevel.None, "osSetFontSize"); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index c24dae850b..202bf4172f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -97,6 +97,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces string osDrawEllipse(string drawList, int width, int height); string osDrawRectangle(string drawList, int width, int height); string osDrawFilledRectangle(string drawList, int width, int height); + string osDrawFilledPolygon(string drawList, LSL_List x, LSL_List y); string osSetFontSize(string drawList, int fontSize); string osSetPenSize(string drawList, int penSize); string osSetPenColour(string drawList, string colour); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 605f67be34..b6bfb43cb0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -267,6 +267,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_OSSL_Functions.osDrawFilledRectangle(drawList, width, height); } + public string osDrawFilledPolygon(string drawList, LSL_List x, LSL_List y) + { + return m_OSSL_Functions.osDrawFilledPolygon(drawList, x, y); + } + public string osSetFontSize(string drawList, int fontSize) { return m_OSSL_Functions.osSetFontSize(drawList, fontSize); diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index bdacf8bef7..2842f6bed6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -439,6 +439,13 @@ namespace OpenSim.Region.ScriptEngine.Shared set {m_data = value; } } + // Function to obtain LSL type from an index. This is needed + // because LSL lists allow for multiple types, and safely + // iterating in them requires a type check. + public Type GetLSLListItemType(int itemIndex) + { + return m_data[itemIndex].GetType(); + } // Member functions to obtain item as specific types. // For cases where implicit conversions would apply if items @@ -465,6 +472,10 @@ namespace OpenSim.Region.ScriptEngine.Shared { return new LSL_Types.LSLFloat((Double)m_data[itemIndex]); } + else if (m_data[itemIndex] is LSL_Types.LSLString) + { + return new LSL_Types.LSLFloat(m_data[itemIndex].ToString()); + } else { return (LSL_Types.LSLFloat)m_data[itemIndex]; @@ -481,20 +492,32 @@ namespace OpenSim.Region.ScriptEngine.Shared { return new LSL_Types.LSLString((string)m_data[itemIndex]); } + else if (m_data[itemIndex] is LSL_Types.LSLFloat) + { + return new LSL_Types.LSLString((LSLFloat)m_data[itemIndex]); + } + else if (m_data[itemIndex] is LSL_Types.LSLInteger) + { + return new LSL_Types.LSLString((LSLInteger)m_data[itemIndex]); + } else { - return (LSL_Types.LSLString)m_data[itemIndex]; + return (LSL_Types.LSLString)m_data[itemIndex]; } } public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) { - if (m_data[itemIndex] is LSL_Types.LSLInteger) - return (LSL_Types.LSLInteger)m_data[itemIndex]; - else if (m_data[itemIndex] is Int32) - return new LSLInteger((int)m_data[itemIndex]); - else - throw new InvalidCastException(); + if (m_data[itemIndex] is LSL_Types.LSLInteger) + return (LSL_Types.LSLInteger)m_data[itemIndex]; + if (m_data[itemIndex] is LSL_Types.LSLFloat) + return new LSLInteger((int)m_data[itemIndex]); + else if (m_data[itemIndex] is Int32) + return new LSLInteger((int)m_data[itemIndex]); + else if (m_data[itemIndex] is LSL_Types.LSLString) + return new LSLInteger((string)m_data[itemIndex]); + else + throw new InvalidCastException(); } public LSL_Types.Vector3 GetVector3Item(int itemIndex) @@ -1331,6 +1354,12 @@ namespace OpenSim.Region.ScriptEngine.Shared m_string=s; } + public LSLString(LSLInteger i) + { + string s = String.Format("{0}", i); + m_string = s; + } + #endregion #region Operators From 75021b5309c5e74c08feea5d508b69ce05491375 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 21 Aug 2009 21:31:18 -0700 Subject: [PATCH 21/34] Moved AuthedSessionCache to where it is used -- Grid/InventoryServer. --- .../Cache => Grid/InventoryServer}/AuthedSessionCache.cs | 0 .../InventoryServer}/InventoryServiceBase.cs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename OpenSim/{Framework/Communications/Cache => Grid/InventoryServer}/AuthedSessionCache.cs (100%) rename OpenSim/{Framework/Communications => Grid/InventoryServer}/InventoryServiceBase.cs (100%) diff --git a/OpenSim/Framework/Communications/Cache/AuthedSessionCache.cs b/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs similarity index 100% rename from OpenSim/Framework/Communications/Cache/AuthedSessionCache.cs rename to OpenSim/Grid/InventoryServer/AuthedSessionCache.cs diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs similarity index 100% rename from OpenSim/Framework/Communications/InventoryServiceBase.cs rename to OpenSim/Grid/InventoryServer/InventoryServiceBase.cs From b03eeeb9f6331ed36c61f55aef847ce3b2db7ba4 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 22 Aug 2009 10:24:26 -0700 Subject: [PATCH 22/34] * Fixes mantis http://opensimulator.org/mantis/view.php?id=4044. Turns out folders were never being removed from trash when they were singled out for purging in trash. They were being removed when Trash was purged as a whole. That behavior is now fixed for the new InventoryService set. * Removed left-overs from AssetInventoryServer. --- .../Communications/Tests/LoginServiceTests.cs | 5 +++ OpenSim/Framework/IClientAPI.cs | 2 +- .../ClientStack/LindenUDP/LLClientView.cs | 26 +++++++------- .../Inventory/BaseInventoryConnector.cs | 5 +++ .../Inventory/HGInventoryBroker.cs | 17 ++++++++++ .../LocalInventoryServiceConnector.cs | 5 +++ .../RemoteInventoryServiceConnector.cs | 12 +++++++ .../Framework/Scenes/Scene.Inventory.cs | 18 +++------- .../Framework/Scenes/Scene.PacketHandlers.cs | 2 +- .../Inventory/InventoryServerInConnector.cs | 13 +++++++ .../Inventory/HGInventoryServiceConnector.cs | 13 +++++++ .../Inventory/ISessionAuthInventoryService.cs | 5 +++ .../Inventory/InventoryServiceConnector.cs | 23 +++++++++++-- .../QuickAndDirtyInventoryServiceConnector.cs | 6 ++++ .../Services/Interfaces/IInventoryService.cs | 8 +++++ .../InventoryService/InventoryService.cs | 16 +++++++-- .../Tests/Common/Mock/TestInventoryService.cs | 5 +++ ...penSim.Grid.AssetInventoryServer.addin.xml | 24 ------------- ...enSim.Grid.AssetInventoryServer.exe.config | 34 ------------------- 19 files changed, 150 insertions(+), 89 deletions(-) delete mode 100644 bin/OpenSim.Grid.AssetInventoryServer.addin.xml delete mode 100644 bin/OpenSim.Grid.AssetInventoryServer.exe.config diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index 6f86704cdc..57a908e128 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs @@ -532,6 +532,11 @@ namespace OpenSim.Framework.Communications.Tests return false; } + public bool DeleteFolders(UUID ownerID, List ids) + { + return false; + } + public bool PurgeFolder(InventoryFolderBase folder) { return false; diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index c6cdcaa8d8..444adf9e8b 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -260,7 +260,7 @@ namespace OpenSim.Framework IClientAPI remoteClient, List itemIDs); public delegate void RemoveInventoryFolder( - IClientAPI remoteClient, UUID folderID); + IClientAPI remoteClient, List folderIDs); public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest); diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index a7a5aa3788..dd0178023a 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -7090,14 +7090,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (OnRemoveInventoryFolder != null) { handlerRemoveInventoryFolder = null; + List uuids = new List(); foreach (RemoveInventoryFolderPacket.FolderDataBlock datablock in removeFolder.FolderData) { - handlerRemoveInventoryFolder = OnRemoveInventoryFolder; - - if (handlerRemoveInventoryFolder != null) - { - handlerRemoveInventoryFolder(this, datablock.FolderID); - } + uuids.Add(datablock.FolderID); + } + handlerRemoveInventoryFolder = OnRemoveInventoryFolder; + if (handlerRemoveInventoryFolder != null) + { + handlerRemoveInventoryFolder(this, uuids); } } break; @@ -7114,14 +7115,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (OnRemoveInventoryFolder != null) { handlerRemoveInventoryFolder = null; + List uuids = new List(); foreach (RemoveInventoryObjectsPacket.FolderDataBlock datablock in removeObject.FolderData) { - handlerRemoveInventoryFolder = OnRemoveInventoryFolder; - - if (handlerRemoveInventoryFolder != null) - { - handlerRemoveInventoryFolder(this, datablock.FolderID); - } + uuids.Add(datablock.FolderID); + } + handlerRemoveInventoryFolder = OnRemoveInventoryFolder; + if (handlerRemoveInventoryFolder != null) + { + handlerRemoveInventoryFolder(this, uuids); } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index d4cb61663a..bd32f3b003 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs @@ -138,6 +138,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory /// true if the folder was successfully moved public abstract bool MoveFolder(InventoryFolderBase folder); + /// + /// Delete a list of inventory folders (from trash) + /// + public abstract bool DeleteFolders(UUID ownerID, List folderIDs); + /// /// Purge an inventory folder of all its items and subfolders. /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 787c6c8b17..1c66254aca 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -330,6 +330,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } } + public override bool DeleteFolders(UUID ownerID, List folderIDs) + { + if (folderIDs == null) + return false; + if (folderIDs.Count == 0) + return false; + + if (IsLocalGridUser(ownerID)) + return m_GridService.DeleteFolders(ownerID, folderIDs); + else + { + UUID sessionID = GetSessionID(ownerID); + string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString(); + return m_HGService.DeleteFolders(uri, folderIDs, sessionID); + } + } + public override bool MoveFolder(InventoryFolderBase folder) { if (folder == null) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index e6edcf2cef..66d11dd819 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -258,6 +258,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_InventoryService.MoveFolder(folder); } + public override bool DeleteFolders(UUID ownerID, List folderIDs) + { + return m_InventoryService.DeleteFolders(ownerID, folderIDs); + } + /// /// Purge an inventory folder of all its items and subfolders. /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 201442c2b4..0d32c77859 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -243,6 +243,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID); } + public override bool DeleteFolders(UUID ownerID, List folderIDs) + { + if (folderIDs == null) + return false; + if (folderIDs.Count == 0) + return false; + + UUID sessionID = GetSessionID(ownerID); + return m_RemoteConnector.DeleteFolders(ownerID.ToString(), folderIDs, sessionID); + } + + public override bool PurgeFolder(InventoryFolderBase folder) { if (folder == null) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a9d361b072..33015365cf 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -789,23 +789,15 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Removes an inventory folder. Although there is a packet in the Linden protocol for this, it may be - /// legacy and not currently used (purge folder is used to remove folders from trash instead). + /// Removes an inventory folder. This packet is sent when the user + /// right-clicks a folder that's already in trash and chooses "purge" /// /// /// - private void RemoveInventoryFolder(IClientAPI remoteClient, UUID folderID) + private void RemoveInventoryFolder(IClientAPI remoteClient, List folderIDs) { - // Unclear is this handler is ever called by the Linden client, but it might - - InventoryFolderBase folder = new InventoryFolderBase(folderID); - folder.Owner = remoteClient.AgentId; - InventoryFolderBase trash = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder); - if (trash != null) - { - folder.ParentID = trash.ID; - InventoryService.MoveFolder(folder); - } + m_log.DebugFormat("[SCENE INVENTORY]: RemoveInventoryFolders count {0}", folderIDs.Count); + InventoryService.DeleteFolders(remoteClient.AgentId, folderIDs); } private SceneObjectGroup GetGroupByPrim(uint localID) diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 2b815a2764..d3e414faa9 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -552,7 +552,7 @@ namespace OpenSim.Region.Framework.Scenes public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) { - InventoryFolderBase folder = new InventoryFolderBase(folderID); + InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId); folder = InventoryService.GetFolder(folder); if (folder != null) { diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index 10336b00fd..998b3228ed 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs @@ -104,6 +104,10 @@ namespace OpenSim.Server.Handlers.Inventory new RestDeserialiseSecureHandler( "POST", "/PurgeFolder/", m_InventoryService.PurgeFolder, CheckAuthSession)); + m_httpServer.AddStreamHandler( + new RestDeserialiseSecureHandler, bool>( + "POST", "/DeleteFolders/", DeleteFolders, CheckAuthSession)); + m_httpServer.AddStreamHandler( new RestDeserialiseSecureHandler, bool>( "POST", "/DeleteItem/", DeleteItems, CheckAuthSession)); @@ -254,6 +258,15 @@ namespace OpenSim.Server.Handlers.Inventory return m_InventoryService.GetAssetPermissions(item.Owner, item.AssetID); } + public bool DeleteFolders(List items) + { + List uuids = new List(); + foreach (Guid g in items) + uuids.Add(new UUID(g)); + // oops we lost the user info here. Bad bad handlers + return m_InventoryService.DeleteFolders(UUID.Zero, uuids); + } + public bool DeleteItems(List items) { List uuids = new List(); diff --git a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs index 45e921a670..1004fb9450 100644 --- a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs @@ -201,6 +201,19 @@ namespace OpenSim.Services.Connectors.Inventory return false; } + public bool DeleteFolders(string id, List folders, UUID sessionID) + { + string url = string.Empty; + string userID = string.Empty; + + if (StringToUrlAndUserID(id, out url, out userID)) + { + ISessionAuthInventoryService connector = GetConnector(url); + return connector.DeleteFolders(userID, folders, sessionID); + } + return false; + } + public bool PurgeFolder(string id, InventoryFolderBase folder, UUID sessionID) { string url = string.Empty; diff --git a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs index c89c9b7ce0..da8c7e2e61 100644 --- a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs +++ b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs @@ -88,6 +88,11 @@ namespace OpenSim.Services.Connectors /// true if the folder was successfully moved bool MoveFolder(string userID, InventoryFolderBase folder, UUID session_id); + /// + /// Delete a list of inventory folders (from trash) + /// + bool DeleteFolders(string userID, List folders, UUID session_id); + /// /// Purge an inventory folder of all its items and subfolders. /// diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index 7c35bde932..423ca75557 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -308,6 +308,25 @@ namespace OpenSim.Services.Connectors return false; } + public bool DeleteFolders(string userID, List folderIDs, UUID sessionID) + { + try + { + List guids = new List(); + foreach (UUID u in folderIDs) + guids.Add(u.Guid); + return SynchronousRestSessionObjectPoster, bool>.BeginPostObject( + "POST", m_ServerURI + "/DeleteFolders/", guids, sessionID.ToString(), userID); + } + catch (Exception e) + { + m_log.ErrorFormat("[INVENTORY CONNECTOR]: Delete inventory folders operation failed, {0} {1}", + e.Source, e.Message); + } + + return false; + } + public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID) { try @@ -481,12 +500,12 @@ namespace OpenSim.Services.Connectors return null; } - public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID sessionID) + public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase folder, UUID sessionID) { try { return SynchronousRestSessionObjectPoster.BeginPostObject( - "POST", m_ServerURI + "/QueryFolder/", item, sessionID.ToString(), item.Owner.ToString()); + "POST", m_ServerURI + "/QueryFolder/", folder, sessionID.ToString(), userID); } catch (Exception e) { diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index cd283ff17e..a7aa1382c4 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs @@ -136,6 +136,12 @@ namespace OpenSim.Services.Connectors return false; } + public bool DeleteFolders(UUID ownerID, List folderIDs) + { + return false; + } + + public bool PurgeFolder(InventoryFolderBase folder) { return false; diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index ebdb09a969..c77509014a 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -121,6 +121,14 @@ namespace OpenSim.Services.Interfaces /// true if the folder was successfully moved bool MoveFolder(InventoryFolderBase folder); + /// + /// Delete an item from the user's inventory + /// + /// + /// true if the item was successfully deleted + //bool DeleteItem(InventoryItemBase item); + bool DeleteFolders(UUID userID, List folderIDs); + /// /// Purge an inventory folder of all its items and subfolders. /// diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 45bbd3716e..0cf4af1d70 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -425,15 +425,27 @@ namespace OpenSim.Services.InventoryService return null; } - public virtual InventoryFolderBase GetFolder(InventoryFolderBase item) + public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) { - InventoryFolderBase result = m_Database.getInventoryFolder(item.ID); + m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder {0}", folder.ID); + InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID); if (result != null) return result; return null; } + public virtual bool DeleteFolders(UUID ownerID, List folderIDs) + { + foreach (UUID id in folderIDs) + { + InventoryFolderBase folder = new InventoryFolderBase(id, ownerID); + PurgeFolder(folder); + m_Database.deleteInventoryFolder(id); + } + return true; + } + /// /// Purge a folder of all items items and subfolders. /// diff --git a/OpenSim/Tests/Common/Mock/TestInventoryService.cs b/OpenSim/Tests/Common/Mock/TestInventoryService.cs index ee22e5e14e..5a0ee7ca65 100644 --- a/OpenSim/Tests/Common/Mock/TestInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/TestInventoryService.cs @@ -128,6 +128,11 @@ namespace OpenSim.Tests.Common.Mock return false; } + public bool DeleteFolders(UUID ownerID, List ids) + { + return false; + } + public bool PurgeFolder(InventoryFolderBase folder) { return false; diff --git a/bin/OpenSim.Grid.AssetInventoryServer.addin.xml b/bin/OpenSim.Grid.AssetInventoryServer.addin.xml deleted file mode 100644 index 1f1bdbd442..0000000000 --- a/bin/OpenSim.Grid.AssetInventoryServer.addin.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bin/OpenSim.Grid.AssetInventoryServer.exe.config b/bin/OpenSim.Grid.AssetInventoryServer.exe.config deleted file mode 100644 index e542cf23bf..0000000000 --- a/bin/OpenSim.Grid.AssetInventoryServer.exe.config +++ /dev/null @@ -1,34 +0,0 @@ - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 751c2000cc815d5dfe13be0145941589e4dedfa8 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 22 Aug 2009 10:30:04 -0700 Subject: [PATCH 23/34] Changed the namespace of old InventoryServiceBase amd AuthedSessionCache. --- OpenSim/Grid/InventoryServer/AuthedSessionCache.cs | 2 +- OpenSim/Grid/InventoryServer/InventoryServiceBase.cs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs b/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs index d56e48ac22..dadf34a4ed 100644 --- a/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs +++ b/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; -namespace OpenSim.Framework.Communications.Cache +namespace OpenSim.Grid.InventoryServer { public class AuthedSessionCache { diff --git a/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs b/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs index 309c415e90..f8b494994e 100644 --- a/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs +++ b/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs @@ -30,8 +30,10 @@ using System.Reflection; using log4net; using OpenMetaverse; using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Framework.Communications; -namespace OpenSim.Framework.Communications +namespace OpenSim.Grid.InventoryServer { /// /// Abstract base class used by local and grid implementations of an inventory service. From 71f2d8391b154fe98718f8ddec96cbd1de573945 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 22 Aug 2009 10:30:27 -0700 Subject: [PATCH 24/34] Moved a debug message. --- OpenSim/Services/InventoryService/InventoryService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 0cf4af1d70..19b1fd87fa 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -427,11 +427,11 @@ namespace OpenSim.Services.InventoryService public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) { - m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder {0}", folder.ID); InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID); if (result != null) return result; + m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folder.ID); return null; } From a22b12ecd4c8e65ae08053f0441e345750c60773 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 22 Aug 2009 20:18:24 +0100 Subject: [PATCH 25/34] Change prompt handling in console. No user changes --- OpenSim/Framework/Console/CommandConsole.cs | 4 ++-- OpenSim/Framework/Console/ConsoleBase.cs | 4 ++-- OpenSim/Framework/Console/RemoteConsole.cs | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs index 3387013f5e..06136ffb7b 100644 --- a/OpenSim/Framework/Console/CommandConsole.cs +++ b/OpenSim/Framework/Console/CommandConsole.cs @@ -576,7 +576,7 @@ namespace OpenSim.Framework.Console public void Prompt() { - string line = ReadLine(m_defaultPrompt, true, true); + string line = ReadLine(m_defaultPrompt + "# ", true, true); if (line != String.Empty) { @@ -592,7 +592,7 @@ namespace OpenSim.Framework.Console public override string ReadLine(string p, bool isCommand, bool e) { - System.Console.Write("{0}", prompt); + System.Console.Write("{0}", p); string cmdinput = System.Console.ReadLine(); if (isCommand) diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs index 5e258ae44b..0a51266064 100644 --- a/OpenSim/Framework/Console/ConsoleBase.cs +++ b/OpenSim/Framework/Console/ConsoleBase.cs @@ -48,7 +48,7 @@ namespace OpenSim.Framework.Console /// public string DefaultPrompt { - set { m_defaultPrompt = value + "# "; } + set { m_defaultPrompt = value; } get { return m_defaultPrompt; } } protected string m_defaultPrompt; @@ -123,7 +123,7 @@ namespace OpenSim.Framework.Console public virtual string ReadLine(string p, bool isCommand, bool e) { - System.Console.Write("{0}", prompt); + System.Console.Write("{0}", p); string cmdinput = System.Console.ReadLine(); return cmdinput; diff --git a/OpenSim/Framework/Console/RemoteConsole.cs b/OpenSim/Framework/Console/RemoteConsole.cs index da8556a2d1..1810614409 100644 --- a/OpenSim/Framework/Console/RemoteConsole.cs +++ b/OpenSim/Framework/Console/RemoteConsole.cs @@ -217,6 +217,12 @@ namespace OpenSim.Framework.Console id.AppendChild(xmldoc.CreateTextNode(sessionID.ToString())); rootElement.AppendChild(id); + + XmlElement prompt = xmldoc.CreateElement("", "Prompt", ""); + prompt.AppendChild(xmldoc.CreateTextNode(DefaultPrompt)); + + rootElement.AppendChild(prompt); + rootElement.AppendChild(MainConsole.Instance.Commands.GetXml(xmldoc)); reply["str_response_string"] = xmldoc.InnerXml; From cfd9cf7b18331a9d2117294f6ba23dd03a9423a1 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 25 Aug 2009 06:17:36 -0700 Subject: [PATCH 26/34] Closed the web request and stream in SynchronousRestSessionObjectPoster -- maybe this is the cause of some timeouts seen in some monos? --- OpenSim/Framework/Servers/HttpServer/RestSessionService.cs | 3 +++ .../Connectors/Inventory/InventoryServiceConnector.cs | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs b/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs index ec2f9ec1fa..2ef4a36855 100644 --- a/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs +++ b/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs @@ -75,6 +75,7 @@ namespace OpenSim.Framework.Servers.HttpServer WebRequest request = WebRequest.Create(requestUrl); request.Method = verb; request.ContentType = "text/xml"; + request.Timeout = 20000; MemoryStream buffer = new MemoryStream(); @@ -98,7 +99,9 @@ namespace OpenSim.Framework.Servers.HttpServer { XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); deserial = (TResponse)deserializer.Deserialize(resp.GetResponseStream()); + resp.Close(); } + requestStream.Close(); return deserial; } } diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index 423ca75557..a2261ba0f4 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -229,6 +229,11 @@ namespace OpenSim.Services.Connectors return SynchronousRestSessionObjectPoster.BeginPostObject( "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); } + catch (TimeoutException e) + { + m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation to {0} timed out {0} {1}.", m_ServerURI, + e.Source, e.Message); + } catch (Exception e) { // Maybe we're talking to an old inventory server. Try this other thing. From efb287f28f89eee06c6b90ad13297a2d33058409 Mon Sep 17 00:00:00 2001 From: Arthur Valadares Date: Tue, 25 Aug 2009 10:32:45 -0300 Subject: [PATCH 27/34] Implemented osPenCap, that sets EndCap and StartCap to Pen. This allows using arrow, diamond, round and flat caps. * Made image request safer, if it can't find an image for any reason, draws a square where the image should be and a message alerting the user. --- .../VectorRender/VectorRenderModule.cs | 77 +++++++++++++++++-- .../Shared/Api/Implementation/OSSL_Api.cs | 9 +++ .../Shared/Api/Interface/IOSSL_Api.cs | 1 + .../Shared/Api/Runtime/OSSL_Stub.cs | 5 ++ 4 files changed, 85 insertions(+), 7 deletions(-) diff --git a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs index d7f39b0582..e577fbe951 100644 --- a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs @@ -443,7 +443,16 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender endPoint.X = (int) x; endPoint.Y = (int) y; Image image = ImageHttpRequest(nextLine); - graph.DrawImage(image, (float) startPoint.X, (float) startPoint.Y, x, y); + if (image != null) + { + graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y); + } + else + { + graph.DrawString("URL couldn't be resolved or is", new Font("Arial",6), myBrush, startPoint); + graph.DrawString("not an image. Please check URL.", new Font("Arial", 6), myBrush, new Point(startPoint.X, 12 + startPoint.Y)); + graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y); + } startPoint.X += endPoint.X; startPoint.Y += endPoint.Y; } @@ -539,6 +548,57 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender float size = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture); drawPen.Width = size; } + else if (nextLine.StartsWith("PenCap")) + { + bool start = true, end = true; + nextLine = nextLine.Remove(0, 6); + nextLine = nextLine.Trim(); + string[] cap = nextLine.Split(partsDelimiter); + if (cap[0].ToLower() == "start") + end = false; + else if (cap[0].ToLower() == "end") + start = false; + else if (cap[0].ToLower() != "both") + return; + string type = cap[1].ToLower(); + + if (end) + { + switch (type) + { + case "arrow": + drawPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; + break; + case "round": + drawPen.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor; + break; + case "diamond": + drawPen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor; + break; + case "flat": + drawPen.EndCap = System.Drawing.Drawing2D.LineCap.Flat; + break; + } + } + if (start) + { + switch (type) + { + case "arrow": + drawPen.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; + break; + case "round": + drawPen.StartCap = System.Drawing.Drawing2D.LineCap.RoundAnchor; + break; + case "diamond": + drawPen.StartCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor; + break; + case "flat": + drawPen.StartCap = System.Drawing.Drawing2D.LineCap.Flat; + break; + } + } + } else if (nextLine.StartsWith("PenColour")) { nextLine = nextLine.Remove(0, 9); @@ -610,16 +670,19 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender private Bitmap ImageHttpRequest(string url) { + try + { WebRequest request = HttpWebRequest.Create(url); //Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used. //Ckrinke Stream str = null; - HttpWebResponse response = (HttpWebResponse) (request).GetResponse(); - if (response.StatusCode == HttpStatusCode.OK) - { - Bitmap image = new Bitmap(response.GetResponseStream()); - return image; + HttpWebResponse response = (HttpWebResponse)(request).GetResponse(); + if (response.StatusCode == HttpStatusCode.OK) + { + Bitmap image = new Bitmap(response.GetResponseStream()); + return image; + } } - + catch { } return null; } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index b40e441315..b1c357c002 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -879,6 +879,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return drawList; } + public string osSetPenCap(string drawList, string direction, string type) + { + CheckThreatLevel(ThreatLevel.None, "osSetPenColour"); + + m_host.AddScriptLPS(1); + drawList += "PenCap " + direction + "," + type + "; "; + return drawList; + } + public string osDrawImage(string drawList, int width, int height, string imageUrl) { CheckThreatLevel(ThreatLevel.None, "osDrawImage"); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 202bf4172f..2365beeb71 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -101,6 +101,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces string osSetFontSize(string drawList, int fontSize); string osSetPenSize(string drawList, int penSize); string osSetPenColour(string drawList, string colour); + string osSetPenCap(string drawList, string direction, string type); string osDrawImage(string drawList, int width, int height, string imageUrl); vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize); void osSetStateEvents(int events); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index b6bfb43cb0..f877acb7e9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -282,6 +282,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_OSSL_Functions.osSetPenSize(drawList, penSize); } + public string osSetPenCap(string drawList, string direction, string type) + { + return m_OSSL_Functions.osSetPenCap(drawList, direction, type); + } + public string osSetPenColour(string drawList, string colour) { return m_OSSL_Functions.osSetPenColour(drawList, colour); From 6bdb2e284886c5244f17d83e0b63add2546c0ca6 Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Tue, 25 Aug 2009 16:12:03 -0400 Subject: [PATCH 28/34] Patch from jhurliman to HttpServer Fixes cookie handling and header name casing in HttpServer Currently, cookies are never being processed on incoming HTTP requests. This patch makes sure cookies are parsed and inserted into IHttpRequest.Cookies, and fixes incoming headers to always have lower-case names. http://opensimulator.org/mantis/view.php?id=4052 --- bin/HttpServer_OpenSim.dll | Bin 113664 -> 114176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll index 54142762af1882a34755f73301d794add78990c8..06bdf60baecdabd2056fc86626c50fb39e01fca5 100644 GIT binary patch delta 7075 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 NyU$U$2Mv97{|}P{5*7de delta 7004 zcmX}x3tUr2x&ZK*ZxV8nAPOXqAdny+py2y~q6i|26L3%79)PfOmQ!2mitUWM@B(H_q??Uk!8RIZ@#|@19 z9W#&NNI4yc>25k{wv}eL$Q$rLd`v!u!|)0D2i(tisFQ~1PZE6rQlsQ{geqkt#Mp{w zTz>I?ADj!!FZuEMgeha{GT`0W@e{-Qy4@g~%X3%U{cdJl-9+=;@QF2L#ro~{v!8{p zIv;cIor>#k^=QtxT`i5hTt8zOSzYkk?xl81T=nJ3ABLXO1s=$o{bEVeh}-WJ{$t4D z%5~GPdG8zMr~U0{d{9g4wmJ7V#-8&!XHc!b))!B5c0l1|cQQnUviKz;BqvWDE?=5D zRO>xNjk;*%7^nJ`oq)&6&B+cNBacbR!sDDxDHe>!J5Nooz&KWppD|iB0U=NM%Na(w zc7`{ObAC9Z72|k$?yLEDqI~Jqc{o9iNZo}e$(K?qaH5N`d3c)K{8j=z{_Cx^IN7;)-a(90oB^4yV?5otV*Xc{wiCY~ z0sl#^T42L7oa$@>s+sIEcIQ}}19Rd5zv^6^w-#`!oVmy->lVExKgsuzix<6()13Df z%_I0VXMAC&ine21aS*@mJinq7#f>@EgvnEAv%&j&savdW~<&pWFV4 z=gNmG4f5eNHvE=6)ZUHfInD2$!8k+ywxR@Q$}=nH;rTSBlQvsbRe`gd+G=mW3!DM# zaxl)8tJV+3+0LWudtp1ohcjtgmIp;Y13eg-Ox6`yG z&cyofu=*`Ps89}lFVSW}NEg~`451Y-yjNQ=QbjEeT>cfNwae;8p+cYVE4+M~mVHI} zE-jlx`BNP#G>dXhFe>yD<(+}3u&*fpMDzVcd89uo4B+J#-fJw_1F1x}S}#@jRp;;T zO~?3adFqadI^2g1!__$XvRuDo5WXg#-_c12Si{aoc&WU;aXjvj+ZzX1uG7owHPGNi z!s#T`>7mSx-h*bzuk^lXU8mfq=_#u$NWyZJ-~Z%U+RL} zBYe=MQuH5uS18zcRP_t)ap^PF6P%I97Pc}{f1WxJ)(Mw>x71x64lS}Cqk2{ ze#dS8l&pJWpLFyGzR6`r#y*eX4{Vip-bl11zs)l0ks%;V(}RB$3Ji$UJjY4-%Gtwp zchC#mA~aUljWAs2sy0PR=?LIkmrAL+U3yPV;8#V`*nr_06}%8i3`j#NaI-C9T~wo) z0qK;z74b$@5baVDjpd5W%78SD8XhiY=h;zRz%3*}NP*HyQ@~t}7G?+?49L>xV8{|B zb}%4MqlZ;O#{;@iFF3Ts#)GuOGK~jFg-mwzTR;)=gd(n5gaRuyo^VsdEP=<6Hxw;Z zGG7TyLq>Qi^m(e@s%u9w;@1}Ow~D@pX3_)+7ADvB@KW!MN)?)UW$S%Ho*s$X_UVT5o-~Of)_$w z)>0}>8E-}kqOn2HTWBNAeqXFswJPGPo&w9E!3YX9o8tB z(wLwl(i?C^D1~YcnAXxJZFGTROU#>4wVrj+h1n7_58mTaWKVW zC=F*phmdDKi*^Cr60-CQrMjnx&x&lgFJg=O#b~qPvC!&%aa6wxZKbh=09$zXQZtP$ z1ic~~?>+~-MUZu$1O7rs`c2m6LWs~;{iabxDdOGdL9|Q#NFKDfWQ9d=Mx1v(IA2=; z?LwWwMO4>>Y+b=CDQ_u6&w|s@5~!-jHYB8HbjG|8^FuN5+r_D27Q~wWeLsH~N&oMy^VF*~hdc@J2n$w4+P8CY$;l$m3+e zv)Xc4=h8Lp8ffCGme|~`f_*}4ZdbuV2WzHUsxhUZYA6tDG(CoDDCM%Fk3&3EYhj=K z{M){^=mwrohj=hv54(lf5Z?f|sn{@PLv;iEBE*Jj4Y==6V(fEvBZLaE&)H3|PPt7q zd$iMcGi(s58NI@5GsMwMWyE!BH^V8Li;uK*(81M)Hu-89{KsApn}UA6vQd;#_;L9|VujxNAau6wwk|4iKlxF}+Gb)__B`iM75JN!)5 z4vSq%N0(uRBI#8B4Bcf|C3La>QPpLr7GfKNuV6D5UFlVTd@c)=yXa!0OtAS1k6gHw4H-@sP+<2y%fAJIBC{Z@qC);)nULhn-jAKd2o?4cji{tCK%FQ3R+ z?K2qX(lzaKDCDZA9|r%@0cmvUkxoUfxYVQ5kRGl!bT;I!R!?r(co(&F7WXl`6Nv|F z(P^%+LY;9e7QUZ#Uys5(%ZWQF7aHzq(Dx=^3u*kyi8r|;G=XONkcUFao|VK*o(k24 z1?bJB-~gYR^{6qdocNQ{14Z;QaNYe zy@hSjNWBr%;}ErA|>TB7YaD=Ofb4V$#i3A$3GNhQ;J(F8U`L zy`2K`ROmr?DOKwccB>WWy9k5(67nUNjJhKH+zZK1TwU7f;b~|od3J;kf-Y@rc#(D~ z!A^FfUHWgtN-7-}?ZSH%T1LEty1mO(%Sd0LAqKl@ISCe;U|35PDRjtS!9`?*&|eI} zRFj0>4&SC0PWKvqZ3(-o*+sSE!lBib=N6r!-bf3WUyv@79-)VxcwC zhg7SD)=6KeO30@|*Xa$Gk`^wz)O)~6s#8?-{=2lT;XCvz$$62Q8NP+;s!%Jl&{tbVW*=oww2N-ctx_2|E%a;n0ev}X zXJYGff%&k073mN`v(XBxN%C>!#4Ei{;5Fo;5L>$|NXF+Z#wG+)9G5b6D#$mkm=!7r zKEX2WG_wk-$Pg}e-Z1yI#Qh5vqw6zUuGbMWXSKvu)^#LCh;0qllLR5QHCRuQh3fhg zp$#POWvovrRh`hq0Y#{Wd?EDL0b|^2$VEl;ldF`*{+FxEhS|ctk@%csSEEeiO(cY? zn*M1T@4ku5KFwnHwD$%qge|0;OZj-%N=BdIF}}*zk*QqDDqlzDaIscyp*oVyr93B@ zlycQ0Tf)Gl?lSrJm#mpuG;3gq`!+J`tfDum93S(kmJTeXsuU`=(b3&ZHVU$l-%Pd(vAMm6Gzqb}y@!0Hh`;wA zkjpM5p%2J?k;yjSd&v_;e1E-{Y&_3yq8h0q(=>ZYBbS}-whhnKACnGFWlOz}e1E|? zwtGMTc5`H_@W_N-hD=qY6sOHp83Ig(l_XL+s>)Oa21FZXVKxHaq9-t5H4esKJ3`fXl_l5Mj7+f_G7|>JHX2u| zro=Y%veWKLkzI8#-~-25HJ*|X>a(8*R;n6f2hj4Tu|s`Y==R_bj~3RT;UvETx;u%j z@kvLwV~gnSj9uADo->qm$L?@UbHgL?0f*g<_I<*4+M@P3-n`*DFZljY>m;}*xq8l0;6#S{sb<9=~q z38&A=HO_)@Bk2wn6~zXcn$h3mE_gJf2XUv&&B!{s-5f!l#WjE@Y>v5QzC?WDyUjtE zEe#EXZS{h1#n>#(0*I7?@d99vX#uduEf zHAY9j62ZG#bM*Kb;0{No2M*{JW&UzjsuX3u%Z{xz9=I>I1sh@wNro!JF2i2KVZ%+s zw}!tP?i+qG{KxQz!ONIpOgGLq78pMw}N>nmW>uYM5gvHtaX3jC!NR7-k$~9BDjZ>@g<$l>5~AH2WO!`HRo% zzJ_K~ zgx1pETWMWA{axRxvEY93jFXi=SNcQxmDj7OlTv+E$IHTZFG*>- zVMv)e#%Kq}(xcesu}^%F#TJj#osJhru^$}jbod>^3tByn Date: Tue, 25 Aug 2009 17:36:04 -0400 Subject: [PATCH 29/34] A slightly modified version of http://opensimulator.org/mantis/view.php?id=4040 by jhurliman. The patch didn't match up, so I winged it here. My effort to manually merge the patch seems to make sense, so I'm going to commit it. --- OpenSim/Framework/AvatarAppearance.cs | 7 +++++++ .../UserServer.Modules/UserServerAvatarAppearanceModule.cs | 7 ++++++- prebuild.xml | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 1fb01ba1c5..940ae3b0b4 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs @@ -510,6 +510,13 @@ namespace OpenSim.Framework if (te != null && te.Length > 0) Texture = new Primitive.TextureEntry(te, 0, te.Length); } + else + { + // We shouldn't be receiving appearance hashtables without a TextureEntry, + // but in case we do this will prevent a failure when saving to the database + Texture = GetDefaultTexture(); + } + AvatarHeight = (float)Convert.ToDouble((string)h["avatar_height"]); diff --git a/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs b/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs index 7941679660..88918d1142 100644 --- a/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs +++ b/OpenSim/Grid/UserServer.Modules/UserServerAvatarAppearanceModule.cs @@ -110,7 +110,12 @@ namespace OpenSim.Grid.UserServer.Modules if (requestData.Contains("owner")) { AvatarAppearance appearance = new AvatarAppearance(requestData); - m_userDataBaseService.UpdateUserAppearance(new UUID((string)requestData["owner"]), appearance); + + // TODO: Sometime in the future we may have a database layer that is capable of updating appearance when + // the TextureEntry is null. When that happens, this check can be removed + if (appearance.Texture != null) + m_userDataBaseService.UpdateUserAppearance(new UUID((string)requestData["owner"]), appearance); + responseData = new Hashtable(); responseData["returnString"] = "TRUE"; } diff --git a/prebuild.xml b/prebuild.xml index 0cf88c3aa8..c4d81cce0e 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1055,6 +1055,7 @@ + From 256624566f4708fc6e3280c240393d0abdb7beb6 Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Wed, 26 Aug 2009 12:58:37 +0900 Subject: [PATCH 30/34] Formatting cleanup, minor refactoring. --- .../BasicPhysicsPlugin/BasicPhysicsActor.cs | 1 + OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 4 ---- OpenSim/Region/Physics/POSPlugin/POSCharacter.cs | 6 +++--- OpenSim/Region/Physics/POSPlugin/POSScene.cs | 14 +++++--------- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs index a74eb0c1e0..8d8b3fee7e 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs @@ -43,6 +43,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin private PhysicsVector m_rotationalVelocity = PhysicsVector.Zero; private bool flying; private bool iscolliding; + public BasicActor() { _velocity = new PhysicsVector(); diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 759692f3fa..d192018a25 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs @@ -1025,7 +1025,6 @@ namespace OpenSim.Region.Physics.OdePlugin } } - if (flying) { vec.Z = (_target_velocity.Z - vel.Z) * (PID_D); @@ -1044,7 +1043,6 @@ namespace OpenSim.Region.Physics.OdePlugin vec.Z += (target_altitude - _position.Z) * PID_P * 5.0f; } // end add Kitto Flora - } if (PhysicsVector.isFinite(vec)) { @@ -1080,8 +1078,6 @@ namespace OpenSim.Region.Physics.OdePlugin _parent_scene.geom_name_map.Remove(Shell); Shell = IntPtr.Zero; } - - return; } } diff --git a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs index 1973adf48f..35fc616a96 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs @@ -43,7 +43,7 @@ namespace OpenSim.Region.Physics.POSPlugin private PhysicsVector _acceleration; private PhysicsVector m_rotationalVelocity = PhysicsVector.Zero; private bool flying; - private bool iscolliding; + private bool isColliding; public POSCharacter() { @@ -116,8 +116,8 @@ namespace OpenSim.Region.Physics.POSPlugin public override bool IsColliding { - get { return iscolliding; } - set { iscolliding = value; } + get { return isColliding; } + set { isColliding = value; } } public override bool CollidingGround diff --git a/OpenSim/Region/Physics/POSPlugin/POSScene.cs b/OpenSim/Region/Physics/POSPlugin/POSScene.cs index 5361be09c6..fa8cc70803 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSScene.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSScene.cs @@ -113,20 +113,16 @@ namespace OpenSim.Region.Physics.POSPlugin c.Position.Z - p.Position.Z) * Quaternion.Inverse(p.Orientation); Vector3 avatarSize = new Vector3(c.Size.X, c.Size.Y, c.Size.Z) * Quaternion.Inverse(p.Orientation); - if (Math.Abs(rotatedPos.X) >= (p.Size.X*0.5 + Math.Abs(avatarSize.X)) || - Math.Abs(rotatedPos.Y) >= (p.Size.Y*0.5 + Math.Abs(avatarSize.Y)) || - Math.Abs(rotatedPos.Z) >= (p.Size.Z*0.5 + Math.Abs(avatarSize.Z))) - { - return false; - } - return true; + return (Math.Abs(rotatedPos.X) < (p.Size.X*0.5 + Math.Abs(avatarSize.X)) && + Math.Abs(rotatedPos.Y) < (p.Size.Y*0.5 + Math.Abs(avatarSize.Y)) && + Math.Abs(rotatedPos.Z) < (p.Size.Z*0.5 + Math.Abs(avatarSize.Z))); } private bool isCollidingWithPrim(POSCharacter c) { - for (int i = 0; i < _prims.Count; ++i) + foreach (POSPrim p in _prims) { - if (isColliding(c, _prims[i])) + if (isColliding(c, p)) { return true; } From 02f937b0dcc3150774e423478377246f7b4744bf Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Wed, 26 Aug 2009 13:03:18 +0900 Subject: [PATCH 31/34] Fix some compile warnings. --- OpenSim/ConsoleClient/ConsoleClient.cs | 4 ---- OpenSim/ConsoleClient/Requester.cs | 2 -- OpenSim/Framework/Console/RemoteConsole.cs | 2 -- 3 files changed, 8 deletions(-) diff --git a/OpenSim/ConsoleClient/ConsoleClient.cs b/OpenSim/ConsoleClient/ConsoleClient.cs index 319584fdf7..783adef559 100644 --- a/OpenSim/ConsoleClient/ConsoleClient.cs +++ b/OpenSim/ConsoleClient/ConsoleClient.cs @@ -39,10 +39,6 @@ namespace OpenSim.ConsoleClient { public class OpenSimConsoleClient { - private static readonly ILog m_log = - LogManager.GetLogger( - MethodBase.GetCurrentMethod().DeclaringType); - protected static ServicesServerBase m_Server = null; private static string m_Host; private static int m_Port; diff --git a/OpenSim/ConsoleClient/Requester.cs b/OpenSim/ConsoleClient/Requester.cs index af7860d457..fefe9690f1 100644 --- a/OpenSim/ConsoleClient/Requester.cs +++ b/OpenSim/ConsoleClient/Requester.cs @@ -40,8 +40,6 @@ namespace OpenSim.ConsoleClient public class Requester { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public static void MakeRequest(string requestUrl, string data, ReplyDelegate action) { diff --git a/OpenSim/Framework/Console/RemoteConsole.cs b/OpenSim/Framework/Console/RemoteConsole.cs index 1810614409..67bff4c8de 100644 --- a/OpenSim/Framework/Console/RemoteConsole.cs +++ b/OpenSim/Framework/Console/RemoteConsole.cs @@ -50,8 +50,6 @@ namespace OpenSim.Framework.Console // public class RemoteConsole : CommandConsole { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private IHttpServer m_Server = null; private IConfigSource m_Config = null; From cf2d1b5c1007958193bb1d84492e0d2714403ebb Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Wed, 26 Aug 2009 13:59:53 +0900 Subject: [PATCH 32/34] Add copy constructor to PhysicsVector. --- OpenSim/Region/Physics/Manager/PhysicsVector.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OpenSim/Region/Physics/Manager/PhysicsVector.cs b/OpenSim/Region/Physics/Manager/PhysicsVector.cs index c275021969..d6f4d0d226 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsVector.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsVector.cs @@ -46,12 +46,17 @@ namespace OpenSim.Region.Physics.Manager Z = z; } + public PhysicsVector(PhysicsVector pv) : this(pv.X, pv.Y, pv.Z) + { + } + public void setValues(float x, float y, float z) { X = x; Y = y; Z = z; } + public static readonly PhysicsVector Zero = new PhysicsVector(0f, 0f, 0f); public override string ToString() From 8a9d1689284a00f27a38ae45535b8b68bf814852 Mon Sep 17 00:00:00 2001 From: Melanie Date: Wed, 26 Aug 2009 14:46:10 +0100 Subject: [PATCH 33/34] Add try/catch around EQ request processing Fixes Mantis #4061 --- .../HttpServer/PollServiceWorkerThread.cs | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs index d8cbeac200..41fb37651d 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs @@ -59,6 +59,8 @@ using System.IO; using System.Text; using HttpServer; using OpenMetaverse; +using System.Reflection; +using log4net; namespace OpenSim.Framework.Servers.HttpServer { @@ -66,6 +68,10 @@ namespace OpenSim.Framework.Servers.HttpServer public class PollServiceWorkerThread { + private static readonly ILog m_log = + LogManager.GetLogger( + MethodBase.GetCurrentMethod().DeclaringType); + public event ReQueuePollServiceItem ReQueue; private readonly BaseHttpServer m_server; @@ -92,31 +98,36 @@ namespace OpenSim.Framework.Servers.HttpServer while (m_running) { PollServiceHttpRequest req = m_request.Dequeue(); - if (req.PollServiceArgs.HasEvents(req.PollServiceArgs.Id)) + try { - StreamReader str = new StreamReader(req.Request.Body); - - Hashtable responsedata = req.PollServiceArgs.GetEvents(req.PollServiceArgs.Id, str.ReadToEnd()); - m_server.DoHTTPGruntWork(responsedata, - new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request),req.HttpContext)); - } - else - { - if ((Environment.TickCount - req.RequestTime) > m_timeout) + if (req.PollServiceArgs.HasEvents(req.PollServiceArgs.Id)) { - m_server.DoHTTPGruntWork(req.PollServiceArgs.NoEvents(), + StreamReader str = new StreamReader(req.Request.Body); + + Hashtable responsedata = req.PollServiceArgs.GetEvents(req.PollServiceArgs.Id, str.ReadToEnd()); + m_server.DoHTTPGruntWork(responsedata, new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request),req.HttpContext)); } else { - ReQueuePollServiceItem reQueueItem = ReQueue; - if (reQueueItem != null) - reQueueItem(req); + if ((Environment.TickCount - req.RequestTime) > m_timeout) + { + m_server.DoHTTPGruntWork(req.PollServiceArgs.NoEvents(), + new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request),req.HttpContext)); + } + else + { + ReQueuePollServiceItem reQueueItem = ReQueue; + if (reQueueItem != null) + reQueueItem(req); + } } } + catch (Exception e) + { + m_log.ErrorFormat("Exception in poll service thread: " + e.ToString()); + } } - - } internal void Enqueue(PollServiceHttpRequest pPollServiceHttpRequest) From b7041d7adf159cd1fcaafb1976b973cc873bac8e Mon Sep 17 00:00:00 2001 From: Melanie Date: Wed, 26 Aug 2009 15:26:00 +0100 Subject: [PATCH 34/34] Add reference to OpenMetaverse.dll to UserServer.Modules to make MSVS happy --- prebuild.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/prebuild.xml b/prebuild.xml index c4d81cce0e..4dbb81c96a 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1014,6 +1014,7 @@ +