/// <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;
            }
            }
        }
Beispiel #2
0
 /// <summary>
 /// Construct the question reading from a DNS Server response. Consult RFC1035 4.1.2
 /// for byte-wise details of this structure in byte array form
 /// </summary>
 /// <param name="pointer">a logical pointer to the Question in byte array form</param>
 internal Question(Pointer pointer)
 {
     // extract from the message
     _domain   = pointer.ReadDomain();
     _dnsType  = (DnsType)pointer.ReadShort();
     _dnsClass = (DnsClass)pointer.ReadShort();
 }
Beispiel #3
0
 /// <summary>
 /// Constructs an MX record by reading bytes from a return message
 /// </summary>
 /// <param name="pointer">A logical pointer to the bytes holding the record</param>
 internal MXRecord(Pointer pointer)
 {
     _preference = pointer.ReadShort();
     _domainName = pointer.ReadDomain();
 }