1 /* 2 * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 2000, 2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /* $Id: context.h,v 1.23 2008/12/17 23:47:58 tbox Exp $ */ 19 20 #ifndef LWRES_CONTEXT_H 21 #define LWRES_CONTEXT_H 1 22 23 /*! \file lwres/context.h */ 24 25 #include <stddef.h> 26 27 #include <lwres/lang.h> 28 #include <lwres/int.h> 29 #include <lwres/result.h> 30 31 /*! 32 * Used to set various options such as timeout, authentication, etc 33 */ 34 typedef struct lwres_context lwres_context_t; 35 36 LWRES_LANG_BEGINDECLS 37 38 typedef void *(*lwres_malloc_t)(void *arg, size_t length); 39 typedef void (*lwres_free_t)(void *arg, void *mem, size_t length); 40 41 /* 42 * XXXMLG 43 * 44 * Make the server reload /etc/resolv.conf periodically. 45 * 46 * Make the server do sortlist/searchlist. 47 * 48 * Client side can disable the search/sortlist processing. 49 * 50 * Use an array of addresses/masks and searchlist for client-side, and 51 * if added to the client disable the processing on the server. 52 * 53 * Share /etc/resolv.conf data between contexts. 54 */ 55 56 /*! 57 * _SERVERMODE 58 * Don't allocate and connect a socket to the server, since the 59 * caller _is_ a server. 60 * 61 * _USEIPV4, _USEIPV6 62 * Use IPv4 and IPv6 transactions with remote servers, respectively. 63 * For backward compatibility, regard both flags as being set when both 64 * are cleared. 65 */ 66 #define LWRES_CONTEXT_SERVERMODE 0x00000001U 67 #define LWRES_CONTEXT_USEIPV4 0x00000002U 68 #define LWRES_CONTEXT_USEIPV6 0x00000004U 69 70 lwres_result_t 71 lwres_context_create(lwres_context_t **contextp, void *arg, 72 lwres_malloc_t malloc_function, 73 lwres_free_t free_function, 74 unsigned int flags); 75 /**< 76 * Allocate a lwres context. This is used in all lwres calls. 77 * 78 * Memory management can be replaced here by passing in two functions. 79 * If one is non-NULL, they must both be non-NULL. "arg" is passed to 80 * these functions. 81 * 82 * Contexts are not thread safe. Document at the top of the file. 83 * XXXMLG 84 * 85 * If they are NULL, the standard malloc() and free() will be used. 86 * 87 *\pre contextp != NULL && contextp == NULL. 88 * 89 *\return Returns 0 on success, non-zero on failure. 90 */ 91 92 void 93 lwres_context_destroy(lwres_context_t **contextp); 94 /**< 95 * Frees all memory associated with a lwres context. 96 * 97 *\pre contextp != NULL && contextp == NULL. 98 */ 99 100 lwres_uint32_t 101 lwres_context_nextserial(lwres_context_t *ctx); 102 /**< 103 * XXXMLG Document 104 */ 105 106 void 107 lwres_context_initserial(lwres_context_t *ctx, lwres_uint32_t serial); 108 109 void 110 lwres_context_freemem(lwres_context_t *ctx, void *mem, size_t len); 111 112 void * 113 lwres_context_allocmem(lwres_context_t *ctx, size_t len); 114 115 int 116 lwres_context_getsocket(lwres_context_t *ctx); 117 118 lwres_result_t 119 lwres_context_send(lwres_context_t *ctx, 120 void *sendbase, int sendlen); 121 122 lwres_result_t 123 lwres_context_recv(lwres_context_t *ctx, 124 void *recvbase, int recvlen, 125 int *recvd_len); 126 127 lwres_result_t 128 lwres_context_sendrecv(lwres_context_t *ctx, 129 void *sendbase, int sendlen, 130 void *recvbase, int recvlen, 131 int *recvd_len); 132 133 LWRES_LANG_ENDDECLS 134 135 #endif /* LWRES_CONTEXT_H */ 136 137