private static IRecord ReadRecord(ByteReader byteReader) { var name = DnsUtils.ReadName(byteReader); var rtype = byteReader.GetUshort(); var rclass = byteReader.GetUshort(); var ttl = byteReader.GetUint(); if ((RecordType)rtype == RecordType.NS) { var record = new NSRecord() { Name = name, RClass = rclass, Ttl = ttl, }; var rdlength = byteReader.GetUshort(); record.Host = ReadName(byteReader); return(record); } else if ((RecordType)rtype == RecordType.A) { var rdlength = byteReader.GetUshort(); var ipv4 = ReadIpv4(byteReader); var record = new ARecord(name, ipv4) { RClass = rclass, Ttl = ttl, }; return(record); } else if ((RecordType)rtype == RecordType.AAAA) { var rdlength = byteReader.GetUshort(); var ipv6 = ReadIpv6(byteReader); var record = new AaaaRecord(name, ipv6) { RClass = rclass, Ttl = ttl, }; return(record); } else { var record = new Record() { Name = name, RType = rtype, RClass = (ushort)rclass, Ttl = ttl, }; var rdlength = byteReader.GetUshort(); record.RData = byteReader.GetBytes(rdlength); return(record); } }