diff --git a/OpenSim/Addons/Groups/GroupsMessagingModule.cs b/OpenSim/Addons/Groups/GroupsMessagingModule.cs index f701e48c06..92528a2dc9 100644 --- a/OpenSim/Addons/Groups/GroupsMessagingModule.cs +++ b/OpenSim/Addons/Groups/GroupsMessagingModule.cs @@ -83,7 +83,6 @@ namespace OpenSim.Groups private Dictionary> m_groupsAgentsDroppedFromChatSession = new Dictionary>(); private Dictionary> m_groupsAgentsInvitedToChatSession = new Dictionary>(); - #region Region Module interfaceBase Members public void Initialise(IConfigSource config) @@ -242,13 +241,18 @@ namespace OpenSim.Groups public void SendMessageToGroup(GridInstantMessage im, UUID groupID) { - SendMessageToGroup(im, groupID, null); + SendMessageToGroup(im, groupID, UUID.Zero, null); } - public void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func sendCondition) + public void SendMessageToGroup( + GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func sendCondition) { UUID fromAgentID = new UUID(im.fromAgentID); + + // Unlike current XmlRpcGroups, Groups V2 can accept UUID.Zero when a perms check for the requesting agent + // is not necessary. List groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), groupID); + int groupMembersCount = groupMembers.Count; PresenceInfo[] onlineAgents = null; diff --git a/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs b/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs index 61bd153ae0..7dc1552e94 100644 --- a/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IGroupsMessagingModule.cs @@ -83,10 +83,15 @@ namespace OpenSim.Region.Framework.Interfaces /// dialog - This must be (byte)InstantMessageDialog.SessionSend /// /// + /// + /// The requesting agent to use when querying the groups service. Sometimes this is different from + /// im.fromAgentID, with group notices, for example. + /// /// /// The condition that must be met by a member for the message to be sent. If null then the message is sent /// if the chat session is active. /// - void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func sendCondition); + void SendMessageToGroup( + GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func sendCondition); } } \ 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 741a98f69a..fd804cda95 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 } } - public void SendMessageToGroup(GridInstantMessage im, UUID groupID) { - SendMessageToGroup(im, groupID, null); + SendMessageToGroup(im, groupID, new UUID(im.fromAgentID), null); } - public void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func sendCondition) + public void SendMessageToGroup( + GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func sendCondition) { - List groupMembers = m_groupData.GetGroupMembers(new UUID(im.fromAgentID), groupID); + List groupMembers = m_groupData.GetGroupMembers(sendingAgentForGroupCalls, groupID); int groupMembersCount = groupMembers.Count; if (m_messageOnlineAgentsOnly) @@ -489,7 +489,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups #endregion - #region ClientEvents private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) { diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index d4f70a75ca..fc8cae2664 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 = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice); if (m_groupsMessagingModule != null) - m_groupsMessagingModule.SendMessageToGroup(msg, GroupID, gmd => gmd.AcceptNotices); + m_groupsMessagingModule.SendMessageToGroup( + msg, GroupID, remoteClient.AgentId, gmd => gmd.AcceptNotices); } }