nameser.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:10k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1983, 1989, 1993
  3.  * The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  * This product includes software developed by the University of
  16.  * California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *      @(#)nameser.h 8.2 (Berkeley) 2/16/94
  34.  * -
  35.  * Portions Copyright (c) 1993 by Digital Equipment Corporation.
  36.  * 
  37.  * Permission to use, copy, modify, and distribute this software for any
  38.  * purpose with or without fee is hereby granted, provided that the above
  39.  * copyright notice and this permission notice appear in all copies, and that
  40.  * the name of Digital Equipment Corporation not be used in advertising or
  41.  * publicity pertaining to distribution of the document or software without
  42.  * specific, written prior permission.
  43.  * 
  44.  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
  45.  * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
  46.  * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
  47.  * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  48.  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  49.  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  50.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  51.  * SOFTWARE.
  52.  * -
  53.  * --Copyright--
  54.  */
  55. #ifndef _NAMESER_H_
  56. #define _NAMESER_H_
  57. #include <endian.h>
  58. #include <sys/types.h>
  59. #include <pthread/types.h>
  60. /*
  61.  * Define constants based on rfc883
  62.  */
  63. #define PACKETSZ 512 /* maximum packet size */
  64. #define MAXDNAME 256 /* maximum domain name */
  65. #define MAXCDNAME 255 /* maximum compressed domain name */
  66. #define MAXLABEL 63 /* maximum length of domain label */
  67. /* Number of bytes of fixed size data in query structure */
  68. #define QFIXEDSZ 4
  69. /* number of bytes of fixed size data in resource record */
  70. #define RRFIXEDSZ 10
  71. /*
  72.  * Internet nameserver port number
  73.  */
  74. #define NAMESERVER_PORT 53
  75. /*
  76.  * Currently defined opcodes
  77.  */
  78. #define QUERY 0x0 /* standard query */
  79. #define IQUERY 0x1 /* inverse query */
  80. #define STATUS 0x2 /* nameserver status query */
  81. /*#define xxx 0x3*/ /* 0x3 reserved */
  82. /* non standard - supports ALLOW_UPDATES stuff from Mike Schwartz */
  83. #define UPDATEA 0x9 /* add resource record */
  84. #define UPDATED 0xa /* delete a specific resource record */
  85. #define UPDATEDA 0xb /* delete all named resource record */
  86. #define UPDATEM 0xc /* modify a specific resource record */
  87. #define UPDATEMA 0xd /* modify all named resource record */
  88. #define ZONEINIT 0xe /* initial zone transfer */
  89. #define ZONEREF 0xf /* incremental zone referesh */
  90. /*
  91.  * Currently defined response codes
  92.  */
  93. #define NOERROR 0 /* no error */
  94. #define FORMERR 1 /* format error */
  95. #define SERVFAIL 2 /* server failure */
  96. #define NXDOMAIN 3 /* non existent domain */
  97. #define NOTIMP 4 /* not implemented */
  98. #define REFUSED 5 /* query refused */
  99. /* non standard */
  100. #define NOCHANGE 0xf /* update failed to change db */
  101. /*
  102.  * Type values for resources and queries
  103.  */
  104. #define T_A 1 /* host address */
  105. #define T_NS 2 /* authoritative server */
  106. #define T_MD 3 /* mail destination */
  107. #define T_MF 4 /* mail forwarder */
  108. #define T_CNAME 5 /* connonical name */
  109. #define T_SOA 6 /* start of authority zone */
  110. #define T_MB 7 /* mailbox domain name */
  111. #define T_MG 8 /* mail group member */
  112. #define T_MR 9 /* mail rename name */
  113. #define T_NULL 10 /* null resource record */
  114. #define T_WKS 11 /* well known service */
  115. #define T_PTR 12 /* domain name pointer */
  116. #define T_HINFO 13 /* host information */
  117. #define T_MINFO 14 /* mailbox information */
  118. #define T_MX 15 /* mail routing information */
  119. #define T_TXT 16 /* text strings */
  120. #define T_RP 17 /* responsible person */
  121. #define T_AFSDB 18 /* AFS cell database */
  122. #define T_NSAP 22 /* NSAP address */
  123. #define T_NSAP_PTR 23 /* reverse lookup for NSAP */
  124. /* non standard */
  125. #define T_UINFO 100 /* user (finger) information */
  126. #define T_UID 101 /* user ID */
  127. #define T_GID 102 /* group ID */
  128. #define T_UNSPEC 103 /* Unspecified format (binary data) */
  129. /* Query type values which do not appear in resource records */
  130. #define T_AXFR 252 /* transfer zone of authority */
  131. #define T_MAILB 253 /* transfer mailbox records */
  132. #define T_MAILA 254 /* transfer mail agent records */
  133. #define T_ANY 255 /* wildcard match */
  134. /*
  135.  * Values for class field
  136.  */
  137. #define C_IN 1 /* the arpa internet */
  138. #define C_CHAOS 3 /* for chaos net (MIT) */
  139. #define C_HS 4 /* for Hesiod name server (MIT) (XXX) */
  140. /* Query class values which do not appear in resource records */
  141. #define C_ANY 255 /* wildcard match */
  142. /*
  143.  * Status return codes for T_UNSPEC conversion routines
  144.  */
  145. #define CONV_SUCCESS 0
  146. #define CONV_OVERFLOW -1
  147. #define CONV_BADFMT -2
  148. #define CONV_BADCKSUM -3
  149. #define CONV_BADBUFLEN -4
  150. #if !defined(BYTE_ORDER) || (BYTE_ORDER != BIG_ENDIAN 
  151. && BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != PDP_ENDIAN)
  152. /* you must determine what the correct bit order is for
  153.  * your compiler - the next line is an intentional error
  154.  * which will force your compiles to bomb until you fix
  155.  * the above macros.
  156.  */
  157.   #error "Undefined or invalid BYTE_ORDER";
  158. #endif
  159. /*
  160.  * Structure for query header.  The order of the fields is machine- and
  161.  * compiler-dependent, depending on the byte/bit order and the layout
  162.  * of bit fields.  We use bit fields only in int variables, as this
  163.  * is all ANSI requires.  This requires a somewhat confusing rearrangement.
  164.  */
  165. typedef struct {
  166. pthread_ipport_type id; /* query identification number */
  167. #if BYTE_ORDER == BIG_ENDIAN
  168. /* fields in third byte */
  169. u_int qr:1; /* response flag */
  170. u_int opcode:4; /* purpose of message */
  171. u_int aa:1; /* authoritive answer */
  172. u_int tc:1; /* truncated message */
  173. u_int rd:1; /* recursion desired */
  174. /* fields in fourth byte */
  175. u_int ra:1; /* recursion available */
  176. u_int pr:1; /* primary server required (non standard) */
  177. u_int unused:2; /* unused bits */
  178. u_int rcode:4; /* response code */
  179. #endif
  180. #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
  181. /* fields in third byte */
  182. u_int rd:1; /* recursion desired */
  183. u_int tc:1; /* truncated message */
  184. u_int aa:1; /* authoritive answer */
  185. u_int opcode:4; /* purpose of message */
  186. u_int qr:1; /* response flag */
  187. /* fields in fourth byte */
  188. u_int rcode:4; /* response code */
  189. u_int unused:2; /* unused bits */
  190. u_int pr:1; /* primary server required (non standard) */
  191. u_int ra:1; /* recursion available */
  192. #endif
  193. /* remaining bytes */
  194. pthread_ipport_type qdcount; /* number of question entries */
  195. pthread_ipport_type ancount; /* number of answer entries */
  196. pthread_ipport_type nscount; /* number of authority entries */
  197. pthread_ipport_type arcount; /* number of resource entries */
  198. } HEADER;
  199. /*
  200.  * Defines for handling compressed domain names
  201.  */
  202. #define INDIR_MASK 0xc0
  203. /*
  204.  * Structure for passing resource records around.
  205.  */
  206. struct rrec {
  207. pthread_ipport_type r_zone; /* zone number */
  208. pthread_ipport_type r_class; /* class number */
  209. pthread_ipport_type r_type; /* type number */
  210. pthread_ipaddr_type r_ttl; /* time to live */
  211. int r_size; /* size of data area */
  212. char   * r_data; /* pointer to data */
  213. };
  214. extern pthread_ipport_type _getshort();
  215. extern pthread_ipaddr_type _getlong();
  216. /*
  217.  * Inline versions of get/put short/long.  Pointer is advanced.
  218.  * We also assume that a "pthread_ipport_type" holds 2 "chars"
  219.  * and that a "pthread_ipaddr_type" holds 4 "chars".
  220.  *
  221.  * These macros demonstrate the property of C whereby it can be
  222.  * portable or it can be elegant but never both.
  223.  */
  224. #define GETSHORT(s, cp) { 
  225. register u_char *t_cp = (u_char *)(cp); 
  226. (s) = ((pthread_ipport_type)t_cp[0] << 8) | (pthread_ipport_type)t_cp[1]; 
  227. (cp) += 2; 
  228. }
  229. #define GETLONG(l, cp) { 
  230. register u_char *t_cp = (u_char *)(cp); 
  231. (l) = (((pthread_ipaddr_type)t_cp[0]) << 24) 
  232.     | (((pthread_ipaddr_type)t_cp[1]) << 16) 
  233.     | (((pthread_ipaddr_type)t_cp[2]) << 8) 
  234.     | (((pthread_ipaddr_type)t_cp[3])); 
  235. (cp) += 4; 
  236. }
  237. #define PUTSHORT(s, cp) { 
  238. register pthread_ipport_type t_s = (pthread_ipport_type)(s); 
  239. register u_char *t_cp = (u_char *)(cp); 
  240. *t_cp++ = t_s >> 8; 
  241. *t_cp   = t_s; 
  242. (cp) += 2; 
  243. }
  244. /*
  245.  * Warning: PUTLONG --no-longer-- destroys its first argument.  if you
  246.  * were depending on this "feature", you will lose.
  247.  */
  248. #define PUTLONG(l, cp) { 
  249. register pthread_ipaddr_type t_l = (pthread_ipaddr_type)(l); 
  250. register u_char *t_cp = (u_char *)(cp); 
  251. *t_cp++ = t_l >> 24; 
  252. *t_cp++ = t_l >> 16; 
  253. *t_cp++ = t_l >> 8; 
  254. *t_cp   = t_l; 
  255. (cp) += 4; 
  256. }
  257. #endif /* !_NAMESER_H_ */