diff options
author | Diva Canto | 2011-05-26 10:04:48 -0700 |
---|---|---|
committer | Diva Canto | 2011-05-26 10:04:48 -0700 |
commit | 0c58a9e68074f3593920dc9f2356bbed96416497 (patch) | |
tree | 6bccb313c233ab6486195e8a3663cfa1d30c41b9 /OpenSim/Services | |
parent | HG: Renamed, shuffled some interfaces around. Move them all to IHypergridServ... (diff) | |
download | opensim-SC_OLD-0c58a9e68074f3593920dc9f2356bbed96416497.zip opensim-SC_OLD-0c58a9e68074f3593920dc9f2356bbed96416497.tar.gz opensim-SC_OLD-0c58a9e68074f3593920dc9f2356bbed96416497.tar.bz2 opensim-SC_OLD-0c58a9e68074f3593920dc9f2356bbed96416497.tar.xz |
HG IM in grid mode working fairly well. Unknown target user references looked back in source user's User Agent service.
Diffstat (limited to 'OpenSim/Services')
5 files changed, 103 insertions, 8 deletions
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs index 50036b3..1c01563 100644 --- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | |||
@@ -576,6 +576,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
576 | XmlRpcResponse response = null; | 576 | XmlRpcResponse response = null; |
577 | try | 577 | try |
578 | { | 578 | { |
579 | m_log.DebugFormat("[XXX]: Calling locate_user on {0}", m_ServerURL); | ||
579 | response = request.Send(m_ServerURL, 10000); | 580 | response = request.Send(m_ServerURL, 10000); |
580 | } | 581 | } |
581 | catch (Exception e) | 582 | catch (Exception e) |
@@ -618,6 +619,66 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
618 | return url; | 619 | return url; |
619 | } | 620 | } |
620 | 621 | ||
622 | public string GetUUI(UUID userID, UUID targetUserID) | ||
623 | { | ||
624 | Hashtable hash = new Hashtable(); | ||
625 | hash["userID"] = userID.ToString(); | ||
626 | hash["targetUserID"] = targetUserID.ToString(); | ||
627 | |||
628 | IList paramList = new ArrayList(); | ||
629 | paramList.Add(hash); | ||
630 | |||
631 | XmlRpcRequest request = new XmlRpcRequest("get_uui", paramList); | ||
632 | string reason = string.Empty; | ||
633 | |||
634 | // Send and get reply | ||
635 | string uui = string.Empty; | ||
636 | XmlRpcResponse response = null; | ||
637 | try | ||
638 | { | ||
639 | m_log.DebugFormat("[XXX]: Calling get_uuid on {0}", m_ServerURL); | ||
640 | response = request.Send(m_ServerURL, 10000); | ||
641 | } | ||
642 | catch (Exception e) | ||
643 | { | ||
644 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0}", m_ServerURL); | ||
645 | reason = "Exception: " + e.Message; | ||
646 | return uui; | ||
647 | } | ||
648 | |||
649 | if (response.IsFault) | ||
650 | { | ||
651 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString); | ||
652 | reason = "XMLRPC Fault"; | ||
653 | return uui; | ||
654 | } | ||
655 | |||
656 | hash = (Hashtable)response.Value; | ||
657 | //foreach (Object o in hash) | ||
658 | // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value); | ||
659 | try | ||
660 | { | ||
661 | if (hash == null) | ||
662 | { | ||
663 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetUUI Got null response from {0}! THIS IS BAAAAD", m_ServerURL); | ||
664 | reason = "Internal error 1"; | ||
665 | return uui; | ||
666 | } | ||
667 | |||
668 | // Here's the actual response | ||
669 | if (hash.ContainsKey("UUI")) | ||
670 | uui = hash["UUI"].ToString(); | ||
671 | |||
672 | } | ||
673 | catch (Exception e) | ||
674 | { | ||
675 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on LocateUser response."); | ||
676 | reason = "Exception: " + e.Message; | ||
677 | } | ||
678 | |||
679 | return uui; | ||
680 | } | ||
681 | |||
621 | private bool GetBoolResponse(XmlRpcRequest request, out string reason) | 682 | private bool GetBoolResponse(XmlRpcRequest request, out string reason) |
622 | { | 683 | { |
623 | //m_log.Debug("[USER AGENT CONNECTOR]: GetBoolResponse from/to " + m_ServerURL); | 684 | //m_log.Debug("[USER AGENT CONNECTOR]: GetBoolResponse from/to " + m_ServerURL); |
diff --git a/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs b/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs index 65ee7c7..2a922de 100644 --- a/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs +++ b/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs | |||
@@ -80,6 +80,7 @@ namespace OpenSim.Services.Connectors.InstantMessage | |||
80 | } | 80 | } |
81 | else | 81 | else |
82 | { | 82 | { |
83 | m_log.DebugFormat("[GRID INSTANT MESSAGE]: No response from {0}", url); | ||
83 | return false; | 84 | return false; |
84 | } | 85 | } |
85 | } | 86 | } |
diff --git a/OpenSim/Services/HypergridService/HGInstantMessageService.cs b/OpenSim/Services/HypergridService/HGInstantMessageService.cs index 6178ca1..ca0fd7f 100644 --- a/OpenSim/Services/HypergridService/HGInstantMessageService.cs +++ b/OpenSim/Services/HypergridService/HGInstantMessageService.cs | |||
@@ -64,8 +64,8 @@ namespace OpenSim.Services.HypergridService | |||
64 | 64 | ||
65 | protected static IInstantMessageSimConnector m_IMSimConnector; | 65 | protected static IInstantMessageSimConnector m_IMSimConnector; |
66 | 66 | ||
67 | protected Dictionary<UUID, object> m_UserLocationMap = new Dictionary<UUID, object>(); | 67 | protected static Dictionary<UUID, object> m_UserLocationMap = new Dictionary<UUID, object>(); |
68 | private ExpiringCache<UUID, GridRegion> m_RegionCache; | 68 | private static ExpiringCache<UUID, GridRegion> m_RegionCache; |
69 | 69 | ||
70 | public HGInstantMessageService(IConfigSource config) | 70 | public HGInstantMessageService(IConfigSource config) |
71 | : this(config, null) | 71 | : this(config, null) |
@@ -155,6 +155,8 @@ namespace OpenSim.Services.HypergridService | |||
155 | if (!firstTime) | 155 | if (!firstTime) |
156 | { | 156 | { |
157 | lookupAgent = true; | 157 | lookupAgent = true; |
158 | upd = null; | ||
159 | url = string.Empty; | ||
158 | } | 160 | } |
159 | } | 161 | } |
160 | else | 162 | else |
@@ -168,7 +170,6 @@ namespace OpenSim.Services.HypergridService | |||
168 | // Are we needing to look-up an agent? | 170 | // Are we needing to look-up an agent? |
169 | if (lookupAgent) | 171 | if (lookupAgent) |
170 | { | 172 | { |
171 | bool isPresent = false; | ||
172 | // Non-cached user agent lookup. | 173 | // Non-cached user agent lookup. |
173 | PresenceInfo[] presences = m_PresenceService.GetAgents(new string[] { toAgentID.ToString() }); | 174 | PresenceInfo[] presences = m_PresenceService.GetAgents(new string[] { toAgentID.ToString() }); |
174 | if (presences != null && presences.Length > 0) | 175 | if (presences != null && presences.Length > 0) |
@@ -177,17 +178,17 @@ namespace OpenSim.Services.HypergridService | |||
177 | { | 178 | { |
178 | if (p.RegionID != UUID.Zero) | 179 | if (p.RegionID != UUID.Zero) |
179 | { | 180 | { |
181 | m_log.DebugFormat("[XXX]: Found presence in {0}", p.RegionID); | ||
180 | upd = p; | 182 | upd = p; |
181 | break; | 183 | break; |
182 | } | 184 | } |
183 | else | ||
184 | isPresent = true; | ||
185 | } | 185 | } |
186 | } | 186 | } |
187 | 187 | ||
188 | if (upd == null && isPresent) | 188 | if (upd == null) |
189 | { | 189 | { |
190 | // Let's check with the UAS if the user is elsewhere | 190 | // Let's check with the UAS if the user is elsewhere |
191 | m_log.DebugFormat("[HG IM SERVICE]: User is not present. Checking location with User Agent service"); | ||
191 | url = m_UserAgentService.LocateUser(toAgentID); | 192 | url = m_UserAgentService.LocateUser(toAgentID); |
192 | } | 193 | } |
193 | 194 | ||
@@ -197,10 +198,10 @@ namespace OpenSim.Services.HypergridService | |||
197 | // This is one way to end the recursive loop | 198 | // This is one way to end the recursive loop |
198 | // | 199 | // |
199 | if (!firstTime && ((previousLocation is PresenceInfo && upd != null && upd.RegionID == ((PresenceInfo)previousLocation).RegionID) || | 200 | if (!firstTime && ((previousLocation is PresenceInfo && upd != null && upd.RegionID == ((PresenceInfo)previousLocation).RegionID) || |
200 | (previousLocation is string && previousLocation.Equals(url)))) | 201 | (previousLocation is string && upd == null && previousLocation.Equals(url)))) |
201 | { | 202 | { |
202 | // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); | 203 | // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); |
203 | m_log.DebugFormat("[XXX] Fail 1 {0} {1}", previousLocation, url); | 204 | m_log.DebugFormat("[HG IM SERVICE]: Fail 2 {0} {1}", previousLocation, url); |
204 | 205 | ||
205 | return false; | 206 | return false; |
206 | } | 207 | } |
@@ -242,9 +243,14 @@ namespace OpenSim.Services.HypergridService | |||
242 | } | 243 | } |
243 | 244 | ||
244 | if (reginfo != null) | 245 | if (reginfo != null) |
246 | { | ||
245 | imresult = InstantMessageServiceConnector.SendInstantMessage(reginfo.ServerURI, im); | 247 | imresult = InstantMessageServiceConnector.SendInstantMessage(reginfo.ServerURI, im); |
248 | } | ||
246 | else | 249 | else |
250 | { | ||
251 | m_log.DebugFormat("[HG IM SERVICE]: Failed to deliver message to {0}", reginfo.ServerURI); | ||
247 | return false; | 252 | return false; |
253 | } | ||
248 | 254 | ||
249 | if (imresult) | 255 | if (imresult) |
250 | { | 256 | { |
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index 59ad043..387547e 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs | |||
@@ -485,6 +485,30 @@ namespace OpenSim.Services.HypergridService | |||
485 | 485 | ||
486 | return string.Empty; | 486 | return string.Empty; |
487 | } | 487 | } |
488 | |||
489 | public string GetUUI(UUID userID, UUID targetUserID) | ||
490 | { | ||
491 | // Let's see if it's a local user | ||
492 | UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, targetUserID); | ||
493 | if (account != null) | ||
494 | return targetUserID.ToString() + ";" + m_GridName + ";" + account.FirstName + " " + account.LastName ; | ||
495 | |||
496 | // Let's try the list of friends | ||
497 | FriendInfo[] friends = m_FriendsService.GetFriends(userID); | ||
498 | if (friends != null && friends.Length > 0) | ||
499 | { | ||
500 | foreach (FriendInfo f in friends) | ||
501 | if (f.Friend.StartsWith(targetUserID.ToString())) | ||
502 | { | ||
503 | // Let's remove the secret | ||
504 | UUID id; string tmp = string.Empty, secret = string.Empty; | ||
505 | if (Util.ParseUniversalUserIdentifier(f.Friend, out id, out tmp, out tmp, out tmp, out secret)) | ||
506 | return f.Friend.Replace(secret, "0"); | ||
507 | } | ||
508 | } | ||
509 | |||
510 | return string.Empty; | ||
511 | } | ||
488 | } | 512 | } |
489 | 513 | ||
490 | class TravelingAgentInfo | 514 | class TravelingAgentInfo |
diff --git a/OpenSim/Services/Interfaces/IHypergridServices.cs b/OpenSim/Services/Interfaces/IHypergridServices.cs index 3ab6d4f..753c205 100644 --- a/OpenSim/Services/Interfaces/IHypergridServices.cs +++ b/OpenSim/Services/Interfaces/IHypergridServices.cs | |||
@@ -57,6 +57,9 @@ namespace OpenSim.Services.Interfaces | |||
57 | Dictionary<string, object> GetServerURLs(UUID userID); | 57 | Dictionary<string, object> GetServerURLs(UUID userID); |
58 | 58 | ||
59 | string LocateUser(UUID userID); | 59 | string LocateUser(UUID userID); |
60 | // Tries to get the universal user identifier for the targetUserId | ||
61 | // on behalf of the userID | ||
62 | string GetUUI(UUID userID, UUID targetUserID); | ||
60 | 63 | ||
61 | void StatusNotification(List<string> friends, UUID userID, bool online); | 64 | void StatusNotification(List<string> friends, UUID userID, bool online); |
62 | List<UUID> GetOnlineFriends(UUID userID, List<string> friends); | 65 | List<UUID> GetOnlineFriends(UUID userID, List<string> friends); |