Esempio n. 1
0
 /* Instance management */
 public void Read(BinaryReader br)
 {
     name   = DNS.ReadName(br);
     qtype  = br.ReadUInt16();
     qclass = br.ReadUInt16();
     ntoh();
 }
Esempio n. 2
0
 /* Instance management */
 public void Read(BinaryReader br)
 {
     name   = DNS.ReadName(br);
     atype  = br.ReadUInt16();
     aclass = br.ReadUInt16();
     ttl    = br.ReadUInt32();
     rdlen  = br.ReadUInt16();
     ntoh();
     rdata = br.ReadBytes((int)rdlen);
 }
Esempio n. 3
0
        public static void Run()
        {
            UdpClient udpClient = new UdpClient();

            udpClient.EnableBroadcast = true;
            IPEndPoint recv_groupep = new IPEndPoint(IPAddress.Any, _P2P_PORT);

            udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            udpClient.ExclusiveAddressUse = false;
            udpClient.Client.Bind(recv_groupep);

            while (true)
            {
                IPEndPoint recv_ipep = null;
                try
                {
                    byte[]       packet = udpClient.Receive(ref recv_ipep);
                    MemoryStream ms     = new MemoryStream(packet);
                    BinaryReader br     = new BinaryReader(ms);

                    UInt32 id        = br.ReadUInt32();
                    byte   isRequest = br.ReadByte();

                    if (isRequest == 1)
                    {
                        string name = DNS.ReadName(br);
                        DNScache.clean();
                        lock (DNScache._lock_cache)
                        {
                            if (DNScache._cache.ContainsKey(name))
                            {
                                MemoryStream ms_res = new MemoryStream();
                                BinaryWriter bw     = new BinaryWriter(ms_res);
                                bw.Write(id);
                                bw.Write((byte)0);

                                DNScache.cache_entry ce = DNScache._cache[name];

                                if (ce.success)
                                {
                                    bw.Write((byte)1);
                                    UInt32 ttl = (UInt32)((ce.expiry - DateTime.Now).TotalSeconds);
                                    bw.Write((UInt32)IPAddress.HostToNetworkOrder((int)ttl));
                                    bw.Write(ce.address, 0, 4);
                                }
                                else
                                {
                                    bw.Write((byte)0);
                                    UInt32 ttl = (UInt32)((ce.expiry - DateTime.Now).TotalSeconds);
                                    bw.Write((UInt32)IPAddress.HostToNetworkOrder((int)ttl));
                                    bw.Write((byte)0);
                                    bw.Write((byte)0);
                                    bw.Write((byte)0);
                                    bw.Write((byte)0);
                                }

                                byte[] packet_res = ms_res.ToArray();
                                udpClient.Send(packet_res, packet_res.Length, recv_ipep);
                            }
                        }
                    }
                } catch (ThreadInterruptedException ex) {
                    return;
                }
            }
        }