diff options
Diffstat (limited to 'OpenSim/Region/Communications/OGS1')
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1UserServices.cs | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs index ba37e61..3879910 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1UserServices.cs | |||
@@ -739,19 +739,23 @@ namespace OpenSim.Region.Communications.OGS1 | |||
739 | map["uuids"] = list; | 739 | map["uuids"] = list; |
740 | 740 | ||
741 | map["recv_key"] = m_parent.NetworkServersInfo.UserRecvKey; | 741 | map["recv_key"] = m_parent.NetworkServersInfo.UserRecvKey; |
742 | map["send_key"] = m_parent.NetworkServersInfo.UserRecvKey; | 742 | map["send_key"] = m_parent.NetworkServersInfo.UserSendKey; |
743 | 743 | ||
744 | parameters.Add(map); | 744 | parameters.Add(map); |
745 | 745 | ||
746 | try { | 746 | try { |
747 | XmlRpcRequest req = new XmlRpcRequest("get_presence_info_bulk", parameters); | 747 | XmlRpcRequest req = new XmlRpcRequest("get_presence_info_bulk", parameters); |
748 | XmlRpcResponse resp = req.Send(m_parent.NetworkServersInfo.MessagingURL, 8000); | 748 | XmlRpcResponse resp = req.Send(m_parent.NetworkServersInfo.MessagingURL, 8000); |
749 | Hashtable respData = (Hashtable) resp.Value; | 749 | Hashtable respData = resp != null ? (Hashtable) resp.Value : null; |
750 | 750 | ||
751 | if (respData.ContainsKey("faultMessage")) | 751 | if (respData == null || respData.ContainsKey("faultMessage")) |
752 | { | ||
753 | m_log.WarnFormat("[OGS1 USER SERVICES]: Contacting MessagingServer about user-regions resulted in error: {0}", | ||
754 | respData == null ? "<unknown error>" : respData["faultMessage"]); | ||
755 | } | ||
756 | else if(!respData.ContainsKey("count")) | ||
752 | { | 757 | { |
753 | m_log.WarnFormat("[OGS1 USER SERVICES]: Contacting MessageServer about user-regions resulted in error: {0}", | 758 | m_log.WarnFormat("[OGS1 USER SERVICES]: Wrong format in response for MessagingServer request get_presence_info_bulk: missing 'count' field"); |
754 | respData["faultMessage"]); | ||
755 | } | 759 | } |
756 | else | 760 | else |
757 | { | 761 | { |
@@ -759,14 +763,21 @@ namespace OpenSim.Region.Communications.OGS1 | |||
759 | m_log.DebugFormat("[OGS1 USER SERVICES]: Request returned {0} results.", count); | 763 | m_log.DebugFormat("[OGS1 USER SERVICES]: Request returned {0} results.", count); |
760 | for (int i = 0; i < count; ++i) | 764 | for (int i = 0; i < count; ++i) |
761 | { | 765 | { |
762 | UUID uuid; | 766 | if(respData.ContainsKey("uuid_" + i) && respData.ContainsKey("isOnline_" + i) && respData.ContainsKey("regionHandle_" + i)) |
763 | if (UUID.TryParse((string)respData["uuid_" + i], out uuid)) | 767 | { |
768 | UUID uuid; | ||
769 | if (UUID.TryParse((string)respData["uuid_" + i], out uuid)) | ||
770 | { | ||
771 | FriendRegionInfo info = new FriendRegionInfo(); | ||
772 | info.isOnline = (bool)respData["isOnline_" + i]; | ||
773 | if (info.isOnline) info.regionHandle = Convert.ToUInt64(respData["regionHandle_" + i]); | ||
774 | |||
775 | result.Add(uuid, info); | ||
776 | } | ||
777 | } | ||
778 | else | ||
764 | { | 779 | { |
765 | FriendRegionInfo info = new FriendRegionInfo(); | 780 | m_log.WarnFormat("[OGS1 USER SERVICES]: Response to get_presence_info_bulk contained an error in entry {0}", i); |
766 | info.isOnline = (bool)respData["isOnline_" + i]; | ||
767 | if (info.isOnline) info.regionHandle = Convert.ToUInt64(respData["regionHandle_" + i]); | ||
768 | |||
769 | result.Add(uuid, info); | ||
770 | } | 781 | } |
771 | } | 782 | } |
772 | } | 783 | } |