Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }