domain.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:4k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _DOMAIN_H
  2. #define _DOMAIN_H
  3. #ifndef _GLOBAL_H
  4. #include "global.h"
  5. #endif
  6. #ifndef _MBUF_H
  7. #include "mbuf.h"
  8. #endif
  9. #ifndef _PROC_H
  10. #include "proc.h"
  11. #endif
  12. #define INITRTT 2000L /* Initial smoothed response time */
  13. #define MAXCNAME 10 /* Maximum amount of cname recursion */
  14. #define TYPE_A 1 /* Host address */
  15. #define TYPE_NS 2 /* Name server */
  16. #define TYPE_MD 3 /* Mail destination (obsolete) */
  17. #define TYPE_MF 4 /* Mail forwarder (obsolete) */
  18. #define TYPE_CNAME 5 /* Canonical name */
  19. #define TYPE_SOA 6 /* Start of Authority */
  20. #define TYPE_MB 7 /* Mailbox name (experimental) */
  21. #define TYPE_MG 8 /* Mail group member (experimental) */
  22. #define TYPE_MR 9 /* Mail rename name (experimental) */
  23. #define TYPE_NULL 10 /* Null (experimental) */
  24. #define TYPE_WKS 11 /* Well-known sockets */
  25. #define TYPE_PTR 12 /* Pointer record */
  26. #define TYPE_HINFO 13 /* Host information */
  27. #define TYPE_MINFO 14 /* Mailbox information (experimental)*/
  28. #define TYPE_MX 15 /* Mail exchanger */
  29. #define TYPE_TXT 16 /* Text strings */
  30. #define TYPE_ANY 255 /* Matches any type */
  31. #define CLASS_IN 1 /* The ARPA Internet */
  32. struct dserver {
  33. struct dserver *prev; /* Linked list pointers */
  34. struct dserver *next;
  35. int32 address; /* IP address of server */
  36. int32 timeout; /* Current timeout, ticks */
  37. int32 srtt; /* Smoothed round trip time, ticks */
  38. int32 mdev; /* Mean deviation, ticks */
  39. int32 queries; /* Query packets sent to this server */
  40. int32 responses; /* Response packets received from this server */
  41. };
  42. extern struct dserver *Dlist;
  43. extern int Dsocket; /* Socket to use for domain queries */
  44. /* Round trip timing parameters */
  45. #define AGAIN 8 /* Average RTT gain = 1/8 */
  46. #define LAGAIN 3 /* Log2(AGAIN) */
  47. #define DGAIN 4 /* Mean deviation gain = 1/4 */
  48. #define LDGAIN 2 /* log2(DGAIN) */
  49. /* Header for all domain messages */
  50. struct dhdr {
  51. uint16 id; /* Identification */
  52. uint8 qr; /* Query/Response */
  53. #define QUERY 0
  54. #define RESPONSE 1
  55. uint8 opcode;
  56. #define IQUERY 1
  57. uint8 aa; /* Authoratative answer */
  58. uint8 tc; /* Truncation */
  59. uint8 rd; /* Recursion desired */
  60. uint8 ra; /* Recursion available */
  61. uint8 rcode; /* Response code */
  62. #define NO_ERROR 0
  63. #define FORMAT_ERROR 1
  64. #define SERVER_FAIL 2
  65. #define NAME_ERROR 3
  66. #define NOT_IMPL 4
  67. #define REFUSED 5
  68. uint16 qdcount; /* Question count */
  69. uint16 ancount; /* Answer count */
  70. uint16 nscount; /* Authority (name server) count */
  71. uint16 arcount; /* Additional record count */
  72. struct rr *questions; /* List of questions */
  73. struct rr *answers; /* List of answers */
  74. struct rr *authority; /* List of name servers */
  75. struct rr *additional; /* List of additional records */
  76. };
  77. struct mx {
  78. uint16 pref;
  79. char *exch;
  80. };
  81. struct hinfo {
  82. char *cpu;
  83. char *os;
  84. };
  85. struct soa {
  86. char *mname;
  87. char *rname;
  88. int32 serial;
  89. int32 refresh;
  90. int32 retry;
  91. int32 expire;
  92. int32 minimum;
  93. };
  94. struct rr {
  95. struct rr *last;
  96. struct rr *next;
  97. uint8 source;
  98. #define RR_NONE 0
  99. #define RR_FILE 1 /* from file */
  100. #define RR_QUESTION 4 /* from server reply */
  101. #define RR_ANSWER 5 /* from server reply */
  102. #define RR_AUTHORITY 6 /* from server reply */
  103. #define RR_ADDITIONAL 7 /* from server reply */
  104. #define RR_QUERY 8 /* test name (see QUERY)*/
  105. #define RR_INQUERY 9 /* test resource (see IQUERY)*/
  106. char *comment; /* optional comment */
  107. char *name; /* Domain name, ascii form */
  108. int32 ttl; /* Time-to-live */
  109. #define TTL_MISSING 0x80000000L
  110. uint16 class; /* IN, etc */
  111. #define CLASS_MISSING 0
  112. uint16 type; /* A, MX, etc */
  113. #define TYPE_MISSING 0
  114. uint16 rdlength; /* Length of data field */
  115. union {
  116. int32 addr; /* Used for type == A */
  117. struct soa soa; /* Used for type == SOA */
  118. struct mx mx; /* Used for type == MX */
  119. struct hinfo hinfo; /* Used for type == HINFO */
  120. char *name; /* for domain names */
  121. char *data; /* for anything else */
  122. } rdata;
  123. };
  124. extern struct proc *Dfile_updater;
  125. /* In domain.c */
  126. int add_nameserver(int32 address);
  127. void free_rr(struct rr *rrlp);
  128. struct rr *inverse_a(int32 ip_address);
  129. struct rr *resolve_rr(char *dname,uint16 dtype);
  130. char *resolve_a(int32 ip_address, int shorten);
  131. struct rr *resolve_mailb(char *name);
  132. /* In domhdr.c: */
  133. int ntohdomain(struct dhdr *dhdr,struct mbuf **bpp);
  134. #endif /* _DOMAIN_H */