Merge branch 'master' into careminster-presence-refactor
commit
fe034dc3e4
|
@ -139,6 +139,9 @@ namespace OpenSim.Framework.Communications.Osp
|
|||
/// </returns>
|
||||
protected static UUID ResolveOspaName(string name, IUserAccountService userService)
|
||||
{
|
||||
if (userService == null)
|
||||
return UUID.Zero;
|
||||
|
||||
int nameSeparatorIndex = name.IndexOf(OSPA_NAME_VALUE_SEPARATOR);
|
||||
|
||||
if (nameSeparatorIndex < 0)
|
||||
|
|
|
@ -208,6 +208,8 @@ namespace OpenSim.Framework.Serialization
|
|||
m_bw.Write(header);
|
||||
|
||||
// Write out data
|
||||
// An IOException occurs if we try to write out an empty array in Mono 2.6
|
||||
if (data.Length > 0)
|
||||
m_bw.Write(data);
|
||||
|
||||
if (data.Length % 512 != 0)
|
||||
|
|
|
@ -513,6 +513,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
byte flags = buffer.Data[0];
|
||||
bool isResend = (flags & Helpers.MSG_RESENT) != 0;
|
||||
bool isReliable = (flags & Helpers.MSG_RELIABLE) != 0;
|
||||
bool isZerocoded = (flags & Helpers.MSG_ZEROCODED) != 0;
|
||||
LLUDPClient udpClient = outgoingPacket.Client;
|
||||
|
||||
if (!udpClient.IsConnected)
|
||||
|
@ -522,6 +523,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
int dataLength = buffer.DataLength;
|
||||
|
||||
// NOTE: I'm seeing problems with some viewers when ACKs are appended to zerocoded packets so I've disabled that here
|
||||
if (!isZerocoded)
|
||||
{
|
||||
// Keep appending ACKs until there is no room left in the buffer or there are
|
||||
// no more ACKs to append
|
||||
uint ackCount = 0;
|
||||
|
@ -540,6 +544,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
// Set the appended ACKs flag on this packet
|
||||
buffer.Data[0] = (byte)(buffer.Data[0] | Helpers.MSG_APPENDED_ACKS);
|
||||
}
|
||||
}
|
||||
|
||||
buffer.DataLength = dataLength;
|
||||
|
||||
|
|
|
@ -173,11 +173,11 @@ namespace OpenSim.Region.CoreModules.Framework.Library
|
|||
m_log.InfoFormat("[LIBRARY MODULE]: Loading library archive {0} ({1})...", iarFileName, simpleName);
|
||||
simpleName = GetInventoryPathFromName(simpleName);
|
||||
|
||||
InventoryArchiveReadRequest archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, simpleName, iarFileName);
|
||||
try
|
||||
{
|
||||
InventoryArchiveReadRequest archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, simpleName, iarFileName);
|
||||
List<InventoryNodeBase> nodes = archread.Execute();
|
||||
if (nodes.Count == 0)
|
||||
if (nodes != null && nodes.Count == 0)
|
||||
{
|
||||
// didn't find the subfolder with the given name; place it on the top
|
||||
m_log.InfoFormat("[LIBRARY MODULE]: Didn't find {0} in library. Placing archive on the top level", simpleName);
|
||||
|
@ -185,16 +185,33 @@ namespace OpenSim.Region.CoreModules.Framework.Library
|
|||
archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName);
|
||||
archread.Execute();
|
||||
}
|
||||
archread.Close();
|
||||
foreach (InventoryNodeBase node in nodes)
|
||||
FixPerms(node);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[LIBRARY MODULE]: Exception when processing archive {0}: {1}", iarFileName, e.Message);
|
||||
m_log.DebugFormat("[LIBRARY MODULE]: Exception when processing archive {0}: {1}", iarFileName, e.StackTrace);
|
||||
}
|
||||
finally
|
||||
{
|
||||
archread.Close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void FixPerms(InventoryNodeBase node)
|
||||
{
|
||||
if (node is InventoryItemBase)
|
||||
{
|
||||
InventoryItemBase item = (InventoryItemBase)node;
|
||||
item.BasePermissions = 0x7FFFFFFF;
|
||||
item.EveryOnePermissions = 0x7FFFFFFF;
|
||||
item.CurrentPermissions = 0x7FFFFFFF;
|
||||
item.NextPermissions = 0x7FFFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
private void DumpLibrary()
|
||||
{
|
||||
InventoryFolderImpl lib = m_Library.LibraryRootFolder;
|
||||
|
|
|
@ -1,9 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) Thomas Grimshaw and Magne Metaverse Research
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* This module is not open source. All rights reserved.
|
||||
* Unauthorised copying, distribution or public display is prohibited.
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
|
|
@ -144,6 +144,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
|||
return account;
|
||||
}
|
||||
|
||||
public override bool StoreUserAccount(UserAccount data)
|
||||
{
|
||||
// This remote connector refuses to serve this method
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// Provide mechanisms for messaging groups.
|
||||
/// </summary>
|
||||
///
|
||||
/// TODO: Provide a mechanism for receiving group messages as well as sending them
|
||||
///
|
||||
public interface IGroupsMessagingModule
|
||||
{
|
||||
/// <summary>
|
||||
/// Start a group chat session.
|
||||
/// </summary>
|
||||
/// You must call this before calling SendMessageToGroup(). If a chat session for this group is already taking
|
||||
/// place then the agent will added to that session.
|
||||
/// <param name="agentID">
|
||||
/// A UUID that represents the agent being added. If you are agentless (e.g. you are
|
||||
/// a region module), then you can use any random ID.
|
||||
/// </param>
|
||||
/// <param name="groupID">
|
||||
/// The ID for the group to join. Currently, the session ID used is identical to the
|
||||
/// group ID.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// True if the chat session was started successfully, false otherwise.
|
||||
/// </returns>
|
||||
bool StartGroupChatSession(UUID agentID, UUID groupID);
|
||||
|
||||
/// <summary>
|
||||
/// Send a message to an entire group.
|
||||
/// </summary>
|
||||
/// <param name="im">
|
||||
/// The message itself. The fields that must be populated are
|
||||
///
|
||||
/// imSessionID - Populate this with the group ID (session ID and group ID are currently identical)
|
||||
/// fromAgentName - Populate this with whatever arbitrary name you want to show up in the chat dialog
|
||||
/// message - The message itself
|
||||
/// dialog - This must be (byte)InstantMessageDialog.SessionSend
|
||||
/// </param>
|
||||
/// <param name="groupID"></param>
|
||||
void SendMessageToGroup(GridInstantMessage im, UUID groupID);
|
||||
}
|
||||
}
|
|
@ -28,41 +28,30 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
|
||||
using log4net;
|
||||
using Mono.Addins;
|
||||
using Nini.Config;
|
||||
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.StructuredData;
|
||||
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.CoreModules.Framework.EventQueue;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
|
||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||
|
||||
namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||
{
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class GroupsMessagingModule : ISharedRegionModule
|
||||
public class GroupsMessagingModule : ISharedRegionModule, IGroupsMessagingModule
|
||||
{
|
||||
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private List<Scene> m_sceneList = new List<Scene>();
|
||||
|
||||
private IMessageTransferModule m_msgTransferModule = null;
|
||||
|
||||
private IGroupsModule m_groupsModule = null;
|
||||
|
||||
// TODO: Move this off to the Groups Server
|
||||
public Dictionary<Guid, List<Guid>> m_agentsInGroupSession = new Dictionary<Guid, List<Guid>>();
|
||||
public Dictionary<Guid, List<Guid>> m_agentsDroppedSession = new Dictionary<Guid, List<Guid>>();
|
||||
|
||||
private IGroupsServicesConnector m_groupData = null;
|
||||
|
||||
// Config Options
|
||||
private bool m_groupMessagingEnabled = false;
|
||||
|
@ -108,8 +97,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
// NoOp
|
||||
if (!m_groupMessagingEnabled)
|
||||
return;
|
||||
|
||||
scene.RegisterModuleInterface<IGroupsMessagingModule>(this);
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
if (!m_groupMessagingEnabled)
|
||||
|
@ -117,12 +110,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
m_groupsModule = scene.RequestModuleInterface<IGroupsModule>();
|
||||
m_groupData = scene.RequestModuleInterface<IGroupsServicesConnector>();
|
||||
|
||||
// No groups module, no groups messaging
|
||||
if (m_groupsModule == null)
|
||||
if (m_groupData == null)
|
||||
{
|
||||
m_log.Error("[GROUPS-MESSAGING]: Could not get IGroupsModule, GroupsMessagingModule is now disabled.");
|
||||
m_log.Error("[GROUPS-MESSAGING]: Could not get IGroupsServicesConnector, GroupsMessagingModule is now disabled.");
|
||||
Close();
|
||||
m_groupMessagingEnabled = false;
|
||||
return;
|
||||
|
@ -144,7 +137,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
scene.EventManager.OnNewClient += OnNewClient;
|
||||
scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
|
||||
|
||||
scene.EventManager.OnClientLogin += OnClientLogin;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
|
@ -172,7 +165,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
m_sceneList.Clear();
|
||||
|
||||
m_groupsModule = null;
|
||||
m_groupData = null;
|
||||
m_msgTransferModule = null;
|
||||
}
|
||||
|
||||
|
@ -197,8 +190,84 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Not really needed, but does confirm that the group exists.
|
||||
/// </summary>
|
||||
public bool StartGroupChatSession(UUID agentID, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled)
|
||||
m_log.DebugFormat("[GROUPS-MESSAGING]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(agentID, groupID, null);
|
||||
|
||||
if (groupInfo != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendMessageToGroup(GridInstantMessage im, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled)
|
||||
m_log.DebugFormat("[GROUPS-MESSAGING]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
|
||||
foreach (GroupMembersData member in m_groupData.GetGroupMembers(UUID.Zero, groupID))
|
||||
{
|
||||
if (m_groupData.hasAgentDroppedGroupChatSession(member.AgentID, groupID))
|
||||
{
|
||||
// Don't deliver messages to people who have dropped this session
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: {0} has dropped session, not delivering to them", member.AgentID);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Copy Message
|
||||
GridInstantMessage msg = new GridInstantMessage();
|
||||
msg.imSessionID = groupID.Guid;
|
||||
msg.fromAgentName = im.fromAgentName;
|
||||
msg.message = im.message;
|
||||
msg.dialog = im.dialog;
|
||||
msg.offline = im.offline;
|
||||
msg.ParentEstateID = im.ParentEstateID;
|
||||
msg.Position = im.Position;
|
||||
msg.RegionID = im.RegionID;
|
||||
msg.binaryBucket = im.binaryBucket;
|
||||
msg.timestamp = (uint)Util.UnixTimeSinceEpoch();
|
||||
|
||||
msg.fromAgentID = im.fromAgentID;
|
||||
msg.fromGroup = true;
|
||||
|
||||
msg.toAgentID = member.AgentID.Guid;
|
||||
|
||||
IClientAPI client = GetActiveClient(member.AgentID);
|
||||
if (client == null)
|
||||
{
|
||||
// If they're not local, forward across the grid
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Delivering to {0} via Grid", member.AgentID);
|
||||
m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { });
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deliver locally, directly
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Passing to ProcessMessageFromGroupSession to deliver to {0} locally", client.Name);
|
||||
ProcessMessageFromGroupSession(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region SimGridEventHandlers
|
||||
|
||||
void OnClientLogin(IClientAPI client)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: OnInstantMessage registered for {0}", client.Name);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void OnNewClient(IClientAPI client)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: OnInstantMessage registered for {0}", client.Name);
|
||||
|
@ -236,42 +305,46 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Session message from {0} going to agent {1}", msg.fromAgentName, msg.toAgentID);
|
||||
|
||||
UUID AgentID = new UUID(msg.fromAgentID);
|
||||
UUID GroupID = new UUID(msg.imSessionID);
|
||||
|
||||
switch (msg.dialog)
|
||||
{
|
||||
case (byte)InstantMessageDialog.SessionAdd:
|
||||
AddAgentToGroupSession(msg.fromAgentID, msg.imSessionID);
|
||||
m_groupData.AgentInvitedToGroupChatSession(AgentID, GroupID);
|
||||
break;
|
||||
|
||||
case (byte)InstantMessageDialog.SessionDrop:
|
||||
RemoveAgentFromGroupSession(msg.fromAgentID, msg.imSessionID);
|
||||
m_groupData.AgentDroppedFromGroupChatSession(AgentID, GroupID);
|
||||
break;
|
||||
|
||||
case (byte)InstantMessageDialog.SessionSend:
|
||||
if (!m_agentsInGroupSession.ContainsKey(msg.toAgentID)
|
||||
&& !m_agentsDroppedSession.ContainsKey(msg.toAgentID))
|
||||
if (!m_groupData.hasAgentDroppedGroupChatSession(AgentID, GroupID)
|
||||
&& !m_groupData.hasAgentBeenInvitedToGroupChatSession(AgentID, GroupID)
|
||||
)
|
||||
{
|
||||
// Agent not in session and hasn't dropped from session
|
||||
// Add them to the session for now, and Invite them
|
||||
AddAgentToGroupSession(msg.toAgentID, msg.imSessionID);
|
||||
m_groupData.AgentInvitedToGroupChatSession(AgentID, GroupID);
|
||||
|
||||
UUID toAgentID = new UUID(msg.toAgentID);
|
||||
IClientAPI activeClient = GetActiveClient(toAgentID);
|
||||
if (activeClient != null)
|
||||
{
|
||||
UUID groupID = new UUID(msg.fromAgentID);
|
||||
|
||||
GroupRecord groupInfo = m_groupsModule.GetGroupRecord(groupID);
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(UUID.Zero, GroupID, null);
|
||||
if (groupInfo != null)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Sending chatterbox invite instant message");
|
||||
|
||||
// Force? open the group session dialog???
|
||||
// and simultanously deliver the message, so we don't need to do a seperate client.SendInstantMessage(msg);
|
||||
IEventQueue eq = activeClient.Scene.RequestModuleInterface<IEventQueue>();
|
||||
eq.ChatterboxInvitation(
|
||||
groupID
|
||||
GroupID
|
||||
, groupInfo.GroupName
|
||||
, new UUID(msg.fromAgentID)
|
||||
, msg.message, new UUID(msg.toAgentID)
|
||||
, msg.message
|
||||
, new UUID(msg.toAgentID)
|
||||
, msg.fromAgentName
|
||||
, msg.dialog
|
||||
, msg.timestamp
|
||||
|
@ -285,7 +358,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
);
|
||||
|
||||
eq.ChatterBoxSessionAgentListUpdates(
|
||||
new UUID(groupID)
|
||||
new UUID(GroupID)
|
||||
, new UUID(msg.fromAgentID)
|
||||
, new UUID(msg.toAgentID)
|
||||
, false //canVoiceChat
|
||||
|
@ -295,7 +368,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (!m_agentsDroppedSession.ContainsKey(msg.toAgentID))
|
||||
else if (!m_groupData.hasAgentDroppedGroupChatSession(AgentID, GroupID))
|
||||
{
|
||||
// User hasn't dropped, so they're in the session,
|
||||
// maybe we should deliver it.
|
||||
|
@ -321,56 +394,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region ClientEvents
|
||||
|
||||
private void RemoveAgentFromGroupSession(Guid agentID, Guid sessionID)
|
||||
{
|
||||
if (m_agentsInGroupSession.ContainsKey(sessionID))
|
||||
{
|
||||
// If in session remove
|
||||
if (m_agentsInGroupSession[sessionID].Contains(agentID))
|
||||
{
|
||||
m_agentsInGroupSession[sessionID].Remove(agentID);
|
||||
}
|
||||
|
||||
// If not in dropped list, add
|
||||
if (!m_agentsDroppedSession[sessionID].Contains(agentID))
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Dropped {1} from session {0}", sessionID, agentID);
|
||||
m_agentsDroppedSession[sessionID].Add(agentID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddAgentToGroupSession(Guid agentID, Guid sessionID)
|
||||
{
|
||||
// Add Session Status if it doesn't exist for this session
|
||||
CreateGroupSessionTracking(sessionID);
|
||||
|
||||
// If nessesary, remove from dropped list
|
||||
if (m_agentsDroppedSession[sessionID].Contains(agentID))
|
||||
{
|
||||
m_agentsDroppedSession[sessionID].Remove(agentID);
|
||||
}
|
||||
|
||||
// If nessesary, add to in session list
|
||||
if (!m_agentsInGroupSession[sessionID].Contains(agentID))
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Added {1} to session {0}", sessionID, agentID);
|
||||
m_agentsInGroupSession[sessionID].Add(agentID);
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateGroupSessionTracking(Guid sessionID)
|
||||
{
|
||||
if (!m_agentsInGroupSession.ContainsKey(sessionID))
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Creating session tracking for : {0}", sessionID);
|
||||
m_agentsInGroupSession.Add(sessionID, new List<Guid>());
|
||||
m_agentsDroppedSession.Add(sessionID, new List<Guid>());
|
||||
}
|
||||
}
|
||||
|
||||
private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
|
||||
{
|
||||
if (m_debugEnabled)
|
||||
|
@ -383,21 +408,23 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
// Start group IM session
|
||||
if ((im.dialog == (byte)InstantMessageDialog.SessionGroupStart))
|
||||
{
|
||||
UUID groupID = new UUID(im.toAgentID);
|
||||
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING]: imSessionID({0}) toAgentID({1})", im.imSessionID, im.toAgentID);
|
||||
|
||||
UUID GroupID = new UUID(im.imSessionID);
|
||||
UUID AgentID = new UUID(im.fromAgentID);
|
||||
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(UUID.Zero, GroupID, null);
|
||||
|
||||
GroupRecord groupInfo = m_groupsModule.GetGroupRecord(groupID);
|
||||
if (groupInfo != null)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Start Group Session for {0}", groupInfo.GroupName);
|
||||
m_groupData.AgentInvitedToGroupChatSession(AgentID, GroupID);
|
||||
|
||||
AddAgentToGroupSession(im.fromAgentID, im.imSessionID);
|
||||
|
||||
ChatterBoxSessionStartReplyViaCaps(remoteClient, groupInfo.GroupName, groupID);
|
||||
ChatterBoxSessionStartReplyViaCaps(remoteClient, groupInfo.GroupName, GroupID);
|
||||
|
||||
IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>();
|
||||
queue.ChatterBoxSessionAgentListUpdates(
|
||||
new UUID(groupID)
|
||||
, new UUID(im.fromAgentID)
|
||||
GroupID
|
||||
, AgentID
|
||||
, new UUID(im.toAgentID)
|
||||
, false //canVoiceChat
|
||||
, false //isModerator
|
||||
|
@ -409,64 +436,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
// Send a message from locally connected client to a group
|
||||
if ((im.dialog == (byte)InstantMessageDialog.SessionSend))
|
||||
{
|
||||
UUID groupID = new UUID(im.toAgentID);
|
||||
UUID GroupID = new UUID(im.imSessionID);
|
||||
UUID AgentID = new UUID(im.fromAgentID);
|
||||
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Send message to session for group {0} with session ID {1}", groupID, im.imSessionID.ToString());
|
||||
if (m_debugEnabled)
|
||||
m_log.DebugFormat("[GROUPS-MESSAGING]: Send message to session for group {0} with session ID {1}", GroupID, im.imSessionID.ToString());
|
||||
|
||||
SendMessageToGroup(im, groupID);
|
||||
//If this agent is sending a message, then they want to be in the session
|
||||
m_groupData.AgentInvitedToGroupChatSession(AgentID, GroupID);
|
||||
|
||||
SendMessageToGroup(im, GroupID);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void SendMessageToGroup(GridInstantMessage im, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
foreach (GroupMembersData member in m_groupsModule.GroupMembersRequest(null, groupID))
|
||||
{
|
||||
if (!m_agentsDroppedSession.ContainsKey(im.imSessionID) || m_agentsDroppedSession[im.imSessionID].Contains(member.AgentID.Guid))
|
||||
{
|
||||
// Don't deliver messages to people who have dropped this session
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: {0} has dropped session, not delivering to them", member.AgentID);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Copy Message
|
||||
GridInstantMessage msg = new GridInstantMessage();
|
||||
msg.imSessionID = im.imSessionID;
|
||||
msg.fromAgentName = im.fromAgentName;
|
||||
msg.message = im.message;
|
||||
msg.dialog = im.dialog;
|
||||
msg.offline = im.offline;
|
||||
msg.ParentEstateID = im.ParentEstateID;
|
||||
msg.Position = im.Position;
|
||||
msg.RegionID = im.RegionID;
|
||||
msg.binaryBucket = im.binaryBucket;
|
||||
msg.timestamp = (uint)Util.UnixTimeSinceEpoch();
|
||||
|
||||
// Updat Pertinate fields to make it a "group message"
|
||||
msg.fromAgentID = groupID.Guid;
|
||||
msg.fromGroup = true;
|
||||
|
||||
msg.toAgentID = member.AgentID.Guid;
|
||||
|
||||
IClientAPI client = GetActiveClient(member.AgentID);
|
||||
if (client == null)
|
||||
{
|
||||
// If they're not local, forward across the grid
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Delivering to {0} via Grid", member.AgentID);
|
||||
m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { });
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deliver locally, directly
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Passing to ProcessMessageFromGroupSession to deliver to {0} locally", client.Name);
|
||||
ProcessMessageFromGroupSession(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ChatterBoxSessionStartReplyViaCaps(IClientAPI remoteClient, string groupName, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
@ -518,6 +502,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
/// </summary>
|
||||
private IClientAPI GetActiveClient(UUID agentID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Looking for local client {0}", agentID);
|
||||
|
||||
IClientAPI child = null;
|
||||
|
||||
// Try root avatar first
|
||||
|
@ -529,16 +515,26 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
ScenePresence user = (ScenePresence)scene.Entities[agentID];
|
||||
if (!user.IsChildAgent)
|
||||
{
|
||||
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", user.ControllingClient.Name);
|
||||
return user.ControllingClient;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", user.ControllingClient.Name);
|
||||
child = user.ControllingClient;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find a root, then just return whichever child we found, or null if none
|
||||
if (child == null)
|
||||
{
|
||||
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Could not find local client for agent : {0}", agentID);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Returning child agent for client : {0}", child.Name);
|
||||
}
|
||||
return child;
|
||||
}
|
||||
|
||||
|
|
|
@ -89,16 +89,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
private IGroupsServicesConnector m_groupData = null;
|
||||
|
||||
class GroupRequestIDInfo
|
||||
{
|
||||
public GroupRequestID RequestID = new GroupRequestID();
|
||||
public DateTime LastUsedTMStamp = DateTime.MinValue;
|
||||
}
|
||||
private Dictionary<UUID, GroupRequestIDInfo> m_clientRequestIDInfo = new Dictionary<UUID, GroupRequestIDInfo>();
|
||||
private const int m_clientRequestIDFlushTimeOut = 300000; // Every 5 minutes
|
||||
private Timer m_clientRequestIDFlushTimer;
|
||||
|
||||
|
||||
// Configuration settings
|
||||
private bool m_groupsEnabled = false;
|
||||
private bool m_groupNoticesEnabled = true;
|
||||
|
@ -135,30 +125,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
m_groupNoticesEnabled = groupsConfig.GetBoolean("NoticesEnabled", true);
|
||||
m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true);
|
||||
|
||||
m_clientRequestIDFlushTimer = new Timer();
|
||||
m_clientRequestIDFlushTimer.Interval = m_clientRequestIDFlushTimeOut;
|
||||
m_clientRequestIDFlushTimer.Elapsed += FlushClientRequestIDInfoCache;
|
||||
m_clientRequestIDFlushTimer.AutoReset = true;
|
||||
m_clientRequestIDFlushTimer.Start();
|
||||
}
|
||||
}
|
||||
|
||||
void FlushClientRequestIDInfoCache(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
lock (m_clientRequestIDInfo)
|
||||
{
|
||||
TimeSpan cacheTimeout = new TimeSpan(0,0, m_clientRequestIDFlushTimeOut / 1000);
|
||||
UUID[] CurrentKeys = new UUID[m_clientRequestIDInfo.Count];
|
||||
foreach (UUID key in CurrentKeys)
|
||||
{
|
||||
if (m_clientRequestIDInfo.ContainsKey(key))
|
||||
{
|
||||
if (DateTime.Now - m_clientRequestIDInfo[key].LastUsedTMStamp > cacheTimeout)
|
||||
{
|
||||
m_clientRequestIDInfo.Remove(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -210,7 +176,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
scene.EventManager.OnNewClient += OnNewClient;
|
||||
scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
|
||||
|
||||
// The InstantMessageModule itself doesn't do this,
|
||||
// so lets see if things explode if we don't do it
|
||||
// scene.EventManager.OnClientClosed += OnClientClosed;
|
||||
|
@ -236,8 +201,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return;
|
||||
|
||||
if (m_debugEnabled) m_log.Debug("[GROUPS]: Shutting down Groups module.");
|
||||
|
||||
m_clientRequestIDFlushTimer.Stop();
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
|
@ -274,14 +237,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
// Used for Notices and Group Invites/Accept/Reject
|
||||
client.OnInstantMessage += OnInstantMessage;
|
||||
|
||||
lock (m_clientRequestIDInfo)
|
||||
{
|
||||
if (m_clientRequestIDInfo.ContainsKey(client.AgentId))
|
||||
{
|
||||
// flush any old RequestID information
|
||||
m_clientRequestIDInfo.Remove(client.AgentId);
|
||||
}
|
||||
}
|
||||
// Send client thier groups information.
|
||||
SendAgentGroupDataUpdate(client, client.AgentId);
|
||||
}
|
||||
|
||||
|
@ -289,7 +245,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
//GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(remoteClient), avatarID).ToArray();
|
||||
//GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(GetRequestingAgentID(remoteClient), avatarID).ToArray();
|
||||
GroupMembershipData[] avatarGroups = GetProfileListedGroupMemberships(remoteClient, avatarID);
|
||||
remoteClient.SendAvatarGroupsReply(avatarID, avatarGroups);
|
||||
}
|
||||
|
@ -338,9 +294,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart);
|
||||
|
||||
// TODO: This currently ignores pretty much all the query flags including Mature and sort order
|
||||
remoteClient.SendDirGroupsReply(
|
||||
queryID, m_groupData.FindGroups(GetClientGroupRequestID(remoteClient), queryText).ToArray());
|
||||
remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(GetRequestingAgentID(remoteClient), queryText).ToArray());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void OnAgentDataUpdateRequest(IClientAPI remoteClient, UUID dataForAgentID, UUID sessionID)
|
||||
|
@ -352,7 +308,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
string activeGroupName = string.Empty;
|
||||
ulong activeGroupPowers = (ulong)GroupPowers.None;
|
||||
|
||||
GroupMembershipData membership = m_groupData.GetAgentActiveMembership(GetClientGroupRequestID(remoteClient), dataForAgentID);
|
||||
GroupMembershipData membership = m_groupData.GetAgentActiveMembership(GetRequestingAgentID(remoteClient), dataForAgentID);
|
||||
if (membership != null)
|
||||
{
|
||||
activeGroupID = membership.GroupID;
|
||||
|
@ -371,7 +327,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
string GroupName;
|
||||
|
||||
GroupRecord group = m_groupData.GetGroupRecord(GetClientGroupRequestID(remoteClient), GroupID, null);
|
||||
GroupRecord group = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), GroupID, null);
|
||||
if (group != null)
|
||||
{
|
||||
GroupName = group.GroupName;
|
||||
|
@ -392,7 +348,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline))
|
||||
{
|
||||
UUID inviteID = new UUID(im.imSessionID);
|
||||
GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(GetClientGroupRequestID(remoteClient), inviteID);
|
||||
GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(GetRequestingAgentID(remoteClient), inviteID);
|
||||
|
||||
if (inviteInfo == null)
|
||||
{
|
||||
|
@ -411,7 +367,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Received an accept invite notice.");
|
||||
|
||||
// and the sessionid is the role
|
||||
m_groupData.AddAgentToGroup(GetClientGroupRequestID(remoteClient), inviteInfo.AgentID, inviteInfo.GroupID, inviteInfo.RoleID);
|
||||
m_groupData.AddAgentToGroup(GetRequestingAgentID(remoteClient), inviteInfo.AgentID, inviteInfo.GroupID, inviteInfo.RoleID);
|
||||
|
||||
GridInstantMessage msg = new GridInstantMessage();
|
||||
msg.imSessionID = UUID.Zero.Guid;
|
||||
|
@ -435,14 +391,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
// TODO: If the inviter is still online, they need an agent dataupdate
|
||||
// and maybe group membership updates for the invitee
|
||||
|
||||
m_groupData.RemoveAgentToGroupInvite(GetClientGroupRequestID(remoteClient), inviteID);
|
||||
m_groupData.RemoveAgentToGroupInvite(GetRequestingAgentID(remoteClient), inviteID);
|
||||
}
|
||||
|
||||
// Reject
|
||||
if (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Received a reject invite notice.");
|
||||
m_groupData.RemoveAgentToGroupInvite(GetClientGroupRequestID(remoteClient), inviteID);
|
||||
m_groupData.RemoveAgentToGroupInvite(GetRequestingAgentID(remoteClient), inviteID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -456,7 +412,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
|
||||
UUID GroupID = new UUID(im.toAgentID);
|
||||
if (m_groupData.GetGroupRecord(GetClientGroupRequestID(remoteClient), GroupID, null) != null)
|
||||
if (m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), GroupID, null) != null)
|
||||
{
|
||||
UUID NoticeID = UUID.Random();
|
||||
string Subject = im.message.Substring(0, im.message.IndexOf('|'));
|
||||
|
@ -500,14 +456,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
|
||||
|
||||
m_groupData.AddGroupNotice(GetClientGroupRequestID(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket);
|
||||
m_groupData.AddGroupNotice(GetRequestingAgentID(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket);
|
||||
if (OnNewGroupNotice != null)
|
||||
{
|
||||
OnNewGroupNotice(GroupID, NoticeID);
|
||||
}
|
||||
|
||||
// Send notice out to everyone that wants notices
|
||||
foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), GroupID))
|
||||
foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetRequestingAgentID(remoteClient), GroupID))
|
||||
{
|
||||
if (m_debugEnabled)
|
||||
{
|
||||
|
@ -553,7 +509,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
IClientAPI ejectee = GetActiveClient(ejecteeID);
|
||||
if (ejectee != null)
|
||||
{
|
||||
UUID groupID = new UUID(im.fromAgentID);
|
||||
UUID groupID = new UUID(im.imSessionID);
|
||||
ejectee.SendAgentDropGroup(groupID);
|
||||
}
|
||||
}
|
||||
|
@ -592,25 +548,25 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
public GroupRecord GetGroupRecord(UUID GroupID)
|
||||
{
|
||||
return m_groupData.GetGroupRecord(null, GroupID, null);
|
||||
return m_groupData.GetGroupRecord(UUID.Zero, GroupID, null);
|
||||
}
|
||||
|
||||
public GroupRecord GetGroupRecord(string name)
|
||||
{
|
||||
return m_groupData.GetGroupRecord(null, UUID.Zero, name);
|
||||
return m_groupData.GetGroupRecord(UUID.Zero, UUID.Zero, name);
|
||||
}
|
||||
|
||||
public void ActivateGroup(IClientAPI remoteClient, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
m_groupData.SetAgentActiveGroup(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID);
|
||||
m_groupData.SetAgentActiveGroup(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID);
|
||||
|
||||
// Changing active group changes title, active powers, all kinds of things
|
||||
// anyone who is in any region that can see this client, should probably be
|
||||
// updated with new group info. At a minimum, they should get ScenePresence
|
||||
// updated with new title.
|
||||
UpdateAllClientsWithGroupInfo(remoteClient.AgentId);
|
||||
UpdateAllClientsWithGroupInfo(GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -620,10 +576,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
List<GroupRolesData> agentRoles = m_groupData.GetAgentGroupRoles(grID, remoteClient.AgentId, groupID);
|
||||
GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(grID, remoteClient.AgentId, groupID);
|
||||
List<GroupRolesData> agentRoles = m_groupData.GetAgentGroupRoles(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID);
|
||||
GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID);
|
||||
|
||||
List<GroupTitlesData> titles = new List<GroupTitlesData>();
|
||||
foreach (GroupRolesData role in agentRoles)
|
||||
|
@ -645,8 +600,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
public List<GroupMembersData> GroupMembersRequest(IClientAPI remoteClient, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
List<GroupMembersData> data = m_groupData.GetGroupMembers(GetRequestingAgentID(remoteClient), groupID);
|
||||
|
||||
List<GroupMembersData> data = m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), groupID);
|
||||
if (m_debugEnabled)
|
||||
{
|
||||
foreach (GroupMembersData member in data)
|
||||
{
|
||||
m_log.DebugFormat("[GROUPS]: Member({0}) - IsOwner({1})", member.AgentID, member.IsOwner);
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
|
||||
|
@ -656,7 +618,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
List<GroupRolesData> data = m_groupData.GetGroupRoles(GetClientGroupRequestID(remoteClient), groupID);
|
||||
List<GroupRolesData> data = m_groupData.GetGroupRoles(GetRequestingAgentID(remoteClient), groupID);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -665,8 +627,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(GetClientGroupRequestID(remoteClient), groupID);
|
||||
List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(GetRequestingAgentID(remoteClient), groupID);
|
||||
|
||||
if (m_debugEnabled)
|
||||
{
|
||||
foreach (GroupRoleMembersData member in data)
|
||||
{
|
||||
m_log.DebugFormat("[GROUPS]: Member({0}) - Role({1})", member.MemberID, member.RoleID);
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
|
@ -676,17 +645,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
GroupProfileData profile = new GroupProfileData();
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(GetClientGroupRequestID(remoteClient), groupID, null);
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null);
|
||||
if (groupInfo != null)
|
||||
{
|
||||
profile.AllowPublish = groupInfo.AllowPublish;
|
||||
profile.Charter = groupInfo.Charter;
|
||||
profile.FounderID = groupInfo.FounderID;
|
||||
profile.GroupID = groupID;
|
||||
profile.GroupMembershipCount = m_groupData.GetGroupMembers(grID, groupID).Count;
|
||||
profile.GroupRolesCount = m_groupData.GetGroupRoles(grID, groupID).Count;
|
||||
profile.GroupMembershipCount = m_groupData.GetGroupMembers(GetRequestingAgentID(remoteClient), groupID).Count;
|
||||
profile.GroupRolesCount = m_groupData.GetGroupRoles(GetRequestingAgentID(remoteClient), groupID).Count;
|
||||
profile.InsigniaID = groupInfo.GroupPicture;
|
||||
profile.MaturePublish = groupInfo.MaturePublish;
|
||||
profile.MembershipFee = groupInfo.MembershipFee;
|
||||
|
@ -697,7 +665,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
profile.ShowInList = groupInfo.ShowInList;
|
||||
}
|
||||
|
||||
GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(grID, remoteClient.AgentId, groupID);
|
||||
GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID);
|
||||
if (memberInfo != null)
|
||||
{
|
||||
profile.MemberTitle = memberInfo.GroupTitle;
|
||||
|
@ -711,7 +679,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
return m_groupData.GetAgentGroupMemberships(null, agentID).ToArray();
|
||||
return m_groupData.GetAgentGroupMemberships(UUID.Zero, agentID).ToArray();
|
||||
}
|
||||
|
||||
public GroupMembershipData GetMembershipData(UUID groupID, UUID agentID)
|
||||
|
@ -721,33 +689,30 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
"[GROUPS]: {0} called with groupID={1}, agentID={2}",
|
||||
System.Reflection.MethodBase.GetCurrentMethod().Name, groupID, agentID);
|
||||
|
||||
return m_groupData.GetAgentGroupMembership(null, agentID, groupID);
|
||||
return m_groupData.GetAgentGroupMembership(UUID.Zero, agentID, groupID);
|
||||
}
|
||||
|
||||
public void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
// TODO: Security Check?
|
||||
|
||||
m_groupData.UpdateGroup(GetClientGroupRequestID(remoteClient), groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish);
|
||||
// Note: Permissions checking for modification rights is handled by the Groups Server/Service
|
||||
m_groupData.UpdateGroup(GetRequestingAgentID(remoteClient), groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish);
|
||||
}
|
||||
|
||||
public void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile)
|
||||
{
|
||||
// TODO: Security Check?
|
||||
// Note: Permissions checking for modification rights is handled by the Groups Server/Service
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
m_groupData.SetAgentGroupInfo(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID, acceptNotices, listInProfile);
|
||||
m_groupData.SetAgentGroupInfo(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID, acceptNotices, listInProfile);
|
||||
}
|
||||
|
||||
public UUID CreateGroup(IClientAPI remoteClient, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
if (m_groupData.GetGroupRecord(grID, UUID.Zero, name) != null)
|
||||
if (m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), UUID.Zero, name) != null)
|
||||
{
|
||||
remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists.");
|
||||
return UUID.Zero;
|
||||
|
@ -761,14 +726,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
remoteClient.SendCreateGroupReply(UUID.Zero, false, "You have got issuficient funds to create a group.");
|
||||
return UUID.Zero;
|
||||
}
|
||||
money.ApplyGroupCreationCharge(remoteClient.AgentId);
|
||||
money.ApplyGroupCreationCharge(GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
UUID groupID = m_groupData.CreateGroup(grID, name, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish, remoteClient.AgentId);
|
||||
UUID groupID = m_groupData.CreateGroup(GetRequestingAgentID(remoteClient), name, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish, GetRequestingAgentID(remoteClient));
|
||||
|
||||
remoteClient.SendCreateGroupReply(groupID, true, "Group created successfullly");
|
||||
|
||||
// Update the founder with new group information.
|
||||
SendAgentGroupDataUpdate(remoteClient, remoteClient.AgentId);
|
||||
SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient));
|
||||
|
||||
return groupID;
|
||||
}
|
||||
|
@ -779,7 +744,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
// ToDo: check if agent is a member of group and is allowed to see notices?
|
||||
|
||||
return m_groupData.GetGroupNotices(GetClientGroupRequestID(remoteClient), groupID).ToArray();
|
||||
return m_groupData.GetGroupNotices(GetRequestingAgentID(remoteClient), groupID).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -789,7 +754,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
GroupMembershipData membership = m_groupData.GetAgentActiveMembership(null, avatarID);
|
||||
GroupMembershipData membership = m_groupData.GetAgentActiveMembership(UUID.Zero, avatarID);
|
||||
if (membership != null)
|
||||
{
|
||||
return membership.GroupTitle;
|
||||
|
@ -804,13 +769,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
m_groupData.SetAgentActiveGroupRole(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID, titleRoleID);
|
||||
m_groupData.SetAgentActiveGroupRole(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID, titleRoleID);
|
||||
|
||||
// TODO: Not sure what all is needed here, but if the active group role change is for the group
|
||||
// the client currently has set active, then we need to do a scene presence update too
|
||||
// if (m_groupData.GetAgentActiveMembership(remoteClient.AgentId).GroupID == GroupID)
|
||||
// if (m_groupData.GetAgentActiveMembership(GetRequestingAgentID(remoteClient)).GroupID == GroupID)
|
||||
|
||||
UpdateAllClientsWithGroupInfo(remoteClient.AgentId);
|
||||
UpdateAllClientsWithGroupInfo(GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
|
||||
|
@ -820,16 +785,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
// Security Checks are handled in the Groups Service.
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
switch ((OpenMetaverse.GroupRoleUpdate)updateType)
|
||||
{
|
||||
case OpenMetaverse.GroupRoleUpdate.Create:
|
||||
m_groupData.AddGroupRole(grID, groupID, UUID.Random(), name, description, title, powers);
|
||||
m_groupData.AddGroupRole(GetRequestingAgentID(remoteClient), groupID, UUID.Random(), name, description, title, powers);
|
||||
break;
|
||||
|
||||
case OpenMetaverse.GroupRoleUpdate.Delete:
|
||||
m_groupData.RemoveGroupRole(grID, groupID, roleID);
|
||||
m_groupData.RemoveGroupRole(GetRequestingAgentID(remoteClient), groupID, roleID);
|
||||
break;
|
||||
|
||||
case OpenMetaverse.GroupRoleUpdate.UpdateAll:
|
||||
|
@ -840,7 +803,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
GroupPowers gp = (GroupPowers)powers;
|
||||
m_log.DebugFormat("[GROUPS]: Role ({0}) updated with Powers ({1}) ({2})", name, powers.ToString(), gp.ToString());
|
||||
}
|
||||
m_groupData.UpdateGroupRole(grID, groupID, roleID, name, description, title, powers);
|
||||
m_groupData.UpdateGroupRole(GetRequestingAgentID(remoteClient), groupID, roleID, name, description, title, powers);
|
||||
break;
|
||||
|
||||
case OpenMetaverse.GroupRoleUpdate.NoUpdate:
|
||||
|
@ -851,7 +814,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
|
||||
// TODO: This update really should send out updates for everyone in the role that just got changed.
|
||||
SendAgentGroupDataUpdate(remoteClient, remoteClient.AgentId);
|
||||
SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
public void GroupRoleChanges(IClientAPI remoteClient, UUID groupID, UUID roleID, UUID memberID, uint changes)
|
||||
|
@ -859,18 +822,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
// Todo: Security check
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
switch (changes)
|
||||
{
|
||||
case 0:
|
||||
// Add
|
||||
m_groupData.AddAgentToGroupRole(grID, memberID, groupID, roleID);
|
||||
m_groupData.AddAgentToGroupRole(GetRequestingAgentID(remoteClient), memberID, groupID, roleID);
|
||||
|
||||
break;
|
||||
case 1:
|
||||
// Remove
|
||||
m_groupData.RemoveAgentFromGroupRole(grID, memberID, groupID, roleID);
|
||||
m_groupData.RemoveAgentFromGroupRole(GetRequestingAgentID(remoteClient), memberID, groupID, roleID);
|
||||
|
||||
break;
|
||||
default:
|
||||
|
@ -879,25 +840,23 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
|
||||
// TODO: This update really should send out updates for everyone in the role that just got changed.
|
||||
SendAgentGroupDataUpdate(remoteClient, remoteClient.AgentId);
|
||||
SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
public void GroupNoticeRequest(IClientAPI remoteClient, UUID groupNoticeID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
GroupNoticeInfo data = m_groupData.GetGroupNotice(grID, groupNoticeID);
|
||||
GroupNoticeInfo data = m_groupData.GetGroupNotice(GetRequestingAgentID(remoteClient), groupNoticeID);
|
||||
|
||||
if (data != null)
|
||||
{
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(grID, data.GroupID, null);
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), data.GroupID, null);
|
||||
|
||||
GridInstantMessage msg = new GridInstantMessage();
|
||||
msg.imSessionID = UUID.Zero.Guid;
|
||||
msg.fromAgentID = data.GroupID.Guid;
|
||||
msg.toAgentID = remoteClient.AgentId.Guid;
|
||||
msg.toAgentID = GetRequestingAgentID(remoteClient).Guid;
|
||||
msg.timestamp = (uint)Util.UnixTimeSinceEpoch();
|
||||
msg.fromAgentName = "Group Notice : " + groupInfo == null ? "Unknown" : groupInfo.GroupName;
|
||||
msg.message = data.noticeData.Subject + "|" + data.Message;
|
||||
|
@ -909,7 +868,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
msg.RegionID = UUID.Zero.Guid;
|
||||
msg.binaryBucket = data.BinaryBucket;
|
||||
|
||||
OutgoingInstantMessage(msg, remoteClient.AgentId);
|
||||
OutgoingInstantMessage(msg, GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -929,7 +888,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
msg.Position = Vector3.Zero;
|
||||
msg.RegionID = UUID.Zero.Guid;
|
||||
|
||||
GroupNoticeInfo info = m_groupData.GetGroupNotice(null, groupNoticeID);
|
||||
GroupNoticeInfo info = m_groupData.GetGroupNotice(agentID, groupNoticeID);
|
||||
if (info != null)
|
||||
{
|
||||
msg.fromAgentID = info.GroupID.Guid;
|
||||
|
@ -956,7 +915,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
// Send agent information about his groups
|
||||
SendAgentGroupDataUpdate(remoteClient, remoteClient.AgentId);
|
||||
SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
public void JoinGroupRequest(IClientAPI remoteClient, UUID groupID)
|
||||
|
@ -964,19 +923,19 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
// Should check to see if OpenEnrollment, or if there's an outstanding invitation
|
||||
m_groupData.AddAgentToGroup(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID, UUID.Zero);
|
||||
m_groupData.AddAgentToGroup(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID, UUID.Zero);
|
||||
|
||||
remoteClient.SendJoinGroupReply(groupID, true);
|
||||
|
||||
// Should this send updates to everyone in the group?
|
||||
SendAgentGroupDataUpdate(remoteClient, remoteClient.AgentId);
|
||||
SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
public void LeaveGroupRequest(IClientAPI remoteClient, UUID groupID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
m_groupData.RemoveAgentFromGroup(GetClientGroupRequestID(remoteClient), remoteClient.AgentId, groupID);
|
||||
m_groupData.RemoveAgentFromGroup(GetRequestingAgentID(remoteClient), GetRequestingAgentID(remoteClient), groupID);
|
||||
|
||||
remoteClient.SendLeaveGroupReply(groupID, true);
|
||||
|
||||
|
@ -984,33 +943,32 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
// SL sends out notifcations to the group messaging session that the person has left
|
||||
// Should this also update everyone who is in the group?
|
||||
SendAgentGroupDataUpdate(remoteClient, remoteClient.AgentId);
|
||||
SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
public void EjectGroupMemberRequest(IClientAPI remoteClient, UUID groupID, UUID ejecteeID)
|
||||
{
|
||||
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
|
||||
|
||||
GroupRequestID grID = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
// Todo: Security check?
|
||||
m_groupData.RemoveAgentFromGroup(grID, ejecteeID, groupID);
|
||||
m_groupData.RemoveAgentFromGroup(GetRequestingAgentID(remoteClient), ejecteeID, groupID);
|
||||
|
||||
remoteClient.SendEjectGroupMemberReply(remoteClient.AgentId, groupID, true);
|
||||
remoteClient.SendEjectGroupMemberReply(GetRequestingAgentID(remoteClient), groupID, true);
|
||||
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null);
|
||||
|
||||
GroupRecord groupInfo = m_groupData.GetGroupRecord(grID, groupID, null);
|
||||
UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(remoteClient.Scene.RegionInfo.ScopeID, ejecteeID);
|
||||
if ((groupInfo == null) || (account == null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Send Message to Ejectee
|
||||
GridInstantMessage msg = new GridInstantMessage();
|
||||
|
||||
msg.imSessionID = UUID.Zero.Guid;
|
||||
msg.fromAgentID = remoteClient.AgentId.Guid;
|
||||
msg.fromAgentID = GetRequestingAgentID(remoteClient).Guid;
|
||||
// msg.fromAgentID = info.GroupID;
|
||||
msg.toAgentID = ejecteeID.Guid;
|
||||
//msg.timestamp = (uint)Util.UnixTimeSinceEpoch();
|
||||
|
@ -1036,8 +994,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
msg = new GridInstantMessage();
|
||||
msg.imSessionID = UUID.Zero.Guid;
|
||||
msg.fromAgentID = remoteClient.AgentId.Guid;
|
||||
msg.toAgentID = remoteClient.AgentId.Guid;
|
||||
msg.fromAgentID = GetRequestingAgentID(remoteClient).Guid;
|
||||
msg.toAgentID = GetRequestingAgentID(remoteClient).Guid;
|
||||
msg.timestamp = 0;
|
||||
msg.fromAgentName = remoteClient.Name;
|
||||
if (account != null)
|
||||
|
@ -1055,7 +1013,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
msg.Position = Vector3.Zero;
|
||||
msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid;
|
||||
msg.binaryBucket = new byte[0];
|
||||
OutgoingInstantMessage(msg, remoteClient.AgentId);
|
||||
OutgoingInstantMessage(msg, GetRequestingAgentID(remoteClient));
|
||||
|
||||
|
||||
// SL sends out messages to everyone in the group
|
||||
|
@ -1069,13 +1027,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
// Todo: Security check, probably also want to send some kind of notification
|
||||
UUID InviteID = UUID.Random();
|
||||
GroupRequestID grid = GetClientGroupRequestID(remoteClient);
|
||||
|
||||
m_groupData.AddAgentToGroupInvite(grid, InviteID, groupID, roleID, invitedAgentID);
|
||||
m_groupData.AddAgentToGroupInvite(GetRequestingAgentID(remoteClient), InviteID, groupID, roleID, invitedAgentID);
|
||||
|
||||
// Check to see if the invite went through, if it did not then it's possible
|
||||
// the remoteClient did not validate or did not have permission to invite.
|
||||
GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(grid, InviteID);
|
||||
GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(GetRequestingAgentID(remoteClient), InviteID);
|
||||
|
||||
if (inviteInfo != null)
|
||||
{
|
||||
|
@ -1087,7 +1044,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
msg.imSessionID = inviteUUID;
|
||||
|
||||
// msg.fromAgentID = remoteClient.AgentId.Guid;
|
||||
// msg.fromAgentID = GetRequestingAgentID(remoteClient).Guid;
|
||||
msg.fromAgentID = groupID.Guid;
|
||||
msg.toAgentID = invitedAgentID.Guid;
|
||||
//msg.timestamp = (uint)Util.UnixTimeSinceEpoch();
|
||||
|
@ -1140,57 +1097,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return child;
|
||||
}
|
||||
|
||||
private GroupRequestID GetClientGroupRequestID(IClientAPI client)
|
||||
{
|
||||
if (client == null)
|
||||
{
|
||||
return new GroupRequestID();
|
||||
}
|
||||
|
||||
lock (m_clientRequestIDInfo)
|
||||
{
|
||||
if (!m_clientRequestIDInfo.ContainsKey(client.AgentId))
|
||||
{
|
||||
GroupRequestIDInfo info = new GroupRequestIDInfo();
|
||||
info.RequestID.AgentID = client.AgentId;
|
||||
info.RequestID.SessionID = client.SessionId;
|
||||
|
||||
//UserProfileData userProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(client.AgentId);
|
||||
UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, client.AgentId);
|
||||
if (account == null)
|
||||
{
|
||||
// This should be impossible. If I've been passed a reference to a client
|
||||
// that client should be registered with the UserService. So something
|
||||
// is horribly wrong somewhere.
|
||||
|
||||
m_log.WarnFormat("[GROUPS]: Could not find a user profile for {0} / {1}", client.Name, client.AgentId);
|
||||
|
||||
// Default to local user service and hope for the best?
|
||||
// REFACTORING PROBLEM
|
||||
//info.RequestID.UserServiceURL = m_sceneList[0].CommsManager.NetworkServersInfo.UserURL;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
string domain = string.Empty; //m_sceneList[0].CommsManager.NetworkServersInfo.UserURL;
|
||||
object homeUriObj;
|
||||
if (account.ServiceURLs.TryGetValue("HomeURI", out homeUriObj) && homeUriObj != null)
|
||||
domain = homeUriObj.ToString();
|
||||
// They're a local user, use this:
|
||||
info.RequestID.UserServiceURL = domain;
|
||||
}
|
||||
|
||||
m_clientRequestIDInfo.Add(client.AgentId, info);
|
||||
}
|
||||
|
||||
m_clientRequestIDInfo[client.AgentId].LastUsedTMStamp = DateTime.Now;
|
||||
|
||||
return m_clientRequestIDInfo[client.AgentId].RequestID;
|
||||
}
|
||||
// Unreachable code!
|
||||
// return new GroupRequestID();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send 'remoteClient' the group membership 'data' for agent 'dataForAgentID'.
|
||||
/// </summary>
|
||||
|
@ -1209,7 +1115,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
foreach (GroupMembershipData membership in data)
|
||||
{
|
||||
if (remoteClient.AgentId != dataForAgentID)
|
||||
if (GetRequestingAgentID(remoteClient) != dataForAgentID)
|
||||
{
|
||||
if (!membership.ListInProfile)
|
||||
{
|
||||
|
@ -1239,11 +1145,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
llDataStruct.Add("GroupData", GroupData);
|
||||
llDataStruct.Add("NewGroupData", NewGroupData);
|
||||
|
||||
if (m_debugEnabled)
|
||||
{
|
||||
m_log.InfoFormat("[GROUPS]: {0}", OSDParser.SerializeJsonString(llDataStruct));
|
||||
}
|
||||
|
||||
IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>();
|
||||
|
||||
if (queue != null)
|
||||
{
|
||||
queue.Enqueue(EventQueueHelper.buildEvent("AgentGroupDataUpdate", llDataStruct), remoteClient.AgentId);
|
||||
queue.Enqueue(EventQueueHelper.buildEvent("AgentGroupDataUpdate", llDataStruct), GetRequestingAgentID(remoteClient));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1316,7 +1227,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
/// <returns></returns>
|
||||
private GroupMembershipData[] GetProfileListedGroupMemberships(IClientAPI requestingClient, UUID dataForAgentID)
|
||||
{
|
||||
List<GroupMembershipData> membershipData = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(requestingClient), dataForAgentID);
|
||||
List<GroupMembershipData> membershipData = m_groupData.GetAgentGroupMemberships(requestingClient.AgentId, dataForAgentID);
|
||||
GroupMembershipData[] membershipArray;
|
||||
|
||||
if (requestingClient.AgentId != dataForAgentID)
|
||||
|
@ -1338,7 +1249,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
m_log.InfoFormat("[GROUPS]: Get group membership information for {0} requested by {1}", dataForAgentID, requestingClient.AgentId);
|
||||
foreach (GroupMembershipData membership in membershipArray)
|
||||
{
|
||||
m_log.InfoFormat("[GROUPS]: {0} :: {1} - {2}", dataForAgentID, membership.GroupName, membership.GroupTitle);
|
||||
m_log.InfoFormat("[GROUPS]: {0} :: {1} - {2} - {3}", dataForAgentID, membership.GroupName, membership.GroupTitle, membership.GroupPowers);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1397,6 +1308,23 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private UUID GetRequestingAgentID(IClientAPI client)
|
||||
{
|
||||
UUID requestingAgentID = UUID.Zero;
|
||||
if (client != null)
|
||||
{
|
||||
requestingAgentID = client.AgentId;
|
||||
}
|
||||
return requestingAgentID;
|
||||
}
|
||||
}
|
||||
|
||||
public class GroupNoticeInfo
|
||||
{
|
||||
public GroupNoticeData noticeData = new GroupNoticeData();
|
||||
public UUID GroupID = UUID.Zero;
|
||||
public string Message = string.Empty;
|
||||
public byte[] BinaryBucket = new byte[0];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,41 +36,47 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
{
|
||||
interface IGroupsServicesConnector
|
||||
{
|
||||
UUID CreateGroup(GroupRequestID requestID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish, UUID founderID);
|
||||
void UpdateGroup(GroupRequestID requestID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish);
|
||||
GroupRecord GetGroupRecord(GroupRequestID requestID, UUID GroupID, string GroupName);
|
||||
List<DirGroupsReplyData> FindGroups(GroupRequestID requestID, string search);
|
||||
List<GroupMembersData> GetGroupMembers(GroupRequestID requestID, UUID GroupID);
|
||||
UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish, UUID founderID);
|
||||
void UpdateGroup(UUID RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish);
|
||||
GroupRecord GetGroupRecord(UUID RequestingAgentID, UUID GroupID, string GroupName);
|
||||
List<DirGroupsReplyData> FindGroups(UUID RequestingAgentID, string search);
|
||||
List<GroupMembersData> GetGroupMembers(UUID RequestingAgentID, UUID GroupID);
|
||||
|
||||
void AddGroupRole(GroupRequestID requestID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers);
|
||||
void UpdateGroupRole(GroupRequestID requestID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers);
|
||||
void RemoveGroupRole(GroupRequestID requestID, UUID groupID, UUID roleID);
|
||||
List<GroupRolesData> GetGroupRoles(GroupRequestID requestID, UUID GroupID);
|
||||
List<GroupRoleMembersData> GetGroupRoleMembers(GroupRequestID requestID, UUID GroupID);
|
||||
void AddGroupRole(UUID RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers);
|
||||
void UpdateGroupRole(UUID RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers);
|
||||
void RemoveGroupRole(UUID RequestingAgentID, UUID groupID, UUID roleID);
|
||||
List<GroupRolesData> GetGroupRoles(UUID RequestingAgentID, UUID GroupID);
|
||||
List<GroupRoleMembersData> GetGroupRoleMembers(UUID RequestingAgentID, UUID GroupID);
|
||||
|
||||
void AddAgentToGroup(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
void RemoveAgentFromGroup(GroupRequestID requestID, UUID AgentID, UUID GroupID);
|
||||
void AddAgentToGroup(UUID RequestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
void RemoveAgentFromGroup(UUID RequestingAgentID, UUID AgentID, UUID GroupID);
|
||||
|
||||
void AddAgentToGroupInvite(GroupRequestID requestID, UUID inviteID, UUID groupID, UUID roleID, UUID agentID);
|
||||
GroupInviteInfo GetAgentToGroupInvite(GroupRequestID requestID, UUID inviteID);
|
||||
void RemoveAgentToGroupInvite(GroupRequestID requestID, UUID inviteID);
|
||||
void AddAgentToGroupInvite(UUID RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, UUID agentID);
|
||||
GroupInviteInfo GetAgentToGroupInvite(UUID RequestingAgentID, UUID inviteID);
|
||||
void RemoveAgentToGroupInvite(UUID RequestingAgentID, UUID inviteID);
|
||||
|
||||
void AddAgentToGroupRole(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
void RemoveAgentFromGroupRole(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
List<GroupRolesData> GetAgentGroupRoles(GroupRequestID requestID, UUID AgentID, UUID GroupID);
|
||||
void AddAgentToGroupRole(UUID RequestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
void RemoveAgentFromGroupRole(UUID RequestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
List<GroupRolesData> GetAgentGroupRoles(UUID RequestingAgentID, UUID AgentID, UUID GroupID);
|
||||
|
||||
void SetAgentActiveGroup(GroupRequestID requestID, UUID AgentID, UUID GroupID);
|
||||
GroupMembershipData GetAgentActiveMembership(GroupRequestID requestID, UUID AgentID);
|
||||
void SetAgentActiveGroup(UUID RequestingAgentID, UUID AgentID, UUID GroupID);
|
||||
GroupMembershipData GetAgentActiveMembership(UUID RequestingAgentID, UUID AgentID);
|
||||
|
||||
void SetAgentActiveGroupRole(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
void SetAgentGroupInfo(GroupRequestID requestID, UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile);
|
||||
void SetAgentActiveGroupRole(UUID RequestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID);
|
||||
void SetAgentGroupInfo(UUID RequestingAgentID, UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile);
|
||||
|
||||
GroupMembershipData GetAgentGroupMembership(GroupRequestID requestID, UUID AgentID, UUID GroupID);
|
||||
List<GroupMembershipData> GetAgentGroupMemberships(GroupRequestID requestID, UUID AgentID);
|
||||
GroupMembershipData GetAgentGroupMembership(UUID RequestingAgentID, UUID AgentID, UUID GroupID);
|
||||
List<GroupMembershipData> GetAgentGroupMemberships(UUID RequestingAgentID, UUID AgentID);
|
||||
|
||||
void AddGroupNotice(GroupRequestID requestID, UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket);
|
||||
GroupNoticeInfo GetGroupNotice(GroupRequestID requestID, UUID noticeID);
|
||||
List<GroupNoticeData> GetGroupNotices(GroupRequestID requestID, UUID GroupID);
|
||||
void AddGroupNotice(UUID RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket);
|
||||
GroupNoticeInfo GetGroupNotice(UUID RequestingAgentID, UUID noticeID);
|
||||
List<GroupNoticeData> GetGroupNotices(UUID RequestingAgentID, UUID GroupID);
|
||||
|
||||
void ResetAgentGroupChatSessions(UUID agentID);
|
||||
bool hasAgentBeenInvitedToGroupChatSession(UUID agentID, UUID groupID);
|
||||
bool hasAgentDroppedGroupChatSession(UUID agentID, UUID groupID);
|
||||
void AgentDroppedFromGroupChatSession(UUID agentID, UUID groupID);
|
||||
void AgentInvitedToGroupChatSession(UUID agentID, UUID groupID);
|
||||
}
|
||||
|
||||
public class GroupInviteInfo
|
||||
|
@ -80,11 +86,4 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
public UUID AgentID = UUID.Zero;
|
||||
public UUID InviteID = UUID.Zero;
|
||||
}
|
||||
|
||||
public class GroupRequestID
|
||||
{
|
||||
public UUID AgentID = UUID.Zero;
|
||||
public string UserServiceURL = string.Empty;
|
||||
public UUID SessionID = UUID.Zero;
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -40,7 +40,9 @@ using OpenMetaverse;
|
|||
using OpenMetaverse.StructuredData;
|
||||
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Communications;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Services.Interfaces;
|
||||
|
||||
namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||
{
|
||||
|
@ -59,13 +61,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
private bool m_connectorEnabled = false;
|
||||
|
||||
private string m_serviceURL = string.Empty;
|
||||
private string m_groupsServerURI = string.Empty;
|
||||
|
||||
private bool m_disableKeepAlive = false;
|
||||
|
||||
private string m_groupReadKey = string.Empty;
|
||||
private string m_groupWriteKey = string.Empty;
|
||||
|
||||
private IUserAccountService m_accountService = null;
|
||||
|
||||
// Used to track which agents are have dropped from a group chat session
|
||||
// Should be reset per agent, on logon
|
||||
// TODO: move this to Flotsam XmlRpc Service
|
||||
// SessionID, List<AgentID>
|
||||
private Dictionary<UUID, List<UUID>> m_groupsAgentsDroppedFromChatSession = new Dictionary<UUID, List<UUID>>();
|
||||
private Dictionary<UUID, List<UUID>> m_groupsAgentsInvitedToChatSession = new Dictionary<UUID, List<UUID>>();
|
||||
|
||||
|
||||
#region IRegionModuleBase Members
|
||||
|
||||
|
@ -102,11 +113,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
m_log.InfoFormat("[GROUPS-CONNECTOR]: Initializing {0}", this.Name);
|
||||
|
||||
m_serviceURL = groupsConfig.GetString("XmlRpcServiceURL", string.Empty);
|
||||
if ((m_serviceURL == null) ||
|
||||
(m_serviceURL == string.Empty))
|
||||
m_groupsServerURI = groupsConfig.GetString("GroupsServerURI", string.Empty);
|
||||
if ((m_groupsServerURI == null) ||
|
||||
(m_groupsServerURI == string.Empty))
|
||||
{
|
||||
m_log.ErrorFormat("Please specify a valid URL for XmlRpcServiceURL in OpenSim.ini, [Groups]");
|
||||
m_log.ErrorFormat("Please specify a valid URL for GroupsServerURI in OpenSim.ini, [Groups]");
|
||||
m_connectorEnabled = false;
|
||||
return;
|
||||
}
|
||||
|
@ -116,6 +127,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
m_groupReadKey = groupsConfig.GetString("XmlRpcServiceReadKey", string.Empty);
|
||||
m_groupWriteKey = groupsConfig.GetString("XmlRpcServiceWriteKey", string.Empty);
|
||||
|
||||
|
||||
|
||||
|
||||
// If we got all the config options we need, lets start'er'up
|
||||
m_connectorEnabled = true;
|
||||
}
|
||||
|
@ -129,14 +143,25 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
public void AddRegion(OpenSim.Region.Framework.Scenes.Scene scene)
|
||||
{
|
||||
if (m_connectorEnabled)
|
||||
{
|
||||
|
||||
if (m_accountService == null)
|
||||
{
|
||||
m_accountService = scene.UserAccountService;
|
||||
}
|
||||
|
||||
|
||||
scene.RegisterModuleInterface<IGroupsServicesConnector>(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveRegion(OpenSim.Region.Framework.Scenes.Scene scene)
|
||||
{
|
||||
if (scene.RequestModuleInterface<IGroupsServicesConnector>() == this)
|
||||
{
|
||||
scene.UnregisterModuleInterface<IGroupsServicesConnector>(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void RegionLoaded(OpenSim.Region.Framework.Scenes.Scene scene)
|
||||
{
|
||||
|
@ -155,14 +180,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region IGroupsServicesConnector Members
|
||||
|
||||
/// <summary>
|
||||
/// Create a Group, including Everyone and Owners Role, place FounderID in both groups, select Owner as selected role, and newly created group as agent's active role.
|
||||
/// </summary>
|
||||
public UUID CreateGroup(GroupRequestID requestID, string name, string charter, bool showInList, UUID insigniaID,
|
||||
public UUID CreateGroup(UUID requestingAgentID, string name, string charter, bool showInList, UUID insigniaID,
|
||||
int membershipFee, bool openEnrollment, bool allowPublish,
|
||||
bool maturePublish, UUID founderID)
|
||||
{
|
||||
|
@ -234,7 +257,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.createGroup", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.createGroup", param);
|
||||
|
||||
if (respData.Contains("error"))
|
||||
{
|
||||
|
@ -246,7 +269,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return UUID.Parse((string)respData["GroupID"]);
|
||||
}
|
||||
|
||||
public void UpdateGroup(GroupRequestID requestID, UUID groupID, string charter, bool showInList,
|
||||
public void UpdateGroup(UUID requestingAgentID, UUID groupID, string charter, bool showInList,
|
||||
UUID insigniaID, int membershipFee, bool openEnrollment,
|
||||
bool allowPublish, bool maturePublish)
|
||||
{
|
||||
|
@ -260,10 +283,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["AllowPublish"] = allowPublish == true ? 1 : 0;
|
||||
param["MaturePublish"] = maturePublish == true ? 1 : 0;
|
||||
|
||||
XmlRpcCall(requestID, "groups.updateGroup", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.updateGroup", param);
|
||||
}
|
||||
|
||||
public void AddGroupRole(GroupRequestID requestID, UUID groupID, UUID roleID, string name, string description,
|
||||
public void AddGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
|
||||
string title, ulong powers)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
|
@ -274,19 +297,19 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["Title"] = title;
|
||||
param["Powers"] = powers.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.addRoleToGroup", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.addRoleToGroup", param);
|
||||
}
|
||||
|
||||
public void RemoveGroupRole(GroupRequestID requestID, UUID groupID, UUID roleID)
|
||||
public void RemoveGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["GroupID"] = groupID.ToString();
|
||||
param["RoleID"] = roleID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.removeRoleFromGroup", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.removeRoleFromGroup", param);
|
||||
}
|
||||
|
||||
public void UpdateGroupRole(GroupRequestID requestID, UUID groupID, UUID roleID, string name, string description,
|
||||
public void UpdateGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
|
||||
string title, ulong powers)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
|
@ -306,10 +329,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
param["Powers"] = powers.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.updateGroupRole", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.updateGroupRole", param);
|
||||
}
|
||||
|
||||
public GroupRecord GetGroupRecord(GroupRequestID requestID, UUID GroupID, string GroupName)
|
||||
public GroupRecord GetGroupRecord(UUID requestingAgentID, UUID GroupID, string GroupName)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
if (GroupID != UUID.Zero)
|
||||
|
@ -321,7 +344,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["Name"] = GroupName.ToString();
|
||||
}
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroup", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroup", param);
|
||||
|
||||
if (respData.Contains("error"))
|
||||
{
|
||||
|
@ -332,12 +355,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
}
|
||||
|
||||
public GroupProfileData GetMemberGroupProfile(GroupRequestID requestID, UUID GroupID, UUID AgentID)
|
||||
public GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroup", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroup", param);
|
||||
|
||||
if (respData.Contains("error"))
|
||||
{
|
||||
|
@ -345,7 +368,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return new GroupProfileData();
|
||||
}
|
||||
|
||||
GroupMembershipData MemberInfo = GetAgentGroupMembership(requestID, AgentID, GroupID);
|
||||
GroupMembershipData MemberInfo = GetAgentGroupMembership(requestingAgentID, AgentID, GroupID);
|
||||
GroupProfileData MemberGroupProfile = GroupProfileHashtableToGroupProfileData(respData);
|
||||
|
||||
MemberGroupProfile.MemberTitle = MemberInfo.GroupTitle;
|
||||
|
@ -354,26 +377,26 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return MemberGroupProfile;
|
||||
}
|
||||
|
||||
public void SetAgentActiveGroup(GroupRequestID requestID, UUID AgentID, UUID GroupID)
|
||||
public void SetAgentActiveGroup(UUID requestingAgentID, UUID AgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.setAgentActiveGroup", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.setAgentActiveGroup", param);
|
||||
}
|
||||
|
||||
public void SetAgentActiveGroupRole(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
public void SetAgentActiveGroupRole(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
param["SelectedRoleID"] = RoleID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.setAgentGroupInfo", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.setAgentGroupInfo", param);
|
||||
}
|
||||
|
||||
public void SetAgentGroupInfo(GroupRequestID requestID, UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile)
|
||||
public void SetAgentGroupInfo(UUID requestingAgentID, UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
|
@ -381,11 +404,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["AcceptNotices"] = AcceptNotices ? "1" : "0";
|
||||
param["ListInProfile"] = ListInProfile ? "1" : "0";
|
||||
|
||||
XmlRpcCall(requestID, "groups.setAgentGroupInfo", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.setAgentGroupInfo", param);
|
||||
|
||||
}
|
||||
|
||||
public void AddAgentToGroupInvite(GroupRequestID requestID, UUID inviteID, UUID groupID, UUID roleID, UUID agentID)
|
||||
public void AddAgentToGroupInvite(UUID requestingAgentID, UUID inviteID, UUID groupID, UUID roleID, UUID agentID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["InviteID"] = inviteID.ToString();
|
||||
|
@ -393,16 +416,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["RoleID"] = roleID.ToString();
|
||||
param["GroupID"] = groupID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.addAgentToGroupInvite", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.addAgentToGroupInvite", param);
|
||||
|
||||
}
|
||||
|
||||
public GroupInviteInfo GetAgentToGroupInvite(GroupRequestID requestID, UUID inviteID)
|
||||
public GroupInviteInfo GetAgentToGroupInvite(UUID requestingAgentID, UUID inviteID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["InviteID"] = inviteID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getAgentToGroupInvite", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getAgentToGroupInvite", param);
|
||||
|
||||
if (respData.Contains("error"))
|
||||
{
|
||||
|
@ -418,59 +441,59 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return inviteInfo;
|
||||
}
|
||||
|
||||
public void RemoveAgentToGroupInvite(GroupRequestID requestID, UUID inviteID)
|
||||
public void RemoveAgentToGroupInvite(UUID requestingAgentID, UUID inviteID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["InviteID"] = inviteID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.removeAgentToGroupInvite", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.removeAgentToGroupInvite", param);
|
||||
}
|
||||
|
||||
public void AddAgentToGroup(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
public void AddAgentToGroup(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
param["RoleID"] = RoleID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.addAgentToGroup", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.addAgentToGroup", param);
|
||||
}
|
||||
|
||||
public void RemoveAgentFromGroup(GroupRequestID requestID, UUID AgentID, UUID GroupID)
|
||||
public void RemoveAgentFromGroup(UUID requestingAgentID, UUID AgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.removeAgentFromGroup", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.removeAgentFromGroup", param);
|
||||
}
|
||||
|
||||
public void AddAgentToGroupRole(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
public void AddAgentToGroupRole(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
param["RoleID"] = RoleID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.addAgentToGroupRole", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.addAgentToGroupRole", param);
|
||||
}
|
||||
|
||||
public void RemoveAgentFromGroupRole(GroupRequestID requestID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
public void RemoveAgentFromGroupRole(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
param["RoleID"] = RoleID.ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.removeAgentFromGroupRole", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.removeAgentFromGroupRole", param);
|
||||
}
|
||||
|
||||
public List<DirGroupsReplyData> FindGroups(GroupRequestID requestID, string search)
|
||||
public List<DirGroupsReplyData> FindGroups(UUID requestingAgentID, string search)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["Search"] = search;
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.findGroups", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.findGroups", param);
|
||||
|
||||
List<DirGroupsReplyData> findings = new List<DirGroupsReplyData>();
|
||||
|
||||
|
@ -492,13 +515,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return findings;
|
||||
}
|
||||
|
||||
public GroupMembershipData GetAgentGroupMembership(GroupRequestID requestID, UUID AgentID, UUID GroupID)
|
||||
public GroupMembershipData GetAgentGroupMembership(UUID requestingAgentID, UUID AgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getAgentGroupMembership", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getAgentGroupMembership", param);
|
||||
|
||||
if (respData.Contains("error"))
|
||||
{
|
||||
|
@ -510,12 +533,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return data;
|
||||
}
|
||||
|
||||
public GroupMembershipData GetAgentActiveMembership(GroupRequestID requestID, UUID AgentID)
|
||||
public GroupMembershipData GetAgentActiveMembership(UUID requestingAgentID, UUID AgentID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getAgentActiveMembership", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getAgentActiveMembership", param);
|
||||
|
||||
if (respData.Contains("error"))
|
||||
{
|
||||
|
@ -525,12 +548,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return HashTableToGroupMembershipData(respData);
|
||||
}
|
||||
|
||||
public List<GroupMembershipData> GetAgentGroupMemberships(GroupRequestID requestID, UUID AgentID)
|
||||
public List<GroupMembershipData> GetAgentGroupMemberships(UUID requestingAgentID, UUID AgentID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getAgentGroupMemberships", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getAgentGroupMemberships", param);
|
||||
|
||||
List<GroupMembershipData> memberships = new List<GroupMembershipData>();
|
||||
|
||||
|
@ -545,13 +568,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return memberships;
|
||||
}
|
||||
|
||||
public List<GroupRolesData> GetAgentGroupRoles(GroupRequestID requestID, UUID AgentID, UUID GroupID)
|
||||
public List<GroupRolesData> GetAgentGroupRoles(UUID requestingAgentID, UUID AgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["AgentID"] = AgentID.ToString();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getAgentRoles", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getAgentRoles", param);
|
||||
|
||||
List<GroupRolesData> Roles = new List<GroupRolesData>();
|
||||
|
||||
|
@ -577,12 +600,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
}
|
||||
|
||||
public List<GroupRolesData> GetGroupRoles(GroupRequestID requestID, UUID GroupID)
|
||||
public List<GroupRolesData> GetGroupRoles(UUID requestingAgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroupRoles", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroupRoles", param);
|
||||
|
||||
List<GroupRolesData> Roles = new List<GroupRolesData>();
|
||||
|
||||
|
@ -610,12 +633,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
|
||||
|
||||
public List<GroupMembersData> GetGroupMembers(GroupRequestID requestID, UUID GroupID)
|
||||
public List<GroupMembersData> GetGroupMembers(UUID requestingAgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroupMembers", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroupMembers", param);
|
||||
|
||||
List<GroupMembersData> members = new List<GroupMembersData>();
|
||||
|
||||
|
@ -643,12 +666,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
}
|
||||
|
||||
public List<GroupRoleMembersData> GetGroupRoleMembers(GroupRequestID requestID, UUID GroupID)
|
||||
public List<GroupRoleMembersData> GetGroupRoleMembers(UUID requestingAgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroupRoleMembers", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroupRoleMembers", param);
|
||||
|
||||
List<GroupRoleMembersData> members = new List<GroupRoleMembersData>();
|
||||
|
||||
|
@ -667,12 +690,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return members;
|
||||
}
|
||||
|
||||
public List<GroupNoticeData> GetGroupNotices(GroupRequestID requestID, UUID GroupID)
|
||||
public List<GroupNoticeData> GetGroupNotices(UUID requestingAgentID, UUID GroupID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["GroupID"] = GroupID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroupNotices", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroupNotices", param);
|
||||
|
||||
List<GroupNoticeData> values = new List<GroupNoticeData>();
|
||||
|
||||
|
@ -694,12 +717,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
return values;
|
||||
|
||||
}
|
||||
public GroupNoticeInfo GetGroupNotice(GroupRequestID requestID, UUID noticeID)
|
||||
public GroupNoticeInfo GetGroupNotice(UUID requestingAgentID, UUID noticeID)
|
||||
{
|
||||
Hashtable param = new Hashtable();
|
||||
param["NoticeID"] = noticeID.ToString();
|
||||
|
||||
Hashtable respData = XmlRpcCall(requestID, "groups.getGroupNotice", param);
|
||||
Hashtable respData = XmlRpcCall(requestingAgentID, "groups.getGroupNotice", param);
|
||||
|
||||
|
||||
if (respData.Contains("error"))
|
||||
|
@ -725,7 +748,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
return data;
|
||||
}
|
||||
public void AddGroupNotice(GroupRequestID requestID, UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket)
|
||||
public void AddGroupNotice(UUID requestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket)
|
||||
{
|
||||
string binBucket = OpenMetaverse.Utils.BytesToHexString(binaryBucket, "");
|
||||
|
||||
|
@ -738,7 +761,70 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["BinaryBucket"] = binBucket;
|
||||
param["TimeStamp"] = ((uint)Util.UnixTimeSinceEpoch()).ToString();
|
||||
|
||||
XmlRpcCall(requestID, "groups.addGroupNotice", param);
|
||||
XmlRpcCall(requestingAgentID, "groups.addGroupNotice", param);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region GroupSessionTracking
|
||||
|
||||
public void ResetAgentGroupChatSessions(UUID agentID)
|
||||
{
|
||||
foreach (List<UUID> agentList in m_groupsAgentsDroppedFromChatSession.Values)
|
||||
{
|
||||
agentList.Remove(agentID);
|
||||
}
|
||||
}
|
||||
|
||||
public bool hasAgentBeenInvitedToGroupChatSession(UUID agentID, UUID groupID)
|
||||
{
|
||||
// If we're tracking this group, and we can find them in the tracking, then they've been invited
|
||||
return m_groupsAgentsInvitedToChatSession.ContainsKey(groupID)
|
||||
&& m_groupsAgentsInvitedToChatSession[groupID].Contains(agentID);
|
||||
}
|
||||
|
||||
public bool hasAgentDroppedGroupChatSession(UUID agentID, UUID groupID)
|
||||
{
|
||||
// If we're tracking drops for this group,
|
||||
// and we find them, well... then they've dropped
|
||||
return m_groupsAgentsDroppedFromChatSession.ContainsKey(groupID)
|
||||
&& m_groupsAgentsDroppedFromChatSession[groupID].Contains(agentID);
|
||||
}
|
||||
|
||||
public void AgentDroppedFromGroupChatSession(UUID agentID, UUID groupID)
|
||||
{
|
||||
if (m_groupsAgentsDroppedFromChatSession.ContainsKey(groupID))
|
||||
{
|
||||
// If not in dropped list, add
|
||||
if (!m_groupsAgentsDroppedFromChatSession[groupID].Contains(agentID))
|
||||
{
|
||||
m_groupsAgentsDroppedFromChatSession[groupID].Add(agentID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AgentInvitedToGroupChatSession(UUID agentID, UUID groupID)
|
||||
{
|
||||
// Add Session Status if it doesn't exist for this session
|
||||
CreateGroupChatSessionTracking(groupID);
|
||||
|
||||
// If nessesary, remove from dropped list
|
||||
if (m_groupsAgentsDroppedFromChatSession[groupID].Contains(agentID))
|
||||
{
|
||||
m_groupsAgentsDroppedFromChatSession[groupID].Remove(agentID);
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateGroupChatSessionTracking(UUID groupID)
|
||||
{
|
||||
if (!m_groupsAgentsDroppedFromChatSession.ContainsKey(groupID))
|
||||
{
|
||||
m_groupsAgentsDroppedFromChatSession.Add(groupID, new List<UUID>());
|
||||
m_groupsAgentsInvitedToChatSession.Add(groupID, new List<UUID>());
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -831,15 +917,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
/// <summary>
|
||||
/// Encapsulate the XmlRpc call to standardize security and error handling.
|
||||
/// </summary>
|
||||
private Hashtable XmlRpcCall(GroupRequestID requestID, string function, Hashtable param)
|
||||
private Hashtable XmlRpcCall(UUID requestingAgentID, string function, Hashtable param)
|
||||
{
|
||||
if (requestID == null)
|
||||
{
|
||||
requestID = new GroupRequestID();
|
||||
}
|
||||
param.Add("RequestingAgentID", requestID.AgentID.ToString());
|
||||
param.Add("RequestingAgentUserService", requestID.UserServiceURL);
|
||||
param.Add("RequestingSessionID", requestID.SessionID.ToString());
|
||||
string UserService;
|
||||
UUID SessionID;
|
||||
GetClientGroupRequestID(requestingAgentID, out UserService, out SessionID);
|
||||
param.Add("requestingAgentID", requestingAgentID.ToString());
|
||||
param.Add("RequestingAgentUserService", UserService);
|
||||
param.Add("RequestingSessionID", SessionID.ToString());
|
||||
|
||||
|
||||
param.Add("ReadKey", m_groupReadKey);
|
||||
|
@ -856,7 +941,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
|
||||
try
|
||||
{
|
||||
resp = req.Send(m_serviceURL, 10000);
|
||||
resp = req.Send(m_groupsServerURI, 10000);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -931,14 +1016,48 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Group Request Tokens are an attempt to allow the groups service to authenticate
|
||||
/// requests.
|
||||
/// TODO: This broke after the big grid refactor, either find a better way, or discard this
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <returns></returns>
|
||||
private void GetClientGroupRequestID(UUID AgentID, out string UserServiceURL, out UUID SessionID)
|
||||
{
|
||||
UserServiceURL = "";
|
||||
SessionID = UUID.Zero;
|
||||
|
||||
|
||||
// Need to rework this based on changes to User Services
|
||||
/*
|
||||
UserAccount userAccount = m_accountService.GetUserAccount(UUID.Zero,AgentID);
|
||||
if (userAccount == null)
|
||||
{
|
||||
// This should be impossible. If I've been passed a reference to a client
|
||||
// that client should be registered with the UserService. So something
|
||||
// is horribly wrong somewhere.
|
||||
|
||||
m_log.WarnFormat("[GROUPS]: Could not find a UserServiceURL for {0}", AgentID);
|
||||
|
||||
}
|
||||
else if (userProfile is ForeignUserProfileData)
|
||||
{
|
||||
// They aren't from around here
|
||||
ForeignUserProfileData fupd = (ForeignUserProfileData)userProfile;
|
||||
UserServiceURL = fupd.UserServerURI;
|
||||
SessionID = fupd.CurrentAgent.SessionID;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// They're a local user, use this:
|
||||
UserServiceURL = m_commManager.NetworkServersInfo.UserURL;
|
||||
SessionID = userProfile.CurrentAgent.SessionID;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
public class GroupNoticeInfo
|
||||
{
|
||||
public GroupNoticeData noticeData = new GroupNoticeData();
|
||||
public UUID GroupID = UUID.Zero;
|
||||
public string Message = string.Empty;
|
||||
public byte[] BinaryBucket = new byte[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,31 @@
|
|||
using System;
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,4 +1,31 @@
|
|||
using System.Collections;
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Collections;
|
||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||
|
||||
using key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
|
||||
|
|
|
@ -176,18 +176,7 @@ namespace OpenSim.Server.Handlers.UserAccounts
|
|||
|
||||
byte[] StoreAccount(Dictionary<string, object> request)
|
||||
{
|
||||
//if (!request.ContainsKey("account"))
|
||||
// return FailureResult();
|
||||
//if (request["account"] == null)
|
||||
// return FailureResult();
|
||||
//if (!(request["account"] is Dictionary<string, object>))
|
||||
// return FailureResult();
|
||||
|
||||
UserAccount account = new UserAccount(request);
|
||||
|
||||
if (m_UserAccountService.StoreUserAccount(account))
|
||||
return SuccessResult();
|
||||
|
||||
// No can do. No changing user accounts from remote sims
|
||||
return FailureResult();
|
||||
}
|
||||
|
||||
|
|
|
@ -104,6 +104,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||
if (response["Success"].AsBoolean() && response["Identities"] is OSDArray)
|
||||
{
|
||||
bool md5hashFound = false;
|
||||
|
||||
OSDArray identities = (OSDArray)response["Identities"];
|
||||
for (int i = 0; i < identities.Count; i++)
|
||||
{
|
||||
|
@ -114,13 +116,19 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
{
|
||||
string credential = identity["Credential"].AsString();
|
||||
|
||||
if (password == credential || "$1$" + Utils.MD5String(password) == credential)
|
||||
if (password == credential || "$1$" + Utils.MD5String(password) == credential || Utils.MD5String(password) == credential)
|
||||
return Authorize(principalID);
|
||||
|
||||
md5hashFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_log.Warn("[SIMIAN AUTH CONNECTOR]: Authentication failed for " + principalID);
|
||||
if (md5hashFound)
|
||||
m_log.Warn("[SIMIAN AUTH CONNECTOR]: Authentication failed for " + principalID + " using md5hash $1$" + Utils.MD5String(password));
|
||||
else
|
||||
m_log.Warn("[SIMIAN AUTH CONNECTOR]: Authentication failed for " + principalID + ", no md5hash identity found");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -395,7 +395,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
}
|
||||
else
|
||||
{
|
||||
m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve sessions for " + userID + ": " + response["Message"].AsString());
|
||||
m_log.Debug("[SIMIAN PRESENCE CONNECTOR]: No session returned for " + userID + ": " + response["Message"].AsString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ namespace OpenSim.Services.Connectors
|
|||
return accounts;
|
||||
}
|
||||
|
||||
public bool StoreUserAccount(UserAccount data)
|
||||
public virtual bool StoreUserAccount(UserAccount data)
|
||||
{
|
||||
Dictionary<string, object> sendData = new Dictionary<string, object>();
|
||||
//sendData["SCOPEID"] = scopeID.ToString();
|
||||
|
|
|
@ -134,6 +134,10 @@ namespace OpenSim.Services.UserAccountService
|
|||
u.UserTitle = d.Data["UserTitle"].ToString();
|
||||
else
|
||||
u.UserTitle = string.Empty;
|
||||
if (d.Data.ContainsKey("UserLevel") && d.Data["UserLevel"] != null)
|
||||
Int32.TryParse(d.Data["UserLevel"], out u.UserLevel);
|
||||
if (d.Data.ContainsKey("UserFlags") && d.Data["UserFlags"] != null)
|
||||
Int32.TryParse(d.Data["UserFlags"], out u.UserFlags);
|
||||
|
||||
if (d.Data.ContainsKey("ServiceURLs") && d.Data["ServiceURLs"] != null)
|
||||
{
|
||||
|
@ -218,6 +222,10 @@ namespace OpenSim.Services.UserAccountService
|
|||
d.Data = new Dictionary<string, string>();
|
||||
d.Data["Email"] = data.Email;
|
||||
d.Data["Created"] = data.Created.ToString();
|
||||
d.Data["UserLevel"] = data.UserLevel.ToString();
|
||||
d.Data["UserFlags"] = data.UserFlags.ToString();
|
||||
if (data.UserTitle != null)
|
||||
d.Data["UserTitle"] = data.UserTitle.ToString();
|
||||
|
||||
List<string> parts = new List<string>();
|
||||
|
||||
|
|
|
@ -1182,10 +1182,18 @@
|
|||
;MessagingModule = GroupsMessagingModule
|
||||
;MessagingEnabled = true
|
||||
|
||||
; Service connector to Groups Service [Select One]
|
||||
; XmlRpc Service Connector to the Flotsam XmlRpc Groups Service Implementation
|
||||
; Service connector to Groups Service [Select One] ServicesConnectorModule
|
||||
|
||||
|
||||
; Simian Grid Service for Groups
|
||||
;ServicesConnectorModule = SimianGroupsServicesConnector
|
||||
;GroupsServerURI = http://mygridserver.com:82/Grid/
|
||||
|
||||
; XmlRpc Service Connector to the Flotsam XmlRpc Groups Service settings
|
||||
;ServicesConnectorModule = XmlRpcGroupsServicesConnector
|
||||
;XmlRpcServiceURL = http://yourxmlrpcserver.com/xmlrpc.php
|
||||
;GroupsServerURI = http://yourxmlrpcserver.com/xmlrpc.php
|
||||
|
||||
; XmlRpc Service Settings
|
||||
;XmlRpcServiceReadKey = 1234
|
||||
;XmlRpcServiceWriteKey = 1234
|
||||
|
||||
|
|
|
@ -52,6 +52,12 @@
|
|||
;
|
||||
FriendsServerURI = "http://mygridserver.com:8003"
|
||||
|
||||
[Groups]
|
||||
;
|
||||
; change this to your grid-wide groups server
|
||||
;
|
||||
GroupsServerURI = "http://mygridserver.com:82/Grid/"
|
||||
|
||||
|
||||
[Modules]
|
||||
;; Choose 0 or 1 cache modules, and the corresponding config file, if it exists.
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
; UserAccountServerURI = "http://www.mygrid.com/Grid/"
|
||||
; AuthenticationServerURI = "http://www.mygrid.com/Grid/"
|
||||
; FriendsServerURI = "http://www.mygrid.com/Grid/"
|
||||
; GroupsServerURI = "http://www.mygrid.com/Grid/"
|
||||
|
||||
[Includes]
|
||||
Include-Common = "config-include/GridCommon.ini"
|
||||
|
@ -55,3 +56,12 @@
|
|||
[AssetService]
|
||||
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
|
||||
AssetLoaderArgs = "assets/AssetSets.xml"
|
||||
|
||||
[Groups]
|
||||
Enabled = true
|
||||
Module = GroupsModule
|
||||
DebugEnabled = false
|
||||
NoticesEnabled = true
|
||||
MessagingModule = GroupsMessagingModule
|
||||
MessagingEnabled = true
|
||||
ServicesConnectorModule = SimianGroupsServicesConnector
|
||||
|
|
Loading…
Reference in New Issue