home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tcp30tkt.zip / PGMG1.ZIP / INCLUDE / ARPA / NAMESER.H
Text File  |  1995-12-04  |  10KB  |  207 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. /*
  24.  * Define constants based on rfc883
  25.  */
  26. #define PACKETSZ        512             /* maximum packet size */
  27. #define MAXDNAME        256             /* maximum domain name */
  28. #define MAXCDNAME       255             /* maximum compressed domain name */
  29. #define MAXLABEL        63              /* maximum length of domain label */
  30.         /* Number of bytes of fixed size data in query structure */
  31. #define QFIXEDSZ        4
  32.         /* number of bytes of fixed size data in resource record */
  33. #define RRFIXEDSZ       10
  34.  
  35. /*
  36.  * Internet nameserver port number
  37.  */
  38. #define NAMESERVER_PORT 53
  39.  
  40. /*
  41.  * Currently defined opcodes
  42.  */
  43. #define QUERY           0               /* standard query */
  44. #define IQUERY          1               /* inverse query */
  45. #define CQUERYM         2               /* completion query (multiple) */
  46. #define CQUERYU         3               /* completion query (unique) */
  47.         /* non standard */
  48. #define UPDATEA         100             /* add resource record */
  49. #define UPDATED         101             /* delete resource record */
  50. #define UPDATEM         102             /* modify resource record */
  51. #define ZONEINIT        103             /* initial zone transfer */
  52. #define ZONEREF         104             /* incremental zone referesh */
  53.  
  54. /*
  55.  * Currently defined response codes
  56.  */
  57. #define NOERROR         0               /* no error */
  58. #define FORMERR         1               /* format error */
  59. #define SERVFAIL        2               /* server failure */
  60. #define NXDOMAIN        3               /* non existent domain */
  61. #define NOTIMP          4               /* not implemented */
  62. #define REFUSED         5               /* query refused */
  63.         /* non standard */
  64. #define NOCHANGE        100             /* update failed to change db */
  65.  
  66. /*
  67.  * Type values for resources and queries
  68.  */
  69. #define T_A             1               /* host address */
  70. #define T_NS            2               /* authoritative server */
  71. #define T_MD            3               /* mail destination */
  72. #define T_MF            4               /* mail forwarder */
  73. #define T_CNAME         5               /* connonical name */
  74. #define T_SOA           6               /* start of authority zone */
  75. #define T_MB            7               /* mailbox domain name */
  76. #define T_MG            8               /* mail group member */
  77. #define T_MR            9               /* mail rename name */
  78. #define T_NULL          10              /* null resource record */
  79. #define T_WKS           11              /* well known service */
  80. #define T_PTR           12              /* domain name pointer */
  81. #define T_HINFO         13              /* host information */
  82. #define T_MINFO         14              /* mailbox information */
  83. #define T_MX            15              /* mail routing information */
  84.         /* non standard */
  85. #define T_UINFO         100             /* user (finger) information */
  86. #define T_UID           101             /* user ID */
  87. #define T_GID           102             /* group ID */
  88.         /* Query type values which do not appear in resource records */
  89. #define T_AXFR          252             /* transfer zone of authority */
  90. #define T_MAILB         253             /* transfer mailbox records */
  91. #define T_MAILA         254             /* transfer mail agent records */
  92. #define T_ANY           255             /* wildcard match */
  93.  
  94. /*
  95.  * Values for class field
  96.  */
  97.  
  98. #define C_IN            1               /* the arpa internet */
  99. #define C_CHAOS         3               /* for chaos net at MIT */
  100.         /* Query class values which do not appear in resource records */
  101. #define C_ANY           255             /* wildcard match */
  102.  
  103. /*
  104.  * Structure for query header, the order of the fields is machine and
  105.  * compiler dependent, in our case, the bits within a byte are assignd
  106.  * least significant first, while the order of transmition is most
  107.  * significant first.  This requires a somewhat confusing rearrangement.
  108.  */
  109.  
  110. typedef struct {
  111.         unsigned short id;             /* query identification number */
  112. #ifdef OS2
  113.         unsigned int   rd:1;           /* recursion desired */
  114.         unsigned int   tc:1;           /* truncated message */
  115.         unsigned int   aa:1;           /* authoritive answer */
  116.         unsigned int   opcode:4;       /* purpose of message */
  117.         unsigned int   qr:1;           /* response flag */
  118.                         /* fields in fourth byte */
  119.         unsigned int   rcode:4;        /* response code */
  120.         unsigned int   unused:2;       /* unused bits */
  121.         unsigned int   pr:1;           /* primary server required (non standard) */
  122.         unsigned int   ra:1;           /* recursion available */
  123. #else
  124. #if defined (sun) || defined (sel) || defined (pyr) || defined (is68k) \
  125. || defined (tahoe) || defined (ibm032) || defined (ibm370) \
  126. || defined (BIT_ZERO_ON_LEFT)
  127.         /* Bit zero on left:  Gould and similar architectures */
  128.                         /* fields in third byte */
  129.         unsigned char  qr:1;           /* response flag */
  130.         unsigned char  opcode:4;       /* purpose of message */
  131.         unsigned char  aa:1;           /* authoritive answer */
  132.         unsigned char  tc:1;           /* truncated message */
  133.         unsigned char  rd:1;           /* recursion desired */
  134.                         /* fields in fourth byte */
  135.         unsigned char  ra:1;           /* recursion available */
  136.         unsigned char  pr:1;           /* primary server required (non standard) */
  137.         unsigned char  unused:2;       /* unused bits */
  138.         unsigned char  rcode:4;        /* response code */
  139. #else
  140. #if defined (vax) || defined (BIT_ZERO_ON_RIGHT)
  141.         /* Bit zero on right:  VAX */
  142.                         /* fields in third byte */
  143.         unsigned char  rd:1;           /* recursion desired */
  144.         unsigned char  tc:1;           /* truncated message */
  145.         unsigned char  aa:1;           /* authoritive answer */
  146.         unsigned char  opcode:4;       /* purpose of message */
  147.         unsigned char  qr:1;           /* response flag */
  148.                         /* fields in fourth byte */
  149.         unsigned char  rcode:4;        /* response code */
  150.         unsigned char  unused:2;       /* unused bits */
  151.         unsigned char  pr:1;           /* primary server required (non standard) */
  152.         unsigned char  ra:1;           /* recursion available */
  153. #else
  154.         /* you must determine what the correct bit order is for your compiler */
  155.         UNDEFINED_BIT_ORDER;
  156. #endif
  157. #endif
  158. #endif
  159.                         /* remaining bytes */
  160.         unsigned short qdcount;        /* number of question entries */
  161.         unsigned short ancount;        /* number of answer entries */
  162.         unsigned short nscount;        /* number of authority entries */
  163.         unsigned short arcount;        /* number of resource entries */
  164. } HEADER;
  165.  
  166. /*
  167.  * Defines for handling compressed domain names
  168.  */
  169. #define INDIR_MASK      0xc0
  170.  
  171. /*
  172.  * Structure for passing resource records around.
  173.  */
  174. #pragma pack(4) /* force on doubleword boundary */
  175. struct rrec {
  176.         short   r_zone;                 /* zone number */
  177.         short   r_class;                /* class number */
  178.         short   r_type;                 /* type number */
  179.         unsigned long  r_ttl;                  /* time to live */
  180.         int     r_size;                 /* size of data area */
  181.         char    *r_data;                /* pointer to data */
  182. };
  183. #pragma pack()   /* reset to default packing */
  184.  
  185. int _System dn_expand(unsigned char *, unsigned char *, unsigned char *, unsigned char *, int);
  186. int _System dn_comp(unsigned char *, unsigned char *, int, unsigned char **, unsigned char **);
  187. int _System dn_find(unsigned char *, unsigned char *, unsigned char **, unsigned char **);
  188. int _System dn_skipname(unsigned char *, unsigned char *);
  189. unsigned short _System _getshort( unsigned char *);
  190. unsigned long _System  _getlong( unsigned char *);
  191. void _System putshort( unsigned short , unsigned char *);
  192. void _System putlong( unsigned long , unsigned char *);
  193. int _System res_init(void);
  194. int _System res_mkquery(int, char *, int, int, char *, int, struct rrec *, char *, int);
  195. int _System res_send(char *, int, char *, int);
  196. /* char * _System p_type(int); */
  197. /* char * _System p_class(int); */
  198. /* char * _System p_time(u_long); */
  199. /* int _System res_query(char *, int, int, u_char *, int); */
  200. /* int _System res_search(char *, int, int, u_char *, int);*/
  201. /* int _System res_querydomain(char *, char *, int, int, u_char *, int); */
  202. /* char * _System  hostalias( char *); */
  203. /* extern  u_short getshort(); */
  204. /* extern  u_long  getlong(); */
  205.  
  206. #endif /* __NAMESER_32H */
  207.