Replace ParcelAccessEntry with a new struct, LandAccessEntry, which more
accurately reflects the data sent by the viewer. Add times bans and the expiration of timed bans. Warning: Contains a Migration (and nuts)iar_mods
parent
dbf6381e34
commit
447a66d660
|
@ -681,7 +681,7 @@ VALUES
|
||||||
using (SqlCommand cmd = new SqlCommand(sql, conn))
|
using (SqlCommand cmd = new SqlCommand(sql, conn))
|
||||||
{
|
{
|
||||||
conn.Open();
|
conn.Open();
|
||||||
foreach (ParcelManager.ParcelAccessEntry parcelAccessEntry in parcel.LandData.ParcelAccessList)
|
foreach (LandAccessEntry parcelAccessEntry in parcel.LandData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
cmd.Parameters.AddRange(CreateLandAccessParameters(parcelAccessEntry, parcel.RegionUUID));
|
cmd.Parameters.AddRange(CreateLandAccessParameters(parcelAccessEntry, parcel.RegionUUID));
|
||||||
|
|
||||||
|
@ -1453,7 +1453,7 @@ VALUES
|
||||||
_Log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name);
|
_Log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
newData.ParcelAccessList = new List<LandAccessEntry>();
|
||||||
|
|
||||||
return newData;
|
return newData;
|
||||||
}
|
}
|
||||||
|
@ -1463,12 +1463,12 @@ VALUES
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="row">datarecord with landaccess data</param>
|
/// <param name="row">datarecord with landaccess data</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static ParcelManager.ParcelAccessEntry BuildLandAccessData(IDataRecord row)
|
private static LandAccessEntry BuildLandAccessData(IDataRecord row)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry entry = new LandAccessEntry();
|
||||||
entry.AgentID = new UUID((Guid)row["AccessUUID"]);
|
entry.AgentID = new UUID((Guid)row["AccessUUID"]);
|
||||||
entry.Flags = (AccessList)Convert.ToInt32(row["Flags"]);
|
entry.Flags = (AccessList)Convert.ToInt32(row["Flags"]);
|
||||||
entry.Time = new DateTime();
|
entry.Expires = 0;
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1851,7 +1851,7 @@ VALUES
|
||||||
/// <param name="parcelAccessEntry">parcel access entry.</param>
|
/// <param name="parcelAccessEntry">parcel access entry.</param>
|
||||||
/// <param name="parcelID">parcel ID.</param>
|
/// <param name="parcelID">parcel ID.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private SqlParameter[] CreateLandAccessParameters(ParcelManager.ParcelAccessEntry parcelAccessEntry, UUID parcelID)
|
private SqlParameter[] CreateLandAccessParameters(LandAccessEntry parcelAccessEntry, UUID parcelID)
|
||||||
{
|
{
|
||||||
List<SqlParameter> parameters = new List<SqlParameter>();
|
List<SqlParameter> parameters = new List<SqlParameter>();
|
||||||
|
|
||||||
|
|
|
@ -700,10 +700,10 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
cmd.Parameters.Clear();
|
cmd.Parameters.Clear();
|
||||||
cmd.CommandText = "insert into landaccesslist (LandUUID, " +
|
cmd.CommandText = "insert into landaccesslist (LandUUID, " +
|
||||||
"AccessUUID, Flags) values (?LandUUID, ?AccessUUID, " +
|
"AccessUUID, Flags, Expires) values (?LandUUID, ?AccessUUID, " +
|
||||||
"?Flags)";
|
"?Flags, ?Expires)";
|
||||||
|
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in parcel.LandData.ParcelAccessList)
|
foreach (LandAccessEntry entry in parcel.LandData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
FillLandAccessCommand(cmd, entry, parcel.LandData.GlobalID);
|
FillLandAccessCommand(cmd, entry, parcel.LandData.GlobalID);
|
||||||
ExecuteNonQuery(cmd);
|
ExecuteNonQuery(cmd);
|
||||||
|
@ -1377,7 +1377,7 @@ namespace OpenSim.Data.MySQL
|
||||||
newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]);
|
newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]);
|
||||||
newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]);
|
newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]);
|
||||||
|
|
||||||
newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
newData.ParcelAccessList = new List<LandAccessEntry>();
|
||||||
|
|
||||||
return newData;
|
return newData;
|
||||||
}
|
}
|
||||||
|
@ -1387,12 +1387,12 @@ namespace OpenSim.Data.MySQL
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="row"></param>
|
/// <param name="row"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static ParcelManager.ParcelAccessEntry BuildLandAccessData(IDataReader row)
|
private static LandAccessEntry BuildLandAccessData(IDataReader row)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry entry = new LandAccessEntry();
|
||||||
entry.AgentID = DBGuid.FromDB(row["AccessUUID"]);
|
entry.AgentID = DBGuid.FromDB(row["AccessUUID"]);
|
||||||
entry.Flags = (AccessList) Convert.ToInt32(row["Flags"]);
|
entry.Flags = (AccessList) Convert.ToInt32(row["Flags"]);
|
||||||
entry.Time = new DateTime();
|
entry.Expires = Convert.ToInt32(row["Expires"]);
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1697,11 +1697,12 @@ namespace OpenSim.Data.MySQL
|
||||||
/// <param name="row"></param>
|
/// <param name="row"></param>
|
||||||
/// <param name="entry"></param>
|
/// <param name="entry"></param>
|
||||||
/// <param name="parcelID"></param>
|
/// <param name="parcelID"></param>
|
||||||
private static void FillLandAccessCommand(MySqlCommand cmd, ParcelManager.ParcelAccessEntry entry, UUID parcelID)
|
private static void FillLandAccessCommand(MySqlCommand cmd, LandAccessEntry entry, UUID parcelID)
|
||||||
{
|
{
|
||||||
cmd.Parameters.AddWithValue("LandUUID", parcelID.ToString());
|
cmd.Parameters.AddWithValue("LandUUID", parcelID.ToString());
|
||||||
cmd.Parameters.AddWithValue("AccessUUID", entry.AgentID.ToString());
|
cmd.Parameters.AddWithValue("AccessUUID", entry.AgentID.ToString());
|
||||||
cmd.Parameters.AddWithValue("Flags", entry.Flags);
|
cmd.Parameters.AddWithValue("Flags", entry.Flags);
|
||||||
|
cmd.Parameters.AddWithValue("Expires", entry.Expires.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -863,3 +863,9 @@ BEGIN;
|
||||||
ALTER TABLE `regionsettings` ADD COLUMN `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
|
ALTER TABLE `regionsettings` ADD COLUMN `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 41 #---------------- Timed bans/access
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE `landaccesslist` ADD COLUMN `Expires` INTEGER NOT NULL DEFAULT 0;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
|
|
@ -759,7 +759,7 @@ namespace OpenSim.Data.SQLite
|
||||||
landaccesslist.Rows.Remove(rowsToDelete[iter]);
|
landaccesslist.Rows.Remove(rowsToDelete[iter]);
|
||||||
}
|
}
|
||||||
rowsToDelete.Clear();
|
rowsToDelete.Clear();
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in parcel.LandData.ParcelAccessList)
|
foreach (LandAccessEntry entry in parcel.LandData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
DataRow newAccessRow = landaccesslist.NewRow();
|
DataRow newAccessRow = landaccesslist.NewRow();
|
||||||
fillLandAccessRow(newAccessRow, entry, parcel.LandData.GlobalID);
|
fillLandAccessRow(newAccessRow, entry, parcel.LandData.GlobalID);
|
||||||
|
@ -1456,7 +1456,7 @@ namespace OpenSim.Data.SQLite
|
||||||
newData.UserLocation = Vector3.Zero;
|
newData.UserLocation = Vector3.Zero;
|
||||||
newData.UserLookAt = Vector3.Zero;
|
newData.UserLookAt = Vector3.Zero;
|
||||||
}
|
}
|
||||||
newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
newData.ParcelAccessList = new List<LandAccessEntry>();
|
||||||
UUID authBuyerID = UUID.Zero;
|
UUID authBuyerID = UUID.Zero;
|
||||||
|
|
||||||
UUID.TryParse((string)row["AuthbuyerID"], out authBuyerID);
|
UUID.TryParse((string)row["AuthbuyerID"], out authBuyerID);
|
||||||
|
@ -1519,12 +1519,12 @@ namespace OpenSim.Data.SQLite
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="row"></param>
|
/// <param name="row"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static ParcelManager.ParcelAccessEntry buildLandAccessData(DataRow row)
|
private static LandAccessEntry buildLandAccessData(DataRow row)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry entry = new LandAccessEntry();
|
||||||
entry.AgentID = new UUID((string) row["AccessUUID"]);
|
entry.AgentID = new UUID((string) row["AccessUUID"]);
|
||||||
entry.Flags = (AccessList) row["Flags"];
|
entry.Flags = (AccessList) row["Flags"];
|
||||||
entry.Time = new DateTime();
|
entry.Expires = 0;
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1787,7 +1787,7 @@ namespace OpenSim.Data.SQLite
|
||||||
/// <param name="row"></param>
|
/// <param name="row"></param>
|
||||||
/// <param name="entry"></param>
|
/// <param name="entry"></param>
|
||||||
/// <param name="parcelID"></param>
|
/// <param name="parcelID"></param>
|
||||||
private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, UUID parcelID)
|
private static void fillLandAccessRow(DataRow row, LandAccessEntry entry, UUID parcelID)
|
||||||
{
|
{
|
||||||
row["LandUUID"] = parcelID.ToString();
|
row["LandUUID"] = parcelID.ToString();
|
||||||
row["AccessUUID"] = entry.AgentID.ToString();
|
row["AccessUUID"] = entry.AgentID.ToString();
|
||||||
|
|
|
@ -177,7 +177,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public delegate void ParcelAccessListUpdateRequest(UUID agentID, uint flags,
|
public delegate void ParcelAccessListUpdateRequest(UUID agentID, uint flags,
|
||||||
int landLocalID, UUID transactionID, int sequenceID,
|
int landLocalID, UUID transactionID, int sequenceID,
|
||||||
int sections, List<ParcelManager.ParcelAccessEntry> entries,
|
int sections, List<LandAccessEntry> entries,
|
||||||
IClientAPI remote_client);
|
IClientAPI remote_client);
|
||||||
|
|
||||||
public delegate void ParcelPropertiesRequest(
|
public delegate void ParcelPropertiesRequest(
|
||||||
|
@ -1251,7 +1251,7 @@ namespace OpenSim.Framework
|
||||||
float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity,
|
float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity,
|
||||||
uint regionFlags);
|
uint regionFlags);
|
||||||
|
|
||||||
void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID);
|
void SendLandAccessListData(List<LandAccessEntry> accessList, uint accessFlag, int localLandID);
|
||||||
void SendForceClientSelectObjects(List<uint> objectIDs);
|
void SendForceClientSelectObjects(List<uint> objectIDs);
|
||||||
void SendCameraConstraint(Vector4 ConstraintPlane);
|
void SendCameraConstraint(Vector4 ConstraintPlane);
|
||||||
void SendLandObjectOwners(LandData land, List<UUID> groups, Dictionary<UUID, int> ownersAndCount);
|
void SendLandObjectOwners(LandData land, List<UUID> groups, Dictionary<UUID, int> ownersAndCount);
|
||||||
|
|
|
@ -73,9 +73,9 @@ namespace OpenSim.Framework
|
||||||
bool IsRestrictedFromLand(UUID avatar);
|
bool IsRestrictedFromLand(UUID avatar);
|
||||||
void SendLandUpdateToClient(IClientAPI remote_client);
|
void SendLandUpdateToClient(IClientAPI remote_client);
|
||||||
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
||||||
List<UUID> CreateAccessListArrayByFlag(AccessList flag);
|
List<LandAccessEntry> CreateAccessListArrayByFlag(AccessList flag);
|
||||||
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
||||||
void UpdateAccessList(uint flags, UUID transactionID, int sequenceID, int sections, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
void UpdateAccessList(uint flags, UUID transactionID, int sequenceID, int sections, List<LandAccessEntry> entries, IClientAPI remote_client);
|
||||||
void UpdateLandBitmapByteArray();
|
void UpdateLandBitmapByteArray();
|
||||||
void SetLandBitmapFromByteArray();
|
void SetLandBitmapFromByteArray();
|
||||||
bool[,] GetLandBitmap();
|
bool[,] GetLandBitmap();
|
||||||
|
|
|
@ -34,6 +34,13 @@ using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
|
public struct LandAccessEntry
|
||||||
|
{
|
||||||
|
public UUID AgentID;
|
||||||
|
public int Expires;
|
||||||
|
public AccessList Flags;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Details of a Parcel of land
|
/// Details of a Parcel of land
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -73,7 +80,7 @@ namespace OpenSim.Framework
|
||||||
private string _mediaURL = String.Empty;
|
private string _mediaURL = String.Empty;
|
||||||
private string _musicURL = String.Empty;
|
private string _musicURL = String.Empty;
|
||||||
private UUID _ownerID = UUID.Zero;
|
private UUID _ownerID = UUID.Zero;
|
||||||
private List<ParcelManager.ParcelAccessEntry> _parcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
private List<LandAccessEntry> _parcelAccessList = new List<LandAccessEntry>();
|
||||||
private float _passHours = 0;
|
private float _passHours = 0;
|
||||||
private int _passPrice = 0;
|
private int _passPrice = 0;
|
||||||
private int _salePrice = 0; //Unemeplemented. Parcels price.
|
private int _salePrice = 0; //Unemeplemented. Parcels price.
|
||||||
|
@ -450,7 +457,7 @@ namespace OpenSim.Framework
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// List of access data for the parcel. User data, some bitflags, and a time
|
/// List of access data for the parcel. User data, some bitflags, and a time
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<ParcelManager.ParcelAccessEntry> ParcelAccessList {
|
public List<LandAccessEntry> ParcelAccessList {
|
||||||
get {
|
get {
|
||||||
return _parcelAccessList;
|
return _parcelAccessList;
|
||||||
}
|
}
|
||||||
|
@ -638,12 +645,12 @@ namespace OpenSim.Framework
|
||||||
landData._simwidePrims = _simwidePrims;
|
landData._simwidePrims = _simwidePrims;
|
||||||
|
|
||||||
landData._parcelAccessList.Clear();
|
landData._parcelAccessList.Clear();
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList)
|
foreach (LandAccessEntry entry in _parcelAccessList)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry newEntry = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry newEntry = new LandAccessEntry();
|
||||||
newEntry.AgentID = entry.AgentID;
|
newEntry.AgentID = entry.AgentID;
|
||||||
newEntry.Flags = entry.Flags;
|
newEntry.Flags = entry.Flags;
|
||||||
newEntry.Time = entry.Time;
|
newEntry.Expires = entry.Expires;
|
||||||
|
|
||||||
landData._parcelAccessList.Add(newEntry);
|
landData._parcelAccessList.Add(newEntry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
landData.MusicURL = xtr.ReadElementString("MusicURL");
|
landData.MusicURL = xtr.ReadElementString("MusicURL");
|
||||||
landData.OwnerID = UUID.Parse( xtr.ReadElementString("OwnerID"));
|
landData.OwnerID = UUID.Parse( xtr.ReadElementString("OwnerID"));
|
||||||
|
|
||||||
landData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
landData.ParcelAccessList = new List<LandAccessEntry>();
|
||||||
xtr.Read();
|
xtr.Read();
|
||||||
if (xtr.Name != "ParcelAccessList")
|
if (xtr.Name != "ParcelAccessList")
|
||||||
throw new XmlException(String.Format("Expected \"ParcelAccessList\" element but got \"{0}\"", xtr.Name));
|
throw new XmlException(String.Format("Expected \"ParcelAccessList\" element but got \"{0}\"", xtr.Name));
|
||||||
|
@ -99,11 +99,13 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry pae = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry pae = new LandAccessEntry();
|
||||||
|
|
||||||
xtr.ReadStartElement("ParcelAccessEntry");
|
xtr.ReadStartElement("ParcelAccessEntry");
|
||||||
pae.AgentID = UUID.Parse( xtr.ReadElementString("AgentID"));
|
pae.AgentID = UUID.Parse( xtr.ReadElementString("AgentID"));
|
||||||
pae.Time = Convert.ToDateTime( xtr.ReadElementString("Time"));
|
// We really don't care about temp vs perm here and this
|
||||||
|
// would break on old oars. Assume all bans are perm
|
||||||
|
pae.Expires = 0; // Convert.ToUint( xtr.ReadElementString("Time"));
|
||||||
pae.Flags = (AccessList)Convert.ToUInt32( xtr.ReadElementString("AccessList"));
|
pae.Flags = (AccessList)Convert.ToUInt32( xtr.ReadElementString("AccessList"));
|
||||||
xtr.ReadEndElement();
|
xtr.ReadEndElement();
|
||||||
|
|
||||||
|
@ -162,11 +164,11 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
xtw.WriteElementString("OwnerID", landData.OwnerID.ToString());
|
xtw.WriteElementString("OwnerID", landData.OwnerID.ToString());
|
||||||
|
|
||||||
xtw.WriteStartElement("ParcelAccessList");
|
xtw.WriteStartElement("ParcelAccessList");
|
||||||
foreach (ParcelManager.ParcelAccessEntry pal in landData.ParcelAccessList)
|
foreach (LandAccessEntry pal in landData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
xtw.WriteStartElement("ParcelAccessEntry");
|
xtw.WriteStartElement("ParcelAccessEntry");
|
||||||
xtw.WriteElementString("AgentID", pal.AgentID.ToString());
|
xtw.WriteElementString("AgentID", pal.AgentID.ToString());
|
||||||
xtw.WriteElementString("Time", pal.Time.ToString("s"));
|
xtw.WriteElementString("Time", pal.Expires.ToString());
|
||||||
xtw.WriteElementString("AccessList", Convert.ToString((uint)pal.Flags));
|
xtw.WriteElementString("AccessList", Convert.ToString((uint)pal.Flags));
|
||||||
xtw.WriteEndElement();
|
xtw.WriteEndElement();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
private LandData landWithParcelAccessList;
|
private LandData landWithParcelAccessList;
|
||||||
|
|
||||||
private static string preSerialized = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<LandData>\n <Area>128</Area>\n <AuctionID>0</AuctionID>\n <AuthBuyerID>00000000-0000-0000-0000-000000000000</AuthBuyerID>\n <Category>10</Category>\n <ClaimDate>0</ClaimDate>\n <ClaimPrice>0</ClaimPrice>\n <GlobalID>54ff9641-dd40-4a2c-b1f1-47dd3af24e50</GlobalID>\n <GroupID>d740204e-bbbf-44aa-949d-02c7d739f6a5</GroupID>\n <IsGroupOwned>False</IsGroupOwned>\n <Bitmap>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</Bitmap>\n <Description>land data to test LandDataSerializer</Description>\n <Flags>536870944</Flags>\n <LandingType>2</LandingType>\n <Name>LandDataSerializerTest Land</Name>\n <Status>0</Status>\n <LocalID>0</LocalID>\n <MediaAutoScale>1</MediaAutoScale>\n <MediaID>d4452578-2f25-4b97-a81b-819af559cfd7</MediaID>\n <MediaURL>http://videos.opensimulator.org/bumblebee.mp4</MediaURL>\n <MusicURL />\n <OwnerID>1b8eedf9-6d15-448b-8015-24286f1756bf</OwnerID>\n <ParcelAccessList />\n <PassHours>0</PassHours>\n <PassPrice>0</PassPrice>\n <SalePrice>0</SalePrice>\n <SnapshotID>00000000-0000-0000-0000-000000000000</SnapshotID>\n <UserLocation><0, 0, 0></UserLocation>\n <UserLookAt><0, 0, 0></UserLookAt>\n <Dwell>0</Dwell>\n <OtherCleanTime>0</OtherCleanTime>\n</LandData>";
|
private static string preSerialized = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<LandData>\n <Area>128</Area>\n <AuctionID>0</AuctionID>\n <AuthBuyerID>00000000-0000-0000-0000-000000000000</AuthBuyerID>\n <Category>10</Category>\n <ClaimDate>0</ClaimDate>\n <ClaimPrice>0</ClaimPrice>\n <GlobalID>54ff9641-dd40-4a2c-b1f1-47dd3af24e50</GlobalID>\n <GroupID>d740204e-bbbf-44aa-949d-02c7d739f6a5</GroupID>\n <IsGroupOwned>False</IsGroupOwned>\n <Bitmap>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</Bitmap>\n <Description>land data to test LandDataSerializer</Description>\n <Flags>536870944</Flags>\n <LandingType>2</LandingType>\n <Name>LandDataSerializerTest Land</Name>\n <Status>0</Status>\n <LocalID>0</LocalID>\n <MediaAutoScale>1</MediaAutoScale>\n <MediaID>d4452578-2f25-4b97-a81b-819af559cfd7</MediaID>\n <MediaURL>http://videos.opensimulator.org/bumblebee.mp4</MediaURL>\n <MusicURL />\n <OwnerID>1b8eedf9-6d15-448b-8015-24286f1756bf</OwnerID>\n <ParcelAccessList />\n <PassHours>0</PassHours>\n <PassPrice>0</PassPrice>\n <SalePrice>0</SalePrice>\n <SnapshotID>00000000-0000-0000-0000-000000000000</SnapshotID>\n <UserLocation><0, 0, 0></UserLocation>\n <UserLookAt><0, 0, 0></UserLookAt>\n <Dwell>0</Dwell>\n <OtherCleanTime>0</OtherCleanTime>\n</LandData>";
|
||||||
private static string preSerializedWithParcelAccessList = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<LandData>\n <Area>128</Area>\n <AuctionID>0</AuctionID>\n <AuthBuyerID>00000000-0000-0000-0000-000000000000</AuthBuyerID>\n <Category>10</Category>\n <ClaimDate>0</ClaimDate>\n <ClaimPrice>0</ClaimPrice>\n <GlobalID>54ff9641-dd40-4a2c-b1f1-47dd3af24e50</GlobalID>\n <GroupID>d740204e-bbbf-44aa-949d-02c7d739f6a5</GroupID>\n <IsGroupOwned>False</IsGroupOwned>\n <Bitmap>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</Bitmap>\n <Description>land data to test LandDataSerializer</Description>\n <Flags>536870944</Flags>\n <LandingType>2</LandingType>\n <Name>LandDataSerializerTest Land</Name>\n <Status>0</Status>\n <LocalID>0</LocalID>\n <MediaAutoScale>1</MediaAutoScale>\n <MediaID>d4452578-2f25-4b97-a81b-819af559cfd7</MediaID>\n <MediaURL>http://videos.opensimulator.org/bumblebee.mp4</MediaURL>\n <MusicURL />\n <OwnerID>1b8eedf9-6d15-448b-8015-24286f1756bf</OwnerID>\n <ParcelAccessList>\n <ParcelAccessEntry>\n <AgentID>62d65d45-c91a-4f77-862c-46557d978b6c</AgentID>\n <Time>2009-10-01T00:00:00</Time>\n <AccessList>2</AccessList>\n </ParcelAccessEntry>\n <ParcelAccessEntry>\n <AgentID>ec2a8d18-2378-4fe0-8b68-2a31b57c481e</AgentID>\n <Time>2010-10-20T00:00:00</Time>\n <AccessList>1</AccessList>\n </ParcelAccessEntry>\n </ParcelAccessList>\n <PassHours>0</PassHours>\n <PassPrice>0</PassPrice>\n <SalePrice>0</SalePrice>\n <SnapshotID>00000000-0000-0000-0000-000000000000</SnapshotID>\n <UserLocation><0, 0, 0></UserLocation>\n <UserLookAt><0, 0, 0></UserLookAt>\n <Dwell>0</Dwell>\n <OtherCleanTime>0</OtherCleanTime>\n</LandData>";
|
private static string preSerializedWithParcelAccessList = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<LandData>\n <Area>128</Area>\n <AuctionID>0</AuctionID>\n <AuthBuyerID>00000000-0000-0000-0000-000000000000</AuthBuyerID>\n <Category>10</Category>\n <ClaimDate>0</ClaimDate>\n <ClaimPrice>0</ClaimPrice>\n <GlobalID>54ff9641-dd40-4a2c-b1f1-47dd3af24e50</GlobalID>\n <GroupID>d740204e-bbbf-44aa-949d-02c7d739f6a5</GroupID>\n <IsGroupOwned>False</IsGroupOwned>\n <Bitmap>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</Bitmap>\n <Description>land data to test LandDataSerializer</Description>\n <Flags>536870944</Flags>\n <LandingType>2</LandingType>\n <Name>LandDataSerializerTest Land</Name>\n <Status>0</Status>\n <LocalID>0</LocalID>\n <MediaAutoScale>1</MediaAutoScale>\n <MediaID>d4452578-2f25-4b97-a81b-819af559cfd7</MediaID>\n <MediaURL>http://videos.opensimulator.org/bumblebee.mp4</MediaURL>\n <MusicURL />\n <OwnerID>1b8eedf9-6d15-448b-8015-24286f1756bf</OwnerID>\n <ParcelAccessList>\n <ParcelAccessEntry>\n <AgentID>62d65d45-c91a-4f77-862c-46557d978b6c</AgentID>\n <Time>0</Time>\n <AccessList>2</AccessList>\n </ParcelAccessEntry>\n <ParcelAccessEntry>\n <AgentID>ec2a8d18-2378-4fe0-8b68-2a31b57c481e</AgentID>\n <Time>0</Time>\n <AccessList>1</AccessList>\n </ParcelAccessEntry>\n </ParcelAccessList>\n <PassHours>0</PassHours>\n <PassPrice>0</PassPrice>\n <SalePrice>0</SalePrice>\n <SnapshotID>00000000-0000-0000-0000-000000000000</SnapshotID>\n <UserLocation><0, 0, 0></UserLocation>\n <UserLookAt><0, 0, 0></UserLookAt>\n <Dwell>0</Dwell>\n <OtherCleanTime>0</OtherCleanTime>\n</LandData>";
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void setup()
|
public void setup()
|
||||||
|
@ -73,16 +73,16 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
this.landWithParcelAccessList = this.land.Copy();
|
this.landWithParcelAccessList = this.land.Copy();
|
||||||
this.landWithParcelAccessList.ParcelAccessList.Clear();
|
this.landWithParcelAccessList.ParcelAccessList.Clear();
|
||||||
|
|
||||||
ParcelManager.ParcelAccessEntry pae0 = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry pae0 = new LandAccessEntry();
|
||||||
pae0.AgentID = new UUID("62d65d45-c91a-4f77-862c-46557d978b6c");
|
pae0.AgentID = new UUID("62d65d45-c91a-4f77-862c-46557d978b6c");
|
||||||
pae0.Flags = AccessList.Ban;
|
pae0.Flags = AccessList.Ban;
|
||||||
pae0.Time = new DateTime(2009, 10, 01);
|
pae0.Expires = 0;
|
||||||
this.landWithParcelAccessList.ParcelAccessList.Add(pae0);
|
this.landWithParcelAccessList.ParcelAccessList.Add(pae0);
|
||||||
|
|
||||||
ParcelManager.ParcelAccessEntry pae1 = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry pae1 = new LandAccessEntry();
|
||||||
pae1.AgentID = new UUID("ec2a8d18-2378-4fe0-8b68-2a31b57c481e");
|
pae1.AgentID = new UUID("ec2a8d18-2378-4fe0-8b68-2a31b57c481e");
|
||||||
pae1.Flags = AccessList.Access;
|
pae1.Flags = AccessList.Access;
|
||||||
pae1.Time = new DateTime(2010, 10, 20);
|
pae1.Expires = 0;
|
||||||
this.landWithParcelAccessList.ParcelAccessList.Add(pae1);
|
this.landWithParcelAccessList.ParcelAccessList.Add(pae1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4623,7 +4623,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
|
public void SendLandAccessListData(List<LandAccessEntry> accessList, uint accessFlag, int localLandID)
|
||||||
{
|
{
|
||||||
ParcelAccessListReplyPacket replyPacket = (ParcelAccessListReplyPacket)PacketPool.Instance.GetPacket(PacketType.ParcelAccessListReply);
|
ParcelAccessListReplyPacket replyPacket = (ParcelAccessListReplyPacket)PacketPool.Instance.GetPacket(PacketType.ParcelAccessListReply);
|
||||||
replyPacket.Data.AgentID = AgentId;
|
replyPacket.Data.AgentID = AgentId;
|
||||||
|
@ -4632,12 +4632,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
replyPacket.Data.SequenceID = 0;
|
replyPacket.Data.SequenceID = 0;
|
||||||
|
|
||||||
List<ParcelAccessListReplyPacket.ListBlock> list = new List<ParcelAccessListReplyPacket.ListBlock>();
|
List<ParcelAccessListReplyPacket.ListBlock> list = new List<ParcelAccessListReplyPacket.ListBlock>();
|
||||||
foreach (UUID avatar in avatars)
|
foreach (LandAccessEntry entry in accessList)
|
||||||
{
|
{
|
||||||
ParcelAccessListReplyPacket.ListBlock block = new ParcelAccessListReplyPacket.ListBlock();
|
ParcelAccessListReplyPacket.ListBlock block = new ParcelAccessListReplyPacket.ListBlock();
|
||||||
block.Flags = accessFlag;
|
block.Flags = accessFlag;
|
||||||
block.ID = avatar;
|
block.ID = entry.AgentID;
|
||||||
block.Time = 0;
|
block.Time = entry.Expires;
|
||||||
list.Add(block);
|
list.Add(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8577,13 +8577,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
List<ParcelManager.ParcelAccessEntry> entries = new List<ParcelManager.ParcelAccessEntry>();
|
List<LandAccessEntry> entries = new List<LandAccessEntry>();
|
||||||
foreach (ParcelAccessListUpdatePacket.ListBlock block in updatePacket.List)
|
foreach (ParcelAccessListUpdatePacket.ListBlock block in updatePacket.List)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
LandAccessEntry entry = new LandAccessEntry();
|
||||||
entry.AgentID = block.ID;
|
entry.AgentID = block.ID;
|
||||||
entry.Flags = (AccessList)block.Flags;
|
entry.Flags = (AccessList)block.Flags;
|
||||||
entry.Time = Util.ToDateTime(block.Time);
|
entry.Expires = block.Time;
|
||||||
entries.Add(entry);
|
entries.Add(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -550,7 +550,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public void ClientOnParcelAccessListUpdateRequest(UUID agentID,
|
public void ClientOnParcelAccessListUpdateRequest(UUID agentID,
|
||||||
uint flags, int landLocalID, UUID transactionID, int sequenceID,
|
uint flags, int landLocalID, UUID transactionID, int sequenceID,
|
||||||
int sections, List<ParcelManager.ParcelAccessEntry> entries,
|
int sections, List<LandAccessEntry> entries,
|
||||||
IClientAPI remote_client)
|
IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
// Flags is the list to update, it can mean either the ban or
|
// Flags is the list to update, it can mean either the ban or
|
||||||
|
|
|
@ -418,13 +418,21 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public bool IsBannedFromLand(UUID avatar)
|
public bool IsBannedFromLand(UUID avatar)
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanEditParcelProperties(avatar, this, 0))
|
ExpireAccessList();
|
||||||
|
|
||||||
|
if (m_scene.Permissions.IsAdministrator(avatar))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (avatar == LandData.OwnerID)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0)
|
if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0)
|
||||||
{
|
{
|
||||||
if (LandData.ParcelAccessList.FindIndex(
|
if (LandData.ParcelAccessList.FindIndex(
|
||||||
delegate(ParcelManager.ParcelAccessEntry e)
|
delegate(LandAccessEntry e)
|
||||||
{
|
{
|
||||||
if (e.AgentID == avatar && e.Flags == AccessList.Ban)
|
if (e.AgentID == avatar && e.Flags == AccessList.Ban)
|
||||||
return true;
|
return true;
|
||||||
|
@ -439,13 +447,21 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public bool IsRestrictedFromLand(UUID avatar)
|
public bool IsRestrictedFromLand(UUID avatar)
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanEditParcelProperties(avatar, this, 0))
|
ExpireAccessList();
|
||||||
|
|
||||||
|
if (m_scene.Permissions.IsAdministrator(avatar))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (avatar == LandData.OwnerID)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0)
|
if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0)
|
||||||
{
|
{
|
||||||
if (LandData.ParcelAccessList.FindIndex(
|
if (LandData.ParcelAccessList.FindIndex(
|
||||||
delegate(ParcelManager.ParcelAccessEntry e)
|
delegate(LandAccessEntry e)
|
||||||
{
|
{
|
||||||
if (e.AgentID == avatar && e.Flags == AccessList.Access)
|
if (e.AgentID == avatar && e.Flags == AccessList.Access)
|
||||||
return true;
|
return true;
|
||||||
|
@ -511,19 +527,24 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
#region AccessList Functions
|
#region AccessList Functions
|
||||||
|
|
||||||
public List<UUID> CreateAccessListArrayByFlag(AccessList flag)
|
public List<LandAccessEntry> CreateAccessListArrayByFlag(AccessList flag)
|
||||||
{
|
{
|
||||||
List<UUID> list = new List<UUID>();
|
ExpireAccessList();
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in LandData.ParcelAccessList)
|
|
||||||
|
List<LandAccessEntry> list = new List<LandAccessEntry>();
|
||||||
|
foreach (LandAccessEntry entry in LandData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
if (entry.Flags == flag)
|
if (entry.Flags == flag)
|
||||||
{
|
list.Add(entry);
|
||||||
list.Add(entry.AgentID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (list.Count == 0)
|
if (list.Count == 0)
|
||||||
{
|
{
|
||||||
list.Add(UUID.Zero);
|
LandAccessEntry e = new LandAccessEntry();
|
||||||
|
e.AgentID = UUID.Zero;
|
||||||
|
e.Flags = 0;
|
||||||
|
e.Expires = 0;
|
||||||
|
|
||||||
|
list.Add(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
@ -535,20 +556,20 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
if (flags == (uint) AccessList.Access || flags == (uint) AccessList.Both)
|
if (flags == (uint) AccessList.Access || flags == (uint) AccessList.Both)
|
||||||
{
|
{
|
||||||
List<UUID> avatars = CreateAccessListArrayByFlag(AccessList.Access);
|
List<LandAccessEntry> accessEntries = CreateAccessListArrayByFlag(AccessList.Access);
|
||||||
remote_client.SendLandAccessListData(avatars,(uint) AccessList.Access,LandData.LocalID);
|
remote_client.SendLandAccessListData(accessEntries,(uint) AccessList.Access,LandData.LocalID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags == (uint) AccessList.Ban || flags == (uint) AccessList.Both)
|
if (flags == (uint) AccessList.Ban || flags == (uint) AccessList.Both)
|
||||||
{
|
{
|
||||||
List<UUID> avatars = CreateAccessListArrayByFlag(AccessList.Ban);
|
List<LandAccessEntry> accessEntries = CreateAccessListArrayByFlag(AccessList.Ban);
|
||||||
remote_client.SendLandAccessListData(avatars, (uint)AccessList.Ban, LandData.LocalID);
|
remote_client.SendLandAccessListData(accessEntries, (uint)AccessList.Ban, LandData.LocalID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateAccessList(uint flags, UUID transactionID,
|
public void UpdateAccessList(uint flags, UUID transactionID,
|
||||||
int sequenceID, int sections,
|
int sequenceID, int sections,
|
||||||
List<ParcelManager.ParcelAccessEntry> entries,
|
List<LandAccessEntry> entries,
|
||||||
IClientAPI remote_client)
|
IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
LandData newData = LandData.Copy();
|
LandData newData = LandData.Copy();
|
||||||
|
@ -558,16 +579,16 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
m_listTransactions[flags] = transactionID;
|
m_listTransactions[flags] = transactionID;
|
||||||
|
|
||||||
List<ParcelManager.ParcelAccessEntry> toRemove =
|
List<LandAccessEntry> toRemove =
|
||||||
new List<ParcelManager.ParcelAccessEntry>();
|
new List<LandAccessEntry>();
|
||||||
|
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in newData.ParcelAccessList)
|
foreach (LandAccessEntry entry in newData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
if (entry.Flags == (AccessList)flags)
|
if (entry.Flags == (AccessList)flags)
|
||||||
toRemove.Add(entry);
|
toRemove.Add(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in toRemove)
|
foreach (LandAccessEntry entry in toRemove)
|
||||||
{
|
{
|
||||||
newData.ParcelAccessList.Remove(entry);
|
newData.ParcelAccessList.Remove(entry);
|
||||||
}
|
}
|
||||||
|
@ -582,13 +603,13 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in entries)
|
foreach (LandAccessEntry entry in entries)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry temp =
|
LandAccessEntry temp =
|
||||||
new ParcelManager.ParcelAccessEntry();
|
new LandAccessEntry();
|
||||||
|
|
||||||
temp.AgentID = entry.AgentID;
|
temp.AgentID = entry.AgentID;
|
||||||
temp.Time = entry.Time;
|
temp.Expires = entry.Expires;
|
||||||
temp.Flags = (AccessList)flags;
|
temp.Flags = (AccessList)flags;
|
||||||
|
|
||||||
newData.ParcelAccessList.Add(temp);
|
newData.ParcelAccessList.Add(temp);
|
||||||
|
@ -1105,5 +1126,20 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
private void ExpireAccessList()
|
||||||
|
{
|
||||||
|
List<LandAccessEntry> delete = new List<LandAccessEntry>();
|
||||||
|
|
||||||
|
foreach (LandAccessEntry entry in LandData.ParcelAccessList)
|
||||||
|
{
|
||||||
|
if (entry.Expires != 0 && entry.Expires < Util.UnixTimeSinceEpoch())
|
||||||
|
delete.Add(entry);
|
||||||
|
}
|
||||||
|
foreach (LandAccessEntry entry in delete)
|
||||||
|
LandData.ParcelAccessList.Remove(entry);
|
||||||
|
|
||||||
|
m_scene.EventManager.TriggerLandObjectUpdated((uint)LandData.LocalID, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1253,7 +1253,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
|
public void SendLandAccessListData(List<LandAccessEntry> accessList, uint accessFlag, int localLandID)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -940,7 +940,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
|
public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
|
public void SendLandAccessListData(List<LandAccessEntry> accessList, uint accessFlag, int localLandID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public void SendForceClientSelectObjects(List<uint> objectIDs)
|
public void SendForceClientSelectObjects(List<uint> objectIDs)
|
||||||
|
|
|
@ -5714,16 +5714,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llEjectFromLand(string pest)
|
public void llEjectFromLand(string pest)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID agentId = new UUID();
|
UUID agentID = new UUID();
|
||||||
if (UUID.TryParse(pest, out agentId))
|
if (UUID.TryParse(pest, out agentID))
|
||||||
{
|
{
|
||||||
ScenePresence presence = World.GetScenePresence(agentId);
|
ScenePresence presence = World.GetScenePresence(agentID);
|
||||||
if (presence != null)
|
if (presence != null)
|
||||||
{
|
{
|
||||||
// agent must be over the owners land
|
// agent must be over the owners land
|
||||||
if (m_host.OwnerID == World.LandChannel.GetLandObject(
|
ILandObject land = World.LandChannel.GetLandObject(presence.AbsolutePosition.X, presence.AbsolutePosition.Y);
|
||||||
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
|
if (land == null)
|
||||||
World.TeleportClientHome(agentId, presence.ControllingClient);
|
return;
|
||||||
|
|
||||||
|
if (m_host.OwnerID == land.LandData.OwnerID)
|
||||||
|
{
|
||||||
|
World.TeleportClientHome(agentID, presence.ControllingClient);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(5000);
|
ScriptSleep(5000);
|
||||||
|
@ -6408,24 +6413,37 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID key;
|
UUID key;
|
||||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageAllowed))
|
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned))
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
int expires = 0;
|
||||||
|
if (hours != 0)
|
||||||
|
expires = Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours);
|
||||||
|
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
if (land.LandData.ParcelAccessList.FindIndex(
|
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||||
delegate(ParcelManager.ParcelAccessEntry e)
|
delegate(LandAccessEntry e)
|
||||||
{
|
{
|
||||||
if (e.AgentID == key && e.Flags == AccessList.Access)
|
if (e.AgentID == key && e.Flags == AccessList.Access)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}) == -1)
|
});
|
||||||
{
|
|
||||||
|
if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (idx != -1)
|
||||||
|
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||||
|
|
||||||
|
LandAccessEntry entry = new LandAccessEntry();
|
||||||
|
|
||||||
entry.AgentID = key;
|
entry.AgentID = key;
|
||||||
entry.Flags = AccessList.Access;
|
entry.Flags = AccessList.Access;
|
||||||
entry.Time = DateTime.Now.AddHours(hours);
|
entry.Expires = expires;
|
||||||
|
|
||||||
land.LandData.ParcelAccessList.Add(entry);
|
land.LandData.ParcelAccessList.Add(entry);
|
||||||
}
|
|
||||||
|
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9679,22 +9697,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned))
|
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned))
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
int expires = 0;
|
||||||
|
if (hours != 0)
|
||||||
|
expires = Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours);
|
||||||
|
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
if (land.LandData.ParcelAccessList.FindIndex(
|
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||||
delegate(ParcelManager.ParcelAccessEntry e)
|
delegate(LandAccessEntry e)
|
||||||
{
|
{
|
||||||
if (e.AgentID == key && e.Flags == AccessList.Ban)
|
if (e.AgentID == key && e.Flags == AccessList.Ban)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}) == -1)
|
});
|
||||||
{
|
|
||||||
|
if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (idx != -1)
|
||||||
|
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||||
|
|
||||||
|
LandAccessEntry entry = new LandAccessEntry();
|
||||||
|
|
||||||
entry.AgentID = key;
|
entry.AgentID = key;
|
||||||
entry.Flags = AccessList.Ban;
|
entry.Flags = AccessList.Ban;
|
||||||
entry.Time = DateTime.Now.AddHours(hours);
|
entry.Expires = expires;
|
||||||
|
|
||||||
land.LandData.ParcelAccessList.Add(entry);
|
land.LandData.ParcelAccessList.Add(entry);
|
||||||
}
|
|
||||||
|
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9710,7 +9741,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
int idx = land.LandData.ParcelAccessList.FindIndex(
|
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||||
delegate(ParcelManager.ParcelAccessEntry e)
|
delegate(LandAccessEntry e)
|
||||||
{
|
{
|
||||||
if (e.AgentID == key && e.Flags == AccessList.Access)
|
if (e.AgentID == key && e.Flags == AccessList.Access)
|
||||||
return true;
|
return true;
|
||||||
|
@ -9718,7 +9749,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
});
|
});
|
||||||
|
|
||||||
if (idx != -1)
|
if (idx != -1)
|
||||||
|
{
|
||||||
land.LandData.ParcelAccessList.RemoveAt(idx);
|
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||||
|
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9734,7 +9768,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
int idx = land.LandData.ParcelAccessList.FindIndex(
|
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||||
delegate(ParcelManager.ParcelAccessEntry e)
|
delegate(LandAccessEntry e)
|
||||||
{
|
{
|
||||||
if (e.AgentID == key && e.Flags == AccessList.Ban)
|
if (e.AgentID == key && e.Flags == AccessList.Ban)
|
||||||
return true;
|
return true;
|
||||||
|
@ -9742,7 +9776,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
});
|
});
|
||||||
|
|
||||||
if (idx != -1)
|
if (idx != -1)
|
||||||
|
{
|
||||||
land.LandData.ParcelAccessList.RemoveAt(idx);
|
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||||
|
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9997,7 +10034,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
||||||
if (land.OwnerID == m_host.OwnerID)
|
if (land.OwnerID == m_host.OwnerID)
|
||||||
{
|
{
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList)
|
foreach (LandAccessEntry entry in land.ParcelAccessList)
|
||||||
{
|
{
|
||||||
if (entry.Flags == AccessList.Ban)
|
if (entry.Flags == AccessList.Ban)
|
||||||
{
|
{
|
||||||
|
@ -10014,7 +10051,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
||||||
if (land.OwnerID == m_host.OwnerID)
|
if (land.OwnerID == m_host.OwnerID)
|
||||||
{
|
{
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList)
|
foreach (LandAccessEntry entry in land.ParcelAccessList)
|
||||||
{
|
{
|
||||||
if (entry.Flags == AccessList.Access)
|
if (entry.Flags == AccessList.Access)
|
||||||
{
|
{
|
||||||
|
|
|
@ -980,7 +980,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
|
public void SendLandAccessListData(List<LandAccessEntry> accessList, uint accessFlag, int localLandID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue