コード例 #1
0
        public void SendEstateAccessRemoveBan(ScriptInstance instance, ViewerAgentAccessor agent, LSLKey transactionid, LSLKey invoice, int allEstates, LSLKey user)
        {
            EstateAccessDeltaFlags flags = EstateAccessDeltaFlags.RemoveBan;

            if (allEstates != 0)
            {
                flags |= EstateAccessDeltaFlags.AllEstates;
            }
            SendEstateAccess(instance, agent, transactionid, invoice, flags, user);
        }
コード例 #2
0
 private void SendEstateAccess(ScriptInstance instance, ViewerAgentAccessor agent, LSLKey transactionid, LSLKey invoice, EstateAccessDeltaFlags flags, LSLKey user)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID       = agent.AgentID,
                 SessionID     = viewerCircuit.SessionID,
                 Method        = "estateaccessdelta",
                 TransactionID = transactionid,
                 Invoice       = invoice
             };
             msg.ParamList.Add("0".ToUTF8Bytes());
             msg.ParamList.Add(((uint)flags).ToString().ToUTF8Bytes());
             msg.ParamList.Add(user.AsUUID.ToString().ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
コード例 #3
0
ファイル: Estates.cs プロジェクト: jhurliman/simian
 public static bool HasFlag(this EstateAccessDeltaFlags accessFlags, EstateAccessDeltaFlags flag)
 {
     return((accessFlags & flag) == flag);
 }
コード例 #4
0
ファイル: Estates.cs プロジェクト: thoys/simian
 public static bool HasFlag(this EstateAccessDeltaFlags accessFlags, EstateAccessDeltaFlags flag)
 {
     return (accessFlags & flag) == flag;
 }
コード例 #5
0
ファイル: Estates.cs プロジェクト: jhurliman/simian
        private void ChangeEstateAccess(LLAgent agent, Estate estate, string[] parameters, UUID invoiceID)
        {
            uint flagsValue;
            UUID agentOrGroupID;

            if (parameters.Length == 3 && UInt32.TryParse(parameters[1], out flagsValue) && UUID.TryParse(parameters[2], out agentOrGroupID))
            {
                EstateAccessDeltaFlags flags = (EstateAccessDeltaFlags)flagsValue;

                // Non-owners can only modify the ban list
                if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentAdd) ||
                    flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentRemove) ||
                    flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupAdd) ||
                    flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupRemove) ||
                    flags.HasFlag(EstateAccessDeltaFlags.ManagerAdd) ||
                    flags.HasFlag(EstateAccessDeltaFlags.ManagerRemove))
                {
                    if (agent.ID != estate.OwnerID && !m_permissions.IsGridAdmin(agent))
                    {
                        m_log.Warn("Non-manager " + agent.Name + " attempted to make " + flags + " changes to the estate access list");
                        return;
                    }
                }

                // Ignore any attempted changes to the estate owner's access level
                if (agentOrGroupID == estate.OwnerID)
                {
                    m_log.Warn("Ignoring " + flags + " estate access change for estate owner " + estate.OwnerID);
                    return;
                }

                if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentAdd))
                {
                    estate.AddUser(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentRemove))
                {
                    estate.RemoveUser(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupAdd))
                {
                    estate.AddGroup(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupRemove))
                {
                    estate.RemoveGroup(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.BannedAgentAdd))
                {
                    estate.AddBannedUser(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.BannedAgentRemove))
                {
                    estate.RemoveBannedUser(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.ManagerAdd))
                {
                    estate.AddManager(agentOrGroupID);
                }
                if (flags.HasFlag(EstateAccessDeltaFlags.ManagerRemove))
                {
                    estate.RemoveManager(agentOrGroupID);
                }

                // TODO: Handle EstateAccessDeltaFlags.ApplyToAllEstates and EstateAccessDeltaFlags.ApplyToManagedEstates

                if (!flags.HasFlag(EstateAccessDeltaFlags.NoReply))
                {
                    // Send a response
                    SendEstateAccessList(agent, estate, EstateAccessFlags.AllowedAgents | EstateAccessFlags.AllowedGroups |
                                         EstateAccessFlags.BannedAgents | EstateAccessFlags.Managers, invoiceID);
                }
            }
            else
            {
                m_log.Warn(agent.Name + " sent an estateaccessdelta call with unrecognized parameters");
            }
        }