Esempio n. 1
0
 /// <summary>
 /// Constructs an SOA record by reading bytes from a return message
 /// </summary>
 /// <param name="pointer">A logical pointer to the bytes holding the record</param>
 internal SOARecord(Pointer pointer)
 {
     // read all fields RFC1035 3.3.13
     _PrimaryNameServer      = pointer.ReadDomain();
     _ResponsibleMailAddress = pointer.ReadDomain();
     _Serial     = pointer.ReadInt();
     _Refresh    = pointer.ReadInt();
     _Retry      = pointer.ReadInt();
     _Expire     = pointer.ReadInt();
     _DefaultTTL = pointer.ReadInt();
 }
Esempio n. 2
0
        /// <summary>
        /// Construct a resource record from a pointer to a byte array
        /// </summary>
        /// <param name="pointer">the position in the byte array of the record</param>
        internal ResourceRecord(Pointer pointer)
        {
            // extract the domain, question type, question class and Ttl
            _Domain   = pointer.ReadDomain();
            _DnsType  = (DnsType)pointer.ReadShort();
            _DnsClass = (DnsClass)pointer.ReadShort();
            _TTL      = pointer.ReadInt();

            // the next short is the record length, we only use it for unrecognised record types
            int recordLength = pointer.ReadShort();

            // and create the appropriate RDATA record based on the dnsType
            switch (_DnsType)
            {
            case DnsType.NS:
                _Record = new NSRecord(pointer);
                break;

            case DnsType.MX:
                _Record = new MXRecord(pointer);
                break;

            case DnsType.ANAME:
                _Record = new ANameRecord(pointer);
                break;

            case DnsType.SOA:
                _Record = new SOARecord(pointer);
                break;

            default:
                // move the pointer over this unrecognised record
                pointer += recordLength;
                break;
            }
        }