struct HEADER {
  unsigned short id;

  unsigned rd:1;       /* recursion? */
  unsigned tc:1;       /* truncated? */
  unsigned aa:1;       /* authoritative?  - response only */
  unsigned opcode:4;   /* 0 norm 1 inverse 2 server stats 3->15 reserverd */
  unsigned query:1;    /* query = 0 -> query else response */

  unsigned rcode:4;    /* response code:
                        0 (good)
                        1 (format error)
                        2 (server failure)
                        3 (for authoritative responses: no domain exists
                        4 (query type not implemented)
                        5 (request refused)
                        6-15 reserverd for future use
                   */
  unsigned z:3;        /* reserved for future use - must be 0 */
  unsigned ra:1;       /* recursion available - response available */

  unsigned short qdcount; /* Number of questions */
  unsigned short ancount; /* Number of answers */
  unsigned short nscount; /* number of name server resouse records in ae */
  unsigned short arcount; /* Number of resource records in additional section */
};

#define T_A	1
#define T_NS	2
#define T_MD	3
#define T_MF	4
#define T_CNAME	5
#define T_SOA	6
#define T_MB	7
#define T_MG	8
#define T_MR	9
#define T_NULL	10
#define T_WKS	11
#define T_PTR	12
#define T_HINFO	13
#define T_MINFO	14
#define T_MX	15
#define T_TXT	16

#define MAXIP	5
typedef unsigned char DOMAIN[MAXIP];   /* signed  8 bit int */
