home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / header45.zip / stack16 / arpa / nameser.h
Text File  |  1999-05-11  |  10KB  |  219 lines

  1. #ifndef __NAMESER_32H
  2. #define __NAMESER_32H
  3.  
  4. /*
  5.  * Copyright (c) 1983 Regents of the University of California.
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms are permitted
  9.  * provided that the above copyright notice and this paragraph are
  10.  * duplicated in all such forms and that any documentation,
  11.  * advertising materials, and other materials related to such
  12.  * distribution and use acknowledge that the software was developed
  13.  * by the University of California, Berkeley.  The name of the
  14.  * University may not be used to endorse or promote products derived
  15.  * from this software without specific prior written permission.
  16.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  17.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  18.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  19.  *
  20.  *      @(#)nameser.h   5.20 (Berkeley) 10/7/88
  21.  */
  22.  
  23. /* Modification History: *****************************************************/
  24. /* Date:      By:   Tag:    Desc:                                            */
  25. /* 09.24.96   DRC   DRC01   Added definition of _System for Borland Compiler */
  26. /* 10.04.96   MRN  F17505   Added prototypes for res_query, res_search and   */
  27. /*                          res_querydomain.                                 */
  28. /*****************************************************************************/
  29. /* DRC01 - Borland fix */
  30. #ifdef __BORLANDC__
  31. #define _System _syscall
  32. #endif
  33.  
  34. /*
  35.  * Define constants based on rfc883
  36.  */
  37. #define PACKETSZ        512             /* maximum packet size */
  38. #define MAXDNAME        256             /* maximum domain name */
  39. #define MAXCDNAME       255             /* maximum compressed domain name */
  40. #define MAXLABEL        63              /* maximum length of domain label */
  41.       /* Number of bytes of fixed size data in query structure */
  42. #define QFIXEDSZ        4
  43.       /* number of bytes of fixed size data in resource record */
  44. #define RRFIXEDSZ       10
  45.  
  46. /*
  47.  * Internet nameserver port number
  48.  */
  49. #define NAMESERVER_PORT 53
  50.  
  51. /*
  52.  * Currently defined opcodes
  53.  */
  54. #define QUERY           0               /* standard query */
  55. #define IQUERY          1               /* inverse query */
  56. #define CQUERYM         2               /* completion query (multiple) */
  57. #define CQUERYU         3               /* completion query (unique) */
  58.       /* non standard */
  59. #define UPDATEA         100             /* add resource record */
  60. #define UPDATED         101             /* delete resource record */
  61. #define UPDATEM         102             /* modify resource record */
  62. #define ZONEINIT        103             /* initial zone transfer */
  63. #define ZONEREF         104             /* incremental zone referesh */
  64.  
  65. /*
  66.  * Currently defined response codes
  67.  */
  68. #define NOERROR         0               /* no error */
  69. #define FORMERR         1               /* format error */
  70. #define SERVFAIL        2               /* server failure */
  71. #define NXDOMAIN        3               /* non existent domain */
  72. #define NOTIMP          4               /* not implemented */
  73. #define REFUSED         5               /* query refused */
  74.         /* non standard */
  75. #define NOCHANGE        100             /* update failed to change db */
  76.  
  77. /*
  78.  * Type values for resources and queries
  79.  */
  80. #define T_A             1               /* host address */
  81. #define T_NS            2               /* authoritative server */
  82. #define T_MD            3               /* mail destination */
  83. #define T_MF            4               /* mail forwarder */
  84. #define T_CNAME         5               /* connonical name */
  85. #define T_SOA           6               /* start of authority zone */
  86. #define T_MB            7               /* mailbox domain name */
  87. #define T_MG            8               /* mail group member */
  88. #define T_MR            9               /* mail rename name */
  89. #define T_NULL          10              /* null resource record */
  90. #define T_WKS           11              /* well known service */
  91. #define T_PTR           12              /* domain name pointer */
  92. #define T_HINFO         13              /* host information */
  93. #define T_MINFO         14              /* mailbox information */
  94. #define T_MX            15              /* mail routing information */
  95.         /* non standard */
  96. #define T_UINFO         100             /* user (finger) information */
  97. #define T_UID           101             /* user ID */
  98. #define T_GID           102             /* group ID */
  99.         /* Query type values which do not appear in resource records */
  100. #define T_AXFR          252             /* transfer zone of authority */
  101. #define T_MAILB         253             /* transfer mailbox records */
  102. #define T_MAILA         254             /* transfer mail agent records */
  103. #define T_ANY           255             /* wildcard match */
  104.  
  105. /*
  106.  * Values for class field
  107.  */
  108.  
  109. #define C_IN            1               /* the arpa internet */
  110. #define C_CHAOS         3               /* for chaos net at MIT */
  111.         /* Query class values which do not appear in resource records */
  112. #define C_ANY           255             /* wildcard match */
  113.  
  114. /*
  115.  * Structure for query header, the order of the fields is machine and
  116.  * compiler dependent, in our case, the bits within a byte are assignd
  117.  * least significant first, while the order of transmition is most
  118.  * significant first.  This requires a somewhat confusing rearrangement.
  119.  */
  120.  
  121. typedef struct {
  122.         unsigned short id;             /* query identification number */
  123. #ifdef OS2
  124.         unsigned int   rd:1;           /* recursion desired */
  125.         unsigned int   tc:1;           /* truncated message */
  126.         unsigned int   aa:1;           /* authoritive answer */
  127.         unsigned int   opcode:4;       /* purpose of message */
  128.         unsigned int   qr:1;           /* response flag */
  129.                         /* fields in fourth byte */
  130.         unsigned int   rcode:4;        /* response code */
  131.         unsigned int   unused:2;       /* unused bits */
  132.         unsigned int   pr:1;           /* primary server required (non standard) */
  133.         unsigned int   ra:1;           /* recursion available */
  134. #else
  135. #if defined (sun) || defined (sel) || defined (pyr) || defined (is68k) \
  136. || defined (tahoe) || defined (ibm032) || defined (ibm370) \
  137. || defined (BIT_ZERO_ON_LEFT)
  138.         /* Bit zero on left:  Gould and similar architectures */
  139.                         /* fields in third byte */
  140.         unsigned char  qr:1;           /* response flag */
  141.         unsigned char  opcode:4;       /* purpose of message */
  142.         unsigned char  aa:1;           /* authoritive answer */
  143.         unsigned char  tc:1;           /* truncated message */
  144.         unsigned char  rd:1;           /* recursion desired */
  145.                         /* fields in fourth byte */
  146.         unsigned char  ra:1;           /* recursion available */
  147.         unsigned char  pr:1;           /* primary server required (non standard) */
  148.         unsigned char  unused:2;       /* unused bits */
  149.         unsigned char  rcode:4;        /* response code */
  150. #else
  151. #if defined (vax) || defined (BIT_ZERO_ON_RIGHT)
  152.         /* Bit zero on right:  VAX */
  153.                         /* fields in third byte */
  154.         unsigned char  rd:1;           /* recursion desired */
  155.         unsigned char  tc:1;           /* truncated message */
  156.         unsigned char  aa:1;           /* authoritive answer */
  157.         unsigned char  opcode:4;       /* purpose of message */
  158.         unsigned char  qr:1;           /* response flag */
  159.                         /* fields in fourth byte */
  160.         unsigned char  rcode:4;        /* response code */
  161.         unsigned char  unused:2;       /* unused bits */
  162.         unsigned char  pr:1;           /* primary server required (non standard) */
  163.         unsigned char  ra:1;           /* recursion available */
  164. #else
  165.         /* you must determine what the correct bit order is for your compiler */
  166.         UNDEFINED_BIT_ORDER;
  167. #endif
  168. #endif
  169. #endif
  170.                         /* remaining bytes */
  171.         unsigned short qdcount;        /* number of question entries */
  172.         unsigned short ancount;        /* number of answer entries */
  173.         unsigned short nscount;        /* number of authority entries */
  174.         unsigned short arcount;        /* number of resource entries */
  175. } HEADER;
  176.  
  177. /*
  178.  * Defines for handling compressed domain names
  179.  */
  180. #define INDIR_MASK      0xc0
  181.  
  182. /*
  183.  * Structure for passing resource records around.
  184.  */
  185. #pragma pack(4) /* force on doubleword boundary */
  186. struct rrec {
  187.         short   r_zone;                 /* zone number */
  188.         short   r_class;                /* class number */
  189.         short   r_type;                 /* type number */
  190.         unsigned long  r_ttl;                  /* time to live */
  191.         int     r_size;                 /* size of data area */
  192.         char    *r_data;                /* pointer to data */
  193. };
  194. #pragma pack()   /* reset to default packing */
  195.  
  196. int _System dn_expand(unsigned char *, unsigned char *, unsigned char *, unsigned char *, int);
  197. int _System dn_comp(unsigned char *, unsigned char *, int, unsigned char **, unsigned char **);
  198. int _System dn_find(unsigned char *, unsigned char *, unsigned char **, unsigned char **);
  199. int _System dn_skipname(unsigned char *, unsigned char *);
  200. unsigned short _System _getshort( unsigned char *);
  201. unsigned long _System  _getlong( unsigned char *);
  202. void _System putshort( unsigned short , unsigned char *);
  203. void _System putlong( unsigned long , unsigned char *);
  204. int _System res_init(void);
  205. int _System res_mkquery(int, char *, int, int, char *, int, struct rrec *, char *, int);
  206. int _System res_send(char *, int, char *, int);
  207. /* char * _System p_type(int); */
  208. /* char * _System p_class(int); */
  209. /* char * _System p_time(u_long); */
  210. int _System res_query(char *, int, int, u_char *, int);
  211. int _System res_search(char *, int, int, u_char *, int);
  212. int _System res_querydomain(char *, char *, int, int, u_char *, int);
  213. /* char * _System  hostalias( char *); */
  214. /* extern  u_short getshort(); */
  215. /* extern  u_long  getlong(); */
  216.  
  217. #endif /* __NAMESER_32H */
  218.  
  219.