public void MergeCopyFrom(DNSPacket aSource) { this.Questions.AddRange(aSource.Questions); this.Answers.AddRange(aSource.Answers); this.AuthorityRecords.AddRange(aSource.AuthorityRecords); this.AdditionalRecords.AddRange(aSource.AdditionalRecords); }
private void GotData(IAsyncResult ar) { lock (this) { if (timer == null) { return; } try { DNSPacket pack = new DNSPacket(); IPEndPoint ipd = null; pack.ReadFrom(cl.EndReceive(ar, ref ipd)); if (pack.SequenceID != this.Input.SequenceID) { return; // bad wolf } var tm = timer; timer = null; tm.Dispose(); cl.Close(); Callback(pack); } catch { } } }
public override void BodyReadFrom(byte[] aData, Stream aMainStream) { BinaryReader aSrc = new BinaryReader(new MemoryStream(aData)); this.fTargetName = DNSPacket.ParseName(aSrc, aMainStream); aSrc.Close(); }
public static DNSResource ReadFrom(BinaryReader aSrc) { DNSResource resource; string str = DNSPacket.ParseName(aSrc, aSrc.BaseStream); DNSType aType = (DNSType)DNSPacket.N2H(aSrc.ReadUInt16()); DNSClass class2 = (DNSClass)DNSPacket.N2H(aSrc.ReadUInt16()); bool flag = false; if (0 != (((ushort)class2) & 0x8000)) { flag = true; } class2 &= (DNSClass)(-32769); uint num = DNSPacket.N2H(aSrc.ReadUInt32()); ushort num2 = DNSPacket.N2H(aSrc.ReadUInt16()); byte[] aData = aSrc.ReadBytes((int)num2); DNSType type2 = aType; if (type2 == DNSType.A) { resource = new DNSARecord(); } else if (type2 == DNSType.AAAA) { resource = new DNSAAAARecord(); } else if (type2 == DNSType.PTR) { resource = new DNSPTRRecord(); } else if (type2 == DNSType.NS) { resource = new DNSNSRecord(); } else if (type2 == DNSType.TXT) { resource = new DNSTXTRecord(); } else if (type2 == DNSType.CNAME) { resource = new DNSCNameRecord(); } else if (type2 == DNSType.SRV) { resource = new DNSSRVRecord(); } else { resource = new DNSUnknownRecord(aType); } resource.fName = str; resource.fParseTime = DateTime.UtcNow; resource.fClass = class2; resource.fClearCache = flag; resource.fTTL = (ushort)num; resource.BodyReadFrom(aData, aSrc.BaseStream); return(resource); }
public override void BodyReadFrom(byte[] aData, Stream aMainStream) { BinaryReader aSrc = new BinaryReader(new MemoryStream(aData)); this.fPriority = DNSPacket.N2H(aSrc.ReadUInt16()); this.fWeight = DNSPacket.N2H(aSrc.ReadUInt16()); this.fPort = DNSPacket.N2H(aSrc.ReadUInt16()); this.fTargetName = DNSPacket.ParseName(aSrc, aMainStream); aSrc.Close(); }
public override byte[] BodyWriteTo() { BinaryWriter aDest = new BinaryWriter(new MemoryStream()); DNSPacket.GenerateName(aDest, this.fTargetName); aDest.Flush(); byte[] buffer = (aDest.BaseStream as MemoryStream).ToArray(); aDest.Close(); return(buffer); }
public void ReadFrom(BinaryReader aSrc) { this.fName = DNSPacket.ParseName(aSrc, aSrc.BaseStream); this.fType = (DNSType)DNSPacket.N2H(aSrc.ReadUInt16()); ushort num = DNSPacket.N2H(aSrc.ReadUInt16()); if (0 != (num & 0x8000)) { this.fClearCache = true; } this.fClass = ((DNSClass)num) & ((DNSClass)(-32769)); }
public void WriteTo(BinaryWriter aDest) { DNSPacket.GenerateName(aDest, this.fName); aDest.Write(DNSPacket.H2N((ushort)this.fType)); if (this.fClearCache) { aDest.Write(DNSPacket.H2N((ushort)(this.fClass | ((DNSClass)0x8000)))); } else { aDest.Write(DNSPacket.H2N((ushort)this.fClass)); } }
public void BeginRequest(DNSQuestion question, Action<DNSResource> action) { DNSPacket req = new DNSPacket(); req.QueryType = DNSQueryType.Standard; req.RecursionDesired = true; req.Questions.Add(question); BeginRequest(req, a => { if (a == null || a.Answers.Count != 1) action(null); else action(a.Answers[0]); }); }
public void BeginRequest(DNSPacket input, Action<DNSPacket> action) { if (fAddresses.Count == 0) { LoadSystemAddresses(); if (fAddresses == null) throw new DNSException("No addresses available"); } RequestInfo info = new RequestInfo(); info.Input = input; info.Index = 0; info.Owner = this; info.Callback = action; input.SequenceID = (ushort)rnd.Next(ushort.MaxValue); info.Start(); }
public void WriteTo(BinaryWriter aDest) { DNSPacket.GenerateName(aDest, this.fName); aDest.Write(DNSPacket.H2N((ushort)this.Type)); if (this.fClearCache) { aDest.Write(DNSPacket.H2N((ushort)(this.fClass | ((DNSClass)0x8000)))); } else { aDest.Write(DNSPacket.H2N((ushort)this.fClass)); } byte[] buffer = this.BodyWriteTo(); aDest.Write(DNSPacket.H2N((uint)this.fTTL)); aDest.Write(DNSPacket.H2N((ushort)buffer.Length)); aDest.Write(buffer, 0, buffer.Length); }
public void BeginRequest(DNSQuestion question, Action <DNSResource> action) { DNSPacket req = new DNSPacket(); req.QueryType = DNSQueryType.Standard; req.RecursionDesired = true; req.Questions.Add(question); BeginRequest(req, a => { if (a == null || a.Answers.Count != 1) { action(null); } else { action(a.Answers[0]); } }); }
public void BeginRequest(DNSPacket input, Action <DNSPacket> action) { if (fAddresses.Count == 0) { LoadSystemAddresses(); if (fAddresses == null) { throw new DNSException("No addresses available"); } } RequestInfo info = new RequestInfo(); info.Input = input; info.Index = 0; info.Owner = this; info.Callback = action; input.SequenceID = (ushort)rnd.Next(ushort.MaxValue); info.Start(); }
private void GotData(IAsyncResult ar) { lock (this) { if (timer == null) { return; } try { DNSPacket pack = new DNSPacket(); IPEndPoint ipd = null; pack.ReadFrom(cl.EndReceive(ar, ref ipd)); if (pack.SequenceID != this.Input.SequenceID) return; // bad wolf var tm = timer; timer = null; tm.Dispose(); cl.Close(); Callback(pack); } catch { } } }