Esempio n. 1
0
        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);
            }
        }