85N/A<!
DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" 85N/A [<!ENTITY mdash "—">]>
85N/A - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") 85N/A - Copyright (C) 2000, 2001 Internet Software Consortium. 85N/A - Permission to use, copy, modify, and/or distribute this software for any 85N/A - purpose with or without fee is hereby granted, provided that the above 85N/A - copyright notice and this permission notice appear in all copies. 85N/A - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 85N/A - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 85N/A - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 85N/A - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 85N/A - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 85N/A - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 85N/A - PERFORMANCE OF THIS SOFTWARE. 85N/A <
date>Jun 30, 2000</
date>
85N/A <
refentrytitle>lwres_noop</
refentrytitle>
844N/A <
manvolnum>3</
manvolnum>
844N/A <
refmiscinfo>BIND9</
refmiscinfo>
3996N/A <
holder>Internet Systems Consortium, Inc. ("ISC")</
holder>
85N/A <
holder>Internet Software Consortium.</
holder>
85N/A <
refname>lwres_nooprequest_render</
refname>
181N/A <
refname>lwres_noopresponse_render</
refname>
85N/A <
refname>lwres_nooprequest_parse</
refname>
181N/A <
refname>lwres_noopresponse_parse</
refname>
85N/A <
refname>lwres_noopresponse_free</
refname>
181N/A <
refname>lwres_nooprequest_free</
refname>
85N/A <
refpurpose>lightweight resolver no-op message handling</
refpurpose>
<
function>lwres_nooprequest_render</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_nooprequest_t *<
parameter>req</
parameter></
paramdef>
<
paramdef>lwres_lwpacket_t *<
parameter>pkt</
parameter></
paramdef>
<
paramdef>lwres_buffer_t *<
parameter>b</
parameter></
paramdef>
<
function>lwres_noopresponse_render</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_noopresponse_t *<
parameter>req</
parameter></
paramdef>
<
paramdef>lwres_lwpacket_t *<
parameter>pkt</
parameter></
paramdef>
<
paramdef>lwres_buffer_t *<
parameter>b</
parameter></
paramdef>
<
function>lwres_nooprequest_parse</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_buffer_t *<
parameter>b</
parameter></
paramdef>
<
paramdef>lwres_lwpacket_t *<
parameter>pkt</
parameter></
paramdef>
<
paramdef>lwres_nooprequest_t **<
parameter>structp</
parameter></
paramdef>
<
function>lwres_noopresponse_parse</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_buffer_t *<
parameter>b</
parameter></
paramdef>
<
paramdef>lwres_lwpacket_t *<
parameter>pkt</
parameter></
paramdef>
<
paramdef>lwres_noopresponse_t **<
parameter>structp</
parameter></
paramdef>
<
function>lwres_noopresponse_free</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_noopresponse_t **<
parameter>structp</
parameter></
paramdef>
<
function>lwres_nooprequest_free</
function></
funcdef>
<
paramdef>lwres_context_t *<
parameter>ctx</
parameter></
paramdef>
<
paramdef>lwres_nooprequest_t **<
parameter>structp</
parameter></
paramdef>
<
title>DESCRIPTION</
title>
These are low-level routines for creating and parsing
lightweight resolver no-op request and response messages.
The no-op message is analogous to a <
command>ping</
command>
a packet is sent to the resolver daemon and is simply echoed back.
The opcode is intended to allow a client to determine if the server is
There are four main functions for the no-op opcode.
One render function converts a no-op request structure —
<
type>lwres_nooprequest_t</
type> —
to the lighweight resolver's canonical format.
It is complemented by a parse function that converts a packet in this
canonical format to a no-op request structure.
Another render function converts the no-op response structure —
<
type>lwres_noopresponse_t</
type>
This is complemented by a parse function which converts a packet in
canonical format to a no-op response structure.
These structures are defined in
#define LWRES_OPCODE_NOOP 0x00000000U
lwres_uint16_t datalength;
lwres_uint16_t datalength;
Although the structures have different types, they are identical.
This is because the no-op opcode simply echos whatever data was sent:
the response is therefore identical to the request.
<
para><
function>lwres_nooprequest_render()</
function>
uses resolver context <
parameter>ctx</
parameter> to convert
no-op request structure <
parameter>req</
parameter> to canonical
format. The packet header structure <
parameter>pkt</
parameter>
is initialised and transferred to buffer
<
parameter>b</
parameter>. The contents of
<
parameter>*req</
parameter> are then appended to the buffer in
<
function>lwres_noopresponse_render()</
function> performs the
same task, except it converts a no-op response structure
<
type>lwres_noopresponse_t</
type> to the lightweight resolver's
<
para><
function>lwres_nooprequest_parse()</
function>
uses context <
parameter>ctx</
parameter> to convert the contents
of packet <
parameter>pkt</
parameter> to a
<
type>lwres_nooprequest_t</
type> structure. Buffer
<
parameter>b</
parameter> provides space to be used for storing
this structure. When the function succeeds, the resulting
<
type>lwres_nooprequest_t</
type> is made available through
<
parameter>*structp</
parameter>.
<
function>lwres_noopresponse_parse()</
function> offers the same
semantics as <
function>lwres_nooprequest_parse()</
function>
except it yields a <
type>lwres_noopresponse_t</
type> structure.
<
para><
function>lwres_noopresponse_free()</
function>
and <
function>lwres_nooprequest_free()</
function> release the
memory in resolver context <
parameter>ctx</
parameter> that was
allocated to the <
type>lwres_noopresponse_t</
type> or
<
type>lwres_nooprequest_t</
type> structures referenced via
<
parameter>structp</
parameter>.
<
title>RETURN VALUES</
title>
The no-op opcode functions
<
function>lwres_nooprequest_render()</
function>,
<
function>lwres_noopresponse_render()</
function>
<
function>lwres_nooprequest_parse()</
function>
<
function>lwres_noopresponse_parse()</
function>
<
errorcode>LWRES_R_SUCCESS</
errorcode>
<
errorcode>LWRES_R_NOMEMORY</
errorcode>
if memory allocation fails.
<
errorcode>LWRES_R_UNEXPECTEDEND</
errorcode>
is returned if the available space in the buffer
is too small to accommodate the packet header or the
<
type>lwres_nooprequest_t</
type>
<
type>lwres_noopresponse_t</
type>
<
function>lwres_nooprequest_parse()</
function>
<
function>lwres_noopresponse_parse()</
function>
<
errorcode>LWRES_R_UNEXPECTEDEND</
errorcode>
if the buffer is not empty after decoding the received packet.
These functions will return
<
errorcode>LWRES_R_FAILURE</
errorcode>
<
constant>pktflags</
constant>
in the packet header structure
<
type>lwres_lwpacket_t</
type>
indicate that the packet is not a response to an earlier query.
<
refentrytitle>lwres_packet</
refentrytitle><
manvolnum>3</
manvolnum>