remove a dev only conditional on lludp handlers; change parcel lists updates a bit;
parent
d179b2dda1
commit
cded996265
|
@ -182,10 +182,8 @@ namespace OpenSim.Framework
|
|||
public delegate void ParcelAccessListRequest(
|
||||
UUID agentID, UUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
||||
|
||||
public delegate void ParcelAccessListUpdateRequest(UUID agentID, uint flags,
|
||||
int landLocalID, UUID transactionID, int sequenceID,
|
||||
int sections, List<LandAccessEntry> entries,
|
||||
IClientAPI remote_client);
|
||||
public delegate void ParcelAccessListUpdateRequest(UUID agentID, uint flags, UUID transactionID,
|
||||
int landLocalID, List<LandAccessEntry> entries, IClientAPI remote_client);
|
||||
|
||||
public delegate void ParcelPropertiesRequest(
|
||||
int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client);
|
||||
|
|
|
@ -85,7 +85,7 @@ namespace OpenSim.Framework
|
|||
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
||||
List<LandAccessEntry> CreateAccessListArrayByFlag(AccessList flag);
|
||||
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
||||
void UpdateAccessList(uint flags, UUID transactionID, int sequenceID, int sections, List<LandAccessEntry> entries, IClientAPI remote_client);
|
||||
void UpdateAccessList(uint flags, UUID transationID, List<LandAccessEntry> entries);
|
||||
void UpdateLandBitmapByteArray();
|
||||
void SetLandBitmapFromByteArray();
|
||||
bool[,] GetLandBitmap();
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -684,17 +684,12 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
}
|
||||
|
||||
public void ClientOnParcelAccessListUpdateRequest(UUID agentID,
|
||||
uint flags, int landLocalID, UUID transactionID, int sequenceID,
|
||||
int sections, List<LandAccessEntry> entries,
|
||||
uint flags, UUID transactionID, int landLocalID, List<LandAccessEntry> entries,
|
||||
IClientAPI remote_client)
|
||||
{
|
||||
// Flags is the list to update, it can mean either the ban or
|
||||
// the access list (WTH is a pass list? Mentioned in ParcelFlags)
|
||||
//
|
||||
// There may be multiple packets, because these can get LONG.
|
||||
// Use transactionID to determine a new chain of packets since
|
||||
// packets may have come in out of sequence and that would be
|
||||
// a big mess if using the sequenceID
|
||||
if ((flags & 0x03) == 0)
|
||||
return; // we only have access and ban
|
||||
|
||||
ILandObject land;
|
||||
lock (m_landList)
|
||||
{
|
||||
|
@ -703,15 +698,19 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
if (land != null)
|
||||
{
|
||||
GroupPowers requiredPowers = GroupPowers.LandManageAllowed;
|
||||
if (flags == (uint)AccessList.Ban)
|
||||
requiredPowers = GroupPowers.LandManageBanned;
|
||||
GroupPowers requiredPowers = GroupPowers.None;
|
||||
if ((flags & (uint)AccessList.Access) != 0)
|
||||
requiredPowers |= GroupPowers.LandManageAllowed;
|
||||
if ((flags & (uint)AccessList.Ban) != 0)
|
||||
requiredPowers |= GroupPowers.LandManageBanned;
|
||||
|
||||
if(requiredPowers == GroupPowers.None)
|
||||
return;
|
||||
|
||||
if (m_scene.Permissions.CanEditParcelProperties(agentID,
|
||||
land, requiredPowers, false))
|
||||
{
|
||||
land.UpdateAccessList(flags, transactionID, sequenceID,
|
||||
sections, entries, remote_client);
|
||||
land.UpdateAccessList(flags, transactionID, entries);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -54,7 +54,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
|
||||
protected Scene m_scene;
|
||||
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||
protected Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>();
|
||||
private Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>();
|
||||
private object m_listTransactionsLock = new object();
|
||||
|
||||
protected ExpiringCache<UUID, bool> m_groupMemberCache = new ExpiringCache<UUID, bool>();
|
||||
protected TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds
|
||||
|
@ -869,66 +870,61 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
}
|
||||
}
|
||||
|
||||
public void UpdateAccessList(uint flags, UUID transactionID,
|
||||
int sequenceID, int sections,
|
||||
List<LandAccessEntry> entries,
|
||||
IClientAPI remote_client)
|
||||
public void UpdateAccessList(uint flags, UUID transactionID, List<LandAccessEntry> entries)
|
||||
{
|
||||
LandData newData = LandData.Copy();
|
||||
if((flags & 0x03) == 0)
|
||||
return; // we only have access and ban
|
||||
|
||||
if ((!m_listTransactions.ContainsKey(flags)) ||
|
||||
m_listTransactions[flags] != transactionID)
|
||||
flags &=0x03 ;
|
||||
// get a work copy of lists
|
||||
List<LandAccessEntry> parcelAccessList = new List<LandAccessEntry>(LandData.ParcelAccessList);
|
||||
|
||||
// first packet on a transaction clears before adding
|
||||
// we need to this way because viewer protocol does not seem reliable
|
||||
lock (m_listTransactionsLock)
|
||||
{
|
||||
m_listTransactions[flags] = transactionID;
|
||||
|
||||
List<LandAccessEntry> toRemove =
|
||||
new List<LandAccessEntry>();
|
||||
|
||||
foreach (LandAccessEntry entry in newData.ParcelAccessList)
|
||||
if ((!m_listTransactions.ContainsKey(flags)) ||
|
||||
m_listTransactions[flags] != transactionID)
|
||||
{
|
||||
if (entry.Flags == (AccessList)flags)
|
||||
toRemove.Add(entry);
|
||||
}
|
||||
m_listTransactions[flags] = transactionID;
|
||||
List<LandAccessEntry> toRemove = new List<LandAccessEntry>();
|
||||
foreach (LandAccessEntry entry in parcelAccessList)
|
||||
{
|
||||
if (((uint)entry.Flags & flags) != 0)
|
||||
toRemove.Add(entry);
|
||||
}
|
||||
foreach (LandAccessEntry entry in toRemove)
|
||||
parcelAccessList.Remove(entry);
|
||||
|
||||
foreach (LandAccessEntry entry in toRemove)
|
||||
{
|
||||
newData.ParcelAccessList.Remove(entry);
|
||||
}
|
||||
|
||||
// Checked here because this will always be the first
|
||||
// and only packet in a transaction
|
||||
if (entries.Count == 1 && entries[0].AgentID == UUID.Zero)
|
||||
{
|
||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||
|
||||
return;
|
||||
// a delete all command ?
|
||||
if (entries.Count == 1 && entries[0].AgentID == UUID.Zero)
|
||||
{
|
||||
LandData.ParcelAccessList = parcelAccessList;
|
||||
if ((flags & (uint)AccessList.Access) != 0)
|
||||
LandData.Flags &= ~(uint)ParcelFlags.UseAccessList;
|
||||
if ((flags & (uint)AccessList.Ban) != 0)
|
||||
LandData.Flags &= ~(uint)ParcelFlags.UseBanList;
|
||||
m_listTransactions.Remove(flags);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (LandAccessEntry entry in entries)
|
||||
{
|
||||
LandAccessEntry temp =
|
||||
new LandAccessEntry();
|
||||
|
||||
LandAccessEntry temp = new LandAccessEntry();
|
||||
temp.AgentID = entry.AgentID;
|
||||
temp.Expires = entry.Expires;
|
||||
temp.Flags = (AccessList)flags;
|
||||
|
||||
newData.ParcelAccessList.Add(temp);
|
||||
parcelAccessList.Add(temp);
|
||||
}
|
||||
|
||||
// update use lists flags
|
||||
// rights already checked or we wont be here
|
||||
uint parcelflags = newData.Flags;
|
||||
|
||||
if((flags & (uint)AccessList.Access) != 0)
|
||||
parcelflags |= (uint)ParcelFlags.UseAccessList;
|
||||
if((flags & (uint)AccessList.Ban) != 0)
|
||||
parcelflags |= (uint)ParcelFlags.UseBanList;
|
||||
|
||||
newData.Flags = parcelflags;
|
||||
|
||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||
LandData.ParcelAccessList = parcelAccessList;
|
||||
if ((flags & (uint)AccessList.Access) != 0)
|
||||
LandData.Flags |= (uint)ParcelFlags.UseAccessList;
|
||||
if ((flags & (uint)AccessList.Ban) != 0)
|
||||
LandData.Flags |= (uint)ParcelFlags.UseBanList;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -541,6 +541,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
|||
public event GodlikeMessage onGodlikeMessage;
|
||||
public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate;
|
||||
public event GenericCall2 OnUpdateThrottles;
|
||||
public event AgentFOV OnAgentFOV;
|
||||
|
||||
#pragma warning restore 67
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -343,6 +343,8 @@ namespace OpenSim.Tests.Common
|
|||
public event GodlikeMessage onGodlikeMessage;
|
||||
public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate;
|
||||
public event GenericCall2 OnUpdateThrottles;
|
||||
public event AgentFOV OnAgentFOV;
|
||||
|
||||
#pragma warning restore 67
|
||||
|
||||
/// <value>
|
||||
|
|
Loading…
Reference in New Issue