diff --git a/OpenMetaverse.Utilities/Utilities.cs b/OpenMetaverse.Utilities/Utilities.cs index 11d68650..672b4601 100644 --- a/OpenMetaverse.Utilities/Utilities.cs +++ b/OpenMetaverse.Utilities/Utilities.cs @@ -521,7 +521,7 @@ namespace OpenMetaverse.Utilities if (simulator != null && Parcels.ContainsKey(simulator) && Parcels[simulator].ContainsKey(localID)) { Parcel parcel = Parcels[simulator][localID]; - parcel.AccessList = accessEntries; + //parcel.AccessList = accessEntries; Parcels[simulator][localID] = parcel; } } diff --git a/OpenMetaverse/ParcelManager.cs b/OpenMetaverse/ParcelManager.cs index 0b10b6e2..e6ed3f4c 100644 --- a/OpenMetaverse/ParcelManager.cs +++ b/OpenMetaverse/ParcelManager.cs @@ -89,7 +89,7 @@ namespace OpenMetaverse Access = 1 << 0, /// Request the ban list Ban = 1 << 1, - /// Request both the access list and ban list + /// Request both White and Black lists Both = Access | Ban } @@ -509,9 +509,12 @@ namespace OpenMetaverse public bool RegionDenyAnonymous; /// public bool RegionPushOverride; - /// Access list of who is whitelisted or blacklisted on this + /// Access list of who is whitelisted on this /// parcel - public List AccessList; + public List AccessWhiteList; + /// Access list of who is blacklisted on this + /// parcel + public List AccessBlackList; /// TRUE of region denies access to age unverified users public bool RegionDenyAgeUnverified; /// true to obscure (hide) media url @@ -583,7 +586,8 @@ namespace OpenMetaverse Dwell = 0; RegionDenyAnonymous = false; RegionPushOverride = false; - AccessList = new List(0); + AccessWhiteList = new List(); + AccessBlackList = new List(0); RegionDenyAgeUnverified = false; Media = new ParcelMedia(); ObscureMedia = false; @@ -664,12 +668,8 @@ namespace OpenMetaverse public UUID AgentID; /// public DateTime Time; - /// Flag to Permit access to agent, or ban agent from parcel - public AccessList Flags; - /// The flags of the specific entry itself - /// TODO: this should be an enum, need to figure out what these flags are, - /// they probably have something to do with expiring bans - public uint EntryFlags; + /// Flags for specific entry in white/black lists + public uint Flags; } /// @@ -1560,28 +1560,33 @@ namespace OpenMetaverse if (OnAccessListReply != null || Client.Settings.ALWAYS_REQUEST_PARCEL_ACL == true) { ParcelAccessListReplyPacket reply = (ParcelAccessListReplyPacket)packet; + List accessList = new List(reply.List.Length); - - for (int i = 0; i < reply.List.Length; i++) - { - ParcelAccessEntry pae = new ParcelAccessEntry(); - pae.AgentID = reply.List[i].ID; - pae.Flags = (AccessList)reply.Data.Flags; - pae.Time = Utils.UnixTimeToDateTime((uint)reply.List[i].Time); - pae.EntryFlags = reply.List[i].Flags; - - accessList.Add(pae); - } - - lock (simulator.Parcels.Dictionary) - { - if (simulator.Parcels.Dictionary.ContainsKey(reply.Data.LocalID)) + + for (int i = 0; i < reply.List.Length; i++) { - Parcel parcel = simulator.Parcels.Dictionary[reply.Data.LocalID]; - parcel.AccessList = accessList; - simulator.Parcels.Dictionary[reply.Data.LocalID] = parcel; + ParcelAccessEntry pae = new ParcelAccessEntry(); + pae.AgentID = reply.List[i].ID; + pae.Time = Utils.UnixTimeToDateTime((uint)reply.List[i].Time); + pae.Flags = reply.List[i].Flags; + + accessList.Add(pae); } - } + + lock (simulator.Parcels.Dictionary) + { + if (simulator.Parcels.Dictionary.ContainsKey(reply.Data.LocalID)) + { + Parcel parcel = simulator.Parcels.Dictionary[reply.Data.LocalID]; + if ((AccessList)reply.Data.Flags == AccessList.Ban) + parcel.AccessBlackList = accessList; + else + parcel.AccessWhiteList = accessList; + + simulator.Parcels.Dictionary[reply.Data.LocalID] = parcel; + } + } + if (OnAccessListReply != null) { diff --git a/Programs/examples/TestClient/Commands/Land/ParcelInfoCommand.cs b/Programs/examples/TestClient/Commands/Land/ParcelInfoCommand.cs index ccb64356..8220ca75 100644 --- a/Programs/examples/TestClient/Commands/Land/ParcelInfoCommand.cs +++ b/Programs/examples/TestClient/Commands/Land/ParcelInfoCommand.cs @@ -43,8 +43,18 @@ namespace OpenMetaverse.TestClient Client.Network.CurrentSim.Parcels.ForEach(delegate(Parcel parcel) { - sb.AppendFormat("Parcel[{0}]: Name: \"{1}\", Description: \"{2}\" ACL Count: {3} Traffic: {4}" + System.Environment.NewLine, - parcel.LocalID, parcel.Name, parcel.Desc, parcel.AccessList.Count, parcel.Dwell); + sb.AppendFormat("Parcel[{0}]: Name: \"{1}\", Description: \"{2}\" ACLBlacklist Count: {3}, ACLWhiteList Count: {5} Traffic: {4}" + System.Environment.NewLine, + parcel.LocalID, parcel.Name, parcel.Desc, parcel.AccessBlackList.Count, parcel.Dwell, parcel.AccessWhiteList.Count); + //foreach (ParcelManager.ParcelAccessEntry white in parcel.AccessWhiteList) + //{ + // if(white.AgentID != UUID.Zero) + // sb.AppendFormat("\tAllowed Avatar {0}" + System.Environment.NewLine, white.AgentID); + //} + //foreach (ParcelManager.ParcelAccessEntry black in parcel.AccessBlackList) + //{ + // if(black.AgentID != UUID.Zero) + // sb.AppendFormat("\t Banned Avatar {0}" + System.Environment.NewLine, black.AgentID); + //} }); result = sb.ToString();