- import of strongswan-2.7.0
- applied patch for charon
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (C) 2003 Michael Richardson
|
||||
* Contributed by Michael Richardson <[email protected]> while working
|
||||
* on the Linux FreeS/WAN project in 2003.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: async.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_ASYNC_H
|
||||
#define LWRES_ASYNC_H 1
|
||||
|
||||
#include <lwres/lwres.h>
|
||||
|
||||
/*
|
||||
* support for asynchronous requests to lwres port
|
||||
*/
|
||||
struct lwres_async_state {
|
||||
struct lwres_async_state *next;
|
||||
|
||||
lwres_buffer_t b_in, b_out;
|
||||
lwres_uint32_t serial;
|
||||
int opcode;
|
||||
|
||||
int (*callback)(void *uctx, struct rrsetinfo *res);
|
||||
void *uctx;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The calls for asynchronous requests.
|
||||
*/
|
||||
|
||||
int lwres_async_init(lwres_context_t **pctx);
|
||||
|
||||
int lwres_getrrsetbyname_init(const char *hostname, unsigned int rdclass,
|
||||
unsigned int rdtype, unsigned int flags,
|
||||
lwres_context_t *ctx,
|
||||
struct lwres_async_state *las);
|
||||
|
||||
int lwres_getrrsetbyname_xmit(lwres_context_t *ctx,
|
||||
struct lwres_async_state *las);
|
||||
|
||||
unsigned long lwres_async_timeout(lwres_context_t *ctx);
|
||||
|
||||
int lwres_async_fd(lwres_context_t *ctx);
|
||||
|
||||
int lwres_getrrsetbyname_read(struct lwres_async_state **plas,
|
||||
lwres_context_t *ctx,
|
||||
struct rrsetinfo **res);
|
||||
|
||||
int lwres_getrrsetbyname_async(const char *hostname, unsigned int rdclass,
|
||||
unsigned int rdtype, unsigned int flags,
|
||||
struct rrsetinfo **res);
|
||||
|
||||
#endif /* LWRES_ASYNC_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: context.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_CONTEXT_H
|
||||
#define LWRES_CONTEXT_H 1
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <lwres/lang.h>
|
||||
#include <lwres/int.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
/*
|
||||
* Used to set various options such as timeout, authentication, etc
|
||||
*/
|
||||
typedef struct lwres_context lwres_context_t;
|
||||
|
||||
LWRES_LANG_BEGINDECLS
|
||||
|
||||
typedef void *(*lwres_malloc_t)(void *arg, size_t length);
|
||||
typedef void (*lwres_free_t)(void *arg, void *mem, size_t length);
|
||||
|
||||
/*
|
||||
* XXXMLG
|
||||
*
|
||||
* Make the server reload /etc/resolv.conf periodically.
|
||||
*
|
||||
* Make the server do sortlist/searchlist.
|
||||
*
|
||||
* Client side can disable the search/sortlist processing.
|
||||
*
|
||||
* Use an array of addresses/masks and searchlist for client-side, and
|
||||
* if added to the client disable the processing on the server.
|
||||
*
|
||||
* Share /etc/resolv.conf data between contexts.
|
||||
*/
|
||||
|
||||
/*
|
||||
* _SERVERMODE
|
||||
* Don't allocate and connect a socket to the server, since the
|
||||
* caller _is_ a server.
|
||||
*/
|
||||
#define LWRES_CONTEXT_SERVERMODE 0x00000001U
|
||||
|
||||
lwres_result_t
|
||||
lwres_context_create(lwres_context_t **contextp, void *arg,
|
||||
lwres_malloc_t malloc_function,
|
||||
lwres_free_t free_function,
|
||||
unsigned int flags);
|
||||
/*
|
||||
* Allocate a lwres context. This is used in all lwres calls.
|
||||
*
|
||||
* Memory management can be replaced here by passing in two functions.
|
||||
* If one is non-NULL, they must both be non-NULL. "arg" is passed to
|
||||
* these functions.
|
||||
*
|
||||
* Contexts are not thread safe. Document at the top of the file.
|
||||
* XXXMLG
|
||||
*
|
||||
* If they are NULL, the standard malloc() and free() will be used.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* contextp != NULL && contextp == NULL.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* Returns 0 on success, non-zero on failure.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_context_destroy(lwres_context_t **contextp);
|
||||
/*
|
||||
* Frees all memory associated with a lwres context.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* contextp != NULL && contextp == NULL.
|
||||
*/
|
||||
|
||||
lwres_uint32_t
|
||||
lwres_context_nextserial(lwres_context_t *ctx);
|
||||
/*
|
||||
* XXXMLG Document
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_context_initserial(lwres_context_t *ctx, lwres_uint32_t serial);
|
||||
|
||||
void
|
||||
lwres_context_freemem(lwres_context_t *ctx, void *mem, size_t len);
|
||||
|
||||
void *
|
||||
lwres_context_allocmem(lwres_context_t *ctx, size_t len);
|
||||
|
||||
int
|
||||
lwres_context_getsocket(lwres_context_t *ctx);
|
||||
|
||||
lwres_result_t
|
||||
lwres_context_send(lwres_context_t *ctx,
|
||||
void *sendbase, int sendlen);
|
||||
|
||||
lwres_result_t
|
||||
lwres_context_recv(lwres_context_t *ctx,
|
||||
void *recvbase, int recvlen,
|
||||
int *recvd_len);
|
||||
|
||||
lwres_result_t
|
||||
lwres_context_sendrecv(lwres_context_t *ctx,
|
||||
void *sendbase, int sendlen,
|
||||
void *recvbase, int recvlen,
|
||||
int *recvd_len);
|
||||
|
||||
LWRES_LANG_ENDDECLS
|
||||
|
||||
#endif /* LWRES_CONTEXT_H */
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: int.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_INT_H
|
||||
#define LWRES_INT_H 1
|
||||
|
||||
typedef char lwres_int8_t;
|
||||
typedef unsigned char lwres_uint8_t;
|
||||
typedef short lwres_int16_t;
|
||||
typedef unsigned short lwres_uint16_t;
|
||||
typedef int lwres_int32_t;
|
||||
typedef unsigned int lwres_uint32_t;
|
||||
typedef long long lwres_int64_t;
|
||||
typedef unsigned long long lwres_uint64_t;
|
||||
|
||||
#endif /* LWRES_INT_H */
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ipv6.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_IPV6_H
|
||||
#define LWRES_IPV6_H 1
|
||||
|
||||
/*****
|
||||
***** Module Info
|
||||
*****/
|
||||
|
||||
/*
|
||||
* IPv6 definitions for systems which do not support IPv6.
|
||||
*/
|
||||
|
||||
/***
|
||||
*** Imports.
|
||||
***/
|
||||
|
||||
#include <lwres/int.h>
|
||||
#include <lwres/platform.h>
|
||||
|
||||
/***
|
||||
*** Types.
|
||||
***/
|
||||
|
||||
struct in6_addr {
|
||||
union {
|
||||
lwres_uint8_t _S6_u8[16];
|
||||
lwres_uint16_t _S6_u16[8];
|
||||
lwres_uint32_t _S6_u32[4];
|
||||
} _S6_un;
|
||||
};
|
||||
#define s6_addr _S6_un._S6_u8
|
||||
#define s6_addr8 _S6_un._S6_u8
|
||||
#define s6_addr16 _S6_un._S6_u16
|
||||
#define s6_addr32 _S6_un._S6_u32
|
||||
|
||||
#define IN6ADDR_ANY_INIT {{{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}}
|
||||
#define IN6ADDR_LOOPBACK_INIT {{{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }}}
|
||||
|
||||
LIBLWRES_EXTERNAL_DATA extern const struct in6_addr in6addr_any;
|
||||
LIBLWRES_EXTERNAL_DATA extern const struct in6_addr in6addr_loopback;
|
||||
|
||||
struct sockaddr_in6 {
|
||||
#ifdef LWRES_PLATFORM_HAVESALEN
|
||||
lwres_uint8_t sin6_len;
|
||||
lwres_uint8_t sin6_family;
|
||||
#else
|
||||
lwres_uint16_t sin6_family;
|
||||
#endif
|
||||
lwres_uint16_t sin6_port;
|
||||
lwres_uint32_t sin6_flowinfo;
|
||||
struct in6_addr sin6_addr;
|
||||
lwres_uint32_t sin6_scope_id;
|
||||
};
|
||||
|
||||
#ifdef LWRES_PLATFORM_HAVESALEN
|
||||
#define SIN6_LEN 1
|
||||
#endif
|
||||
|
||||
struct in6_pktinfo {
|
||||
struct in6_addr ipi6_addr; /* src/dst IPv6 address */
|
||||
unsigned int ipi6_ifindex; /* send/recv interface index */
|
||||
};
|
||||
|
||||
/*
|
||||
* Unspecified
|
||||
*/
|
||||
#define IN6_IS_ADDR_UNSPECIFIED(a) \
|
||||
(((a)->s6_addr32[0] == 0) && \
|
||||
((a)->s6_addr32[1] == 0) && \
|
||||
((a)->s6_addr32[2] == 0) && \
|
||||
((a)->s6_addr32[3] == 0))
|
||||
|
||||
/*
|
||||
* Loopback
|
||||
*/
|
||||
#define IN6_IS_ADDR_LOOPBACK(a) \
|
||||
(((a)->s6_addr32[0] == 0) && \
|
||||
((a)->s6_addr32[1] == 0) && \
|
||||
((a)->s6_addr32[2] == 0) && \
|
||||
((a)->s6_addr32[3] == htonl(1)))
|
||||
|
||||
/*
|
||||
* IPv4 compatible
|
||||
*/
|
||||
#define IN6_IS_ADDR_V4COMPAT(a) \
|
||||
(((a)->s6_addr32[0] == 0) && \
|
||||
((a)->s6_addr32[1] == 0) && \
|
||||
((a)->s6_addr32[2] == 0) && \
|
||||
((a)->s6_addr32[3] != 0) && \
|
||||
((a)->s6_addr32[3] != htonl(1)))
|
||||
|
||||
/*
|
||||
* Mapped
|
||||
*/
|
||||
#define IN6_IS_ADDR_V4MAPPED(a) \
|
||||
(((a)->s6_addr32[0] == 0) && \
|
||||
((a)->s6_addr32[1] == 0) && \
|
||||
((a)->s6_addr32[2] == htonl(0x0000ffff)))
|
||||
|
||||
#endif /* LWRES_IPV6_H */
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lang.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_LANG_H
|
||||
#define LWRES_LANG_H 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define LWRES_LANG_BEGINDECLS extern "C" {
|
||||
#define LWRES_LANG_ENDDECLS }
|
||||
#else
|
||||
#define LWRES_LANG_BEGINDECLS
|
||||
#define LWRES_LANG_ENDDECLS
|
||||
#endif
|
||||
|
||||
#endif /* LWRES_LANG_H */
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: list.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_LIST_H
|
||||
#define LWRES_LIST_H 1
|
||||
|
||||
#define LWRES_LIST(type) struct { type *head, *tail; }
|
||||
#define LWRES_LIST_INIT(list) \
|
||||
do { (list).head = NULL; (list).tail = NULL; } while (0)
|
||||
|
||||
#define LWRES_LINK(type) struct { type *prev, *next; }
|
||||
#define LWRES_LINK_INIT(elt, link) \
|
||||
do { \
|
||||
(elt)->link.prev = (void *)(-1); \
|
||||
(elt)->link.next = (void *)(-1); \
|
||||
} while (0)
|
||||
#define LWRES_LINK_LINKED(elt, link) \
|
||||
((void *)((elt)->link.prev) != (void *)(-1))
|
||||
|
||||
#define LWRES_LIST_HEAD(list) ((list).head)
|
||||
#define LWRES_LIST_TAIL(list) ((list).tail)
|
||||
#define LWRES_LIST_EMPTY(list) LWRES_TF((list).head == NULL)
|
||||
|
||||
#define LWRES_LIST_PREPEND(list, elt, link) \
|
||||
do { \
|
||||
if ((list).head != NULL) \
|
||||
(list).head->link.prev = (elt); \
|
||||
else \
|
||||
(list).tail = (elt); \
|
||||
(elt)->link.prev = NULL; \
|
||||
(elt)->link.next = (list).head; \
|
||||
(list).head = (elt); \
|
||||
} while (0)
|
||||
|
||||
#define LWRES_LIST_APPEND(list, elt, link) \
|
||||
do { \
|
||||
if ((list).tail != NULL) \
|
||||
(list).tail->link.next = (elt); \
|
||||
else \
|
||||
(list).head = (elt); \
|
||||
(elt)->link.prev = (list).tail; \
|
||||
(elt)->link.next = NULL; \
|
||||
(list).tail = (elt); \
|
||||
} while (0)
|
||||
|
||||
#define LWRES_LIST_UNLINK(list, elt, link) \
|
||||
do { \
|
||||
if ((elt)->link.next != NULL) \
|
||||
(elt)->link.next->link.prev = (elt)->link.prev; \
|
||||
else \
|
||||
(list).tail = (elt)->link.prev; \
|
||||
if ((elt)->link.prev != NULL) \
|
||||
(elt)->link.prev->link.next = (elt)->link.next; \
|
||||
else \
|
||||
(list).head = (elt)->link.next; \
|
||||
(elt)->link.prev = (void *)(-1); \
|
||||
(elt)->link.next = (void *)(-1); \
|
||||
} while (0)
|
||||
|
||||
#define LWRES_LIST_PREV(elt, link) ((elt)->link.prev)
|
||||
#define LWRES_LIST_NEXT(elt, link) ((elt)->link.next)
|
||||
|
||||
#define LWRES_LIST_INSERTBEFORE(list, before, elt, link) \
|
||||
do { \
|
||||
if ((before)->link.prev == NULL) \
|
||||
LWRES_LIST_PREPEND(list, elt, link); \
|
||||
else { \
|
||||
(elt)->link.prev = (before)->link.prev; \
|
||||
(before)->link.prev = (elt); \
|
||||
(elt)->link.prev->link.next = (elt); \
|
||||
(elt)->link.next = (before); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LWRES_LIST_INSERTAFTER(list, after, elt, link) \
|
||||
do { \
|
||||
if ((after)->link.next == NULL) \
|
||||
LWRES_LIST_APPEND(list, elt, link); \
|
||||
else { \
|
||||
(elt)->link.next = (after)->link.next; \
|
||||
(after)->link.next = (elt); \
|
||||
(elt)->link.next->link.prev = (elt); \
|
||||
(elt)->link.prev = (after); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LWRES_LIST_APPENDLIST(list1, list2, link) \
|
||||
do { \
|
||||
if (LWRES_LIST_EMPTY(list1)) \
|
||||
(list1) = (list2); \
|
||||
else if (!LWRES_LIST_EMPTY(list2)) { \
|
||||
(list1).tail->link.next = (list2).head; \
|
||||
(list2).head->link.prev = (list1).tail; \
|
||||
(list1).tail = (list2).tail; \
|
||||
} \
|
||||
(list2).head = NULL; \
|
||||
(list2).tail = NULL; \
|
||||
} while (0)
|
||||
|
||||
#define LWRES_LIST_ENQUEUE(list, elt, link) LWRES_LIST_APPEND(list, elt, link)
|
||||
#define LWRES_LIST_DEQUEUE(list, elt, link) LWRES_LIST_UNLINK(list, elt, link)
|
||||
|
||||
#endif /* LWRES_LIST_H */
|
||||
@@ -0,0 +1,402 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwbuffer.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_LWBUFFER_H
|
||||
#define LWRES_LWBUFFER_H 1
|
||||
|
||||
/*****
|
||||
***** Module Info
|
||||
*****/
|
||||
|
||||
/*
|
||||
* Buffers
|
||||
*
|
||||
* A buffer is a region of memory, together with a set of related subregions.
|
||||
* Buffers are used for parsing and I/O operations.
|
||||
*
|
||||
* The 'used region' and the 'available' region are disjoint, and their
|
||||
* union is the buffer's region. The used region extends from the beginning
|
||||
* of the buffer region to the last used byte. The available region
|
||||
* extends from one byte greater than the last used byte to the end of the
|
||||
* buffer's region. The size of the used region can be changed using various
|
||||
* buffer commands. Initially, the used region is empty.
|
||||
*
|
||||
* The used region is further subdivided into two disjoint regions: the
|
||||
* 'consumed region' and the 'remaining region'. The union of these two
|
||||
* regions is the used region. The consumed region extends from the beginning
|
||||
* of the used region to the byte before the 'current' offset (if any). The
|
||||
* 'remaining' region the current pointer to the end of the used
|
||||
* region. The size of the consumed region can be changed using various
|
||||
* buffer commands. Initially, the consumed region is empty.
|
||||
*
|
||||
* The 'active region' is an (optional) subregion of the remaining region.
|
||||
* It extends from the current offset to an offset in the remaining region
|
||||
* that is selected with lwres_buffer_setactive(). Initially, the active
|
||||
* region is empty. If the current offset advances beyond the chosen offset,
|
||||
* the active region will also be empty.
|
||||
*
|
||||
* /----- used region -----\/-- available --\
|
||||
* +----------------------------------------+
|
||||
* | consumed | remaining | |
|
||||
* +----------------------------------------+
|
||||
* a b c d e
|
||||
*
|
||||
* a == base of buffer.
|
||||
* b == current pointer. Can be anywhere between a and d.
|
||||
* c == active pointer. Meaningful between b and d.
|
||||
* d == used pointer.
|
||||
* e == length of buffer.
|
||||
*
|
||||
* a-e == entire (length) of buffer.
|
||||
* a-d == used region.
|
||||
* a-b == consumed region.
|
||||
* b-d == remaining region.
|
||||
* b-c == optional active region.
|
||||
*
|
||||
* The following invariants are maintained by all routines:
|
||||
*
|
||||
* length > 0
|
||||
*
|
||||
* base is a valid pointer to length bytes of memory
|
||||
*
|
||||
* 0 <= used <= length
|
||||
*
|
||||
* 0 <= current <= used
|
||||
*
|
||||
* 0 <= active <= used
|
||||
* (although active < current implies empty active region)
|
||||
*
|
||||
* MP:
|
||||
* Buffers have no synchronization. Clients must ensure exclusive
|
||||
* access.
|
||||
*
|
||||
* Reliability:
|
||||
* No anticipated impact.
|
||||
*
|
||||
* Resources:
|
||||
* Memory: 1 pointer + 6 unsigned integers per buffer.
|
||||
*
|
||||
* Security:
|
||||
* No anticipated impact.
|
||||
*
|
||||
* Standards:
|
||||
* None.
|
||||
*/
|
||||
|
||||
/***
|
||||
*** Imports
|
||||
***/
|
||||
|
||||
#include <lwres/lang.h>
|
||||
#include <lwres/int.h>
|
||||
|
||||
LWRES_LANG_BEGINDECLS
|
||||
|
||||
/***
|
||||
*** Magic numbers
|
||||
***/
|
||||
#define LWRES_BUFFER_MAGIC 0x4275663fU /* Buf?. */
|
||||
|
||||
#define LWRES_BUFFER_VALID(b) ((b) != NULL && \
|
||||
(b)->magic == LWRES_BUFFER_MAGIC)
|
||||
|
||||
/*
|
||||
* The following macros MUST be used only on valid buffers. It is the
|
||||
* caller's responsibility to ensure this by using the LWRES_BUFFER_VALID
|
||||
* check above, or by calling another lwres_buffer_*() function (rather than
|
||||
* another macro.)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Get the length of the used region of buffer "b"
|
||||
*/
|
||||
#define LWRES_BUFFER_USEDCOUNT(b) ((b)->used)
|
||||
|
||||
/*
|
||||
* Get the length of the available region of buffer "b"
|
||||
*/
|
||||
#define LWRES_BUFFER_AVAILABLECOUNT(b) ((b)->length - (b)->used)
|
||||
|
||||
#define LWRES_BUFFER_REMAINING(b) ((b)->used - (b)->current)
|
||||
|
||||
/*
|
||||
* Note that the buffer structure is public. This is principally so buffer
|
||||
* operations can be implemented using macros. Applications are strongly
|
||||
* discouraged from directly manipulating the structure.
|
||||
*/
|
||||
|
||||
typedef struct lwres_buffer lwres_buffer_t;
|
||||
struct lwres_buffer {
|
||||
unsigned int magic;
|
||||
unsigned char *base;
|
||||
/* The following integers are byte offsets from 'base'. */
|
||||
unsigned int length;
|
||||
unsigned int used;
|
||||
unsigned int current;
|
||||
unsigned int active;
|
||||
};
|
||||
|
||||
/***
|
||||
*** Functions
|
||||
***/
|
||||
|
||||
void
|
||||
lwres_buffer_init(lwres_buffer_t *b, void *base, unsigned int length);
|
||||
/*
|
||||
* Make 'b' refer to the 'length'-byte region starting at base.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'length' > 0
|
||||
*
|
||||
* 'base' is a pointer to a sequence of 'length' bytes.
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_invalidate(lwres_buffer_t *b);
|
||||
/*
|
||||
* Make 'b' an invalid buffer.
|
||||
*
|
||||
* Requires:
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* Ensures:
|
||||
* If assertion checking is enabled, future attempts to use 'b' without
|
||||
* calling lwres_buffer_init() on it will cause an assertion failure.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_add(lwres_buffer_t *b, unsigned int n);
|
||||
/*
|
||||
* Increase the 'used' region of 'b' by 'n' bytes.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer
|
||||
*
|
||||
* used + n <= length
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_subtract(lwres_buffer_t *b, unsigned int n);
|
||||
/*
|
||||
* Decrease the 'used' region of 'b' by 'n' bytes.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer
|
||||
*
|
||||
* used >= n
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_clear(lwres_buffer_t *b);
|
||||
/*
|
||||
* Make the used region empty.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* used = 0
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_first(lwres_buffer_t *b);
|
||||
/*
|
||||
* Make the consumed region empty.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* current == 0
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_forward(lwres_buffer_t *b, unsigned int n);
|
||||
/*
|
||||
* Increase the 'consumed' region of 'b' by 'n' bytes.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer
|
||||
*
|
||||
* current + n <= used
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_back(lwres_buffer_t *b, unsigned int n);
|
||||
/*
|
||||
* Decrease the 'consumed' region of 'b' by 'n' bytes.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer
|
||||
*
|
||||
* n <= current
|
||||
*
|
||||
*/
|
||||
|
||||
lwres_uint8_t
|
||||
lwres_buffer_getuint8(lwres_buffer_t *b);
|
||||
/*
|
||||
* Read an unsigned 8-bit integer from 'b' and return it.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* The length of the available region of 'b' is at least 1.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* The current pointer in 'b' is advanced by 1.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* A 8-bit unsigned integer.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_putuint8(lwres_buffer_t *b, lwres_uint8_t val);
|
||||
/*
|
||||
* Store an unsigned 8-bit integer from 'val' into 'b'.
|
||||
*
|
||||
* Requires:
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* The length of the unused region of 'b' is at least 1.
|
||||
*
|
||||
* Ensures:
|
||||
* The used pointer in 'b' is advanced by 1.
|
||||
*/
|
||||
|
||||
lwres_uint16_t
|
||||
lwres_buffer_getuint16(lwres_buffer_t *b);
|
||||
/*
|
||||
* Read an unsigned 16-bit integer in network byte order from 'b', convert
|
||||
* it to host byte order, and return it.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* The length of the available region of 'b' is at least 2.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* The current pointer in 'b' is advanced by 2.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* A 16-bit unsigned integer.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_putuint16(lwres_buffer_t *b, lwres_uint16_t val);
|
||||
/*
|
||||
* Store an unsigned 16-bit integer in host byte order from 'val'
|
||||
* into 'b' in network byte order.
|
||||
*
|
||||
* Requires:
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* The length of the unused region of 'b' is at least 2.
|
||||
*
|
||||
* Ensures:
|
||||
* The used pointer in 'b' is advanced by 2.
|
||||
*/
|
||||
|
||||
lwres_uint32_t
|
||||
lwres_buffer_getuint32(lwres_buffer_t *b);
|
||||
/*
|
||||
* Read an unsigned 32-bit integer in network byte order from 'b', convert
|
||||
* it to host byte order, and return it.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* The length of the available region of 'b' is at least 2.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* The current pointer in 'b' is advanced by 2.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* A 32-bit unsigned integer.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_putuint32(lwres_buffer_t *b, lwres_uint32_t val);
|
||||
/*
|
||||
* Store an unsigned 32-bit integer in host byte order from 'val'
|
||||
* into 'b' in network byte order.
|
||||
*
|
||||
* Requires:
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* The length of the unused region of 'b' is at least 4.
|
||||
*
|
||||
* Ensures:
|
||||
* The used pointer in 'b' is advanced by 4.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_putmem(lwres_buffer_t *b, const unsigned char *base,
|
||||
unsigned int length);
|
||||
/*
|
||||
* Copy 'length' bytes of memory at 'base' into 'b'.
|
||||
*
|
||||
* Requires:
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* 'base' points to 'length' bytes of valid memory.
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_buffer_getmem(lwres_buffer_t *b, unsigned char *base,
|
||||
unsigned int length);
|
||||
/*
|
||||
* Copy 'length' bytes of memory from 'b' into 'base'.
|
||||
*
|
||||
* Requires:
|
||||
* 'b' is a valid buffer.
|
||||
*
|
||||
* 'base' points to at least 'length' bytes of valid memory.
|
||||
*
|
||||
* 'b' have at least 'length' bytes remaining.
|
||||
*/
|
||||
|
||||
LWRES_LANG_ENDDECLS
|
||||
|
||||
#endif /* LWRES_LWBUFFER_H */
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (C) 1999-2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwpacket.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_LWPACKET_H
|
||||
#define LWRES_LWPACKET_H 1
|
||||
|
||||
#include <lwres/lang.h>
|
||||
#include <lwres/lwbuffer.h>
|
||||
#include <lwres/result.h>
|
||||
|
||||
typedef struct lwres_lwpacket lwres_lwpacket_t;
|
||||
|
||||
struct lwres_lwpacket {
|
||||
lwres_uint32_t length;
|
||||
lwres_uint16_t version;
|
||||
lwres_uint16_t pktflags;
|
||||
lwres_uint32_t serial;
|
||||
lwres_uint32_t opcode;
|
||||
lwres_uint32_t result;
|
||||
lwres_uint32_t recvlength;
|
||||
lwres_uint16_t authtype;
|
||||
lwres_uint16_t authlength;
|
||||
};
|
||||
|
||||
#define LWRES_LWPACKET_LENGTH (4 * 5 + 2 * 4)
|
||||
|
||||
#define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /* if set, pkt is a response */
|
||||
|
||||
|
||||
#define LWRES_LWPACKETVERSION_0 0
|
||||
|
||||
/*
|
||||
* "length" is the overall packet length, including the entire packet header.
|
||||
*
|
||||
* "version" specifies the header format. Currently, there is only one
|
||||
* format, LWRES_LWPACKETVERSION_0.
|
||||
*
|
||||
* "flags" specifies library-defined flags for this packet. None of these
|
||||
* are definable by the caller, but library-defined values can be set by
|
||||
* the caller. For example, one bit in this field indicates if the packet
|
||||
* is a request or a response.
|
||||
*
|
||||
* "serial" is set by the requestor and is returned in all replies. If two
|
||||
* packets from the same source have the same serial number and are from
|
||||
* the same source, they are assumed to be duplicates and the latter ones
|
||||
* may be dropped. (The library does not do this by default on replies, but
|
||||
* does so on requests.)
|
||||
*
|
||||
* "opcode" is application defined. Opcodes between 0x04000000 and 0xffffffff
|
||||
* are application defined. Opcodes between 0x00000000 and 0x03ffffff are
|
||||
* reserved for library use.
|
||||
*
|
||||
* "result" is application defined, and valid only on replies.
|
||||
* Results between 0x04000000 and 0xffffffff are application defined.
|
||||
* Results between 0x00000000 and 0x03ffffff are reserved for library use.
|
||||
* (This is the same reserved range defined in <isc/resultclass.h>, so it
|
||||
* would be trivial to map ISC_R_* result codes into packet result codes
|
||||
* when appropriate.)
|
||||
*
|
||||
* "recvlength" is set to the maximum buffer size that the receiver can
|
||||
* handle on requests, and the size of the buffer needed to satisfy a request
|
||||
* when the buffer is too large for replies.
|
||||
*
|
||||
* "authtype" is the packet level auth type used.
|
||||
* Authtypes between 0x1000 and 0xffff are application defined. Authtypes
|
||||
* between 0x0000 and 0x0fff are reserved for library use. This is currently
|
||||
* unused and MUST be set to zero.
|
||||
*
|
||||
* "authlen" is the length of the authentication data. See the specific
|
||||
* authtypes for more information on what is contained in this field. This
|
||||
* is currently unused, and MUST be set to zero.
|
||||
*
|
||||
* The remainder of the packet consists of two regions, one described by
|
||||
* "authlen" and one of "length - authlen - sizeof(lwres_lwpacket_t)".
|
||||
*
|
||||
* That is:
|
||||
*
|
||||
* pkt header
|
||||
* authlen bytes of auth information
|
||||
* data bytes
|
||||
*/
|
||||
|
||||
/*
|
||||
* Currently defined opcodes:
|
||||
*
|
||||
* NOOP. Success is always returned, with the packet contents echoed.
|
||||
*
|
||||
* GETADDRSBYNAME. Return all known addresses for a given name.
|
||||
* This may return NIS or /etc/hosts info as well as DNS
|
||||
* information. Flags will be provided to indicate ip4/ip6
|
||||
* addresses are desired.
|
||||
*
|
||||
* GETNAMEBYADDR. Return the hostname for the given address. Once
|
||||
* again, it will return data from multiple sources.
|
||||
*/
|
||||
|
||||
LWRES_LANG_BEGINDECLS
|
||||
|
||||
/* XXXMLG document */
|
||||
lwres_result_t
|
||||
lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
|
||||
|
||||
lwres_result_t
|
||||
lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
|
||||
|
||||
LWRES_LANG_ENDDECLS
|
||||
|
||||
#endif /* LWRES_LWPACKET_H */
|
||||
@@ -0,0 +1,584 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwres.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_LWRES_H
|
||||
#define LWRES_LWRES_H 1
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <lwres/context.h>
|
||||
#include <lwres/lang.h>
|
||||
#include <lwres/list.h>
|
||||
#include <lwres/lwpacket.h>
|
||||
|
||||
/*
|
||||
* Design notes:
|
||||
*
|
||||
* Each opcode has two structures and three functions which operate on each
|
||||
* structure. For example, using the "no operation/ping" opcode as an
|
||||
* example:
|
||||
*
|
||||
* lwres_nooprequest_t:
|
||||
*
|
||||
* lwres_nooprequest_render() takes a lwres_nooprequest_t and
|
||||
* and renders it into wire format, storing the allocated
|
||||
* buffer information in a passed-in buffer. When this buffer
|
||||
* is no longer needed, it must be freed by
|
||||
* lwres_context_freemem(). All other memory used by the
|
||||
* caller must be freed manually, including the
|
||||
* lwres_nooprequest_t passed in.
|
||||
*
|
||||
* lwres_nooprequest_parse() takes a wire format message and
|
||||
* breaks it out into a lwres_nooprequest_t. The structure
|
||||
* must be freed via lwres_nooprequest_free() when it is no longer
|
||||
* needed.
|
||||
*
|
||||
* lwres_nooprequest_free() releases into the lwres_context_t
|
||||
* any space allocated during parsing.
|
||||
*
|
||||
* lwres_noopresponse_t:
|
||||
*
|
||||
* The functions used are similar to the three used for
|
||||
* requests, just with different names.
|
||||
*
|
||||
* Typically, the client will use request_render, response_parse, and
|
||||
* response_free, while the daemon will use request_parse, response_render,
|
||||
* and request_free.
|
||||
*
|
||||
* The basic flow of a typical client is:
|
||||
*
|
||||
* fill in a request_t, and call the render function.
|
||||
*
|
||||
* Transmit the buffer returned to the daemon.
|
||||
*
|
||||
* Wait for a response.
|
||||
*
|
||||
* When a response is received, parse it into a response_t.
|
||||
*
|
||||
* free the request buffer using lwres_context_freemem().
|
||||
*
|
||||
* free the response structure and its associated buffer using
|
||||
* response_free().
|
||||
*/
|
||||
|
||||
#define LWRES_UDP_PORT 921
|
||||
#define LWRES_RECVLENGTH 16384
|
||||
#define LWRES_ADDR_MAXLEN 16 /* changing this breaks ABI */
|
||||
#define LWRES_RESOLV_CONF "/etc/resolv.conf"
|
||||
|
||||
/*
|
||||
* Flags.
|
||||
*
|
||||
* These flags are only relevant to rrset queries.
|
||||
*
|
||||
* TRUSTNOTREQUIRED: DNSSEC is not required (input)
|
||||
* SECUREDATA: The data was crypto-verified with DNSSEC (output)
|
||||
*
|
||||
*/
|
||||
#define LWRES_FLAG_TRUSTNOTREQUIRED 0x00000001U
|
||||
#define LWRES_FLAG_SECUREDATA 0x00000002U
|
||||
|
||||
/*
|
||||
* no-op
|
||||
*/
|
||||
#define LWRES_OPCODE_NOOP 0x00000000U
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint16_t datalength;
|
||||
unsigned char *data;
|
||||
} lwres_nooprequest_t;
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint16_t datalength;
|
||||
unsigned char *data;
|
||||
} lwres_noopresponse_t;
|
||||
|
||||
/*
|
||||
* get addresses by name
|
||||
*/
|
||||
#define LWRES_OPCODE_GETADDRSBYNAME 0x00010001U
|
||||
|
||||
typedef struct lwres_addr lwres_addr_t;
|
||||
typedef LWRES_LIST(lwres_addr_t) lwres_addrlist_t;
|
||||
|
||||
struct lwres_addr {
|
||||
lwres_uint32_t family;
|
||||
lwres_uint16_t length;
|
||||
unsigned char address[LWRES_ADDR_MAXLEN];
|
||||
LWRES_LINK(lwres_addr_t) link;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint32_t flags;
|
||||
lwres_uint32_t addrtypes;
|
||||
lwres_uint16_t namelen;
|
||||
char *name;
|
||||
} lwres_gabnrequest_t;
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint32_t flags;
|
||||
lwres_uint16_t naliases;
|
||||
lwres_uint16_t naddrs;
|
||||
char *realname;
|
||||
char **aliases;
|
||||
lwres_uint16_t realnamelen;
|
||||
lwres_uint16_t *aliaslen;
|
||||
lwres_addrlist_t addrs;
|
||||
/* if base != NULL, it will be freed when this structure is freed. */
|
||||
void *base;
|
||||
size_t baselen;
|
||||
} lwres_gabnresponse_t;
|
||||
|
||||
/*
|
||||
* get name by address
|
||||
*/
|
||||
#define LWRES_OPCODE_GETNAMEBYADDR 0x00010002U
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint32_t flags;
|
||||
lwres_addr_t addr;
|
||||
} lwres_gnbarequest_t;
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint32_t flags;
|
||||
lwres_uint16_t naliases;
|
||||
char *realname;
|
||||
char **aliases;
|
||||
lwres_uint16_t realnamelen;
|
||||
lwres_uint16_t *aliaslen;
|
||||
/* if base != NULL, it will be freed when this structure is freed. */
|
||||
void *base;
|
||||
size_t baselen;
|
||||
} lwres_gnbaresponse_t;
|
||||
|
||||
/*
|
||||
* get rdata by name
|
||||
*/
|
||||
#define LWRES_OPCODE_GETRDATABYNAME 0x00010003U
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint32_t flags;
|
||||
lwres_uint16_t rdclass;
|
||||
lwres_uint16_t rdtype;
|
||||
lwres_uint16_t namelen;
|
||||
char *name;
|
||||
} lwres_grbnrequest_t;
|
||||
|
||||
typedef struct {
|
||||
/* public */
|
||||
lwres_uint32_t flags;
|
||||
lwres_uint16_t rdclass;
|
||||
lwres_uint16_t rdtype;
|
||||
lwres_uint32_t ttl;
|
||||
lwres_uint16_t nrdatas;
|
||||
lwres_uint16_t nsigs;
|
||||
char *realname;
|
||||
lwres_uint16_t realnamelen;
|
||||
unsigned char **rdatas;
|
||||
lwres_uint16_t *rdatalen;
|
||||
unsigned char **sigs;
|
||||
lwres_uint16_t *siglen;
|
||||
/* if base != NULL, it will be freed when this structure is freed. */
|
||||
void *base;
|
||||
size_t baselen;
|
||||
} lwres_grbnresponse_t;
|
||||
|
||||
#define LWRDATA_VALIDATED 0x00000001
|
||||
|
||||
/*
|
||||
* resolv.conf data
|
||||
*/
|
||||
|
||||
#define LWRES_CONFMAXNAMESERVERS 3 /* max 3 "nameserver" entries */
|
||||
#define LWRES_CONFMAXLWSERVERS 1 /* max 1 "lwserver" entry */
|
||||
#define LWRES_CONFMAXSEARCH 8 /* max 8 domains in "search" entry */
|
||||
#define LWRES_CONFMAXLINELEN 256 /* max size of a line */
|
||||
#define LWRES_CONFMAXSORTLIST 10
|
||||
typedef struct {
|
||||
lwres_context_t *lwctx;
|
||||
lwres_addr_t nameservers[LWRES_CONFMAXNAMESERVERS];
|
||||
lwres_uint8_t nsnext; /* index for next free slot */
|
||||
|
||||
lwres_addr_t lwservers[LWRES_CONFMAXLWSERVERS];
|
||||
lwres_uint8_t lwnext; /* index for next free slot */
|
||||
|
||||
char *domainname;
|
||||
|
||||
char *search[LWRES_CONFMAXSEARCH];
|
||||
lwres_uint8_t searchnxt; /* index for next free slot */
|
||||
|
||||
struct {
|
||||
lwres_addr_t addr;
|
||||
/* mask has a non-zero 'family' and 'length' if set */
|
||||
lwres_addr_t mask;
|
||||
} sortlist[LWRES_CONFMAXSORTLIST];
|
||||
lwres_uint8_t sortlistnxt;
|
||||
|
||||
lwres_uint8_t resdebug; /* non-zero if 'options debug' set */
|
||||
lwres_uint8_t ndots; /* set to n in 'options ndots:n' */
|
||||
lwres_uint8_t no_tld_query; /* non-zero if 'options no_tld_query' */
|
||||
} lwres_conf_t;
|
||||
|
||||
#define LWRES_ADDRTYPE_V4 0x00000001U /* ipv4 */
|
||||
#define LWRES_ADDRTYPE_V6 0x00000002U /* ipv6 */
|
||||
|
||||
#define LWRES_MAX_ALIASES 16 /* max # of aliases */
|
||||
#define LWRES_MAX_ADDRS 64 /* max # of addrs */
|
||||
|
||||
LWRES_LANG_BEGINDECLS
|
||||
|
||||
/*
|
||||
* This is in host byte order.
|
||||
*/
|
||||
extern lwres_uint16_t lwres_udp_port;
|
||||
|
||||
extern const char *lwres_resolv_conf;
|
||||
|
||||
lwres_result_t
|
||||
lwres_gabnrequest_render(lwres_context_t *ctx, lwres_gabnrequest_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_gabnresponse_render(lwres_context_t *ctx, lwres_gabnresponse_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_gabnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt, lwres_gabnrequest_t **structp);
|
||||
|
||||
lwres_result_t
|
||||
lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt,
|
||||
lwres_gabnresponse_t **structp);
|
||||
|
||||
void
|
||||
lwres_gabnrequest_free(lwres_context_t *ctx, lwres_gabnrequest_t **structp);
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_gabnresponse_free(lwres_context_t *ctx, lwres_gabnresponse_t **structp);
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
|
||||
lwres_result_t
|
||||
lwres_gnbarequest_render(lwres_context_t *ctx, lwres_gnbarequest_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_gnbaresponse_render(lwres_context_t *ctx, lwres_gnbaresponse_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_gnbarequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt, lwres_gnbarequest_t **structp);
|
||||
|
||||
lwres_result_t
|
||||
lwres_gnbaresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt,
|
||||
lwres_gnbaresponse_t **structp);
|
||||
|
||||
void
|
||||
lwres_gnbarequest_free(lwres_context_t *ctx, lwres_gnbarequest_t **structp);
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_gnbaresponse_free(lwres_context_t *ctx, lwres_gnbaresponse_t **structp);
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_grbnrequest_render(lwres_context_t *ctx, lwres_grbnrequest_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_grbnresponse_render(lwres_context_t *ctx, lwres_grbnresponse_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_grbnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt, lwres_grbnrequest_t **structp);
|
||||
|
||||
lwres_result_t
|
||||
lwres_grbnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt,
|
||||
lwres_grbnresponse_t **structp);
|
||||
|
||||
void
|
||||
lwres_grbnrequest_free(lwres_context_t *ctx, lwres_grbnrequest_t **structp);
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_grbnresponse_free(lwres_context_t *ctx, lwres_grbnresponse_t **structp);
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_nooprequest_render(lwres_context_t *ctx, lwres_nooprequest_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
/*
|
||||
* Allocate space and render into wire format a noop request packet.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* b != NULL, and points to a lwres_buffer_t. The contents of the
|
||||
* buffer structure will be initialized to contain the wire-format
|
||||
* noop request packet.
|
||||
*
|
||||
* Caller needs to fill in parts of "pkt" before calling:
|
||||
* serial, maxrecv, result.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* Returns 0 on success, non-zero on failure.
|
||||
*
|
||||
* On successful return, *b will contain data about the wire-format
|
||||
* packet. It can be transmitted in any way, including lwres_sendblock().
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_noopresponse_render(lwres_context_t *ctx, lwres_noopresponse_t *req,
|
||||
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
|
||||
|
||||
lwres_result_t
|
||||
lwres_nooprequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt, lwres_nooprequest_t **structp);
|
||||
/*
|
||||
* Parse a noop request. Note that to get here, the lwpacket must have
|
||||
* already been parsed and removed by the caller, otherwise it would be
|
||||
* pretty hard for it to know this is the right function to call.
|
||||
*
|
||||
* The function verifies bits of the header, but does not modify it.
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_noopresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
|
||||
lwres_lwpacket_t *pkt,
|
||||
lwres_noopresponse_t **structp);
|
||||
|
||||
void
|
||||
lwres_nooprequest_free(lwres_context_t *ctx, lwres_nooprequest_t **structp);
|
||||
|
||||
void
|
||||
lwres_noopresponse_free(lwres_context_t *ctx, lwres_noopresponse_t **structp);
|
||||
|
||||
/*
|
||||
* Frees any dynamically allocated memory for this structure.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* ctx != NULL, and be a context returned via lwres_contextcreate().
|
||||
*
|
||||
* structp != NULL && *structp != NULL.
|
||||
*
|
||||
* Ensures:
|
||||
*
|
||||
* *structp == NULL.
|
||||
*
|
||||
* All memory allocated by this structure will be returned to the
|
||||
* system via the context's free function.
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_conf_parse(lwres_context_t *ctx, const char *filename);
|
||||
/*
|
||||
* parses a resolv.conf-format file and stores the results in the structure
|
||||
* pointed to by *ctx.
|
||||
*
|
||||
* Requires:
|
||||
* ctx != NULL
|
||||
* filename != NULL && strlen(filename) > 0
|
||||
*
|
||||
* Returns:
|
||||
* LWRES_R_SUCCESS on a successful parse.
|
||||
* Anything else on error, although the structure may be partially filled
|
||||
* in.
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_conf_print(lwres_context_t *ctx, FILE *fp);
|
||||
/*
|
||||
* Prints a resolv.conf-format of confdata output to fp.
|
||||
*
|
||||
* Requires:
|
||||
* ctx != NULL
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_conf_init(lwres_context_t *ctx);
|
||||
/*
|
||||
* sets all internal fields to a default state. Used to initialize a new
|
||||
* lwres_conf_t structure (not reset a used on).
|
||||
*
|
||||
* Requires:
|
||||
* ctx != NULL
|
||||
*/
|
||||
|
||||
void
|
||||
lwres_conf_clear(lwres_context_t *ctx);
|
||||
/*
|
||||
* frees all internally allocated memory in confdata. Uses the memory
|
||||
* routines supplied by ctx.
|
||||
*
|
||||
* Requires:
|
||||
* ctx != NULL
|
||||
*/
|
||||
|
||||
lwres_conf_t *
|
||||
lwres_conf_get(lwres_context_t *ctx);
|
||||
/*
|
||||
* returns a pointer to the current config structure.
|
||||
* Be extremely cautions in modifying the contents of this structure; it
|
||||
* needs an API to return the various bits of data, walk lists, etc.
|
||||
*
|
||||
* Requires:
|
||||
* ctx != NULL
|
||||
*/
|
||||
|
||||
/*
|
||||
* Helper functions
|
||||
*/
|
||||
|
||||
lwres_result_t
|
||||
lwres_data_parse(lwres_buffer_t *b, unsigned char **p, lwres_uint16_t *len);
|
||||
|
||||
lwres_result_t
|
||||
lwres_string_parse(lwres_buffer_t *b, char **c, lwres_uint16_t *len);
|
||||
|
||||
lwres_result_t
|
||||
lwres_addr_parse(lwres_buffer_t *b, lwres_addr_t *addr);
|
||||
|
||||
lwres_result_t
|
||||
lwres_getaddrsbyname(lwres_context_t *ctx, const char *name,
|
||||
lwres_uint32_t addrtypes, lwres_gabnresponse_t **structp);
|
||||
|
||||
lwres_result_t
|
||||
lwres_getnamebyaddr(lwres_context_t *ctx, lwres_uint32_t addrtype,
|
||||
lwres_uint16_t addrlen, const unsigned char *addr,
|
||||
lwres_gnbaresponse_t **structp);
|
||||
|
||||
lwres_result_t
|
||||
lwres_getrdatabyname(lwres_context_t *ctx, const char *name,
|
||||
lwres_uint16_t rdclass, lwres_uint16_t rdtype,
|
||||
lwres_uint32_t flags, lwres_grbnresponse_t **structp);
|
||||
|
||||
lwres_result_t
|
||||
lwres_getaddrsbyname_setup(lwres_context_t *ctx, const char *name,
|
||||
lwres_uint32_t addrtypes, lwres_gabnresponse_t **structp);
|
||||
|
||||
|
||||
|
||||
LWRES_LANG_ENDDECLS
|
||||
|
||||
#endif /* LWRES_LWRES_H */
|
||||
@@ -0,0 +1,522 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: netdb.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_NETDB_H
|
||||
#define LWRES_NETDB_H 1
|
||||
|
||||
#include <stddef.h> /* Required on FreeBSD (and others?) for size_t. */
|
||||
#include <netdb.h> /* Contractual provision. */
|
||||
|
||||
#include <lwres/lang.h>
|
||||
|
||||
/*
|
||||
* Define if <netdb.h> does not declare struct addrinfo.
|
||||
*/
|
||||
#undef ISC_LWRES_NEEDADDRINFO
|
||||
|
||||
#ifdef ISC_LWRES_NEEDADDRINFO
|
||||
struct addrinfo {
|
||||
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
|
||||
int ai_family; /* PF_xxx */
|
||||
int ai_socktype; /* SOCK_xxx */
|
||||
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
|
||||
size_t ai_addrlen; /* Length of ai_addr */
|
||||
char *ai_canonname; /* Canonical name for hostname */
|
||||
struct sockaddr *ai_addr; /* Binary address */
|
||||
struct addrinfo *ai_next; /* Next structure in linked list */
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Undefine all #defines we are interested in as <netdb.h> may or may not have
|
||||
* defined them.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Error return codes from gethostbyname() and gethostbyaddr()
|
||||
* (left in extern int h_errno).
|
||||
*/
|
||||
|
||||
#undef NETDB_INTERNAL
|
||||
#undef NETDB_SUCCESS
|
||||
#undef HOST_NOT_FOUND
|
||||
#undef TRY_AGAIN
|
||||
#undef NO_RECOVERY
|
||||
#undef NO_DATA
|
||||
#undef NO_ADDRESS
|
||||
|
||||
#define NETDB_INTERNAL -1 /* see errno */
|
||||
#define NETDB_SUCCESS 0 /* no problem */
|
||||
#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
|
||||
#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */
|
||||
#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
|
||||
#define NO_DATA 4 /* Valid name, no data record of requested type */
|
||||
#define NO_ADDRESS NO_DATA /* no address, look for MX record */
|
||||
|
||||
/*
|
||||
* Error return codes from getaddrinfo()
|
||||
*/
|
||||
|
||||
#undef EAI_ADDRFAMILY
|
||||
#undef EAI_AGAIN
|
||||
#undef EAI_BADFLAGS
|
||||
#undef EAI_FAIL
|
||||
#undef EAI_FAMILY
|
||||
#undef EAI_MEMORY
|
||||
#undef EAI_NODATA
|
||||
#undef EAI_NONAME
|
||||
#undef EAI_SERVICE
|
||||
#undef EAI_SOCKTYPE
|
||||
#undef EAI_SYSTEM
|
||||
#undef EAI_BADHINTS
|
||||
#undef EAI_PROTOCOL
|
||||
#undef EAI_MAX
|
||||
|
||||
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
|
||||
#define EAI_AGAIN 2 /* temporary failure in name resolution */
|
||||
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
|
||||
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
|
||||
#define EAI_FAMILY 5 /* ai_family not supported */
|
||||
#define EAI_MEMORY 6 /* memory allocation failure */
|
||||
#define EAI_NODATA 7 /* no address associated with hostname */
|
||||
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
|
||||
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
|
||||
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
|
||||
#define EAI_SYSTEM 11 /* system error returned in errno */
|
||||
#define EAI_BADHINTS 12
|
||||
#define EAI_PROTOCOL 13
|
||||
#define EAI_MAX 14
|
||||
|
||||
/*
|
||||
* Flag values for getaddrinfo()
|
||||
*/
|
||||
#undef AI_PASSIVE
|
||||
#undef AI_CANONNAME
|
||||
#undef AI_NUMERICHOST
|
||||
|
||||
#define AI_PASSIVE 0x00000001
|
||||
#define AI_CANONNAME 0x00000002
|
||||
#define AI_NUMERICHOST 0x00000004
|
||||
|
||||
/*
|
||||
* Flag values for getipnodebyname()
|
||||
*/
|
||||
#undef AI_V4MAPPED
|
||||
#undef AI_ALL
|
||||
#undef AI_ADDRCONFIG
|
||||
#undef AI_DEFAULT
|
||||
|
||||
#define AI_V4MAPPED 0x00000008
|
||||
#define AI_ALL 0x00000010
|
||||
#define AI_ADDRCONFIG 0x00000020
|
||||
#define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG)
|
||||
|
||||
/*
|
||||
* Constants for lwres_getnameinfo()
|
||||
*/
|
||||
#undef NI_MAXHOST
|
||||
#undef NI_MAXSERV
|
||||
|
||||
#define NI_MAXHOST 1025
|
||||
#define NI_MAXSERV 32
|
||||
|
||||
/*
|
||||
* Flag values for lwres_getnameinfo()
|
||||
*/
|
||||
#undef NI_NOFQDN
|
||||
#undef NI_NUMERICHOST
|
||||
#undef NI_NAMEREQD
|
||||
#undef NI_NUMERICSERV
|
||||
#undef NI_DGRAM
|
||||
#undef NI_NUMERICSCOPE
|
||||
|
||||
#define NI_NOFQDN 0x00000001
|
||||
#define NI_NUMERICHOST 0x00000002
|
||||
#define NI_NAMEREQD 0x00000004
|
||||
#define NI_NUMERICSERV 0x00000008
|
||||
#define NI_DGRAM 0x00000010
|
||||
#define NI_NUMERICSCOPE 0x00000020 /*2553bis-00*/
|
||||
|
||||
/*
|
||||
* Define if <netdb.h> does not declare struct rrsetinfo.
|
||||
*/
|
||||
#define ISC_LWRES_NEEDRRSETINFO 1
|
||||
|
||||
#ifdef ISC_LWRES_NEEDRRSETINFO
|
||||
/*
|
||||
* Structures for getrrsetbyname()
|
||||
*/
|
||||
struct rdatainfo {
|
||||
unsigned int rdi_length;
|
||||
unsigned char *rdi_data;
|
||||
};
|
||||
|
||||
struct rrsetinfo {
|
||||
unsigned int rri_flags;
|
||||
int rri_rdclass;
|
||||
int rri_rdtype;
|
||||
unsigned int rri_ttl;
|
||||
unsigned int rri_nrdatas;
|
||||
unsigned int rri_nsigs;
|
||||
char *rri_name;
|
||||
struct rdatainfo *rri_rdatas;
|
||||
struct rdatainfo *rri_sigs;
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags for getrrsetbyname()
|
||||
*/
|
||||
#define RRSET_VALIDATED 0x00000001
|
||||
/* Set was dnssec validated */
|
||||
|
||||
/*
|
||||
* Return codes for getrrsetbyname()
|
||||
*/
|
||||
#define ERRSET_SUCCESS 0
|
||||
#define ERRSET_NOMEMORY 1
|
||||
#define ERRSET_FAIL 2
|
||||
#define ERRSET_INVAL 3
|
||||
#define ERRSET_NONAME 4
|
||||
#define ERRSET_NODATA 5
|
||||
#define ERRSET_RETRY 6
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define to map into lwres_ namespace.
|
||||
*/
|
||||
|
||||
#define LWRES_NAMESPACE
|
||||
|
||||
#ifdef LWRES_NAMESPACE
|
||||
|
||||
/*
|
||||
* Use our versions not the ones from the C library.
|
||||
*/
|
||||
|
||||
#ifdef getnameinfo
|
||||
#undef getnameinfo
|
||||
#endif
|
||||
#define getnameinfo lwres_getnameinfo
|
||||
|
||||
#ifdef getaddrinfo
|
||||
#undef getaddrinfo
|
||||
#endif
|
||||
#define getaddrinfo lwres_getaddrinfo
|
||||
|
||||
#ifdef freeaddrinfo
|
||||
#undef freeaddrinfo
|
||||
#endif
|
||||
#define freeaddrinfo lwres_freeaddrinfo
|
||||
|
||||
#ifdef gai_strerror
|
||||
#undef gai_strerror
|
||||
#endif
|
||||
#define gai_strerror lwres_gai_strerror
|
||||
|
||||
#ifdef herror
|
||||
#undef herror
|
||||
#endif
|
||||
#define herror lwres_herror
|
||||
|
||||
#ifdef hstrerror
|
||||
#undef hstrerror
|
||||
#endif
|
||||
#define hstrerror lwres_hstrerror
|
||||
|
||||
#ifdef getipnodebyname
|
||||
#undef getipnodebyname
|
||||
#endif
|
||||
#define getipnodebyname lwres_getipnodebyname
|
||||
|
||||
#ifdef getipnodebyaddr
|
||||
#undef getipnodebyaddr
|
||||
#endif
|
||||
#define getipnodebyaddr lwres_getipnodebyaddr
|
||||
|
||||
#ifdef freehostent
|
||||
#undef freehostent
|
||||
#endif
|
||||
#define freehostent lwres_freehostent
|
||||
|
||||
#ifdef gethostbyname
|
||||
#undef gethostbyname
|
||||
#endif
|
||||
#define gethostbyname lwres_gethostbyname
|
||||
|
||||
#ifdef gethostbyname2
|
||||
#undef gethostbyname2
|
||||
#endif
|
||||
#define gethostbyname2 lwres_gethostbyname2
|
||||
|
||||
#ifdef gethostbyaddr
|
||||
#undef gethostbyaddr
|
||||
#endif
|
||||
#define gethostbyaddr lwres_gethostbyaddr
|
||||
|
||||
#ifdef gethostent
|
||||
#undef gethostent
|
||||
#endif
|
||||
#define gethostent lwres_gethostent
|
||||
|
||||
#ifdef sethostent
|
||||
#undef sethostent
|
||||
#endif
|
||||
#define sethostent lwres_sethostent
|
||||
|
||||
#ifdef endhostent
|
||||
#undef endhostent
|
||||
#endif
|
||||
#define endhostent lwres_endhostent
|
||||
|
||||
/* #define sethostfile lwres_sethostfile */
|
||||
|
||||
#ifdef gethostbyname_r
|
||||
#undef gethostbyname_r
|
||||
#endif
|
||||
#define gethostbyname_r lwres_gethostbyname_r
|
||||
|
||||
#ifdef gethostbyaddr_r
|
||||
#undef gethostbyaddr_r
|
||||
#endif
|
||||
#define gethostbyaddr_r lwres_gethostbyaddr_r
|
||||
|
||||
#ifdef gethostent_r
|
||||
#undef gethostent_r
|
||||
#endif
|
||||
#define gethostent_r lwres_gethostent_r
|
||||
|
||||
#ifdef sethostent_r
|
||||
#undef sethostent_r
|
||||
#endif
|
||||
#define sethostent_r lwres_sethostent_r
|
||||
|
||||
#ifdef endhostent_r
|
||||
#undef endhostent_r
|
||||
#endif
|
||||
#define endhostent_r lwres_endhostent_r
|
||||
|
||||
#ifdef getrrsetbyname
|
||||
#undef getrrsetbyname
|
||||
#endif
|
||||
#define getrrsetbyname lwres_getrrsetbyname
|
||||
|
||||
#ifdef freerrset
|
||||
#undef freerrset
|
||||
#endif
|
||||
#define freerrset lwres_freerrset
|
||||
|
||||
#ifdef notyet
|
||||
#define getservbyname lwres_getservbyname
|
||||
#define getservbyport lwres_getservbyport
|
||||
#define getservent lwres_getservent
|
||||
#define setservent lwres_setservent
|
||||
#define endservent lwres_endservent
|
||||
|
||||
#define getservbyname_r lwres_getservbyname_r
|
||||
#define getservbyport_r lwres_getservbyport_r
|
||||
#define getservent_r lwres_getservent_r
|
||||
#define setservent_r lwres_setservent_r
|
||||
#define endservent_r lwres_endservent_r
|
||||
|
||||
#define getprotobyname lwres_getprotobyname
|
||||
#define getprotobynumber lwres_getprotobynumber
|
||||
#define getprotoent lwres_getprotoent
|
||||
#define setprotoent lwres_setprotoent
|
||||
#define endprotoent lwres_endprotoent
|
||||
|
||||
#define getprotobyname_r lwres_getprotobyname_r
|
||||
#define getprotobynumber_r lwres_getprotobynumber_r
|
||||
#define getprotoent_r lwres_getprotoent_r
|
||||
#define setprotoent_r lwres_setprotoent_r
|
||||
#define endprotoent_r lwres_endprotoent_r
|
||||
|
||||
#ifdef getnetbyname
|
||||
#undef getnetbyname
|
||||
#endif
|
||||
#define getnetbyname lwres_getnetbyname
|
||||
|
||||
#ifdef getnetbyaddr
|
||||
#undef getnetbyaddr
|
||||
#endif
|
||||
#define getnetbyaddr lwres_getnetbyaddr
|
||||
|
||||
#ifdef getnetent
|
||||
#undef getnetent
|
||||
#endif
|
||||
#define getnetent lwres_getnetent
|
||||
|
||||
#ifdef setnetent
|
||||
#undef setnetent
|
||||
#endif
|
||||
#define setnetent lwres_setnetent
|
||||
|
||||
#ifdef endnetent
|
||||
#undef endnetent
|
||||
#endif
|
||||
#define endnetent lwres_endnetent
|
||||
|
||||
|
||||
#ifdef getnetbyname_r
|
||||
#undef getnetbyname_r
|
||||
#endif
|
||||
#define getnetbyname_r lwres_getnetbyname_r
|
||||
|
||||
#ifdef getnetbyaddr_r
|
||||
#undef getnetbyaddr_r
|
||||
#endif
|
||||
#define getnetbyaddr_r lwres_getnetbyaddr_r
|
||||
|
||||
#ifdef getnetent_r
|
||||
#undef getnetent_r
|
||||
#endif
|
||||
#define getnetent_r lwres_getnetent_r
|
||||
|
||||
#ifdef setnetent_r
|
||||
#undef setnetent_r
|
||||
#endif
|
||||
#define setnetent_r lwres_setnetent_r
|
||||
|
||||
#ifdef endnetent_r
|
||||
#undef endnetent_r
|
||||
#endif
|
||||
#define endnetent_r lwres_endnetent_r
|
||||
#endif /* notyet */
|
||||
|
||||
#ifdef h_errno
|
||||
#undef h_errno
|
||||
#endif
|
||||
#define h_errno lwres_h_errno
|
||||
|
||||
#endif /* LWRES_NAMESPACE */
|
||||
|
||||
LWRES_LANG_BEGINDECLS
|
||||
|
||||
extern int lwres_h_errno;
|
||||
|
||||
int lwres_getaddrinfo(const char *, const char *,
|
||||
const struct addrinfo *, struct addrinfo **);
|
||||
int lwres_getnameinfo(const struct sockaddr *, size_t, char *,
|
||||
size_t, char *, size_t, int);
|
||||
void lwres_freeaddrinfo(struct addrinfo *);
|
||||
char *lwres_gai_strerror(int);
|
||||
|
||||
struct hostent *lwres_gethostbyaddr(const char *, int, int);
|
||||
struct hostent *lwres_gethostbyname(const char *);
|
||||
struct hostent *lwres_gethostbyname2(const char *, int);
|
||||
struct hostent *lwres_gethostent(void);
|
||||
struct hostent *lwres_getipnodebyname(const char *, int, int, int *);
|
||||
struct hostent *lwres_getipnodebyaddr(const void *, size_t, int, int *);
|
||||
void lwres_endhostent(void);
|
||||
void lwres_sethostent(int);
|
||||
/* void lwres_sethostfile(const char *); */
|
||||
void lwres_freehostent(struct hostent *);
|
||||
|
||||
int lwres_getrrsetbyname(const char *, unsigned int, unsigned int,
|
||||
unsigned int, struct rrsetinfo **);
|
||||
int lwres_getrrsetbyname_all(const char *, unsigned int,
|
||||
unsigned int,
|
||||
unsigned int, struct rrsetinfo **);
|
||||
void lwres_freerrset(struct rrsetinfo *);
|
||||
|
||||
#ifdef notyet
|
||||
struct netent *lwres_getnetbyaddr(unsigned long, int);
|
||||
struct netent *lwres_getnetbyname(const char *);
|
||||
struct netent *lwres_getnetent(void);
|
||||
void lwres_endnetent(void);
|
||||
void lwres_setnetent(int);
|
||||
|
||||
struct protoent *lwres_getprotobyname(const char *);
|
||||
struct protoent *lwres_getprotobynumber(int);
|
||||
struct protoent *lwres_getprotoent(void);
|
||||
void lwres_endprotoent(void);
|
||||
void lwres_setprotoent(int);
|
||||
|
||||
struct servent *lwres_getservbyname(const char *, const char *);
|
||||
struct servent *lwres_getservbyport(int, const char *);
|
||||
struct servent *lwres_getservent(void);
|
||||
void lwres_endservent(void);
|
||||
void lwres_setservent(int);
|
||||
#endif /* notyet */
|
||||
|
||||
void lwres_herror(const char *);
|
||||
const char *lwres_hstrerror(int);
|
||||
|
||||
|
||||
struct hostent *lwres_gethostbyaddr_r(const char *, int, int, struct hostent *,
|
||||
char *, int, int *);
|
||||
struct hostent *lwres_gethostbyname_r(const char *, struct hostent *,
|
||||
char *, int, int *);
|
||||
struct hostent *lwres_gethostent_r(struct hostent *, char *, int, int *);
|
||||
void lwres_sethostent_r(int);
|
||||
void lwres_endhostent_r(void);
|
||||
|
||||
#ifdef notyet
|
||||
struct netent *lwres_getnetbyname_r(const char *, struct netent *,
|
||||
char *, int);
|
||||
struct netent *lwres_getnetbyaddr_r(long, int, struct netent *,
|
||||
char *, int);
|
||||
struct netent *lwres_getnetent_r(struct netent *, char *, int);
|
||||
void lwres_setnetent_r(int);
|
||||
void lwres_endnetent_r(void);
|
||||
|
||||
struct protoent *lwres_getprotobyname_r(const char *,
|
||||
struct protoent *, char *, int);
|
||||
struct protoent *lwres_getprotobynumber_r(int,
|
||||
struct protoent *, char *, int);
|
||||
struct protoent *lwres_getprotoent_r(struct protoent *, char *, int);
|
||||
void lwres_setprotoent_r(int);
|
||||
void lwres_endprotoent_r(void);
|
||||
|
||||
struct servent *lwres_getservbyname_r(const char *name, const char *,
|
||||
struct servent *, char *, int);
|
||||
struct servent *lwres_getservbyport_r(int port, const char *,
|
||||
struct servent *, char *, int);
|
||||
struct servent *lwres_getservent_r(struct servent *, char *, int);
|
||||
void lwres_setservent_r(int);
|
||||
void lwres_endservent_r(void);
|
||||
#endif /* notyet */
|
||||
|
||||
LWRES_LANG_ENDDECLS
|
||||
|
||||
#ifdef notyet
|
||||
/* This is nec'y to make this include file properly replace the sun version. */
|
||||
#ifdef sun
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#include <rpc/netdb.h> /* Required. */
|
||||
#else /* !__GNU_LIBRARY__ */
|
||||
struct rpcent {
|
||||
char *r_name; /* name of server for this rpc program */
|
||||
char **r_aliases; /* alias list */
|
||||
int r_number; /* rpc program number */
|
||||
};
|
||||
struct rpcent *lwres_getrpcbyname();
|
||||
struct rpcent *lwres_getrpcbynumber(),
|
||||
struct rpcent *lwres_getrpcent();
|
||||
#endif /* __GNU_LIBRARY__ */
|
||||
#endif /* sun */
|
||||
#endif /* notyet */
|
||||
|
||||
/*
|
||||
* Tell Emacs to use C mode on this file.
|
||||
* Local variables:
|
||||
* mode: c
|
||||
* End:
|
||||
*/
|
||||
|
||||
#endif /* LWRES_NETDB_H */
|
||||
@@ -0,0 +1,518 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: netdb.h.in,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_NETDB_H
|
||||
#define LWRES_NETDB_H 1
|
||||
|
||||
#include <stddef.h> /* Required on FreeBSD (and others?) for size_t. */
|
||||
#include <netdb.h> /* Contractual provision. */
|
||||
|
||||
#include <lwres/lang.h>
|
||||
|
||||
/*
|
||||
* Define if <netdb.h> does not declare struct addrinfo.
|
||||
*/
|
||||
@ISC_LWRES_NEEDADDRINFO@
|
||||
|
||||
#ifdef ISC_LWRES_NEEDADDRINFO
|
||||
struct addrinfo {
|
||||
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
|
||||
int ai_family; /* PF_xxx */
|
||||
int ai_socktype; /* SOCK_xxx */
|
||||
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
|
||||
size_t ai_addrlen; /* Length of ai_addr */
|
||||
char *ai_canonname; /* Canonical name for hostname */
|
||||
struct sockaddr *ai_addr; /* Binary address */
|
||||
struct addrinfo *ai_next; /* Next structure in linked list */
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Undefine all #defines we are interested in as <netdb.h> may or may not have
|
||||
* defined them.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Error return codes from gethostbyname() and gethostbyaddr()
|
||||
* (left in extern int h_errno).
|
||||
*/
|
||||
|
||||
#undef NETDB_INTERNAL
|
||||
#undef NETDB_SUCCESS
|
||||
#undef HOST_NOT_FOUND
|
||||
#undef TRY_AGAIN
|
||||
#undef NO_RECOVERY
|
||||
#undef NO_DATA
|
||||
#undef NO_ADDRESS
|
||||
|
||||
#define NETDB_INTERNAL -1 /* see errno */
|
||||
#define NETDB_SUCCESS 0 /* no problem */
|
||||
#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
|
||||
#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */
|
||||
#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
|
||||
#define NO_DATA 4 /* Valid name, no data record of requested type */
|
||||
#define NO_ADDRESS NO_DATA /* no address, look for MX record */
|
||||
|
||||
/*
|
||||
* Error return codes from getaddrinfo()
|
||||
*/
|
||||
|
||||
#undef EAI_ADDRFAMILY
|
||||
#undef EAI_AGAIN
|
||||
#undef EAI_BADFLAGS
|
||||
#undef EAI_FAIL
|
||||
#undef EAI_FAMILY
|
||||
#undef EAI_MEMORY
|
||||
#undef EAI_NODATA
|
||||
#undef EAI_NONAME
|
||||
#undef EAI_SERVICE
|
||||
#undef EAI_SOCKTYPE
|
||||
#undef EAI_SYSTEM
|
||||
#undef EAI_BADHINTS
|
||||
#undef EAI_PROTOCOL
|
||||
#undef EAI_MAX
|
||||
|
||||
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
|
||||
#define EAI_AGAIN 2 /* temporary failure in name resolution */
|
||||
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
|
||||
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
|
||||
#define EAI_FAMILY 5 /* ai_family not supported */
|
||||
#define EAI_MEMORY 6 /* memory allocation failure */
|
||||
#define EAI_NODATA 7 /* no address associated with hostname */
|
||||
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
|
||||
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
|
||||
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
|
||||
#define EAI_SYSTEM 11 /* system error returned in errno */
|
||||
#define EAI_BADHINTS 12
|
||||
#define EAI_PROTOCOL 13
|
||||
#define EAI_MAX 14
|
||||
|
||||
/*
|
||||
* Flag values for getaddrinfo()
|
||||
*/
|
||||
#undef AI_PASSIVE
|
||||
#undef AI_CANONNAME
|
||||
#undef AI_NUMERICHOST
|
||||
|
||||
#define AI_PASSIVE 0x00000001
|
||||
#define AI_CANONNAME 0x00000002
|
||||
#define AI_NUMERICHOST 0x00000004
|
||||
|
||||
/*
|
||||
* Flag values for getipnodebyname()
|
||||
*/
|
||||
#undef AI_V4MAPPED
|
||||
#undef AI_ALL
|
||||
#undef AI_ADDRCONFIG
|
||||
#undef AI_DEFAULT
|
||||
|
||||
#define AI_V4MAPPED 0x00000008
|
||||
#define AI_ALL 0x00000010
|
||||
#define AI_ADDRCONFIG 0x00000020
|
||||
#define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG)
|
||||
|
||||
/*
|
||||
* Constants for lwres_getnameinfo()
|
||||
*/
|
||||
#undef NI_MAXHOST
|
||||
#undef NI_MAXSERV
|
||||
|
||||
#define NI_MAXHOST 1025
|
||||
#define NI_MAXSERV 32
|
||||
|
||||
/*
|
||||
* Flag values for lwres_getnameinfo()
|
||||
*/
|
||||
#undef NI_NOFQDN
|
||||
#undef NI_NUMERICHOST
|
||||
#undef NI_NAMEREQD
|
||||
#undef NI_NUMERICSERV
|
||||
#undef NI_DGRAM
|
||||
#undef NI_NUMERICSCOPE
|
||||
|
||||
#define NI_NOFQDN 0x00000001
|
||||
#define NI_NUMERICHOST 0x00000002
|
||||
#define NI_NAMEREQD 0x00000004
|
||||
#define NI_NUMERICSERV 0x00000008
|
||||
#define NI_DGRAM 0x00000010
|
||||
#define NI_NUMERICSCOPE 0x00000020 /*2553bis-00*/
|
||||
|
||||
/*
|
||||
* Define if <netdb.h> does not declare struct rrsetinfo.
|
||||
*/
|
||||
@ISC_LWRES_NEEDRRSETINFO@
|
||||
|
||||
#ifdef ISC_LWRES_NEEDRRSETINFO
|
||||
/*
|
||||
* Structures for getrrsetbyname()
|
||||
*/
|
||||
struct rdatainfo {
|
||||
unsigned int rdi_length;
|
||||
unsigned char *rdi_data;
|
||||
};
|
||||
|
||||
struct rrsetinfo {
|
||||
unsigned int rri_flags;
|
||||
int rri_rdclass;
|
||||
int rri_rdtype;
|
||||
unsigned int rri_ttl;
|
||||
unsigned int rri_nrdatas;
|
||||
unsigned int rri_nsigs;
|
||||
char *rri_name;
|
||||
struct rdatainfo *rri_rdatas;
|
||||
struct rdatainfo *rri_sigs;
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags for getrrsetbyname()
|
||||
*/
|
||||
#define RRSET_VALIDATED 0x00000001
|
||||
/* Set was dnssec validated */
|
||||
|
||||
/*
|
||||
* Return codes for getrrsetbyname()
|
||||
*/
|
||||
#define ERRSET_SUCCESS 0
|
||||
#define ERRSET_NOMEMORY 1
|
||||
#define ERRSET_FAIL 2
|
||||
#define ERRSET_INVAL 3
|
||||
#define ERRSET_NONAME 4
|
||||
#define ERRSET_NODATA 5
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define to map into lwres_ namespace.
|
||||
*/
|
||||
|
||||
#define LWRES_NAMESPACE
|
||||
|
||||
#ifdef LWRES_NAMESPACE
|
||||
|
||||
/*
|
||||
* Use our versions not the ones from the C library.
|
||||
*/
|
||||
|
||||
#ifdef getnameinfo
|
||||
#undef getnameinfo
|
||||
#endif
|
||||
#define getnameinfo lwres_getnameinfo
|
||||
|
||||
#ifdef getaddrinfo
|
||||
#undef getaddrinfo
|
||||
#endif
|
||||
#define getaddrinfo lwres_getaddrinfo
|
||||
|
||||
#ifdef freeaddrinfo
|
||||
#undef freeaddrinfo
|
||||
#endif
|
||||
#define freeaddrinfo lwres_freeaddrinfo
|
||||
|
||||
#ifdef gai_strerror
|
||||
#undef gai_strerror
|
||||
#endif
|
||||
#define gai_strerror lwres_gai_strerror
|
||||
|
||||
#ifdef herror
|
||||
#undef herror
|
||||
#endif
|
||||
#define herror lwres_herror
|
||||
|
||||
#ifdef hstrerror
|
||||
#undef hstrerror
|
||||
#endif
|
||||
#define hstrerror lwres_hstrerror
|
||||
|
||||
#ifdef getipnodebyname
|
||||
#undef getipnodebyname
|
||||
#endif
|
||||
#define getipnodebyname lwres_getipnodebyname
|
||||
|
||||
#ifdef getipnodebyaddr
|
||||
#undef getipnodebyaddr
|
||||
#endif
|
||||
#define getipnodebyaddr lwres_getipnodebyaddr
|
||||
|
||||
#ifdef freehostent
|
||||
#undef freehostent
|
||||
#endif
|
||||
#define freehostent lwres_freehostent
|
||||
|
||||
#ifdef gethostbyname
|
||||
#undef gethostbyname
|
||||
#endif
|
||||
#define gethostbyname lwres_gethostbyname
|
||||
|
||||
#ifdef gethostbyname2
|
||||
#undef gethostbyname2
|
||||
#endif
|
||||
#define gethostbyname2 lwres_gethostbyname2
|
||||
|
||||
#ifdef gethostbyaddr
|
||||
#undef gethostbyaddr
|
||||
#endif
|
||||
#define gethostbyaddr lwres_gethostbyaddr
|
||||
|
||||
#ifdef gethostent
|
||||
#undef gethostent
|
||||
#endif
|
||||
#define gethostent lwres_gethostent
|
||||
|
||||
#ifdef sethostent
|
||||
#undef sethostent
|
||||
#endif
|
||||
#define sethostent lwres_sethostent
|
||||
|
||||
#ifdef endhostent
|
||||
#undef endhostent
|
||||
#endif
|
||||
#define endhostent lwres_endhostent
|
||||
|
||||
/* #define sethostfile lwres_sethostfile */
|
||||
|
||||
#ifdef gethostbyname_r
|
||||
#undef gethostbyname_r
|
||||
#endif
|
||||
#define gethostbyname_r lwres_gethostbyname_r
|
||||
|
||||
#ifdef gethostbyaddr_r
|
||||
#undef gethostbyaddr_r
|
||||
#endif
|
||||
#define gethostbyaddr_r lwres_gethostbyaddr_r
|
||||
|
||||
#ifdef gethostent_r
|
||||
#undef gethostent_r
|
||||
#endif
|
||||
#define gethostent_r lwres_gethostent_r
|
||||
|
||||
#ifdef sethostent_r
|
||||
#undef sethostent_r
|
||||
#endif
|
||||
#define sethostent_r lwres_sethostent_r
|
||||
|
||||
#ifdef endhostent_r
|
||||
#undef endhostent_r
|
||||
#endif
|
||||
#define endhostent_r lwres_endhostent_r
|
||||
|
||||
#ifdef getrrsetbyname
|
||||
#undef getrrsetbyname
|
||||
#endif
|
||||
#define getrrsetbyname lwres_getrrsetbyname
|
||||
|
||||
#ifdef freerrset
|
||||
#undef freerrset
|
||||
#endif
|
||||
#define freerrset lwres_freerrset
|
||||
|
||||
#ifdef notyet
|
||||
#define getservbyname lwres_getservbyname
|
||||
#define getservbyport lwres_getservbyport
|
||||
#define getservent lwres_getservent
|
||||
#define setservent lwres_setservent
|
||||
#define endservent lwres_endservent
|
||||
|
||||
#define getservbyname_r lwres_getservbyname_r
|
||||
#define getservbyport_r lwres_getservbyport_r
|
||||
#define getservent_r lwres_getservent_r
|
||||
#define setservent_r lwres_setservent_r
|
||||
#define endservent_r lwres_endservent_r
|
||||
|
||||
#define getprotobyname lwres_getprotobyname
|
||||
#define getprotobynumber lwres_getprotobynumber
|
||||
#define getprotoent lwres_getprotoent
|
||||
#define setprotoent lwres_setprotoent
|
||||
#define endprotoent lwres_endprotoent
|
||||
|
||||
#define getprotobyname_r lwres_getprotobyname_r
|
||||
#define getprotobynumber_r lwres_getprotobynumber_r
|
||||
#define getprotoent_r lwres_getprotoent_r
|
||||
#define setprotoent_r lwres_setprotoent_r
|
||||
#define endprotoent_r lwres_endprotoent_r
|
||||
|
||||
#ifdef getnetbyname
|
||||
#undef getnetbyname
|
||||
#endif
|
||||
#define getnetbyname lwres_getnetbyname
|
||||
|
||||
#ifdef getnetbyaddr
|
||||
#undef getnetbyaddr
|
||||
#endif
|
||||
#define getnetbyaddr lwres_getnetbyaddr
|
||||
|
||||
#ifdef getnetent
|
||||
#undef getnetent
|
||||
#endif
|
||||
#define getnetent lwres_getnetent
|
||||
|
||||
#ifdef setnetent
|
||||
#undef setnetent
|
||||
#endif
|
||||
#define setnetent lwres_setnetent
|
||||
|
||||
#ifdef endnetent
|
||||
#undef endnetent
|
||||
#endif
|
||||
#define endnetent lwres_endnetent
|
||||
|
||||
|
||||
#ifdef getnetbyname_r
|
||||
#undef getnetbyname_r
|
||||
#endif
|
||||
#define getnetbyname_r lwres_getnetbyname_r
|
||||
|
||||
#ifdef getnetbyaddr_r
|
||||
#undef getnetbyaddr_r
|
||||
#endif
|
||||
#define getnetbyaddr_r lwres_getnetbyaddr_r
|
||||
|
||||
#ifdef getnetent_r
|
||||
#undef getnetent_r
|
||||
#endif
|
||||
#define getnetent_r lwres_getnetent_r
|
||||
|
||||
#ifdef setnetent_r
|
||||
#undef setnetent_r
|
||||
#endif
|
||||
#define setnetent_r lwres_setnetent_r
|
||||
|
||||
#ifdef endnetent_r
|
||||
#undef endnetent_r
|
||||
#endif
|
||||
#define endnetent_r lwres_endnetent_r
|
||||
#endif /* notyet */
|
||||
|
||||
#ifdef h_errno
|
||||
#undef h_errno
|
||||
#endif
|
||||
#define h_errno lwres_h_errno
|
||||
|
||||
#endif /* LWRES_NAMESPACE */
|
||||
|
||||
LWRES_LANG_BEGINDECLS
|
||||
|
||||
extern int lwres_h_errno;
|
||||
|
||||
int lwres_getaddrinfo(const char *, const char *,
|
||||
const struct addrinfo *, struct addrinfo **);
|
||||
int lwres_getnameinfo(const struct sockaddr *, size_t, char *,
|
||||
size_t, char *, size_t, int);
|
||||
void lwres_freeaddrinfo(struct addrinfo *);
|
||||
char *lwres_gai_strerror(int);
|
||||
|
||||
struct hostent *lwres_gethostbyaddr(const char *, int, int);
|
||||
struct hostent *lwres_gethostbyname(const char *);
|
||||
struct hostent *lwres_gethostbyname2(const char *, int);
|
||||
struct hostent *lwres_gethostent(void);
|
||||
struct hostent *lwres_getipnodebyname(const char *, int, int, int *);
|
||||
struct hostent *lwres_getipnodebyaddr(const void *, size_t, int, int *);
|
||||
void lwres_endhostent(void);
|
||||
void lwres_sethostent(int);
|
||||
/* void lwres_sethostfile(const char *); */
|
||||
void lwres_freehostent(struct hostent *);
|
||||
|
||||
int lwres_getrrsetbyname(const char *, unsigned int, unsigned int,
|
||||
unsigned int, struct rrsetinfo **);
|
||||
void lwres_freerrset(struct rrsetinfo *);
|
||||
|
||||
#ifdef notyet
|
||||
struct netent *lwres_getnetbyaddr(unsigned long, int);
|
||||
struct netent *lwres_getnetbyname(const char *);
|
||||
struct netent *lwres_getnetent(void);
|
||||
void lwres_endnetent(void);
|
||||
void lwres_setnetent(int);
|
||||
|
||||
struct protoent *lwres_getprotobyname(const char *);
|
||||
struct protoent *lwres_getprotobynumber(int);
|
||||
struct protoent *lwres_getprotoent(void);
|
||||
void lwres_endprotoent(void);
|
||||
void lwres_setprotoent(int);
|
||||
|
||||
struct servent *lwres_getservbyname(const char *, const char *);
|
||||
struct servent *lwres_getservbyport(int, const char *);
|
||||
struct servent *lwres_getservent(void);
|
||||
void lwres_endservent(void);
|
||||
void lwres_setservent(int);
|
||||
#endif /* notyet */
|
||||
|
||||
void lwres_herror(const char *);
|
||||
const char *lwres_hstrerror(int);
|
||||
|
||||
|
||||
struct hostent *lwres_gethostbyaddr_r(const char *, int, int, struct hostent *,
|
||||
char *, int, int *);
|
||||
struct hostent *lwres_gethostbyname_r(const char *, struct hostent *,
|
||||
char *, int, int *);
|
||||
struct hostent *lwres_gethostent_r(struct hostent *, char *, int, int *);
|
||||
void lwres_sethostent_r(int);
|
||||
void lwres_endhostent_r(void);
|
||||
|
||||
#ifdef notyet
|
||||
struct netent *lwres_getnetbyname_r(const char *, struct netent *,
|
||||
char *, int);
|
||||
struct netent *lwres_getnetbyaddr_r(long, int, struct netent *,
|
||||
char *, int);
|
||||
struct netent *lwres_getnetent_r(struct netent *, char *, int);
|
||||
void lwres_setnetent_r(int);
|
||||
void lwres_endnetent_r(void);
|
||||
|
||||
struct protoent *lwres_getprotobyname_r(const char *,
|
||||
struct protoent *, char *, int);
|
||||
struct protoent *lwres_getprotobynumber_r(int,
|
||||
struct protoent *, char *, int);
|
||||
struct protoent *lwres_getprotoent_r(struct protoent *, char *, int);
|
||||
void lwres_setprotoent_r(int);
|
||||
void lwres_endprotoent_r(void);
|
||||
|
||||
struct servent *lwres_getservbyname_r(const char *name, const char *,
|
||||
struct servent *, char *, int);
|
||||
struct servent *lwres_getservbyport_r(int port, const char *,
|
||||
struct servent *, char *, int);
|
||||
struct servent *lwres_getservent_r(struct servent *, char *, int);
|
||||
void lwres_setservent_r(int);
|
||||
void lwres_endservent_r(void);
|
||||
#endif /* notyet */
|
||||
|
||||
LWRES_LANG_ENDDECLS
|
||||
|
||||
#ifdef notyet
|
||||
/* This is nec'y to make this include file properly replace the sun version. */
|
||||
#ifdef sun
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#include <rpc/netdb.h> /* Required. */
|
||||
#else /* !__GNU_LIBRARY__ */
|
||||
struct rpcent {
|
||||
char *r_name; /* name of server for this rpc program */
|
||||
char **r_aliases; /* alias list */
|
||||
int r_number; /* rpc program number */
|
||||
};
|
||||
struct rpcent *lwres_getrpcbyname();
|
||||
struct rpcent *lwres_getrpcbynumber(),
|
||||
struct rpcent *lwres_getrpcent();
|
||||
#endif /* __GNU_LIBRARY__ */
|
||||
#endif /* sun */
|
||||
#endif /* notyet */
|
||||
|
||||
/*
|
||||
* Tell Emacs to use C mode on this file.
|
||||
* Local variables:
|
||||
* mode: c
|
||||
* End:
|
||||
*/
|
||||
|
||||
#endif /* LWRES_NETDB_H */
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: platform.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_PLATFORM_H
|
||||
#define LWRES_PLATFORM_H 1
|
||||
|
||||
/*****
|
||||
***** Platform-dependent defines.
|
||||
*****/
|
||||
|
||||
/***
|
||||
*** Network.
|
||||
***/
|
||||
|
||||
/*
|
||||
* Define if this system needs the <netinet/in6.h> header file for IPv6.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_NEEDNETINETIN6H
|
||||
|
||||
/*
|
||||
* Define if this system needs the <netinet6/in6.h> header file for IPv6.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_NEEDNETINET6IN6H
|
||||
|
||||
/*
|
||||
* If sockaddrs on this system have an sa_len field, LWRES_PLATFORM_HAVESALEN
|
||||
* will be defined.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_HAVESALEN
|
||||
|
||||
/*
|
||||
* If this system has the IPv6 structure definitions, LWRES_PLATFORM_HAVEIPV6
|
||||
* will be defined.
|
||||
*/
|
||||
#define LWRES_PLATFORM_HAVEIPV6 1
|
||||
|
||||
/*
|
||||
* If this system is missing in6addr_any, LWRES_PLATFORM_NEEDIN6ADDRANY will
|
||||
* be defined.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_NEEDIN6ADDRANY
|
||||
|
||||
/*
|
||||
* If this system is missing in6addr_loopback,
|
||||
* LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK will be defined.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK
|
||||
|
||||
/*
|
||||
* If this system has in_addr6, rather than in6_addr,
|
||||
* LWRES_PLATFORM_HAVEINADDR6 will be defined.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_HAVEINADDR6
|
||||
|
||||
/*
|
||||
* Defined if unistd.h does not cause fd_set to be delared.
|
||||
*/
|
||||
#define LWRES_PLATFORM_NEEDSYSSELECTH 1
|
||||
|
||||
/*
|
||||
* Used to control how extern data is linked; needed for Win32 platforms.
|
||||
*/
|
||||
#undef LWRES_PLATFORM_USEDECLSPEC
|
||||
|
||||
#ifndef LWRES_PLATFORM_USEDECLSPEC
|
||||
#define LIBLWRES_EXTERNAL_DATA
|
||||
#else
|
||||
#ifdef LIBLWRES_EXPORTS
|
||||
#define LIBLWRES_EXTERNAL_DATA __declspec(dllexport)
|
||||
#else
|
||||
#define LIBLWRES_EXTERNAL_DATA __declspec(dllimport)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* LWRES_PLATFORM_H */
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: platform.h.in,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_PLATFORM_H
|
||||
#define LWRES_PLATFORM_H 1
|
||||
|
||||
/*****
|
||||
***** Platform-dependent defines.
|
||||
*****/
|
||||
|
||||
/***
|
||||
*** Network.
|
||||
***/
|
||||
|
||||
/*
|
||||
* Define if this system needs the <netinet/in6.h> header file for IPv6.
|
||||
*/
|
||||
@LWRES_PLATFORM_NEEDNETINETIN6H@
|
||||
|
||||
/*
|
||||
* Define if this system needs the <netinet6/in6.h> header file for IPv6.
|
||||
*/
|
||||
@LWRES_PLATFORM_NEEDNETINET6IN6H@
|
||||
|
||||
/*
|
||||
* If sockaddrs on this system have an sa_len field, LWRES_PLATFORM_HAVESALEN
|
||||
* will be defined.
|
||||
*/
|
||||
@LWRES_PLATFORM_HAVESALEN@
|
||||
|
||||
/*
|
||||
* If this system has the IPv6 structure definitions, LWRES_PLATFORM_HAVEIPV6
|
||||
* will be defined.
|
||||
*/
|
||||
@LWRES_PLATFORM_HAVEIPV6@
|
||||
|
||||
/*
|
||||
* If this system is missing in6addr_any, LWRES_PLATFORM_NEEDIN6ADDRANY will
|
||||
* be defined.
|
||||
*/
|
||||
@LWRES_PLATFORM_NEEDIN6ADDRANY@
|
||||
|
||||
/*
|
||||
* If this system is missing in6addr_loopback,
|
||||
* LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK will be defined.
|
||||
*/
|
||||
@LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK@
|
||||
|
||||
/*
|
||||
* If this system has in_addr6, rather than in6_addr,
|
||||
* LWRES_PLATFORM_HAVEINADDR6 will be defined.
|
||||
*/
|
||||
@LWRES_PLATFORM_HAVEINADDR6@
|
||||
|
||||
/*
|
||||
* Defined if unistd.h does not cause fd_set to be delared.
|
||||
*/
|
||||
@LWRES_PLATFORM_NEEDSYSSELECTH@
|
||||
|
||||
/*
|
||||
* Used to control how extern data is linked; needed for Win32 platforms.
|
||||
*/
|
||||
@LWRES_PLATFORM_USEDECLSPEC@
|
||||
|
||||
#ifndef LWRES_PLATFORM_USEDECLSPEC
|
||||
#define LIBLWRES_EXTERNAL_DATA
|
||||
#else
|
||||
#ifdef LIBLWRES_EXPORTS
|
||||
#define LIBLWRES_EXTERNAL_DATA __declspec(dllexport)
|
||||
#else
|
||||
#define LIBLWRES_EXTERNAL_DATA __declspec(dllimport)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* LWRES_PLATFORM_H */
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: result.h,v 1.1 2004/03/15 20:35:25 as Exp $ */
|
||||
|
||||
#ifndef LWRES_RESULT_H
|
||||
#define LWRES_RESULT_H 1
|
||||
|
||||
typedef unsigned int lwres_result_t;
|
||||
|
||||
#define LWRES_R_SUCCESS 0
|
||||
#define LWRES_R_NOMEMORY 1
|
||||
#define LWRES_R_TIMEOUT 2
|
||||
#define LWRES_R_NOTFOUND 3
|
||||
#define LWRES_R_UNEXPECTEDEND 4 /* unexpected end of input */
|
||||
#define LWRES_R_FAILURE 5 /* generic failure */
|
||||
#define LWRES_R_IOERROR 6
|
||||
#define LWRES_R_NOTIMPLEMENTED 7
|
||||
#define LWRES_R_UNEXPECTED 8
|
||||
#define LWRES_R_TRAILINGDATA 9
|
||||
#define LWRES_R_INCOMPLETE 10
|
||||
#define LWRES_R_RETRY 11
|
||||
#define LWRES_R_TYPENOTFOUND 12
|
||||
#define LWRES_R_TOOLARGE 13
|
||||
|
||||
#endif /* LWRES_RESULT_H */
|
||||
Reference in New Issue
Block a user