/// <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> protected ResourceRecord(Pointer pointer) { // 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)pointer.ReadShort()) { case DnsType.NS: this._record = new NSRecord(pointer); break; case DnsType.MX: this._record = new MXRecord(pointer); break; case DnsType.ANAME: this._record = new ANameRecord(pointer); break; case DnsType.SOA: this._record = new SoaRecord(pointer); break; default: { // move the pointer over this unrecognised record pointer += recordLength; break; } } }
/// <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> public Question(Pointer pointer) { // extract from the message this._domain = pointer.ReadDomain(); this._dnsType = (DnsType)pointer.ReadShort(); this._dnsClass = (DnsClass)pointer.ReadShort(); }
/// <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> public Question(Pointer pointer) { // extract from the message this._domain = pointer.ReadDomain(); this._dnsType = (DnsType) pointer.ReadShort(); this._dnsClass = (DnsClass) pointer.ReadShort(); }
/// <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> public MXRecord(Pointer pointer) { this._preference = pointer.ReadShort(); this._domainName = pointer.ReadDomain(); }