aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Friends
diff options
context:
space:
mode:
authorDavid Walter Seikel2016-11-03 21:44:39 +1000
committerDavid Walter Seikel2016-11-03 21:44:39 +1000
commit134f86e8d5c414409631b25b8c6f0ee45fbd8631 (patch)
tree216b89d3fb89acfb81be1e440c25c41ab09fa96d /OpenSim/Region/CoreModules/Avatar/Friends
parentMore changing to production grid. Double oops. (diff)
downloadopensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.zip
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.gz
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.bz2
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.xz
Initial update to OpenSim 0.8.2.1 source code.
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Friends')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs50
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs31
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs20
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs1
5 files changed, 67 insertions, 40 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs
index 5ec0ea9..eb23e83 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs
@@ -36,6 +36,7 @@ using OpenSim.Region.Framework.Interfaces;
36using OpenSim.Region.Framework.Scenes; 36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Services.Interfaces; 37using OpenSim.Services.Interfaces;
38using Mono.Addins; 38using Mono.Addins;
39using PermissionMask = OpenSim.Framework.PermissionMask;
39 40
40namespace OpenSim.Region.CoreModules.Avatar.Friends 41namespace OpenSim.Region.CoreModules.Avatar.Friends
41{ 42{
@@ -180,7 +181,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
180 if (folderID == UUID.Zero) 181 if (folderID == UUID.Zero)
181 { 182 {
182 InventoryFolderBase folder = inv.GetFolderForType(userID, 183 InventoryFolderBase folder = inv.GetFolderForType(userID,
183 AssetType.CallingCard); 184 FolderType.CallingCard);
184 185
185 if (folder == null) // Nowhere to put it 186 if (folder == null) // Nowhere to put it
186 return UUID.Zero; 187 return UUID.Zero;
@@ -236,7 +237,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
236 IInventoryService invService = m_Scenes[0].InventoryService; 237 IInventoryService invService = m_Scenes[0].InventoryService;
237 238
238 InventoryFolderBase trashFolder = 239 InventoryFolderBase trashFolder =
239 invService.GetFolderForType(client.AgentId, AssetType.TrashFolder); 240 invService.GetFolderForType(client.AgentId, FolderType.Trash);
240 241
241 InventoryItemBase item = new InventoryItemBase(transactionID, client.AgentId); 242 InventoryItemBase item = new InventoryItemBase(transactionID, client.AgentId);
242 item = invService.GetItem(item); 243 item = invService.GetItem(item);
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index 8056030..08e7dd2 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -38,7 +38,6 @@ using OpenMetaverse;
38using Mono.Addins; 38using Mono.Addins;
39using OpenSim.Framework; 39using OpenSim.Framework;
40using OpenSim.Framework.Servers.HttpServer; 40using OpenSim.Framework.Servers.HttpServer;
41using OpenSim.Framework.Communications;
42using OpenSim.Framework.Servers; 41using OpenSim.Framework.Servers;
43using OpenSim.Region.Framework.Interfaces; 42using OpenSim.Region.Framework.Interfaces;
44using OpenSim.Region.Framework.Scenes; 43using OpenSim.Region.Framework.Scenes;
@@ -94,6 +93,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
94 protected Dictionary<UUID, UserFriendData> m_Friends = new Dictionary<UUID, UserFriendData>(); 93 protected Dictionary<UUID, UserFriendData> m_Friends = new Dictionary<UUID, UserFriendData>();
95 94
96 /// <summary> 95 /// <summary>
96 /// Maintain a record of clients that need to notify about their online status. This only
97 /// needs to be done on login. Subsequent online/offline friend changes are sent by a different mechanism.
98 /// </summary>
99 protected HashSet<UUID> m_NeedsToNotifyStatus = new HashSet<UUID>();
100
101 /// <summary>
97 /// Maintain a record of viewers that need to be sent notifications for friends that are online. This only 102 /// Maintain a record of viewers that need to be sent notifications for friends that are online. This only
98 /// needs to be done on login. Subsequent online/offline friend changes are sent by a different mechanism. 103 /// needs to be done on login. Subsequent online/offline friend changes are sent by a different mechanism.
99 /// </summary> 104 /// </summary>
@@ -324,6 +329,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
324 private void OnMakeRootAgent(ScenePresence sp) 329 private void OnMakeRootAgent(ScenePresence sp)
325 { 330 {
326 RecacheFriends(sp.ControllingClient); 331 RecacheFriends(sp.ControllingClient);
332
333 lock (m_NeedsToNotifyStatus)
334 {
335 if (m_NeedsToNotifyStatus.Remove(sp.UUID))
336 {
337 // Inform the friends that this user is online. This can only be done once the client is a Root Agent.
338 StatusChange(sp.UUID, true);
339 }
340 }
327 } 341 }
328 342
329 private void OnClientLogin(IClientAPI client) 343 private void OnClientLogin(IClientAPI client)
@@ -331,8 +345,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
331 UUID agentID = client.AgentId; 345 UUID agentID = client.AgentId;
332 346
333 //m_log.DebugFormat("[XXX]: OnClientLogin!"); 347 //m_log.DebugFormat("[XXX]: OnClientLogin!");
334 // Inform the friends that this user is online 348
335 StatusChange(agentID, true); 349 // Register that we need to send this user's status to friends. This can only be done
350 // once the client becomes a Root Agent, because as part of sending out the presence
351 // we also get back the presence of the HG friends, and we need to send that to the
352 // client, but that can only be done when the client is a Root Agent.
353 lock (m_NeedsToNotifyStatus)
354 m_NeedsToNotifyStatus.Add(agentID);
336 355
337 // Register that we need to send the list of online friends to this user 356 // Register that we need to send the list of online friends to this user
338 lock (m_NeedsListOfOnlineFriends) 357 lock (m_NeedsListOfOnlineFriends)
@@ -371,7 +390,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
371 foreach (string fid in outstanding) 390 foreach (string fid in outstanding)
372 { 391 {
373 UUID fromAgentID; 392 UUID fromAgentID;
374 string firstname = "Unknown", lastname = "User"; 393 string firstname = "Unknown", lastname = "UserFMSFOIN";
375 if (!GetAgentInfo(client.Scene.RegionInfo.ScopeID, fid, out fromAgentID, out firstname, out lastname)) 394 if (!GetAgentInfo(client.Scene.RegionInfo.ScopeID, fid, out fromAgentID, out firstname, out lastname))
376 { 395 {
377 m_log.DebugFormat("[FRIENDS MODULE]: skipping malformed friend {0}", fid); 396 m_log.DebugFormat("[FRIENDS MODULE]: skipping malformed friend {0}", fid);
@@ -397,7 +416,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
397 416
398 protected virtual bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last) 417 protected virtual bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last)
399 { 418 {
400 first = "Unknown"; last = "User"; 419 first = "Unknown"; last = "UserFMGAI";
401 if (!UUID.TryParse(fid, out agentID)) 420 if (!UUID.TryParse(fid, out agentID))
402 return false; 421 return false;
403 422
@@ -491,13 +510,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
491 510
492 // Notify about this user status 511 // Notify about this user status
493 StatusNotify(friendList, agentID, online); 512 StatusNotify(friendList, agentID, online);
494 } 513 }, null, "FriendsModule.StatusChange"
495 ); 514 );
496 } 515 }
497 } 516 }
498 517
499 protected virtual void StatusNotify(List<FriendInfo> friendList, UUID userID, bool online) 518 protected virtual void StatusNotify(List<FriendInfo> friendList, UUID userID, bool online)
500 { 519 {
520 //m_log.DebugFormat("[FRIENDS]: Entering StatusNotify for {0}", userID);
521
501 List<string> friendStringIds = friendList.ConvertAll<string>(friend => friend.Friend); 522 List<string> friendStringIds = friendList.ConvertAll<string>(friend => friend.Friend);
502 List<string> remoteFriendStringIds = new List<string>(); 523 List<string> remoteFriendStringIds = new List<string>();
503 foreach (string friendStringId in friendStringIds) 524 foreach (string friendStringId in friendStringIds)
@@ -523,12 +544,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
523 foreach (PresenceInfo friendSession in friendSessions) 544 foreach (PresenceInfo friendSession in friendSessions)
524 { 545 {
525 // let's guard against sessions-gone-bad 546 // let's guard against sessions-gone-bad
526 if (friendSession.RegionID != UUID.Zero) 547 if (friendSession != null && friendSession.RegionID != UUID.Zero)
527 { 548 {
549 //m_log.DebugFormat("[FRIENDS]: Get region {0}", friendSession.RegionID);
528 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); 550 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
529 //m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName); 551 if (region != null)
530 m_FriendsSimConnector.StatusNotify(region, userID, friendSession.UserID, online); 552 {
553 m_FriendsSimConnector.StatusNotify(region, userID, friendSession.UserID, online);
554 }
531 } 555 }
556 //else
557 // m_log.DebugFormat("[FRIENDS]: friend session is null or the region is UUID.Zero");
532 } 558 }
533 } 559 }
534 560
@@ -685,7 +711,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
685 // 711 //
686 712
687 // Try local 713 // Try local
688 if (LocalFriendshipTerminated(exfriendID)) 714 if (LocalFriendshipTerminated(client.AgentId, exfriendID))
689 return; 715 return;
690 716
691 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() }); 717 PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() });
@@ -827,13 +853,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
827 return false; 853 return false;
828 } 854 }
829 855
830 public bool LocalFriendshipTerminated(UUID exfriendID) 856 public bool LocalFriendshipTerminated(UUID userID, UUID exfriendID)
831 { 857 {
832 IClientAPI friendClient = LocateClientObject(exfriendID); 858 IClientAPI friendClient = LocateClientObject(exfriendID);
833 if (friendClient != null) 859 if (friendClient != null)
834 { 860 {
835 // the friend in this sim as root agent 861 // the friend in this sim as root agent
836 friendClient.SendTerminateFriend(exfriendID); 862 friendClient.SendTerminateFriend(userID);
837 // update local cache 863 // update local cache
838 RecacheFriends(friendClient); 864 RecacheFriends(friendClient);
839 // we're done 865 // we're done
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
index 637beef..13512a2 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -42,19 +42,27 @@ using log4net;
42 42
43namespace OpenSim.Region.CoreModules.Avatar.Friends 43namespace OpenSim.Region.CoreModules.Avatar.Friends
44{ 44{
45 public class FriendsRequestHandler : BaseStreamHandler 45 public class FriendsRequestHandler : BaseStreamHandlerBasicDOSProtector
46 { 46 {
47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 48
49 private FriendsModule m_FriendsModule; 49 private FriendsModule m_FriendsModule;
50 50
51 public FriendsRequestHandler(FriendsModule fmodule) 51 public FriendsRequestHandler(FriendsModule fmodule)
52 : base("POST", "/friends") 52 : base("POST", "/friends", new BasicDosProtectorOptions()
53 {
54 AllowXForwardedFor = true,
55 ForgetTimeSpan = TimeSpan.FromMinutes(2),
56 MaxRequestsInTimeframe = 20,
57 ReportingName = "FRIENDSDOSPROTECTOR",
58 RequestTimeSpan = TimeSpan.FromSeconds(5),
59 ThrottledAction = BasicDOSProtector.ThrottleAction.DoThrottledMethod
60 })
53 { 61 {
54 m_FriendsModule = fmodule; 62 m_FriendsModule = fmodule;
55 } 63 }
56 64
57 public override byte[] Handle( 65 protected override byte[] ProcessRequest(
58 string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 66 string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
59 { 67 {
60 StreamReader sr = new StreamReader(requestData); 68 StreamReader sr = new StreamReader(requestData);
@@ -193,7 +201,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
193 if (!UUID.TryParse(request["ToID"].ToString(), out toID)) 201 if (!UUID.TryParse(request["ToID"].ToString(), out toID))
194 return FailureResult(); 202 return FailureResult();
195 203
196 if (m_FriendsModule.LocalFriendshipTerminated(toID)) 204 if (m_FriendsModule.LocalFriendshipTerminated(fromID, toID))
197 return SuccessResult(); 205 return SuccessResult();
198 206
199 return FailureResult(); 207 return FailureResult();
@@ -281,18 +289,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
281 289
282 rootElement.AppendChild(result); 290 rootElement.AppendChild(result);
283 291
284 return DocToBytes(doc); 292 return Util.DocToBytes(doc);
285 }
286
287 private byte[] DocToBytes(XmlDocument doc)
288 {
289 MemoryStream ms = new MemoryStream();
290 XmlTextWriter xw = new XmlTextWriter(ms, null);
291 xw.Formatting = Formatting.Indented;
292 doc.WriteTo(xw);
293 xw.Flush();
294
295 return ms.ToArray();
296 } 293 }
297 294
298 #endregion 295 #endregion
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
index bf5c0bb..27b7376 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
@@ -183,6 +183,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
183 if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp)) 183 if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp))
184 { 184 {
185 IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>(); 185 IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>();
186 m_log.DebugFormat("[HGFRIENDS MODULE]: caching {0}", finfo.Friend);
186 uMan.AddUser(id, url + ";" + first + " " + last); 187 uMan.AddUser(id, url + ";" + first + " " + last);
187 } 188 }
188 } 189 }
@@ -238,6 +239,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
238 fList.Add(s.Substring(0, 36)); 239 fList.Add(s.Substring(0, 36));
239 } 240 }
240 241
242 // FIXME: also query the presence status of friends in other grids (like in HGStatusNotifier.Notify())
243
241 PresenceInfo[] presence = PresenceService.GetAgents(fList.ToArray()); 244 PresenceInfo[] presence = PresenceService.GetAgents(fList.ToArray());
242 foreach (PresenceInfo pi in presence) 245 foreach (PresenceInfo pi in presence)
243 { 246 {
@@ -251,7 +254,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
251 254
252 protected override void StatusNotify(List<FriendInfo> friendList, UUID userID, bool online) 255 protected override void StatusNotify(List<FriendInfo> friendList, UUID userID, bool online)
253 { 256 {
254// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering StatusNotify for {0}", userID); 257 //m_log.DebugFormat("[HGFRIENDS MODULE]: Entering StatusNotify for {0}", userID);
255 258
256 // First, let's divide the friends on a per-domain basis 259 // First, let's divide the friends on a per-domain basis
257 Dictionary<string, List<FriendInfo>> friendsPerDomain = new Dictionary<string, List<FriendInfo>>(); 260 Dictionary<string, List<FriendInfo>> friendsPerDomain = new Dictionary<string, List<FriendInfo>>();
@@ -293,7 +296,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
293 296
294 protected override bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last) 297 protected override bool GetAgentInfo(UUID scopeID, string fid, out UUID agentID, out string first, out string last)
295 { 298 {
296 first = "Unknown"; last = "User"; 299 first = "Unknown"; last = "UserHGGAI";
297 if (base.GetAgentInfo(scopeID, fid, out agentID, out first, out last)) 300 if (base.GetAgentInfo(scopeID, fid, out agentID, out first, out last))
298 return true; 301 return true;
299 302
@@ -349,7 +352,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
349 352
350 public override FriendInfo[] GetFriendsFromService(IClientAPI client) 353 public override FriendInfo[] GetFriendsFromService(IClientAPI client)
351 { 354 {
352// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name); 355 // m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name);
353 Boolean agentIsLocal = true; 356 Boolean agentIsLocal = true;
354 if (UserManagementModule != null) 357 if (UserManagementModule != null)
355 agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId); 358 agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId);
@@ -362,13 +365,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
362 AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode); 365 AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode);
363 if (agentClientCircuit != null) 366 if (agentClientCircuit != null)
364 { 367 {
365 //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit); 368 // Note that this is calling a different interface than base; this one calls with a string param!
366
367 finfos = FriendsService.GetFriends(client.AgentId.ToString()); 369 finfos = FriendsService.GetFriends(client.AgentId.ToString());
368 m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString()); 370 m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString());
369 } 371 }
370 372
371// m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name); 373 // m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name);
372 374
373 return finfos; 375 return finfos;
374 } 376 }
@@ -658,7 +660,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
658 FriendsService.Delete(friendUUI, agentID.ToString()); 660 FriendsService.Delete(friendUUI, agentID.ToString());
659 661
660 // notify the exfriend's service 662 // notify the exfriend's service
661 Util.FireAndForget(delegate { Delete(exfriendID, agentID, friendUUI); }); 663 Util.FireAndForget(
664 delegate { Delete(exfriendID, agentID, friendUUI); }, null, "HGFriendsModule.DeleteFriendshipForeignFriend");
662 665
663 m_log.DebugFormat("[HGFRIENDS MODULE]: {0} terminated {1}", agentID, friendUUI); 666 m_log.DebugFormat("[HGFRIENDS MODULE]: {0} terminated {1}", agentID, friendUUI);
664 return true; 667 return true;
@@ -676,7 +679,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
676 FriendsService.Delete(agentUUI, exfriendID.ToString()); 679 FriendsService.Delete(agentUUI, exfriendID.ToString());
677 680
678 // notify the agent's service? 681 // notify the agent's service?
679 Util.FireAndForget(delegate { Delete(agentID, exfriendID, agentUUI); }); 682 Util.FireAndForget(
683 delegate { Delete(agentID, exfriendID, agentUUI); }, null, "HGFriendsModule.DeleteFriendshipLocalFriend");
680 684
681 m_log.DebugFormat("[HGFRIENDS MODULE]: {0} terminated {1}", agentUUI, exfriendID); 685 m_log.DebugFormat("[HGFRIENDS MODULE]: {0} terminated {1}", agentUUI, exfriendID);
682 return true; 686 return true;
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs
index 961117e..e6fd54e 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs
@@ -35,7 +35,6 @@ using OpenSim.Framework;
35using OpenSim.Region.CoreModules.Avatar.Friends; 35using OpenSim.Region.CoreModules.Avatar.Friends;
36using OpenSim.Region.Framework.Scenes; 36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Tests.Common; 37using OpenSim.Tests.Common;
38using OpenSim.Tests.Common.Mock;
39 38
40namespace OpenSim.Region.CoreModules.Avatar.Friends.Tests 39namespace OpenSim.Region.CoreModules.Avatar.Friends.Tests
41{ 40{