lwres_context.html revision ddccd5811feff696ba460dabfb666ce61040f545
2390N/A<!--
2390N/A - Copyright (C) 2000, 2001 Internet Software Consortium.
2390N/A -
2390N/A - Permission to use, copy, modify, and distribute this software for any
2390N/A - purpose with or without fee is hereby granted, provided that the above
2390N/A - copyright notice and this permission notice appear in all copies.
2390N/A -
2390N/A - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
6983N/A - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
6983N/A - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
2390N/A - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
2390N/A - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
2390N/A - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
2390N/A - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
6983N/A - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
6983N/A-->
6983N/A<HTML
6983N/A><HEAD
2390N/A><TITLE
2390N/A>lwres_context</TITLE
2390N/A><META
2390N/ANAME="GENERATOR"
2390N/ACONTENT="Modular DocBook HTML Stylesheet Version 1.61
4303N/A"></HEAD
2390N/A><BODY
2390N/ACLASS="REFENTRY"
2390N/ABGCOLOR="#FFFFFF"
2390N/ATEXT="#000000"
2390N/ALINK="#0000FF"
2390N/AVLINK="#840084"
2390N/AALINK="#0000FF"
2390N/A><H1
2390N/A><A
2390N/ANAME="AEN1"
2390N/A>lwres_context</A
2390N/A></H1
2390N/A><DIV
2390N/ACLASS="REFNAMEDIV"
2390N/A><A
2390N/ANAME="AEN8"
2390N/A></A
2390N/A><H2
2390N/A>Name</H2
2390N/A>lwres_context_create, lwres_context_destroy, lwres_context_nextserial, lwres_context_initserial, lwres_context_freemem, lwres_context_allocmem, lwres_context_sendrecv&nbsp;--&nbsp;lightweight resolver context management</DIV
2899N/A><DIV
2390N/ACLASS="REFSYNOPSISDIV"
2390N/A><A
2390N/ANAME="AEN17"
2390N/A></A
2390N/A><H2
2390N/A>Synopsis</H2
2390N/A><DIV
2390N/ACLASS="FUNCSYNOPSIS"
2390N/A><A
2390N/ANAME="AEN18"
2390N/A></A
2390N/A><P
2390N/A></P
2390N/A><PRE
2390N/ACLASS="FUNCSYNOPSISINFO"
2390N/A>#include &lt;lwres/lwres.h&gt;</PRE
2390N/A><P
2390N/A><CODE
2390N/A><CODE
2390N/ACLASS="FUNCDEF"
2390N/A>lwres_result_t
2390N/Alwres_context_create</CODE
2390N/A>(lwres_context_t **contextp, void *arg, lwres_malloc_t malloc_function, lwres_free_t free_function);</CODE
2390N/A></P
2390N/A><P
2390N/A><CODE
2390N/A><CODE
2390N/ACLASS="FUNCDEF"
2390N/A>lwres_result_t
2390N/Alwres_context_destroy</CODE
2390N/A>(lwres_context_t **contextp);</CODE
2390N/A></P
2390N/A><P
2390N/A><CODE
2390N/A><CODE
2390N/ACLASS="FUNCDEF"
2390N/A>void
2390N/Alwres_context_initserial</CODE
2390N/A>(lwres_context_t *ctx, lwres_uint32_t serial);</CODE
2390N/A></P
2390N/A><P
2390N/A><CODE
2390N/A><CODE
2390N/ACLASS="FUNCDEF"
2390N/A>lwres_uint32_t
2390N/Alwres_context_nextserial</CODE
2390N/A>(lwres_context_t *ctx);</CODE
2390N/A></P
2390N/A><P
2390N/A><CODE
2390N/A><CODE
2390N/ACLASS="FUNCDEF"
2390N/A>void
2390N/Alwres_context_freemem</CODE
2390N/A>(lwres_context_t *ctx, void *mem, size_t len);</CODE
2390N/A></P
2390N/A><P
2390N/A><CODE
2390N/A><CODE
2390N/ACLASS="FUNCDEF"
2390N/A>void
2390N/Alwres_context_allocmem</CODE
2390N/A>(lwres_context_t *ctx, size_t len);</CODE
2390N/A></P
2390N/A><P
2390N/A><CODE
2908N/A><CODE
2908N/ACLASS="FUNCDEF"
2908N/A>void *
2390N/Alwres_context_sendrecv</CODE
2390N/A>(lwres_context_t *ctx, void *sendbase, int sendlen, void *recvbase, int recvlen, int *recvd_len);</CODE
2390N/A></P
2390N/A><P
2390N/A></P
2390N/A></DIV
2390N/A></DIV
2390N/A><DIV
2390N/ACLASS="REFSECT1"
2390N/A><A
2390N/ANAME="AEN60"
2390N/A></A
2390N/A><H2
2908N/A>DESCRIPTION</H2
2390N/A><P
2390N/A><TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_create()</TT
2390N/A>
2390N/Acreates a
2390N/A<SPAN
2390N/ACLASS="TYPE"
2390N/A>lwres_context_t</SPAN
2390N/A>
2390N/Astructure for use in lightweight resolver operations.
2899N/AIt holds a socket and other data needed for communicating
2899N/Awith a resolver daemon.
2899N/AThe new
2899N/A<SPAN
2899N/ACLASS="TYPE"
3824N/A>lwres_context_t</SPAN
3824N/A>
2899N/Ais returned throught
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>contextp</I
2390N/A></TT
2390N/A>,
2390N/A
2390N/Aa pointer to a
2390N/A<SPAN
2390N/ACLASS="TYPE"
2390N/A>lwres_context_t</SPAN
2390N/A>
2390N/Apointer. This
2390N/A<SPAN
2390N/ACLASS="TYPE"
2390N/A>lwres_context_t</SPAN
2390N/A>
2390N/Apointer must initially be NULL, and is modified
2390N/Ato point to the newly created
2390N/A<SPAN
2390N/ACLASS="TYPE"
2390N/A>lwres_context_t</SPAN
2390N/A>.&#13;</P
2390N/A><P
2390N/A>When the lightweight resolver needs to perform dynamic memory
2390N/Aallocation, it will call
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>malloc_function</I
2390N/A></TT
2390N/A>
2390N/Ato allocate memory and
2390N/A<TT
4495N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>free_function</I
2390N/A></TT
2390N/A>
2390N/A
2390N/Ato free it. If
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>malloc_function</I
2390N/A></TT
2390N/A>
2390N/Aand
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>free_function</I
2390N/A></TT
2390N/A>
2390N/A
2390N/Aare NULL, memory is allocated using
2390N/A.Xr malloc 3
2390N/Aand
2390N/A<SPAN
2390N/ACLASS="CITEREFENTRY"
2390N/A><SPAN
2390N/ACLASS="REFENTRYTITLE"
2390N/A>free</SPAN
2390N/A>(3)</SPAN
2390N/A>.
2390N/A
2390N/AIt is not permitted to have a NULL
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>malloc_function</I
2390N/A></TT
2390N/A>
2390N/Aand a non-NULL
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>free_function</I
2390N/A></TT
2390N/A>
2390N/Aor vice versa.
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>arg</I
2390N/A></TT
2390N/A>
2390N/Ais passed as the first parameter to the memory
2390N/Aallocation functions.
2390N/AIf
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>malloc_function</I
2390N/A></TT
2390N/A>
2390N/Aand
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>free_function</I
2390N/A></TT
2390N/A>
2390N/Aare NULL,
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>arg</I
2390N/A></TT
2390N/A>
2390N/A
2390N/Ais unused and should be passed as NULL.</P
2390N/A><P
2390N/A>Once memory for the structure has been allocated,
2390N/Ait is initialized using
2390N/A<SPAN
2390N/ACLASS="CITEREFENTRY"
2390N/A><SPAN
2390N/ACLASS="REFENTRYTITLE"
2390N/A>lwres_conf_init</SPAN
2390N/A>(3)</SPAN
2390N/A>
2390N/A
2390N/Aand returned via
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>*contextp</I
2390N/A></TT
2390N/A>.&#13;</P
2390N/A><P
2390N/A><TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_destroy()</TT
2390N/A>
2390N/Adestroys a
2390N/A<SPAN
2390N/ACLASS="TYPE"
2390N/A>lwres_context_t</SPAN
2390N/A>,
2390N/A
2390N/Aclosing its socket.
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2908N/A>contextp</I
2390N/A></TT
2390N/A>
2390N/Ais a pointer to a pointer to the context that is to be destroyed.
4303N/AThe pointer will be set to NULL when the context has been destroyed.</P
2908N/A><P
2390N/A>The context holds a serial number that is used to identify resolver
2390N/Arequest packets and associate responses with the corresponding requests.
2390N/AThis serial number is controlled using
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_initserial()</TT
2390N/A>
2390N/Aand
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_nextserial()</TT
2390N/A>.
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_initserial()</TT
2390N/A>
2390N/Asets the serial number for context
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>*ctx</I
2390N/A></TT
2390N/A>
2390N/Ato
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>serial</I
2390N/A></TT
2390N/A>.
2390N/A
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_nextserial()</TT
2390N/A>
2390N/Aincrements the serial number and returns the previous value.</P
2390N/A><P
2390N/A>Memory for a lightweight resolver context is allocated and freed using
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_allocmem()</TT
2390N/A>
2390N/Aand
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_freemem()</TT
2390N/A>.
2390N/AThese use whatever allocations were defined when the context was
2390N/Acreated with
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_create()</TT
2390N/A>.
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_allocmem()</TT
2390N/A>
2390N/Aallocates
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>len</I
2390N/A></TT
2390N/A>
2390N/Abytes of memory and if successful returns a pointer to the allocated
2390N/Astorage.
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_allocmem()</TT
2390N/A>
2390N/Achecks that
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>len</I
2390N/A></TT
2390N/A>
2390N/Amust be greater than 0.
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_freemem()</TT
2390N/A>
2390N/Afrees
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>len</I
2390N/A></TT
2390N/A>
2390N/Abytes of space starting at location
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>mem</I
2390N/A></TT
2390N/A>.&#13;</P
2390N/A><P
2390N/A><TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_sendrecv()</TT
2390N/A>
2390N/Aperforms I/O for the context
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>ctx</I
2390N/A></TT
2390N/A>.
2390N/A
2390N/AData are read and written from the context's socket.
2390N/AIt writes data from
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>sendbase</I
2390N/A></TT
2390N/A>
2390N/A&mdash; typically a lightweight resolver query packet &mdash;
2390N/Aand waits for a reply which is copied to the receive buffer at
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>recvbase</I
2390N/A></TT
2390N/A>.
2390N/A
2390N/AThe number of bytes that were written to this receive buffer is
2390N/Areturned in
2390N/A<TT
2390N/ACLASS="PARAMETER"
2390N/A><I
2390N/A>*recvd_len</I
2390N/A></TT
2390N/A>.&#13;</P
2390N/A></DIV
2390N/A><DIV
2390N/ACLASS="REFSECT1"
2390N/A><A
2390N/ANAME="AEN117"
2390N/A></A
2390N/A><H2
2390N/A>RETURN VALUES</H2
2390N/A><P
2390N/A><TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_create()</TT
2390N/A>
2390N/Areturns
2390N/A<SPAN
2390N/ACLASS="ERRORCODE"
2390N/A>LWRES_R_NOMEMORY</SPAN
2390N/A>
2390N/Aif memory for the
2390N/A<SPAN
2390N/ACLASS="TYPE"
2390N/A>struct lwres_context</SPAN
2390N/A>
2390N/Acould not be allocated,
2390N/A<SPAN
2390N/ACLASS="ERRORCODE"
2390N/A>LWRES_R_SUCCESS</SPAN
2390N/A>
2390N/Aotherwise.</P
2390N/A><P
2390N/A>Successful calls to the memory allocator
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_allocmem()</TT
2390N/A>
2390N/Areturn a pointer to the start of the allocated space.
2390N/AIt returns NULL if memory could not be allocated.</P
2390N/A><P
2390N/A><SPAN
2390N/ACLASS="ERRORCODE"
2390N/A>LWRES_R_SUCCESS</SPAN
2390N/A>
2390N/Ais returned when
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_sendrecv()</TT
2390N/A>
2390N/Acompletes successfully.
2390N/A<SPAN
2390N/ACLASS="ERRORCODE"
2390N/A>LWRES_R_IOERROR</SPAN
2390N/A>
2390N/Ais returned if an I/O error occurs and
2390N/A<SPAN
2390N/ACLASS="ERRORCODE"
2390N/A>LWRES_R_TIMEOUT</SPAN
2390N/A>
2390N/Ais returned if
2390N/A<TT
2390N/ACLASS="FUNCTION"
2390N/A>lwres_context_sendrecv()</TT
2390N/A>
2390N/Atimes out waiting for a response.</P
2390N/A></DIV
2390N/A><DIV
2390N/ACLASS="REFSECT1"
2390N/A><A
2390N/ANAME="AEN132"
2390N/A></A
2390N/A><H2
2390N/A>SEE ALSO</H2
2390N/A><P
2390N/A><SPAN
2390N/ACLASS="CITEREFENTRY"
2390N/A><SPAN
2390N/ACLASS="REFENTRYTITLE"
2390N/A>lwres_conf_init</SPAN
2390N/A>(3)</SPAN
2390N/A>,
2390N/A
2390N/A<SPAN
2390N/ACLASS="CITEREFENTRY"
2390N/A><SPAN
2390N/ACLASS="REFENTRYTITLE"
2390N/A>malloc</SPAN
2390N/A>(3)</SPAN
2390N/A>,
2390N/A
2390N/A<SPAN
2390N/ACLASS="CITEREFENTRY"
2390N/A><SPAN
2390N/ACLASS="REFENTRYTITLE"
2390N/A>free</SPAN
2390N/A>(3)</SPAN
2390N/A>.</P
2390N/A></DIV
2390N/A></BODY
2390N/A></HTML
2390N/A>