Import bind 9.5.2 vendor sources.
[dragonfly.git] / contrib / bind-9.5.2 / lib / lwres / include / lwres / lwpacket.h
blob96f8e5454af958c3c1bca05afbe5435fe378f35f
1 /*
2 * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
3 * Copyright (C) 1999-2001 Internet Software Consortium.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15 * PERFORMANCE OF THIS SOFTWARE.
18 /* $Id: lwpacket.h,v 1.24 2007/06/19 23:47:23 tbox Exp $ */
20 #ifndef LWRES_LWPACKET_H
21 #define LWRES_LWPACKET_H 1
23 #include <lwres/lang.h>
24 #include <lwres/lwbuffer.h>
25 #include <lwres/result.h>
27 /*% lwres_lwpacket_t */
28 typedef struct lwres_lwpacket lwres_lwpacket_t;
30 /*% lwres_lwpacket structure */
31 struct lwres_lwpacket {
32 /*! The overall packet length, including the
33 * entire packet header.
34 * This field is filled in by the
35 * \link lwres_gabn.c lwres_gabn_*()\endlink
36 * and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
38 lwres_uint32_t length;
39 /*! Specifies the header format. Currently,
40 * there is only one format, #LWRES_LWPACKETVERSION_0.
41 * This field is filled in by the
42 * \link lwres_gabn.c lwres_gabn_*()\endlink
43 * and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
45 lwres_uint16_t version;
46 /*! Specifies library-defined flags for this packet, such as
47 * whether the packet is a request or a reply. None of
48 * these are definable by the caller, but library-defined values
49 * can be set by the caller. For example, one bit in this field
50 * indicates if the packet is a request or a response.
51 * This field is filled in by
52 * the application wits the exception of the
53 * #LWRES_LWPACKETFLAG_RESPONSE bit, which is set by the library
54 * in the
55 * \link lwres_gabn.c lwres_gabn_*()\endlink
56 * and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
58 lwres_uint16_t pktflags;
59 /*! Set by the requestor and is returned in all replies.
60 * If two packets from the same source have the same serial
61 * number and are from the same source, they are assumed to
62 * be duplicates and the latter ones may be dropped.
63 * (The library does not do this by default on replies, but
64 * does so on requests.)
66 lwres_uint32_t serial;
67 /*! Opcodes between 0x04000000 and 0xffffffff
68 * are application defined. Opcodes between
69 * 0x00000000 and 0x03ffffff are
70 * reserved for library use.
71 * This field is filled in by the
72 * \link lwres_gabn.c lwres_gabn_*()\endlink
73 * and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
75 lwres_uint32_t opcode;
76 /*! Only valid for results.
77 * Results between 0x04000000 and 0xffffffff are application
78 * defined.
79 * Results between 0x00000000 and 0x03ffffff are reserved for
80 * library use.
81 * (This is the same reserved range defined in <isc/resultclass.h>,
82 * so it
83 * would be trivial to map ISC_R_* result codes into packet result
84 * codes when appropriate.)
85 * This field is filled in by the
86 * \link lwres_gabn.c lwres_gabn_*()\endlink
87 * and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
89 lwres_uint32_t result;
90 /*! Set to the maximum buffer size that the receiver can
91 * handle on requests, and the size of the buffer needed to
92 * satisfy a request
93 * when the buffer is too large for replies.
94 * This field is supplied by the application.
96 lwres_uint32_t recvlength;
97 /*! The packet level auth type used.
98 * Authtypes between 0x1000 and 0xffff are application defined.
99 * Authtypes
100 * between 0x0000 and 0x0fff are reserved for library use.
101 * This is currently
102 * unused and MUST be set to zero.
104 lwres_uint16_t authtype;
105 /*! The length of the authentication data.
106 * See the specific
107 * authtypes for more information on what is contained
108 * in this field. This is currently unused, and
109 * MUST be set to zero.
111 lwres_uint16_t authlength;
114 #define LWRES_LWPACKET_LENGTH (4 * 5 + 2 * 4) /*%< Overall length. */
116 #define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /*%< If set, pkt is a response. */
119 #define LWRES_LWPACKETVERSION_0 0 /*%< Header format. */
121 /*! \file lwres/lwpacket.h
124 * The remainder of the packet consists of two regions, one described by
125 * "authlen" and one of "length - authlen - sizeof(lwres_lwpacket_t)".
127 * That is:
129 * \code
130 * pkt header
131 * authlen bytes of auth information
132 * data bytes
133 * \endcode
135 * Currently defined opcodes:
137 *\li #LWRES_OPCODE_NOOP. Success is always returned, with the packet contents echoed.
139 *\li #LWRES_OPCODE_GETADDRSBYNAME. Return all known addresses for a given name.
140 * This may return NIS or /etc/hosts info as well as DNS
141 * information. Flags will be provided to indicate ip4/ip6
142 * addresses are desired.
144 *\li #LWRES_OPCODE_GETNAMEBYADDR. Return the hostname for the given address. Once
145 * again, it will return data from multiple sources.
148 LWRES_LANG_BEGINDECLS
150 /* XXXMLG document */
151 lwres_result_t
152 lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
154 lwres_result_t
155 lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
157 LWRES_LANG_ENDDECLS
159 #endif /* LWRES_LWPACKET_H */