home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / DOMAIN.H < prev    next >
C/C++ Source or Header  |  1994-04-17  |  6KB  |  190 lines

  1. #ifndef _DOMAIN_H
  2. #define _DOMAIN_H
  3.   
  4. #ifndef _GLOBAL_H
  5. #include "global.h"
  6. #endif
  7.   
  8. #ifndef _MBUF_H
  9. #include "mbuf.h"
  10. #endif
  11.   
  12. #ifndef _PROC_H
  13. #include "proc.h"
  14. #endif
  15.   
  16. #define MAXCNAME    10  /* Maximum amount of cname recursion */
  17.   
  18. #define TYPE_A      1   /* Host address */
  19. #define TYPE_NS     2   /* Name server */
  20. #define TYPE_MD     3   /* Mail destination (obsolete) */
  21. #define TYPE_MF     4   /* Mail forwarder (obsolete) */
  22. #define TYPE_CNAME  5   /* Canonical name */
  23. #define TYPE_SOA    6   /* Start of Authority */
  24. #define TYPE_MB     7   /* Mailbox name (experimental) */
  25. #define TYPE_MG     8   /* Mail group member (experimental) */
  26. #define TYPE_MR     9   /* Mail rename name (experimental) */
  27. #define TYPE_NULL   10  /* Null (experimental) */
  28. #define TYPE_WKS    11  /* Well-known sockets */
  29. #define TYPE_PTR    12  /* Pointer record */
  30. #define TYPE_HINFO  13  /* Host information */
  31. #define TYPE_MINFO  14  /* Mailbox information (experimental)*/
  32. #define TYPE_MX     15  /* Mail exchanger */
  33. #define TYPE_TXT    16  /* Text strings */
  34. #define TYPE_AXFR   252 /* Transfer zone of athority */
  35. #define TYPE_MAILB  253 /* Transfer mailbox records */
  36. #define TYPE_MAILA  254 /* Transfer mail agent records */
  37. #define TYPE_ANY    255 /* Matches any type */
  38.   
  39. #define CLASS_IN    1   /* The ARPA Internet */
  40. #define CLASS_CH    3   /* The CHAOS net at MIT */
  41. #define CLASS_ANY   255 /* wildcard match */
  42.   
  43. struct dserver {
  44.     struct dserver *prev;   /* Linked list pointers */
  45.     struct dserver *next;
  46.   
  47.     int32 address;      /* IP address of server */
  48.     int16 port;         /* TCP port for request */
  49.     int32 timeout;      /* Current timeout, ticks */
  50.     int32 srtt;     /* Smoothed round trip time, ticks */
  51.     int32 mdev;     /* Mean deviation, ticks */
  52.     int32 queries;      /* Query packets sent to this server */
  53.     int32 responses;    /* Response packets received from this server */
  54.     int32 timeouts;     /* Query timeouts (misses) */
  55. };
  56. #define NULLDOM (struct dserver *)0
  57. extern struct dserver *Dlist;
  58. extern int Dsocket;     /* Socket to use for domain queries */
  59.   
  60. /* Round trip timing parameters */
  61. #define AGAIN   8   /* Average RTT gain = 1/8 */
  62. #define LAGAIN  3   /* Log2(AGAIN) */
  63. #define DGAIN   4   /* Mean deviation gain = 1/4 */
  64. #define LDGAIN  2   /* log2(DGAIN) */
  65.   
  66. #define DOM_RESPONSE    0x8000
  67. #define DOM_AUTHORITY   0x0400
  68. #define DOM_TRUNC   0x0200
  69. #define DOM_DORECURSE   0x0100
  70. #define DOM_CANRECURSE  0x0080
  71.   
  72. /* Header for all domain messages */
  73. struct dhdr {
  74.     int16 id;       /* Identification */
  75.     char qr;        /* Query/Response */
  76. #define QUERY       0
  77. #define RESPONSE    1
  78.     char opcode;
  79. #define QUERY       0
  80. #define IQUERY      1
  81. #define DOMSTATUS   2
  82. #define ZONEINIT    14
  83. #define ZONEREF     15
  84.     char aa;        /* Authoratative answer */
  85.     char tc;        /* Truncation */
  86.     char rd;        /* Recursion desired */
  87.     char ra;        /* Recursion available */
  88.     char rcode;     /* Response code */
  89. #define NO_ERROR    0
  90. #define FORMAT_ERROR    1
  91. #define SERVER_FAIL 2
  92. #define NAME_ERROR  3
  93. #define NOT_IMPL    4
  94. #define REFUSED     5
  95.     int16 qdcount;      /* Question count */
  96.     int16 ancount;      /* Answer count */
  97.     int16 nscount;      /* Authority (name server) count */
  98.     int16 arcount;      /* Additional record count */
  99.     struct rr *questions;   /* List of questions */
  100.     struct rr *answers; /* List of answers */
  101.     struct rr *authority;   /* List of name servers */
  102.     struct rr *additional;  /* List of additional records */
  103. };
  104.   
  105. struct mx {
  106.     int16 pref;
  107.     char *exch;
  108. };
  109.   
  110. struct hinfo {
  111.     char *cpu;
  112.     char *os;
  113. };
  114.   
  115. struct minfo {
  116.     char *rmailbx;
  117.     char *emailbx;
  118. };
  119.   
  120. struct wks {
  121.     int32 addr;
  122.     unsigned char protocol;
  123.     unsigned char bitmap[64];
  124. };
  125.   
  126. struct soa {
  127.     char *mname;
  128.     char *rname;
  129.     int32 serial;
  130.     int32 refresh;
  131.     int32 retry;
  132.     int32 expire;
  133.     int32 minimum;
  134. };
  135.   
  136. struct rr {
  137.     struct rr *last;
  138.     struct rr *next;
  139.     char source;
  140. #define RR_NONE     0
  141. #define RR_FILE     1   /* from file */
  142. #define RR_QUESTION 4   /* from server reply */
  143. #define RR_ANSWER   5   /* from server reply */
  144. #define RR_AUTHORITY    6   /* from server reply */
  145. #define RR_ADDITIONAL   7   /* from server reply */
  146. #define RR_QUERY    8   /* test name (see QUERY)*/
  147. #define RR_INQUERY  9   /* test resource (see IQUERY)*/
  148.   
  149.     char *comment;      /* optional comment */
  150.     char *name;     /* Domain name, ascii form */
  151.     char *suffix;       /* Suffix name */
  152.     int32 ttl;      /* Time-to-live */
  153. #define TTL_MISSING 0x80000000L
  154.     int16 class;        /* IN, etc */
  155. #define CLASS_MISSING   0
  156.     int16 type;     /* A, MX, etc */
  157. #define TYPE_MISSING    0
  158.     int16 rdlength;     /* Length of data field */
  159.     union {
  160.         int32 addr;     /* Used for type == A */
  161.         struct soa soa;     /* Used for type == SOA */
  162.         struct mx mx;       /* Used for type == MX */
  163.         struct hinfo hinfo; /* Used for type == HINFO */
  164.         struct minfo minfo; /* Used for type == MINFO */
  165.         struct wks wks;     /* Used for type == WKS */
  166.         char *name;     /* for domain names */
  167.         char *data;     /* for anything else */
  168.     } rdata;
  169. };
  170. #define NULLRR  (struct rr *)0
  171.   
  172. extern struct proc *Dfile_updater;
  173. extern int DTranslate;
  174. extern int DVerbose;
  175.   
  176. /* In domain.c */
  177. void free_rr __ARGS((struct rr *rrlp));
  178. struct rr *inverse_a __ARGS((int32 ip_address));
  179. struct rr *resolve_rr __ARGS((char *dname,int16 dtype,int recurse));
  180. char *resolve_a __ARGS((int32 ip_address, int shorten));
  181. struct rr *resolve_mailb __ARGS((char *name));
  182. int add_nameserver __ARGS((int32 address,int timeout));
  183. char *domainsuffix __ARGS((char *dname));
  184.   
  185. /* In domhdr.c: */
  186. int ntohdomain __ARGS((struct dhdr *dhdr,struct mbuf **bpp));
  187. int htondomain __ARGS((struct dhdr *dhdr,char *buf,int16 len));
  188.   
  189. #endif  /* _DOMAIN_H */
  190.