home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / internet / tcpipsrc / h / dnsfn < prev    next >
Encoding:
Text File  |  1994-09-28  |  4.6 KB  |  160 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #include "vterm.h"
  6.  
  7. /* RR types */
  8. #define TYPE_A       1   /* a host address */
  9. #define TYPE_NS      2   /* an authoritative name server */
  10. #define TYPE_MD      3   /* a mail destination (Obsolete - use MX) */
  11. #define TYPE_MF      4   /* a mail forwarder (Obsolete - use MX) */
  12. #define TYPE_CNAME   5   /* the canonical name for an alias */
  13. #define TYPE_SOA     6   /* marks the start of a zone of authority */
  14. #define TYPE_MB      7   /* a mailbox domain name (EXPERIMENTAL) */
  15. #define TYPE_MG      8   /* a mail group member (EXPERIMENTAL) */
  16. #define TYPE_MR      9   /* a mail rename domain name (EXPERIMENTAL) */
  17. #define TYPE_NULL    10  /* a null RR (EXPERIMENTAL) */
  18. #define TYPE_WKS     11  /* a well known service description */
  19. #define TYPE_PTR     12  /* a domain name pointer */
  20. #define TYPE_HINFO   13  /* host information */
  21. #define TYPE_MINFO   14  /* mailbox or mail list information */
  22. #define TYPE_MX      15  /* mail exchange */
  23. #define TYPE_TXT     16  /* text strings */
  24.  
  25. /* Additional Q types */
  26. #define TYPE_AXFR    252 /* A request for a transfer of an entire zone */
  27. #define TYPE_MAILB   253 /* A request for mailbox-related records (MB, MG or MR) */
  28. #define TYPE_MAILA   254 /* A request for mail agent RRs (Obsolete - see MX) */
  29. #define TYPE_ALL     255 /* A request for all records */
  30.  
  31. /* RR classes */
  32. #define CLASS_IN     1   /* the Internet */
  33. #define CLASS_CS     2   /* the CSNET class (Obsolete) */
  34. #define CLASS_CH     3   /* the CHAOS class */
  35. #define CLASS_HS     4   /* Hesiod */
  36.  
  37. /* Additional Q classes */
  38. #define CLASS_ANY    255 /* any class */
  39.  
  40. #define RCODE_OK        0
  41. #define RCODE_BADFORM   1
  42. #define RCODE_SERVFAIL  2
  43. #define RCODE_NAMEERR   3
  44. #define RCODE_NOTIMP    4
  45. #define RCODE_REFUSED   5
  46.  
  47. #define OPCODE_STD      0
  48. #define OPCODE_INV      1
  49. #define OPCODE_STAT     2
  50.  
  51. #define PRASC(a) ( ((a)>=' ' && (a)<0x7f) ? a : '.' )
  52.  
  53. typedef unsigned char  uint8;
  54. typedef unsigned short uint16;
  55. typedef unsigned int   uint32;
  56. typedef int            int32;
  57.  
  58. typedef struct rr_str {
  59.   struct rr_str *next;
  60.   char *name;
  61.   uint16 type;
  62.   uint16 class;
  63.   int32 ttl;
  64.   union {
  65.     struct {
  66.       char *name;
  67.     } cname;
  68.     struct {
  69.       char *name;
  70.     } mb;
  71.     struct {
  72.       char *name;
  73.     } md;
  74.     struct {
  75.       char *name;
  76.     } mf;
  77.     struct {
  78.       char *name;
  79.     } mg;
  80.     struct {
  81.       char *name;
  82.     } mr;
  83.     struct {
  84.       char *name;
  85.     } ns;
  86.     struct {
  87.       char *name;
  88.     } ptr;
  89.     struct {
  90.       char *text;
  91.     } txt;
  92.     struct {
  93.       char *cpu;
  94.       char *os;
  95.     } hinfo;
  96.     struct {
  97.       char *rmbx;
  98.       char *embx;
  99.     } minfo;
  100.     struct {
  101.       uint16 pref;
  102.       char *name;
  103.     } mx;
  104.     struct {
  105.       int len;
  106.       char *data;
  107.     } null;
  108.     struct {
  109.       char *mname;
  110.       char *rname;
  111.       uint32 serial;
  112.       uint32 refresh;
  113.       uint32 retry;
  114.       uint32 expire;
  115.       uint32 minttl;
  116.     } soa;
  117.     struct {
  118.       uint32 addr;
  119.     } a;
  120.     struct {
  121.       uint32 addr;
  122.       uint8 protocol;
  123.       uint16 len;
  124.       char *data;
  125.     } wks;
  126.   } rdata;
  127. } rr_str;
  128.  
  129. typedef struct qr_str {
  130.   struct qr_str *link;           /* Link back to next query */
  131.   rr_str *answers;               /* None null if an answer has been received */
  132.   uint32 nsaddr;                 /* IP Address of name server to use */
  133.   uint16 type;                   /* Type of lookup required */
  134.   uint16 id;                     /* Request ID */
  135.   char *name;                    /* Name to query */
  136.   uint32 options;                /* Options as follows: */
  137. #define QR_RECURSE      0x01     /* Recursive lookup */
  138. #define QR_AUTHORITIVE  0x02     /* Authoritve answer only */
  139. #define QR_PERSUE       0x04     /* Persue until desired result */
  140. #define QR_VERBOSE      0x08     /* Show everything */
  141. #define QR_VERYVERBOSE  0x10     /* Show evrything */
  142. #define QR_BRIEF        0x20     /* Be brief */
  143. #define QS_UNIXNSL      0x40     /* Unix type syntax */
  144. #define QR_INVERSE      0x100    /* Inverse lookup */
  145. #define QR_GATEWAY      0x200    /* Extract Net number */
  146.  
  147. #define QR_BYPASS       0x1000   /* Bypass local DNS facilities */
  148. #define QR_CACHE        0x2000   /* Cache result */
  149. #define QR_REFRESH      0x4000   /* Refresh cached value */
  150.  
  151. #define QR_GIVE_FULL    0x00000  /* Deliver a full list of RRs */
  152. #define QR_GIVE_ADDR    0x10000  /* Deliver a host address only */
  153. #define QR_GIVE_NAME    0x20000  /* Deliver a host name only */
  154. #define QR_GIVE_MXLIST  0x30000  /* Deliver a list of ordered MX host addresses */
  155. #define QR_WANT_MASK    0x30000  /* Mask for extracting the delivery type */
  156.  
  157. #define QR_USE_TCP      0x100000 /* Use TCP else use UDP */
  158. } qr_str;
  159.  
  160.