/* Instance management */ public void Read(BinaryReader br) { name = DNS.ReadName(br); qtype = br.ReadUInt16(); qclass = br.ReadUInt16(); ntoh(); }
/* 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); }
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; } } }