class CDNSQuery;
// Header of the DNS header
typedef struct _DnsHeaderHeader
{
unsigned short usID; // DNS header ID
unsigned short usOptions; // Too many fields
unsigned short usQDCount;
unsigned short usANCount;
unsigned short usNSCount;
unsigned short usARCount;
//Initialize ctor
_DnsHeaderHeader() : usID(0),
usOptions(0),
usQDCount(0),
usANCount(0),
usNSCount(0),
usARCount(0)
{
}
} DnsHeaderHeader;
typedef DnsHeaderHeader FAR * LPDnsHeaderHeader;
#define DnsHeaderHeaderLength sizeof(DnsHeaderHeader)
//DNS headers variables
#define DNS_QR_REQUEST 0 //Request DNS entry
#define DNS_QR_REPLY (1 << 7) //DNS reply
//four bit field that specifies kind of query in this message
#define DNS_OPCODE_STANDARD 0
#define DNS_OPCODE_INVERSE (1 << 3)
#define DNS_OPCODE_STATUS (2 << 3)
//Authoritative Answer - this bit is valid in responses,
//and specifies that the responding name server is an
//authority for the domain name in question section.
#define DNS_AA (1 << 2)
//Recursion Desired - this bit may be set in a query and
//is copied into the response. If RD is set, it directs
//the name server to pursue the query recursively.
//Recursive query support is optional.
#define DNS_RECURSION 1
//Recursion Available - this be is set or cleared in a
//response, and denotes whether recursive query support is
//available in the name server.
#define DNS_RECURSION_AVAILABLE (1 << 8)
//Response code - this 4 bit field is set as part of
//responses. The values have the following
//interpretation
#define DNS_RCODE_NOERROR 0
#define DNS_RCODE_FORMAT (1 << 13)
#define DNS_RCODE_SERVER (2 << 13)
#define DNS_RCODE_NAME (3 << 13)
#define DNS_RCODE_REFUSED (5 << 13)
//Server failure
#define DNS_SERVER_FAILURE (3 << 8)