Make ban, eject, freeze and the scripted versions of those work.
							parent
							
								
									fd7e82ee72
								
							
						
					
					
						commit
						07c487a28f
					
				|  | @ -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>(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -715,10 +715,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); | ||||||
|  | @ -1396,7 +1396,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; | ||||||
|         } |         } | ||||||
|  | @ -1406,12 +1406,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; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -1723,11 +1723,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> | ||||||
|  |  | ||||||
|  | @ -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( | ||||||
|  | @ -1259,7 +1259,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); | ||||||
|             } |             } | ||||||
|  | @ -668,4 +675,4 @@ namespace OpenSim.Framework | ||||||
|             return land; |             return land; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -128,4 +128,4 @@ namespace OpenSim.Framework.Serialization.Tests | ||||||
|                         "Reified LandData.Name != original LandData.Name (pre-serialized with parcel access list)"); |                         "Reified LandData.Name != original LandData.Name (pre-serialized with parcel access list)"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -4684,7 +4684,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; | ||||||
|  | @ -4693,12 +4693,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); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | @ -8641,13 +8641,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); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -508,7 +508,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 | ||||||
|  | @ -1777,10 +1777,10 @@ namespace OpenSim.Region.CoreModules.World.Land | ||||||
|              |              | ||||||
|             if ((flags & 1) != 0) // Ban TODO: Remove magic number |             if ((flags & 1) != 0) // Ban TODO: Remove magic number | ||||||
|             { |             { | ||||||
|                 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); |                 LandAccessEntry entry = new LandAccessEntry(); | ||||||
|                 entry.AgentID = targetAvatar.UUID; |                 entry.AgentID = targetAvatar.UUID; | ||||||
|                 entry.Flags = AccessList.Ban; |                 entry.Flags = AccessList.Ban; | ||||||
|                 entry.Time = new DateTime(); |                 entry.Expires = 0; // Perm | ||||||
| 
 | 
 | ||||||
|                 land.LandData.ParcelAccessList.Add(entry); |                 land.LandData.ParcelAccessList.Add(entry); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -467,21 +467,26 @@ namespace OpenSim.Region.CoreModules.World.Land | ||||||
| 
 | 
 | ||||||
|         public bool IsBannedFromLand(UUID avatar) |         public bool IsBannedFromLand(UUID avatar) | ||||||
|         { |         { | ||||||
|  |             ExpireAccessList(); | ||||||
|  | 
 | ||||||
|             if (m_scene.Permissions.IsAdministrator(avatar)) |             if (m_scene.Permissions.IsAdministrator(avatar)) | ||||||
|                 return false; |                 return false; | ||||||
| 
 | 
 | ||||||
|             if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar)) |             if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar)) | ||||||
|                 return false; |                 return false; | ||||||
| 
 | 
 | ||||||
|  |             if (avatar == LandData.OwnerID) | ||||||
|  |                 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; | ||||||
|                             return false; |                             return false; | ||||||
|                         }) != -1 && LandData.OwnerID != avatar) |                         }) != -1) | ||||||
|                 { |                 { | ||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|  | @ -491,21 +496,26 @@ namespace OpenSim.Region.CoreModules.World.Land | ||||||
| 
 | 
 | ||||||
|         public bool IsRestrictedFromLand(UUID avatar) |         public bool IsRestrictedFromLand(UUID avatar) | ||||||
|         { |         { | ||||||
|  |             ExpireAccessList(); | ||||||
|  | 
 | ||||||
|             if (m_scene.Permissions.IsAdministrator(avatar)) |             if (m_scene.Permissions.IsAdministrator(avatar)) | ||||||
|                 return false; |                 return false; | ||||||
| 
 | 
 | ||||||
|             if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar)) |             if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar)) | ||||||
|                 return false; |                 return false; | ||||||
| 
 | 
 | ||||||
