From a64d6eccd06abf43c142296662e8e65f8886cf9b Mon Sep 17 00:00:00 2001 From: Homer Horwitz Date: Mon, 3 Nov 2008 19:13:42 +0000 Subject: [PATCH] Add a bit more error-checking to GetFriendRegionInfos. --- .../Communications/OGS1/OGS1UserServices.cs | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs index ba37e612c8..3879910afc 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs @@ -739,19 +739,23 @@ namespace OpenSim.Region.Communications.OGS1 map["uuids"] = list; map["recv_key"] = m_parent.NetworkServersInfo.UserRecvKey; - map["send_key"] = m_parent.NetworkServersInfo.UserRecvKey; + map["send_key"] = m_parent.NetworkServersInfo.UserSendKey; parameters.Add(map); try { XmlRpcRequest req = new XmlRpcRequest("get_presence_info_bulk", parameters); XmlRpcResponse resp = req.Send(m_parent.NetworkServersInfo.MessagingURL, 8000); - Hashtable respData = (Hashtable) resp.Value; - - if (respData.ContainsKey("faultMessage")) + Hashtable respData = resp != null ? (Hashtable) resp.Value : null; + + if (respData == null || respData.ContainsKey("faultMessage")) { - m_log.WarnFormat("[OGS1 USER SERVICES]: Contacting MessageServer about user-regions resulted in error: {0}", - respData["faultMessage"]); + m_log.WarnFormat("[OGS1 USER SERVICES]: Contacting MessagingServer about user-regions resulted in error: {0}", + respData == null ? "" : respData["faultMessage"]); + } + else if(!respData.ContainsKey("count")) + { + m_log.WarnFormat("[OGS1 USER SERVICES]: Wrong format in response for MessagingServer request get_presence_info_bulk: missing 'count' field"); } else { @@ -759,14 +763,21 @@ namespace OpenSim.Region.Communications.OGS1 m_log.DebugFormat("[OGS1 USER SERVICES]: Request returned {0} results.", count); for (int i = 0; i < count; ++i) { - UUID uuid; - if (UUID.TryParse((string)respData["uuid_" + i], out uuid)) + if(respData.ContainsKey("uuid_" + i) && respData.ContainsKey("isOnline_" + i) && respData.ContainsKey("regionHandle_" + i)) { - FriendRegionInfo info = new FriendRegionInfo(); - info.isOnline = (bool)respData["isOnline_" + i]; - if (info.isOnline) info.regionHandle = Convert.ToUInt64(respData["regionHandle_" + i]); - - result.Add(uuid, info); + UUID uuid; + if (UUID.TryParse((string)respData["uuid_" + i], out uuid)) + { + FriendRegionInfo info = new FriendRegionInfo(); + info.isOnline = (bool)respData["isOnline_" + i]; + if (info.isOnline) info.regionHandle = Convert.ToUInt64(respData["regionHandle_" + i]); + + result.Add(uuid, info); + } + } + else + { + m_log.WarnFormat("[OGS1 USER SERVICES]: Response to get_presence_info_bulk contained an error in entry {0}", i); } } }