aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2014-03-12 19:31:04 +0000
committerJustin Clark-Casey (justincc)2014-03-12 19:31:04 +0000
commitbeba20846f1935e2769f78fb0c87746cf77a6b50 (patch)
treecea7c1bce6d3b3938d61620d15ae73cc7b535985
parentEnable MapImageServiceModule with no refresh (diff)
downloadopensim-SC-beba20846f1935e2769f78fb0c87746cf77a6b50.zip
opensim-SC-beba20846f1935e2769f78fb0c87746cf77a6b50.tar.gz
opensim-SC-beba20846f1935e2769f78fb0c87746cf77a6b50.tar.bz2
opensim-SC-beba20846f1935e2769f78fb0c87746cf77a6b50.tar.xz
When sending group notices through group messaging, allow the agent ID to use for fetching group data to be different from im.fromAgentID
This is because xmlrpcgroups currently always checks visibility for the requesting agent ID (unlike Groups v2, which can accept UUID.Zero) But group notice IMs have a from agent which is the group rather than the sending agent. Further addresses http://opensimulator.org/mantis/view.php?id=7037
-rw-r--r--OpenSim/Addons/Groups/GroupsMessagingModule.cs10
-rw-r--r--OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs7
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs9
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs3
4 files changed, 19 insertions, 10 deletions
diff --git a/OpenSim/Addons/Groups/GroupsMessagingModule.cs b/OpenSim/Addons/Groups/GroupsMessagingModule.cs
index f701e48..92528a2 100644
--- a/OpenSim/Addons/Groups/GroupsMessagingModule.cs
+++ b/OpenSim/Addons/Groups/GroupsMessagingModule.cs
@@ -83,7 +83,6 @@ namespace OpenSim.Groups
83 private Dictionary<UUID, List<string>> m_groupsAgentsDroppedFromChatSession = new Dictionary<UUID, List<string>>(); 83 private Dictionary<UUID, List<string>> m_groupsAgentsDroppedFromChatSession = new Dictionary<UUID, List<string>>();
84 private Dictionary<UUID, List<string>> m_groupsAgentsInvitedToChatSession = new Dictionary<UUID, List<string>>(); 84 private Dictionary<UUID, List<string>> m_groupsAgentsInvitedToChatSession = new Dictionary<UUID, List<string>>();
85 85
86
87 #region Region Module interfaceBase Members 86 #region Region Module interfaceBase Members
88 87
89 public void Initialise(IConfigSource config) 88 public void Initialise(IConfigSource config)
@@ -242,13 +241,18 @@ namespace OpenSim.Groups
242 241
243 public void SendMessageToGroup(GridInstantMessage im, UUID groupID) 242 public void SendMessageToGroup(GridInstantMessage im, UUID groupID)
244 { 243 {
245 SendMessageToGroup(im, groupID, null); 244 SendMessageToGroup(im, groupID, UUID.Zero, null);
246 } 245 }
247 246
248 public void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func<GroupMembersData, bool> sendCondition) 247 public void SendMessageToGroup(
248 GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition)
249 { 249 {
250 UUID fromAgentID = new UUID(im.fromAgentID); 250 UUID fromAgentID = new UUID(im.fromAgentID);
251
252 // Unlike current XmlRpcGroups, Groups V2 can accept UUID.Zero when a perms check for the requesting agent
253 // is not necessary.
251 List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), groupID); 254 List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), groupID);
255
252 int groupMembersCount = groupMembers.Count; 256 int groupMembersCount = groupMembers.Count;
253 PresenceInfo[] onlineAgents = null; 257 PresenceInfo[] onlineAgents = null;
254 258
diff --git a/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs b/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs
index 61bd153..7dc1552 100644
--- a/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs
@@ -83,10 +83,15 @@ namespace OpenSim.Region.Framework.Interfaces
83 /// dialog - This must be (byte)InstantMessageDialog.SessionSend 83 /// dialog - This must be (byte)InstantMessageDialog.SessionSend
84 /// </param> 84 /// </param>
85 /// <param name="groupID"></param> 85 /// <param name="groupID"></param>
86 /// <param name="sendingAgentForGroupCalls">
87 /// The requesting agent to use when querying the groups service. Sometimes this is different from
88 /// im.fromAgentID, with group notices, for example.
89 /// </param>
86 /// <param name="sendCondition"> 90 /// <param name="sendCondition">
87 /// The condition that must be met by a member for the message to be sent. If null then the message is sent 91 /// The condition that must be met by a member for the message to be sent. If null then the message is sent
88 /// if the chat session is active. 92 /// if the chat session is active.
89 /// </param> 93 /// </param>
90 void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func<GroupMembersData, bool> sendCondition); 94 void SendMessageToGroup(
95 GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition);
91 } 96 }
92} \ No newline at end of file 97} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
index 741a98f..fd804cd 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
@@ -238,15 +238,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
238 } 238 }
239 } 239 }
240 240
241
242 public void SendMessageToGroup(GridInstantMessage im, UUID groupID) 241 public void SendMessageToGroup(GridInstantMessage im, UUID groupID)
243 { 242 {
244 SendMessageToGroup(im, groupID, null); 243 SendMessageToGroup(im, groupID, new UUID(im.fromAgentID), null);
245 } 244 }
246 245
247 public void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func<GroupMembersData, bool> sendCondition) 246 public void SendMessageToGroup(
247 GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition)
248 { 248 {
249 List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(new UUID(im.fromAgentID), groupID); 249 List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(sendingAgentForGroupCalls, groupID);
250 int groupMembersCount = groupMembers.Count; 250 int groupMembersCount = groupMembers.Count;
251 251
252 if (m_messageOnlineAgentsOnly) 252 if (m_messageOnlineAgentsOnly)
@@ -489,7 +489,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
489 489
490 #endregion 490 #endregion
491 491
492
493 #region ClientEvents 492 #region ClientEvents
494 private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) 493 private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
495 { 494 {
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index d4f70a7..fc8cae2 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -538,7 +538,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
538 = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice); 538 = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice);
539 539
540 if (m_groupsMessagingModule != null) 540 if (m_groupsMessagingModule != null)
541 m_groupsMessagingModule.SendMessageToGroup(msg, GroupID, gmd => gmd.AcceptNotices); 541 m_groupsMessagingModule.SendMessageToGroup(
542 msg, GroupID, remoteClient.AgentId, gmd => gmd.AcceptNotices);
542 } 543 }
543 } 544 }
544 545