|  |             if (avatar == LandData.OwnerID) | ||||||
|  |                 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; | ||||||
|                             return false; |                             return false; | ||||||
|                         }) == -1 && LandData.OwnerID != avatar) |                         }) == -1) | ||||||
|                 { |                 { | ||||||
|                     if (!HasGroupAccess(avatar)) |                     if (!HasGroupAccess(avatar)) | ||||||
|                     { |                     { | ||||||
|  | @ -570,19 +580,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; | ||||||
|  | @ -594,20 +609,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(); | ||||||
|  | @ -617,16 +632,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); | ||||||
|                 } |                 } | ||||||
|  | @ -641,13 +656,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); | ||||||
|  | @ -1164,5 +1179,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); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1260,7 +1260,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) | ||||||
|         { |         { | ||||||
|              |              | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -944,7 +944,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) | ||||||
|  |  | ||||||
|  | @ -6101,16 +6101,23 @@ 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) | ||||||
|  |                     { | ||||||
|  |                         Vector3 pos = World.GetNearestAllowedPosition(presence, land); | ||||||
|  |                         presence.TeleportWithMomentum(pos); | ||||||
|  |                         presence.ControllingClient.SendAlertMessage("You have been ejected from this land"); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             ScriptSleep(5000); |             ScriptSleep(5000); | ||||||
|  | @ -6804,24 +6811,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) |                             }); | ||||||
|                     { | 
 | ||||||
|                         entry.AgentID = key; |                     if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires))) | ||||||
|                         entry.Flags = AccessList.Access; |                         return; | ||||||
|                         entry.Time = DateTime.Now.AddHours(hours); | 
 | ||||||
|                         land.LandData.ParcelAccessList.Add(entry); |                     if (idx != -1) | ||||||
|                     } |                         land.LandData.ParcelAccessList.RemoveAt(idx); | ||||||
|  | 
 | ||||||
|  |                     LandAccessEntry entry = new LandAccessEntry(); | ||||||
|  | 
 | ||||||
|  |                     entry.AgentID = key; | ||||||
|  |                     entry.Flags = AccessList.Access; | ||||||
|  |                     entry.Expires = expires; | ||||||
|  | 
 | ||||||
|  |                     land.LandData.ParcelAccessList.Add(entry); | ||||||
|  | 
 | ||||||
|  |                     World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             ScriptSleep(100); |             ScriptSleep(100); | ||||||
|  | @ -10242,22 +10262,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) |                             }); | ||||||
|                     { | 
 | ||||||
|                         entry.AgentID = key; |                     if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires))) | ||||||
|                         entry.Flags = AccessList.Ban; |                         return; | ||||||
|                         entry.Time = DateTime.Now.AddHours(hours); | 
 | ||||||
|                         land.LandData.ParcelAccessList.Add(entry); |                     if (idx != -1) | ||||||
|                     } |                         land.LandData.ParcelAccessList.RemoveAt(idx); | ||||||
|  | 
 | ||||||
|  |                     LandAccessEntry entry = new LandAccessEntry(); | ||||||
|  | 
 | ||||||
|  |                     entry.AgentID = key; | ||||||
|  |                     entry.Flags = AccessList.Ban; | ||||||
|  |                     entry.Expires = expires; | ||||||
|  | 
 | ||||||
|  |                     land.LandData.ParcelAccessList.Add(entry); | ||||||
|  | 
 | ||||||
|  |                     World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             ScriptSleep(100); |             ScriptSleep(100); | ||||||
|  | @ -10273,7 +10306,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; | ||||||
|  | @ -10281,7 +10314,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); | ||||||
|  | @ -10297,7 +10333,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; | ||||||
|  | @ -10305,7 +10341,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); | ||||||
|  | @ -10625,7 +10664,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) | ||||||
|                     { |                     { | ||||||
|  | @ -10642,7 +10681,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) | ||||||
|                     { |                     { | ||||||
|  |  | ||||||
|  | @ -985,7 +985,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
	
	 Melanie
						Melanie