private void ParcelAccessListRequestHandler(Packet packet, LLAgent agent) { ParcelAccessListRequestPacket request = (ParcelAccessListRequestPacket)packet; ParcelAccessFlags flags = (ParcelAccessFlags)request.Data.Flags; SceneParcel parcel; if (m_parcels.TryGetParcel(request.Data.LocalID, out parcel)) { ParcelAccessListReplyPacket reply = new ParcelAccessListReplyPacket(); reply.Data.AgentID = agent.ID; reply.Data.Flags = request.Data.Flags; reply.Data.LocalID = request.Data.LocalID; reply.Data.SequenceID = request.Data.SequenceID; List <ParcelAccessEntry> list = (flags == ParcelAccessFlags.Access) ? parcel.AccessWhiteList : parcel.AccessBlackList; if (list != null) { lock (list) { reply.List = new ParcelAccessListReplyPacket.ListBlock[list.Count]; for (int i = 0; i < list.Count; i++) { reply.List[i] = new ParcelAccessListReplyPacket.ListBlock { Flags = request.Data.Flags, ID = list[i].AgentID, Time = (int)Utils.DateTimeToUnixTime(list[i].Created) }; } } } else { reply.List = new ParcelAccessListReplyPacket.ListBlock[0]; } m_udp.SendPacket(agent, reply, ThrottleCategory.Task, true); } else { m_log.Warn(agent.Name + " requested access list for unknown parcel " + request.Data.LocalID); } }
/// <summary> /// Request the access list for a single parcel /// </summary> /// <param name="simulator">Simulator containing the parcel</param> /// <param name="localID">Simulator-local ID of the parcel</param> /// <param name="sequenceID">An arbitrary integer that will be returned /// with the ParcelAccessList reply, useful for distinguishing between /// multiple simultaneous requests</param> /// <param name="flags"></param> public void RequestParcelAccessList(Simulator simulator, int localID, AccessList flags, int sequenceID) { ParcelAccessListRequestPacket request = new ParcelAccessListRequestPacket(); request.AgentData.AgentID = Client.Self.AgentID; request.AgentData.SessionID = Client.Self.SessionID; request.Data.LocalID = localID; request.Data.Flags = (uint)flags; request.Data.SequenceID = sequenceID; Client.Network.SendPacket(request, simulator); }