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); }
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); } } }
public static bool HasFlag(this EstateAccessDeltaFlags accessFlags, EstateAccessDeltaFlags flag) { return((accessFlags & flag) == flag); }
public static bool HasFlag(this EstateAccessDeltaFlags accessFlags, EstateAccessDeltaFlags flag) { return (accessFlags & flag) == flag; }
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"); } }