lwres_context.docbook revision c1a883f2e04d94e99c433b1f6cfd0c0338f4ed85
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews [<!ENTITY mdash "—">]>
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley - Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - Permission to use, copy, modify, and distribute this software for any
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews - purpose with or without fee is hereby granted, provided that the above
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews - copyright notice and this permission notice appear in all copies.
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
d71e2e0c61df16ff37c9934c371a4a60c08974f7Mark Andrews - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - PERFORMANCE OF THIS SOFTWARE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<!-- $Id: lwres_context.docbook,v 1.10 2007/01/29 23:57:22 marka Exp $ -->
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refentryinfo>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refentryinfo>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </copyright>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </copyright>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refnamediv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refpurpose>lightweight resolver context management</refpurpose>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refnamediv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refsynopsisdiv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <funcsynopsis>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcsynopsisinfo>#include <lwres/lwres.h></funcsynopsisinfo>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_create</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t **<parameter>contextp</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>void *<parameter>arg</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_malloc_t <parameter>malloc_function</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_free_t <parameter>free_function</parameter></paramdef>
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_destroy</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t **<parameter>contextp</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_initserial</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_uint32_t <parameter>serial</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_uint32_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_nextserial</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_freemem</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>void *<parameter>mem</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>size_t <parameter>len</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_allocmem</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>size_t <parameter>len</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_context_sendrecv</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>void *<parameter>sendbase</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>int <parameter>sendlen</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>void *<parameter>recvbase</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>int <parameter>recvlen</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>int *<parameter>recvd_len</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein</funcsynopsis>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refsynopsisdiv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <para><function>lwres_context_create()</function>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein creates a <type>lwres_context_t</type> structure for use in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lightweight resolver operations. It holds a socket and other
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein data needed for communicating with a resolver daemon. The new
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <type>lwres_context_t</type> is returned through
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <type>lwres_context_t</type> pointer must initially be NULL, and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein is modified to point to the newly created
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein When the lightweight resolver needs to perform dynamic memory
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein allocation, it will call
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to allocate memory and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein to free it. If
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein are NULL, memory is allocated using
d71e2e0c61df16ff37c9934c371a4a60c08974f7Mark Andrews <citerefentry>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refentrytitle>malloc</refentrytitle><manvolnum>3</manvolnum>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </citerefentry>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <citerefentry>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refentrytitle>free</refentrytitle><manvolnum>3</manvolnum>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </citerefentry>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein It is not permitted to have a NULL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>malloc_function</parameter> and a non-NULL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>free_function</parameter> or vice versa.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>arg</parameter> is passed as the first parameter to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the memory allocation functions. If
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>arg</parameter> is unused and should be passed as
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Once memory for the structure has been allocated,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein it is initialized using
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <citerefentry>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refentrytitle>lwres_conf_init</refentrytitle><manvolnum>3</manvolnum>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </citerefentry>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein and returned via <parameter>*contextp</parameter>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <para><function>lwres_context_destroy()</function>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein destroys a <type>lwres_context_t</type>, closing its socket.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>contextp</parameter> is a pointer to a pointer to the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein context that is to be destroyed. The pointer will be set to
d71e2e0c61df16ff37c9934c371a4a60c08974f7Mark Andrews NULL when the context has been destroyed.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The context holds a serial number that is used to identify
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein resolver request packets and associate responses with the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein corresponding requests. This serial number is controlled using
d71e2e0c61df16ff37c9934c371a4a60c08974f7Mark Andrews <function>lwres_context_initserial()</function> and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <function>lwres_context_nextserial()</function>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <function>lwres_context_initserial()</function> sets the serial
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein number for context <parameter>*ctx</parameter> to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <function>lwres_context_nextserial()</function> increments the