示例#1
0
        private void SendAddressResponse(Packet p, IPEndPoint ep)
        {
            var packet = new Packet();

            packet.TransactionID         = p.TransactionID;
            packet.Flags.IsResponse      = true;
            packet.Flags.IsAuthoritative = true;
            var ip4Address = GetIP4Address();
            var ip6Address = GetIP6Address();
            var a          = AAnswer.Build(fullName, ip4Address, (UInt16)120, true, 1);
            var aaaa       = AAAAAnswer.Build(fullName, ip6Address, (UInt16)120, true, 1);

            if (a != null)
            {
                packet.Answers.Add(a);
            }
            if (aaaa != null)
            {
                packet.Answers.Add(aaaa);
            }

            if (ep != null)
            {
                _service.SendPacket(p, ep);
            }
            else
            {
                _service.SendPacket(packet);
            }
        }
        void RequestAddress(string name)
        {
            Packet packet = null;

            AddToPacket(ref packet, name, 1);
            AddToPacket(ref packet, name, 28);
            _service.SendPacket(packet);
        }
        void SendPacket(bool isMultiCast)
        {
            if (_waiting || _stopped)
            {
                _timerRunning = false;
                return;
            }

            //Create Packet
            var packet = new Packet();

            packet.Flags.IsResponse = false;
            packet.Queries.Add(new Query()
            {
                IsMulticast = isMultiCast,
                Record      = new Record()
                {
                    Class      = 1,
                    Name       = _proto,
                    RecordType = 12,
                },
            });

            //Send it
            try
            {
                _service.SendPacket(packet);
            }
            catch (SocketException ex)
            {
                //Likely temporary disconnect, try again next time
            }
            finally
            {
                //Setup next request
                _timerRunning = true;
                _timer.FireNext(delays[nextDelayIndex]);
                AdvanceDelay();
            }
        }