diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar')
4 files changed, 91 insertions, 98 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs index 53d2cef..f8e3d59 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs | |||
@@ -121,6 +121,7 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps | |||
121 | UUID textureID; | 121 | UUID textureID; |
122 | if (!String.IsNullOrEmpty(textureStr) && UUID.TryParse(textureStr, out textureID)) | 122 | if (!String.IsNullOrEmpty(textureStr) && UUID.TryParse(textureStr, out textureID)) |
123 | { | 123 | { |
124 | //m_log.DebugFormat("[GETTEXTURE]: {0}", textureID); | ||
124 | AssetBase texture; | 125 | AssetBase texture; |
125 | 126 | ||
126 | if (!String.IsNullOrEmpty(REDIRECT_URL)) | 127 | if (!String.IsNullOrEmpty(REDIRECT_URL)) |
@@ -167,6 +168,7 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps | |||
167 | private void SendTexture(OSHttpRequest request, OSHttpResponse response, AssetBase texture) | 168 | private void SendTexture(OSHttpRequest request, OSHttpResponse response, AssetBase texture) |
168 | { | 169 | { |
169 | string range = request.Headers.GetOne("Range"); | 170 | string range = request.Headers.GetOne("Range"); |
171 | //m_log.DebugFormat("[GETTEXTURE]: Range {0}", range); | ||
170 | if (!String.IsNullOrEmpty(range)) | 172 | if (!String.IsNullOrEmpty(range)) |
171 | { | 173 | { |
172 | // Range request | 174 | // Range request |
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index 57dde76..8f84d81 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -345,8 +345,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
345 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, new UUID(im.fromAgentID)); | 345 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, new UUID(im.fromAgentID)); |
346 | im.fromAgentName = account.FirstName + " " + account.LastName; | 346 | im.fromAgentName = account.FirstName + " " + account.LastName; |
347 | 347 | ||
348 | PresenceInfo presence = null; | ||
348 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid }); | 349 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid }); |
349 | PresenceInfo presence = PresenceInfo.GetOnlinePresence(presences); | 350 | if (presences != null && presences.Length > 0) |
351 | presence = presences[0]; | ||
350 | if (presence != null) | 352 | if (presence != null) |
351 | im.offline = 0; | 353 | im.offline = 0; |
352 | 354 | ||
@@ -380,13 +382,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
380 | PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); | 382 | PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); |
381 | 383 | ||
382 | foreach (PresenceInfo pi in presence) | 384 | foreach (PresenceInfo pi in presence) |
383 | { | 385 | online.Add(new UUID(pi.UserID)); |
384 | if (pi.Online) | 386 | //m_log.DebugFormat("[XXX] {0} friend online {1}", userID, pi.UserID); |
385 | { | ||
386 | online.Add(new UUID(pi.UserID)); | ||
387 | //m_log.DebugFormat("[XXX] {0} friend online {1}", userID, pi.UserID); | ||
388 | } | ||
389 | } | ||
390 | 387 | ||
391 | return online; | 388 | return online; |
392 | } | 389 | } |
@@ -495,11 +492,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
495 | 492 | ||
496 | // The friend is not here [as root]. Let's forward. | 493 | // The friend is not here [as root]. Let's forward. |
497 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 494 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); |
498 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | 495 | if (friendSessions != null && friendSessions.Length > 0) |
499 | if (friendSession != null) | ||
500 | { | 496 | { |
501 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 497 | PresenceInfo friendSession = friendSessions[0]; |
502 | m_FriendsSimConnector.StatusNotify(region, userID, friendID, online); | 498 | if (friendSession != null) |
499 | { | ||
500 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
501 | m_FriendsSimConnector.StatusNotify(region, userID, friendID, online); | ||
502 | } | ||
503 | } | 503 | } |
504 | 504 | ||
505 | // Friend is not online. Ignore. | 505 | // Friend is not online. Ignore. |
@@ -537,13 +537,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
537 | 537 | ||
538 | // The prospective friend is not here [as root]. Let's forward. | 538 | // The prospective friend is not here [as root]. Let's forward. |
539 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 539 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); |
540 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | 540 | if (friendSessions != null && friendSessions.Length > 0) |
541 | if (friendSession != null) | ||
542 | { | 541 | { |
543 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 542 | PresenceInfo friendSession = friendSessions[0]; |
544 | m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message); | 543 | if (friendSession != null) |
544 | { | ||
545 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
546 | m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message); | ||
547 | } | ||
545 | } | 548 | } |
546 | |||
547 | // If the prospective friend is not online, he'll get the message upon login. | 549 | // If the prospective friend is not online, he'll get the message upon login. |
548 | } | 550 | } |
549 | 551 | ||
@@ -569,14 +571,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
569 | 571 | ||
570 | // The friend is not here | 572 | // The friend is not here |
571 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 573 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); |
572 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | 574 | if (friendSessions != null && friendSessions.Length > 0) |
573 | if (friendSession != null) | ||
574 | { | 575 | { |
575 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 576 | PresenceInfo friendSession = friendSessions[0]; |
576 | m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID); | 577 | if (friendSession != null) |
577 | client.SendAgentOnline(new UUID[] { friendID }); | 578 | { |
579 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
580 | m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID); | ||
581 | client.SendAgentOnline(new UUID[] { friendID }); | ||
582 | } | ||
578 | } | 583 | } |
579 | |||
580 | } | 584 | } |
581 | 585 | ||
582 | private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) | 586 | private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) |
@@ -595,11 +599,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
595 | return; | 599 | return; |
596 | 600 | ||
597 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 601 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); |
598 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | 602 | if (friendSessions != null && friendSessions.Length > 0) |
599 | if (friendSession != null) | ||
600 | { | 603 | { |
601 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 604 | PresenceInfo friendSession = friendSessions[0]; |
602 | m_FriendsSimConnector.FriendshipDenied(region, agentID, client.Name, friendID); | 605 | if (friendSession != null) |
606 | { | ||
607 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
608 | m_FriendsSimConnector.FriendshipDenied(region, agentID, client.Name, friendID); | ||
609 | } | ||
603 | } | 610 | } |
604 | } | 611 | } |
605 | 612 | ||
@@ -622,11 +629,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
622 | return; | 629 | return; |
623 | 630 | ||
624 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() }); | 631 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() }); |
625 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | 632 | if (friendSessions != null && friendSessions.Length > 0) |
626 | if (friendSession != null) | ||
627 | { | 633 | { |
628 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 634 | PresenceInfo friendSession = friendSessions[0]; |
629 | m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID); | 635 | if (friendSession != null) |
636 | { | ||
637 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
638 | m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID); | ||
639 | } | ||
630 | } | 640 | } |
631 | } | 641 | } |
632 | 642 | ||
@@ -664,13 +674,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
664 | return; | 674 | return; |
665 | 675 | ||
666 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { target.ToString() }); | 676 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { target.ToString() }); |
667 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | 677 | if (friendSessions != null && friendSessions.Length > 0) |
668 | if (friendSession != null) | ||
669 | { | 678 | { |
670 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 679 | PresenceInfo friendSession = friendSessions[0]; |
671 | // TODO: You might want to send the delta to save the lookup | 680 | if (friendSession != null) |
672 | // on the other end!! | 681 | { |
673 | m_FriendsSimConnector.GrantRights(region, requester, target, myFlags, rights); | 682 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
683 | // TODO: You might want to send the delta to save the lookup | ||
684 | // on the other end!! | ||
685 | m_FriendsSimConnector.GrantRights(region, requester, target, myFlags, rights); | ||
686 | } | ||
674 | } | 687 | } |
675 | } | 688 | } |
676 | } | 689 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index ad050a1..5d20e63 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -471,7 +471,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
471 | if (m_UserRegionMap.ContainsKey(toAgentID)) | 471 | if (m_UserRegionMap.ContainsKey(toAgentID)) |
472 | { | 472 | { |
473 | upd = new PresenceInfo(); | 473 | upd = new PresenceInfo(); |
474 | upd.Online = true; | ||
475 | upd.RegionID = m_UserRegionMap[toAgentID]; | 474 | upd.RegionID = m_UserRegionMap[toAgentID]; |
476 | 475 | ||
477 | // We need to compare the current regionhandle with the previous region handle | 476 | // We need to compare the current regionhandle with the previous region handle |
@@ -493,15 +492,8 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
493 | { | 492 | { |
494 | // Non-cached user agent lookup. | 493 | // Non-cached user agent lookup. |
495 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() }); | 494 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() }); |
496 | if (presences != null) | 495 | if (presences != null && presences.Length > 0) |
497 | { | 496 | upd = presences[0]; |
498 | foreach (PresenceInfo p in presences) | ||
499 | if (p.Online) | ||
500 | { | ||
501 | upd = presences[0]; | ||
502 | break; | ||
503 | } | ||
504 | } | ||
505 | 497 | ||
506 | if (upd != null) | 498 | if (upd != null) |
507 | { | 499 | { |
@@ -525,61 +517,53 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
525 | 517 | ||
526 | if (upd != null) | 518 | if (upd != null) |
527 | { | 519 | { |
528 | if (upd.Online) | 520 | GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, |
521 | upd.RegionID); | ||
522 | if (reginfo != null) | ||
529 | { | 523 | { |
530 | GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, | 524 | Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im); |
531 | upd.RegionID); | 525 | // Not actually used anymore, left in for compatibility |
532 | if (reginfo != null) | 526 | // Remove at next interface change |
527 | // | ||
528 | msgdata["region_handle"] = 0; | ||
529 | bool imresult = doIMSending(reginfo, msgdata); | ||
530 | if (imresult) | ||
533 | { | 531 | { |
534 | Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im); | 532 | // IM delivery successful, so store the Agent's location in our local cache. |
535 | // Not actually used anymore, left in for compatibility | 533 | lock (m_UserRegionMap) |
536 | // Remove at next interface change | ||
537 | // | ||
538 | msgdata["region_handle"] = 0; | ||
539 | bool imresult = doIMSending(reginfo, msgdata); | ||
540 | if (imresult) | ||
541 | { | 534 | { |
542 | // IM delivery successful, so store the Agent's location in our local cache. | 535 | if (m_UserRegionMap.ContainsKey(toAgentID)) |
543 | lock (m_UserRegionMap) | ||
544 | { | 536 | { |
545 | if (m_UserRegionMap.ContainsKey(toAgentID)) | 537 | m_UserRegionMap[toAgentID] = upd.RegionID; |
546 | { | 538 | } |
547 | m_UserRegionMap[toAgentID] = upd.RegionID; | 539 | else |
548 | } | 540 | { |
549 | else | 541 | m_UserRegionMap.Add(toAgentID, upd.RegionID); |
550 | { | ||
551 | m_UserRegionMap.Add(toAgentID, upd.RegionID); | ||
552 | } | ||
553 | } | 542 | } |
554 | result(true); | ||
555 | } | ||
556 | else | ||
557 | { | ||
558 | // try again, but lookup user this time. | ||
559 | // Warning, this must call the Async version | ||
560 | // of this method or we'll be making thousands of threads | ||
561 | // The version within the spawned thread is SendGridInstantMessageViaXMLRPCAsync | ||
562 | // The version that spawns the thread is SendGridInstantMessageViaXMLRPC | ||
563 | |||
564 | // This is recursive!!!!! | ||
565 | SendGridInstantMessageViaXMLRPCAsync(im, result, | ||
566 | upd.RegionID); | ||
567 | } | 543 | } |
544 | result(true); | ||
568 | } | 545 | } |
569 | else | 546 | else |
570 | { | 547 | { |
571 | m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", upd.RegionID); | 548 | // try again, but lookup user this time. |
572 | HandleUndeliveredMessage(im, result); | 549 | // Warning, this must call the Async version |
550 | // of this method or we'll be making thousands of threads | ||
551 | // The version within the spawned thread is SendGridInstantMessageViaXMLRPCAsync | ||
552 | // The version that spawns the thread is SendGridInstantMessageViaXMLRPC | ||
553 | |||
554 | // This is recursive!!!!! | ||
555 | SendGridInstantMessageViaXMLRPCAsync(im, result, | ||
556 | upd.RegionID); | ||
573 | } | 557 | } |
574 | } | 558 | } |
575 | else | 559 | else |
576 | { | 560 | { |
561 | m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", upd.RegionID); | ||
577 | HandleUndeliveredMessage(im, result); | 562 | HandleUndeliveredMessage(im, result); |
578 | } | 563 | } |
579 | } | 564 | } |
580 | else | 565 | else |
581 | { | 566 | { |
582 | m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find user {0}", toAgentID); | ||
583 | HandleUndeliveredMessage(im, result); | 567 | HandleUndeliveredMessage(im, result); |
584 | } | 568 | } |
585 | } | 569 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs index bafad82..dd17f3c 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs | |||
@@ -133,20 +133,14 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
133 | foreach (PresenceInfo pi in status) | 133 | foreach (PresenceInfo pi in status) |
134 | { | 134 | { |
135 | UUID uuid = new UUID(pi.UserID); | 135 | UUID uuid = new UUID(pi.UserID); |
136 | if (pi.Online) | 136 | if (!online.Contains(uuid)) |
137 | { | 137 | online.Add(uuid); |
138 | if (!online.Contains(uuid)) | 138 | } |
139 | { | 139 | foreach (string s in args) |
140 | online.Add(uuid); | 140 | { |
141 | if (offline.Contains(uuid)) | 141 | UUID uuid = new UUID(s); |
142 | offline.Remove(uuid); | 142 | if (!online.Contains(uuid) && !offline.Contains(uuid)) |
143 | } | 143 | offline.Add(uuid); |
144 | } | ||
145 | else | ||
146 | { | ||
147 | if (!online.Contains(uuid) && !offline.Contains(uuid)) | ||
148 | offline.Add(uuid); | ||
149 | } | ||
150 | } | 144 | } |
151 | 145 | ||
152 | if (online.Count > 0) | 146 | if (online.Count > 0) |