From 80118ac0575ad6816f65ed7436ec4e0b384f231d Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 21 Nov 2014 04:00:52 +0100 Subject: [PATCH 1/2] Remove braindead "fix" that messed up intersim scripted giving. --- .../Transfer/InventoryTransferModule.cs | 11 ----------- .../Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs | 17 +++++++++++++++++ .../Shared/Api/Implementation/LSL_Api.cs | 15 ++++++++++++++- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 03aaaace26..3815c71f88 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs @@ -471,17 +471,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer /// private void OnGridInstantMessage(GridInstantMessage im) { - // Check if it's a type of message that we should handle - if (!((im.dialog == (byte) InstantMessageDialog.InventoryOffered) - || (im.dialog == (byte) InstantMessageDialog.InventoryAccepted) - || (im.dialog == (byte) InstantMessageDialog.InventoryDeclined) - || (im.dialog == (byte) InstantMessageDialog.TaskInventoryDeclined))) - return; - - m_log.DebugFormat( - "[INVENTORY TRANSFER]: {0} IM type received from grid. From={1} ({2}), To={3}", - (InstantMessageDialog)im.dialog, im.fromAgentID, im.fromAgentName, im.toAgentID); - // Check if this is ours to handle // Scene scene = FindClientScene(new UUID(im.toAgentID)); diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs index 6ee15ad9f9..e6b14c69e6 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs @@ -121,6 +121,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice public void Initialise(IConfigSource config) { + MainConsole.Instance.Commands.AddCommand("vivox", false, "vivox debug", "vivox debug |", "Set vivox debugging", HandleDebug); m_config = config.Configs["VivoxVoice"]; @@ -1335,5 +1336,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice result = String.Empty; return false; } + + private void HandleDebug(string module, string[] cmd) + { + if (cmd.Length < 3) + { + MainConsole.Instance.Output("Error: missing on/off flag"); + return; + } + + if (cmd[2] == "on") + m_dumpXml = true; + else if (cmd[2] == "off") + m_dumpXml = false; + else + MainConsole.Instance.Output("Error: only on and off are supported"); + } } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 5141e0ed6e..aaf1170a16 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -8540,6 +8540,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_String llXorBase64Strings(string str1, string str2) { + int padding = 0; + string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ScriptSleep(300); @@ -8583,6 +8585,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // than the decoded length of s1, simply perform a normal // decode and XOR // + /* if (data2.Length >= data1.Length) { for (int pos = 0 ; pos < data1.Length ; pos++ ) @@ -8590,10 +8593,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return Convert.ToBase64String(data1); } + */ // Remove padding while (str1.EndsWith("=")) + { str1 = str1.Substring(0, str1.Length - 1); + padding++; + } while (str2.EndsWith("=")) str2 = str2.Substring(0, str2.Length - 1); @@ -8621,7 +8628,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api for (int pos = 0 ; pos < d1.Length ; pos++) output += b64[d1[pos] ^ d2[pos % d2.Length]]; - while (output.Length % 3 > 0) + // Here's a funny thing: LL blithely violate the base64 + // standard pretty much everywhere. Here, padding is + // added only if the first input string had it, rather + // than when the data actually needs it. This can result + // in invalid base64 being returned. Go figure. + + while (padding-- > 0) output += "="; return output; From 6a849e8cdfaa881cea18d10bcffc89bbe4414f74 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 21 Nov 2014 04:41:45 +0100 Subject: [PATCH 2/2] Add an XmlRpc method to get a region's root agent count. This is intended to let us restart grid regions when the last agent leaves. --- .../RemoteController/RemoteAdminPlugin.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 4c05ec8efc..eba6a9c2f7 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -170,6 +170,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch); availableMethods["admin_refresh_map"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshMap); availableMethods["admin_get_opensim_version"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetOpenSimVersion); + availableMethods["admin_get_agent_count"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcGetAgentCount); // Either enable full remote functionality or just selected features string enabledMethods = m_config.GetString("enabled_methods", "all"); @@ -2266,6 +2267,31 @@ namespace OpenSim.ApplicationPlugins.RemoteController m_log.Info("[RADMIN]: Get OpenSim Version Request complete"); } + private void XmlRpcGetAgentCount(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) + { + m_log.Info("[RADMIN]: Received Get Agent Count Request"); + + Hashtable responseData = (Hashtable)response.Value; + Hashtable requestData = (Hashtable)request.Params[0]; + + CheckRegionParams(requestData, responseData); + + Scene scene = null; + GetSceneFromRegionParams(requestData, responseData, out scene); + + if (scene == null) + { + responseData["success"] = false; + } + else + { + responseData["count"] = scene.GetRootAgentCount(); + responseData["success"] = true; + } + + m_log.Info("[RADMIN]: Get Agent Count Request complete"); + } + /// /// Parse a float with the given parameter name from a request data hash table. ///