diff options
author | Charles Krinke | 2009-04-29 22:31:00 +0000 |
---|---|---|
committer | Charles Krinke | 2009-04-29 22:31:00 +0000 |
commit | 8944ab910cc8f62dc6ce567046a92e50b1e2813f (patch) | |
tree | b8042c6ff8bd2598280368cf87d535f8a22af362 /OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs | |
parent | Catch another j2k decode exception that can be caused by a bad asset (diff) | |
download | opensim-SC-8944ab910cc8f62dc6ce567046a92e50b1e2813f.zip opensim-SC-8944ab910cc8f62dc6ce567046a92e50b1e2813f.tar.gz opensim-SC-8944ab910cc8f62dc6ce567046a92e50b1e2813f.tar.bz2 opensim-SC-8944ab910cc8f62dc6ce567046a92e50b1e2813f.tar.xz |
Thank you kindly, MCortez for a patch that:
The attached patch provides the necessary infrastructure to support
security and authentication features of the xmlrpc server.
* Read/Write keys for accessing a Group's xmlrpc service.
* Requiring user session verification for write operations.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs | 213 |
1 files changed, 151 insertions, 62 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs index 3337ccd..5ba7eff 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs | |||
@@ -28,8 +28,7 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | 31 | using System.Timers; | |
32 | using System.Collections; | ||
33 | 32 | ||
34 | using log4net; | 33 | using log4net; |
35 | using Nini.Config; | 34 | using Nini.Config; |
@@ -61,6 +60,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
61 | /// XmlRpcMessagingEnabled = true | 60 | /// XmlRpcMessagingEnabled = true |
62 | /// XmlRpcNoticesEnabled = true | 61 | /// XmlRpcNoticesEnabled = true |
63 | /// XmlRpcDebugEnabled = true | 62 | /// XmlRpcDebugEnabled = true |
63 | /// XmlRpcServiceReadKey = 1234 | ||
64 | /// XmlRpcServiceWriteKey = 1234 | ||
64 | /// | 65 | /// |
65 | /// ; Disables HTTP Keep-Alive for Groups Module HTTP Requests, work around for | 66 | /// ; Disables HTTP Keep-Alive for Groups Module HTTP Requests, work around for |
66 | /// ; a problem discovered on some Windows based region servers. Only disable | 67 | /// ; a problem discovered on some Windows based region servers. Only disable |
@@ -79,6 +80,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
79 | 80 | ||
80 | private IGroupDataProvider m_groupData = null; | 81 | private IGroupDataProvider m_groupData = null; |
81 | 82 | ||
83 | class GroupRequestIDInfo | ||
84 | { | ||
85 | public GroupRequestID RequestID = new GroupRequestID(); | ||
86 | public DateTime LastUsedTMStamp = DateTime.MinValue; | ||
87 | } | ||
88 | private Dictionary<UUID, GroupRequestIDInfo> m_clientRequestIDInfo = new Dictionary<UUID, GroupRequestIDInfo>(); | ||
89 | private const int m_clientRequestIDFlushTimeOut = 300000; // Every 5 minutes | ||
90 | private Timer m_clientRequestIDFlushTimer = new Timer(); | ||
91 | |||
92 | |||
82 | // Configuration settings | 93 | // Configuration settings |
83 | private const string m_defaultXmlRpcServiceURL = "http://osflotsam.org/xmlrpc.php"; | 94 | private const string m_defaultXmlRpcServiceURL = "http://osflotsam.org/xmlrpc.php"; |
84 | private bool m_groupsEnabled = false; | 95 | private bool m_groupsEnabled = false; |
@@ -119,12 +130,34 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
119 | string ServiceURL = groupsConfig.GetString("XmlRpcServiceURL", m_defaultXmlRpcServiceURL); | 130 | string ServiceURL = groupsConfig.GetString("XmlRpcServiceURL", m_defaultXmlRpcServiceURL); |
120 | bool DisableKeepAlive = groupsConfig.GetBoolean("XmlRpcDisableKeepAlive", false); | 131 | bool DisableKeepAlive = groupsConfig.GetBoolean("XmlRpcDisableKeepAlive", false); |
121 | 132 | ||
122 | m_groupData = new XmlRpcGroupDataProvider(ServiceURL, DisableKeepAlive); | 133 | string ServiceReadKey = groupsConfig.GetString("XmlRpcServiceReadKey", string.Empty); |
134 | string ServiceWriteKey = groupsConfig.GetString("XmlRpcServiceWriteKey", string.Empty); | ||
135 | |||
136 | m_groupData = new XmlRpcGroupDataProvider(ServiceURL, DisableKeepAlive, ServiceReadKey, ServiceWriteKey); | ||
123 | m_log.InfoFormat("[GROUPS]: XmlRpc Service URL set to: {0}", ServiceURL); | 137 | m_log.InfoFormat("[GROUPS]: XmlRpc Service URL set to: {0}", ServiceURL); |
124 | 138 | ||
125 | m_groupNoticesEnabled = groupsConfig.GetBoolean("XmlRpcNoticesEnabled", true); | 139 | m_groupNoticesEnabled = groupsConfig.GetBoolean("XmlRpcNoticesEnabled", true); |
126 | m_debugEnabled = groupsConfig.GetBoolean("XmlRpcDebugEnabled", true); | 140 | m_debugEnabled = groupsConfig.GetBoolean("XmlRpcDebugEnabled", true); |
127 | 141 | ||
142 | m_clientRequestIDFlushTimer.Interval = m_clientRequestIDFlushTimeOut; | ||
143 | m_clientRequestIDFlushTimer.Elapsed += FlushClientRequestIDInfoCache; | ||
144 | m_clientRequestIDFlushTimer.Start(); | ||
145 | } | ||
146 | } | ||
147 | |||
148 | void FlushClientRequestIDInfoCache(object sender, ElapsedEventArgs e) | ||
149 | { | ||
150 | lock (m_clientRequestIDInfo) | ||
151 | { | ||
152 | TimeSpan cacheTimeout = new TimeSpan(0,0, m_clientRequestIDFlushTimeOut / 1000); | ||
153 | UUID[] CurrentKeys = new UUID[m_clientRequestIDInfo.Count]; | ||
154 | foreach (UUID key in CurrentKeys) | ||
155 | { | ||
156 | if (DateTime.Now - m_clientRequestIDInfo[key].LastUsedTMStamp > cacheTimeout) | ||
157 | { | ||
158 | m_clientRequestIDInfo.Remove(key); | ||
159 | } | ||
160 | } | ||
128 | } | 161 | } |
129 | } | 162 | } |
130 | 163 | ||
@@ -188,6 +221,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
188 | return; | 221 | return; |
189 | 222 | ||
190 | if (m_debugEnabled) m_log.Debug("[GROUPS]: Shutting down XmlRpcGroups module."); | 223 | if (m_debugEnabled) m_log.Debug("[GROUPS]: Shutting down XmlRpcGroups module."); |
224 | |||
225 | m_clientRequestIDFlushTimer.Stop(); | ||
191 | } | 226 | } |
192 | 227 | ||
193 | public string Name | 228 | public string Name |
@@ -218,13 +253,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
218 | 253 | ||
219 | // Used for Notices and Group Invites/Accept/Reject | 254 | // Used for Notices and Group Invites/Accept/Reject |
220 | client.OnInstantMessage += OnInstantMessage; | 255 | client.OnInstantMessage += OnInstantMessage; |
221 | 256 | ||
257 | lock (m_clientRequestIDInfo) | ||
258 | { | ||
259 | if (m_clientRequestIDInfo.ContainsKey(client.AgentId)) | ||
260 | { | ||
261 | // flush any old RequestID information | ||
262 | m_clientRequestIDInfo.Remove(client.AgentId); | ||
263 | } | ||
264 | } | ||
222 | SendAgentGroupDataUpdate(client, client.AgentId); | 265 | SendAgentGroupDataUpdate(client, client.AgentId); |
223 | } | 266 | } |
224 | 267 | ||
225 | private void OnRequestAvatarProperties(IClientAPI remoteClient, UUID avatarID) | 268 | private void OnRequestAvatarProperties(IClientAPI remoteClient, UUID avatarID) |
226 | { | 269 | { |
227 | GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(avatarID).ToArray(); | 270 | GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(remoteClient), avatarID).ToArray(); |
228 | remoteClient.SendAvatarGroupsReply(avatarID, avatarGroups); | 271 | remoteClient.SendAvatarGroupsReply(avatarID, avatarGroups); |
229 | } | 272 | } |
230 | 273 | ||
@@ -270,7 +313,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
270 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called with queryText({1}) queryFlags({2}) queryStart({3})", System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); | 313 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called with queryText({1}) queryFlags({2}) queryStart({3})", System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); |
271 | 314 | ||
272 | // TODO: This currently ignores pretty much all the query flags including Mature and sort order | 315 | // TODO: This currently ignores pretty much all the query flags including Mature and sort order |
273 | remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(queryText).ToArray()); | 316 | remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(GetClientGroupRequestID(remoteClient), queryText).ToArray()); |
274 | } | 317 | } |
275 | 318 | ||
276 | } | 319 | } |
@@ -284,7 +327,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
284 | string activeGroupName = string.Empty; | 327 | string activeGroupName = string.Empty; |
285 | ulong activeGroupPowers = (ulong)GroupPowers.None; | 328 | ulong activeGroupPowers = (ulong)GroupPowers.None; |
286 | 329 | ||
287 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(dataForAgentID); | 330 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(GetClientGroupRequestID(remoteClient), dataForAgentID); |
288 | if (membership != null) | 331 | if (membership != null) |
289 | { | 332 | { |
290 | activeGroupID = membership.GroupID; | 333 | activeGroupID = membership.GroupID; |
@@ -297,13 +340,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
297 | SendScenePresenceUpdate(dataForAgentID, activeGroupTitle); | 340 | SendScenePresenceUpdate(dataForAgentID, activeGroupTitle); |
298 | } | 341 | } |
299 | 342 | ||
300 | private void HandleUUIDGroupNameRequest(UUID GroupID,IClientAPI remote_client) | 343 | private void HandleUUIDGroupNameRequest(UUID GroupID,IClientAPI remoteClient) |
301 | { | 344 | { |
302 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 345 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
303 | 346 | ||
304 | string GroupName; | 347 | string GroupName; |
305 | 348 | ||
306 | GroupRecord group = m_groupData.GetGroupRecord(GroupID, null); | 349 | GroupRecord group = m_groupData.GetGroupRecord(GetClientGroupRequestID(remoteClient), GroupID, null); |
307 | if (group != null) | 350 | if (group != null) |
308 | { | 351 | { |
309 | GroupName = group.GroupName; | 352 | GroupName = group.GroupName; |
@@ -313,7 +356,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
313 | GroupName = "Unknown"; | 356 | GroupName = "Unknown"; |
314 | } | 357 | } |
315 | 358 | ||
316 | remote_client.SendGroupNameReply(GroupID, GroupName); | 359 | remoteClient.SendGroupNameReply(GroupID, GroupName); |
317 | } | 360 | } |
318 | 361 | ||
319 | private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) | 362 | private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) |
@@ -324,7 +367,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
324 | if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)) | 367 | if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)) |
325 | { | 368 | { |
326 | UUID inviteID = new UUID(im.imSessionID); | 369 | UUID inviteID = new UUID(im.imSessionID); |
327 | GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(inviteID); | 370 | GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(GetClientGroupRequestID(remoteClient), inviteID); |
328 | 371 | ||
329 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Invite is for Agent {0} to Group {1}.", inviteInfo.AgentID, inviteInfo.GroupID); | 372 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Invite is for Agent {0} to Group {1}.", inviteInfo.AgentID, inviteInfo.GroupID); |
330 | 373 | ||
@@ -337,7 +380,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
337 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Received an accept invite notice."); | 380 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Received an accept invite notice."); |
338 | 381 | ||
339 | // and the sessionid is the role | 382 | // and the sessionid is the role |
340 | m_groupData.AddAgentToGroup(inviteInfo.AgentID, inviteInfo.GroupID, inviteInfo.RoleID); | 383 | m_groupData.AddAgentToGroup(GetClientGroupRequestID(remoteClient), inviteInfo.AgentID, inviteInfo.GroupID, inviteInfo.RoleID); |
341 | 384 | ||
342 | GridInstantMessage msg = new GridInstantMessage(); | 385 | GridInstantMessage msg = new GridInstantMessage(); |
343 | msg.imSessionID = UUID.Zero.Guid; | 386 | msg.imSessionID = UUID.Zero.Guid; |
@@ -361,14 +404,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
361 | // TODO: If the inviter is still online, they need an agent dataupdate | 404 | // TODO: If the inviter is still online, they need an agent dataupdate |
362 | // and maybe group membership updates for the invitee | 405 | // and maybe group membership updates for the invitee |
363 | 406 | ||
364 | m_groupData.RemoveAgentToGroupInvite(inviteID); | 407 | m_groupData.RemoveAgentToGroupInvite(GetClientGroupRequestID(remoteClient), inviteID); |
365 | } | 408 | } |
366 | 409 | ||
367 | // Reject | 410 | // Reject |
368 | if (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline) | 411 | if (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline) |
369 | { | 412 | { |
370 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Received a reject invite notice."); | 413 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Received a reject invite notice."); |
371 | m_groupData.RemoveAgentToGroupInvite(inviteID); | 414 | m_groupData.RemoveAgentToGroupInvite(GetClientGroupRequestID(remoteClient), inviteID); |
372 | } | 415 | } |
373 | } | 416 | } |
374 | } | 417 | } |
@@ -382,7 +425,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
382 | } | 425 | } |
383 | 426 | ||
384 | UUID GroupID = new UUID(im.toAgentID); | 427 | UUID GroupID = new UUID(im.toAgentID); |
385 | if (m_groupData.GetGroupRecord(GroupID, null) != null) | 428 | if (m_groupData.GetGroupRecord(GetClientGroupRequestID(remoteClient), GroupID, null) != null) |
386 | { | 429 | { |
387 | UUID NoticeID = UUID.Random(); | 430 | UUID NoticeID = UUID.Random(); |
388 | string Subject = im.message.Substring(0, im.message.IndexOf('|')); | 431 | string Subject = im.message.Substring(0, im.message.IndexOf('|')); |
@@ -422,14 +465,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
422 | bucket[18] = 0; //dunno | 465 | bucket[18] = 0; //dunno |
423 | } | 466 | } |
424 | 467 | ||
425 | m_groupData.AddGroupNotice(GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket); | 468 | m_groupData.AddGroupNotice(GetClientGroupRequestID(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket); |
426 | if (OnNewGroupNotice != null) | 469 | if (OnNewGroupNotice != null) |
427 | { | 470 | { |
428 | OnNewGroupNotice(GroupID, NoticeID); | 471 | OnNewGroupNotice(GroupID, NoticeID); |
429 | } | 472 | } |
430 | 473 | ||
431 | // Send notice out to everyone that wants notices | 474 | // Send notice out to everyone that wants notices |
432 | foreach (GroupMembersData member in m_groupData.GetGroupMembers(GroupID)) | 475 | foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), GroupID)) |
433 | { | 476 | { |
434 | if (member.AcceptNotices) | 477 | if (member.AcceptNotices) |
435 | { | 478 | { |
@@ -501,14 +544,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
501 | 544 | ||
502 | public GroupRecord GetGroupRecord(UUID GroupID) | 545 | public GroupRecord GetGroupRecord(UUID GroupID) |
503 | { | 546 | { |
504 | return m_groupData.GetGroupRecord(GroupID, null); | 547 | return m_groupData.GetGroupRecord(null, GroupID, null); |
505 | } | 548 | } |
506 | 549 | ||
507 | public void ActivateGroup(IClientAPI remoteClient, UUID groupID) | 550 | public void ActivateGroup(IClientAPI remoteClient, UUID groupID) |
508 | { | 551 | { |
509 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 552 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
510 | 553 | ||
511 | m_groupData.SetAgentActiveGroup(remoteClient.AgentId, groupID); | 554 | m_groupData.SetAgentActiveGroup(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID); |
512 | 555 | ||
513 | // Changing active group changes title, active powers, all kinds of things | 556 | // Changing active group changes title, active powers, all kinds of things |
514 | // anyone who is in any region that can see this client, should probably be | 557 | // anyone who is in any region that can see this client, should probably be |
@@ -524,8 +567,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
524 | { | 567 | { |
525 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 568 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
526 | 569 | ||
527 | List<GroupRolesData> agentRoles = m_groupData.GetAgentGroupRoles(remoteClient.AgentId, groupID); | 570 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); |
528 | GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(remoteClient.AgentId, groupID); | 571 | |
572 | List<GroupRolesData> agentRoles = m_groupData.GetAgentGroupRoles(grID, remoteClient.AgentId, groupID); | ||
573 | GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(grID, remoteClient.AgentId, groupID); | ||
529 | 574 | ||
530 | List<GroupTitlesData> titles = new List<GroupTitlesData>(); | 575 | List<GroupTitlesData> titles = new List<GroupTitlesData>(); |
531 | foreach (GroupRolesData role in agentRoles) | 576 | foreach (GroupRolesData role in agentRoles) |
@@ -548,7 +593,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
548 | { | 593 | { |
549 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 594 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
550 | 595 | ||
551 | List<GroupMembersData> data = m_groupData.GetGroupMembers(groupID); | 596 | List<GroupMembersData> data = m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), groupID); |
552 | if (m_debugEnabled) | 597 | if (m_debugEnabled) |
553 | { | 598 | { |
554 | foreach (GroupMembersData member in data) | 599 | foreach (GroupMembersData member in data) |
@@ -565,7 +610,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
565 | { | 610 | { |
566 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 611 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
567 | 612 | ||
568 | List<GroupRolesData> data = m_groupData.GetGroupRoles(groupID); | 613 | List<GroupRolesData> data = m_groupData.GetGroupRoles(GetClientGroupRequestID(remoteClient), groupID); |
569 | 614 | ||
570 | if (m_debugEnabled) | 615 | if (m_debugEnabled) |
571 | { | 616 | { |
@@ -583,7 +628,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
583 | { | 628 | { |
584 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 629 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
585 | 630 | ||
586 | List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(groupID); | 631 | List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(GetClientGroupRequestID(remoteClient), groupID); |
587 | 632 | ||
588 | if (m_debugEnabled) | 633 | if (m_debugEnabled) |
589 | { | 634 | { |
@@ -604,15 +649,17 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
604 | 649 | ||
605 | GroupProfileData profile = new GroupProfileData(); | 650 | GroupProfileData profile = new GroupProfileData(); |
606 | 651 | ||
607 | GroupRecord groupInfo = m_groupData.GetGroupRecord(groupID, null); | 652 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); |
653 | |||
654 | GroupRecord groupInfo = m_groupData.GetGroupRecord(GetClientGroupRequestID(remoteClient), groupID, null); | ||
608 | if (groupInfo != null) | 655 | if (groupInfo != null) |
609 | { | 656 | { |
610 | profile.AllowPublish = groupInfo.AllowPublish; | 657 | profile.AllowPublish = groupInfo.AllowPublish; |
611 | profile.Charter = groupInfo.Charter; | 658 | profile.Charter = groupInfo.Charter; |
612 | profile.FounderID = groupInfo.FounderID; | 659 | profile.FounderID = groupInfo.FounderID; |
613 | profile.GroupID = groupID; | 660 | profile.GroupID = groupID; |
614 | profile.GroupMembershipCount = m_groupData.GetGroupMembers(groupID).Count; | 661 | profile.GroupMembershipCount = m_groupData.GetGroupMembers(grID, groupID).Count; |
615 | profile.GroupRolesCount = m_groupData.GetGroupRoles(groupID).Count; | 662 | profile.GroupRolesCount = m_groupData.GetGroupRoles(grID, groupID).Count; |
616 | profile.InsigniaID = groupInfo.GroupPicture; | 663 | profile.InsigniaID = groupInfo.GroupPicture; |
617 | profile.MaturePublish = groupInfo.MaturePublish; | 664 | profile.MaturePublish = groupInfo.MaturePublish; |
618 | profile.MembershipFee = groupInfo.MembershipFee; | 665 | profile.MembershipFee = groupInfo.MembershipFee; |
@@ -623,7 +670,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
623 | profile.ShowInList = groupInfo.ShowInList; | 670 | profile.ShowInList = groupInfo.ShowInList; |
624 | } | 671 | } |
625 | 672 | ||
626 | GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(remoteClient.AgentId, groupID); | 673 | GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(grID, remoteClient.AgentId, groupID); |
627 | if (memberInfo != null) | 674 | if (memberInfo != null) |
628 | { | 675 | { |
629 | profile.MemberTitle = memberInfo.GroupTitle; | 676 | profile.MemberTitle = memberInfo.GroupTitle; |
@@ -637,14 +684,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
637 | { | 684 | { |
638 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 685 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
639 | 686 | ||
640 | return m_groupData.GetAgentGroupMemberships(agentID).ToArray(); | 687 | return m_groupData.GetAgentGroupMemberships(null, agentID).ToArray(); |
641 | } | 688 | } |
642 | 689 | ||
643 | public GroupMembershipData GetMembershipData(UUID groupID, UUID agentID) | 690 | public GroupMembershipData GetMembershipData(UUID groupID, UUID agentID) |
644 | { | 691 | { |
645 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 692 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
646 | 693 | ||
647 | return m_groupData.GetAgentGroupMembership(agentID, groupID); | 694 | return m_groupData.GetAgentGroupMembership(null, agentID, groupID); |
648 | } | 695 | } |
649 | 696 | ||
650 | public void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) | 697 | public void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) |
@@ -653,7 +700,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
653 | 700 | ||
654 | // TODO: Security Check? | 701 | // TODO: Security Check? |
655 | 702 | ||
656 | m_groupData.UpdateGroup(groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); | 703 | m_groupData.UpdateGroup(GetClientGroupRequestID(remoteClient), groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); |
657 | } | 704 | } |
658 | 705 | ||
659 | public void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile) | 706 | public void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile) |
@@ -661,20 +708,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
661 | // TODO: Security Check? | 708 | // TODO: Security Check? |
662 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 709 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
663 | 710 | ||
664 | m_groupData.SetAgentGroupInfo(remoteClient.AgentId, groupID, acceptNotices, listInProfile); | 711 | m_groupData.SetAgentGroupInfo(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID, acceptNotices, listInProfile); |
665 | } | 712 | } |
666 | 713 | ||
667 | public UUID CreateGroup(IClientAPI remoteClient, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) | 714 | public UUID CreateGroup(IClientAPI remoteClient, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) |
668 | { | 715 | { |
669 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 716 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
670 | 717 | ||
671 | if (m_groupData.GetGroupRecord(UUID.Zero, name) != null) | 718 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); |
719 | |||
720 | if (m_groupData.GetGroupRecord(grID, UUID.Zero, name) != null) | ||
672 | { | 721 | { |
673 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); | 722 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); |
674 | return UUID.Zero; | 723 | return UUID.Zero; |
675 | } | 724 | } |
676 | 725 | ||
677 | UUID groupID = m_groupData.CreateGroup(name, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish, remoteClient.AgentId); | 726 | UUID groupID = m_groupData.CreateGroup(grID, name, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish, remoteClient.AgentId); |
678 | 727 | ||
679 | remoteClient.SendCreateGroupReply(groupID, true, "Group created successfullly"); | 728 | remoteClient.SendCreateGroupReply(groupID, true, "Group created successfullly"); |
680 | 729 | ||
@@ -689,8 +738,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
689 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 738 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
690 | 739 | ||
691 | // ToDo: check if agent is a member of group and is allowed to see notices? | 740 | // ToDo: check if agent is a member of group and is allowed to see notices? |
692 | 741 | ||
693 | return m_groupData.GetGroupNotices(groupID).ToArray(); | 742 | return m_groupData.GetGroupNotices(GetClientGroupRequestID(remoteClient), groupID).ToArray(); |
694 | } | 743 | } |
695 | 744 | ||
696 | /// <summary> | 745 | /// <summary> |
@@ -700,7 +749,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
700 | { | 749 | { |
701 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 750 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
702 | 751 | ||
703 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(avatarID); | 752 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(null, avatarID); |
704 | if (membership != null) | 753 | if (membership != null) |
705 | { | 754 | { |
706 | return membership.GroupTitle; | 755 | return membership.GroupTitle; |
@@ -715,7 +764,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
715 | { | 764 | { |
716 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 765 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
717 | 766 | ||
718 | m_groupData.SetAgentActiveGroupRole(remoteClient.AgentId, groupID, titleRoleID); | 767 | m_groupData.SetAgentActiveGroupRole(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID, titleRoleID); |
719 | 768 | ||
720 | // TODO: Not sure what all is needed here, but if the active group role change is for the group | 769 | // TODO: Not sure what all is needed here, but if the active group role change is for the group |
721 | // the client currently has set active, then we need to do a scene presence update too | 770 | // the client currently has set active, then we need to do a scene presence update too |
@@ -731,20 +780,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
731 | 780 | ||
732 | // TODO: Security Checks? | 781 | // TODO: Security Checks? |
733 | 782 | ||
783 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); | ||
784 | |||
734 | switch ((OpenMetaverse.GroupRoleUpdate)updateType) | 785 | switch ((OpenMetaverse.GroupRoleUpdate)updateType) |
735 | { | 786 | { |
736 | case OpenMetaverse.GroupRoleUpdate.Create: | 787 | case OpenMetaverse.GroupRoleUpdate.Create: |
737 | m_groupData.AddGroupRole(groupID, UUID.Random(), name, description, title, powers); | 788 | m_groupData.AddGroupRole(grID, groupID, UUID.Random(), name, description, title, powers); |
738 | break; | 789 | break; |
739 | 790 | ||
740 | case OpenMetaverse.GroupRoleUpdate.Delete: | 791 | case OpenMetaverse.GroupRoleUpdate.Delete: |
741 | m_groupData.RemoveGroupRole(groupID, roleID); | 792 | m_groupData.RemoveGroupRole(grID, groupID, roleID); |
742 | break; | 793 | break; |
743 | 794 | ||
744 | case OpenMetaverse.GroupRoleUpdate.UpdateAll: | 795 | case OpenMetaverse.GroupRoleUpdate.UpdateAll: |
745 | case OpenMetaverse.GroupRoleUpdate.UpdateData: | 796 | case OpenMetaverse.GroupRoleUpdate.UpdateData: |
746 | case OpenMetaverse.GroupRoleUpdate.UpdatePowers: | 797 | case OpenMetaverse.GroupRoleUpdate.UpdatePowers: |
747 | m_groupData.UpdateGroupRole(groupID, roleID, name, description, title, powers); | 798 | m_groupData.UpdateGroupRole(grID, groupID, roleID, name, description, title, powers); |
748 | break; | 799 | break; |
749 | 800 | ||
750 | case OpenMetaverse.GroupRoleUpdate.NoUpdate: | 801 | case OpenMetaverse.GroupRoleUpdate.NoUpdate: |
@@ -763,16 +814,18 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
763 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 814 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
764 | // Todo: Security check | 815 | // Todo: Security check |
765 | 816 | ||
817 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); | ||
818 | |||
766 | switch (changes) | 819 | switch (changes) |
767 | { | 820 | { |
768 | case 0: | 821 | case 0: |
769 | // Add | 822 | // Add |
770 | m_groupData.AddAgentToGroupRole(memberID, groupID, roleID); | 823 | m_groupData.AddAgentToGroupRole(grID, memberID, groupID, roleID); |
771 | 824 | ||
772 | break; | 825 | break; |
773 | case 1: | 826 | case 1: |
774 | // Remove | 827 | // Remove |
775 | m_groupData.RemoveAgentFromGroupRole(memberID, groupID, roleID); | 828 | m_groupData.RemoveAgentFromGroupRole(grID, memberID, groupID, roleID); |
776 | 829 | ||
777 | break; | 830 | break; |
778 | default: | 831 | default: |
@@ -788,12 +841,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
788 | { | 841 | { |
789 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 842 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
790 | 843 | ||
791 | 844 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); | |
792 | GroupNoticeInfo data = m_groupData.GetGroupNotice(groupNoticeID); | 845 | |
846 | GroupNoticeInfo data = m_groupData.GetGroupNotice(grID, groupNoticeID); | ||
793 | 847 | ||
794 | if (data != null) | 848 | if (data != null) |
795 | { | 849 | { |
796 | GroupRecord groupInfo = m_groupData.GetGroupRecord(data.GroupID, null); | 850 | GroupRecord groupInfo = m_groupData.GetGroupRecord(grID, data.GroupID, null); |
797 | 851 | ||
798 | GridInstantMessage msg = new GridInstantMessage(); | 852 | GridInstantMessage msg = new GridInstantMessage(); |
799 | msg.imSessionID = UUID.Zero.Guid; | 853 | msg.imSessionID = UUID.Zero.Guid; |
@@ -825,12 +879,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
825 | msg.dialog = dialog; | 879 | msg.dialog = dialog; |
826 | // msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNotice; | 880 | // msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNotice; |
827 | msg.fromGroup = true; | 881 | msg.fromGroup = true; |
828 | msg.offline = (byte)0; | 882 | msg.offline = (byte)1; // Allow this message to be stored for offline use |
829 | msg.ParentEstateID = 0; | 883 | msg.ParentEstateID = 0; |
830 | msg.Position = Vector3.Zero; | 884 | msg.Position = Vector3.Zero; |
831 | msg.RegionID = UUID.Zero.Guid; | 885 | msg.RegionID = UUID.Zero.Guid; |
832 | 886 | ||
833 | GroupNoticeInfo info = m_groupData.GetGroupNotice(groupNoticeID); | 887 | GroupNoticeInfo info = m_groupData.GetGroupNotice(null, groupNoticeID); |
834 | if (info != null) | 888 | if (info != null) |
835 | { | 889 | { |
836 | msg.fromAgentID = info.GroupID.Guid; | 890 | msg.fromAgentID = info.GroupID.Guid; |
@@ -865,7 +919,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
865 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 919 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
866 | 920 | ||
867 | // Should check to see if OpenEnrollment, or if there's an outstanding invitation | 921 | // Should check to see if OpenEnrollment, or if there's an outstanding invitation |
868 | m_groupData.AddAgentToGroup(remoteClient.AgentId, groupID, UUID.Zero); | 922 | m_groupData.AddAgentToGroup(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID, UUID.Zero); |
869 | 923 | ||
870 | remoteClient.SendJoinGroupReply(groupID, true); | 924 | remoteClient.SendJoinGroupReply(groupID, true); |
871 | 925 | ||
@@ -877,7 +931,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
877 | { | 931 | { |
878 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 932 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
879 | 933 | ||
880 | m_groupData.RemoveAgentFromGroup(remoteClient.AgentId, groupID); | 934 | m_groupData.RemoveAgentFromGroup(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID); |
881 | 935 | ||
882 | remoteClient.SendLeaveGroupReply(groupID, true); | 936 | remoteClient.SendLeaveGroupReply(groupID, true); |
883 | 937 | ||
@@ -892,12 +946,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
892 | { | 946 | { |
893 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 947 | if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
894 | 948 | ||
949 | GroupRequestID grID = GetClientGroupRequestID(remoteClient); | ||
950 | |||
895 | // Todo: Security check? | 951 | // Todo: Security check? |
896 | m_groupData.RemoveAgentFromGroup(ejecteeID, groupID); | 952 | m_groupData.RemoveAgentFromGroup(grID, ejecteeID, groupID); |
897 | 953 | ||
898 | remoteClient.SendEjectGroupMemberReply(remoteClient.AgentId, groupID, true); | 954 | remoteClient.SendEjectGroupMemberReply(remoteClient.AgentId, groupID, true); |
899 | 955 | ||
900 | GroupRecord groupInfo = m_groupData.GetGroupRecord(groupID, null); | 956 | GroupRecord groupInfo = m_groupData.GetGroupRecord(grID, groupID, null); |
901 | UserProfileData userProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(ejecteeID); | 957 | UserProfileData userProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(ejecteeID); |
902 | 958 | ||
903 | if ((groupInfo == null) || (userProfile == null)) | 959 | if ((groupInfo == null) || (userProfile == null)) |
@@ -969,7 +1025,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
969 | 1025 | ||
970 | // Todo: Security check, probably also want to send some kind of notification | 1026 | // Todo: Security check, probably also want to send some kind of notification |
971 | UUID InviteID = UUID.Random(); | 1027 | UUID InviteID = UUID.Random(); |
972 | m_groupData.AddAgentToGroupInvite(InviteID, groupID, roleID, invitedAgentID); | 1028 | m_groupData.AddAgentToGroupInvite(GetClientGroupRequestID(remoteClient), InviteID, groupID, roleID, invitedAgentID); |
973 | 1029 | ||
974 | if (m_msgTransferModule != null) | 1030 | if (m_msgTransferModule != null) |
975 | { | 1031 | { |
@@ -1031,6 +1087,37 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1031 | return child; | 1087 | return child; |
1032 | } | 1088 | } |
1033 | 1089 | ||
1090 | private GroupRequestID GetClientGroupRequestID(IClientAPI client) | ||
1091 | { | ||
1092 | lock (m_clientRequestIDInfo) | ||
1093 | { | ||
1094 | if (!m_clientRequestIDInfo.ContainsKey(client.AgentId)) | ||
1095 | { | ||
1096 | GroupRequestIDInfo info = new GroupRequestIDInfo(); | ||
1097 | info.RequestID.AgentID = client.AgentId; | ||
1098 | info.RequestID.SessionID = client.SessionId; | ||
1099 | |||
1100 | UserProfileData userProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(client.AgentId); | ||
1101 | if (userProfile is ForeignUserProfileData) | ||
1102 | { | ||
1103 | // They aren't from around here | ||
1104 | ForeignUserProfileData fupd = (ForeignUserProfileData)userProfile; | ||
1105 | info.RequestID.UserServiceURL = fupd.UserServerURI; | ||
1106 | } | ||
1107 | else | ||
1108 | { | ||
1109 | // They're a local user, use this: | ||
1110 | info.RequestID.UserServiceURL = m_sceneList[0].CommsManager.NetworkServersInfo.UserURL; | ||
1111 | } | ||
1112 | |||
1113 | m_clientRequestIDInfo.Add(client.AgentId, info); | ||
1114 | } | ||
1115 | |||
1116 | m_clientRequestIDInfo[client.AgentId].LastUsedTMStamp = DateTime.Now; | ||
1117 | } | ||
1118 | return m_clientRequestIDInfo[client.AgentId].RequestID; | ||
1119 | } | ||
1120 | |||
1034 | /// <summary> | 1121 | /// <summary> |
1035 | /// Send 'remoteClient' the group membership 'data' for agent 'dataForAgentID'. | 1122 | /// Send 'remoteClient' the group membership 'data' for agent 'dataForAgentID'. |
1036 | /// </summary> | 1123 | /// </summary> |
@@ -1120,23 +1207,25 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1120 | /// <summary> | 1207 | /// <summary> |
1121 | /// Update remoteClient with group information about dataForAgentID | 1208 | /// Update remoteClient with group information about dataForAgentID |
1122 | /// </summary> | 1209 | /// </summary> |
1123 | private void SendAgentGroupDataUpdate(IClientAPI client, UUID dataForAgentID) | 1210 | private void SendAgentGroupDataUpdate(IClientAPI remoteClient, UUID dataForAgentID) |
1124 | { | 1211 | { |
1125 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS]: {0} called for {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, client.Name); | 1212 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS]: {0} called for {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, remoteClient.Name); |
1126 | 1213 | ||
1127 | // TODO: All the client update functions need to be reexamined because most do too much and send too much stuff | 1214 | // TODO: All the client update functions need to be reexamined because most do too much and send too much stuff |
1128 | 1215 | ||
1129 | OnAgentDataUpdateRequest(client, dataForAgentID, UUID.Zero); | 1216 | OnAgentDataUpdateRequest(remoteClient, dataForAgentID, UUID.Zero); |
1130 | 1217 | ||
1131 | 1218 | ||
1132 | // Need to send a group membership update to the client | 1219 | // Need to send a group membership update to the client |
1133 | // UDP version doesn't seem to behave nicely | 1220 | // UDP version doesn't seem to behave nicely. But we're going to send it out here |
1134 | // client.SendGroupMembership(GetMembershipData(client.AgentId)); | 1221 | // with an empty group membership to hopefully remove groups being displayed due |
1222 | // to the core Groups Stub | ||
1223 | remoteClient.SendGroupMembership( new GroupMembershipData[0] ); | ||
1135 | 1224 | ||
1136 | GroupMembershipData[] membershipData = m_groupData.GetAgentGroupMemberships(dataForAgentID).ToArray(); | 1225 | GroupMembershipData[] membershipData = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(remoteClient), dataForAgentID).ToArray(); |
1137 | 1226 | ||
1138 | SendGroupMembershipInfoViaCaps(client, dataForAgentID, membershipData); | 1227 | SendGroupMembershipInfoViaCaps(remoteClient, dataForAgentID, membershipData); |
1139 | client.SendAvatarGroupsReply(dataForAgentID, membershipData); | 1228 | remoteClient.SendAvatarGroupsReply(dataForAgentID, membershipData); |
1140 | 1229 | ||
1141 | } | 1230 | } |
1142 | 1231 | ||