]>
Jun 30, 2000
lwres_noop
3
BIND9
2004
2005
2007
Internet Systems Consortium, Inc. ("ISC")
2000
2001
Internet Software Consortium.
lwres_nooprequest_render
lwres_noopresponse_render
lwres_nooprequest_parse
lwres_noopresponse_parse
lwres_noopresponse_free
lwres_nooprequest_free
lightweight resolver no-op message handling
#include <lwres/lwres.h>
lwres_result_t
lwres_nooprequest_render
lwres_context_t *ctx
lwres_nooprequest_t *req
lwres_lwpacket_t *pkt
lwres_buffer_t *b
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
lwres_result_t
lwres_noopresponse_parse
lwres_context_t *ctx
lwres_buffer_t *b
lwres_lwpacket_t *pkt
lwres_noopresponse_t **structp
void
lwres_noopresponse_free
lwres_context_t *ctx
lwres_noopresponse_t **structp
void
lwres_nooprequest_free
lwres_context_t *ctx
lwres_nooprequest_t **structp
DESCRIPTION
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 ping
packet:
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
operational or not.
There are four main functions for the no-op opcode.
One render function converts a no-op request structure —
lwres_nooprequest_t —
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 —
lwres_noopresponse_t
to the canonical format.
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
lwres/lwres.h.
They are shown below.
#define LWRES_OPCODE_NOOP 0x00000000U
typedef struct {
lwres_uint16_t datalength;
unsigned char *data;
} lwres_nooprequest_t;
typedef struct {
lwres_uint16_t datalength;
unsigned char *data;
} lwres_noopresponse_t;
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.
lwres_nooprequest_render()
uses resolver context ctx to convert
no-op request structure req to canonical
format. The packet header structure pkt
is initialised and transferred to buffer
b. The contents of
*req are then appended to the buffer in
canonical format.
lwres_noopresponse_render() performs the
same task, except it converts a no-op response structure
lwres_noopresponse_t to the lightweight resolver's
canonical format.
lwres_nooprequest_parse()
uses context ctx to convert the contents
of packet pkt to a
lwres_nooprequest_t structure. Buffer
b provides space to be used for storing
this structure. When the function succeeds, the resulting
lwres_nooprequest_t is made available through
*structp.
lwres_noopresponse_parse() offers the same
semantics as lwres_nooprequest_parse()
except it yields a lwres_noopresponse_t structure.
lwres_noopresponse_free()
and lwres_nooprequest_free() release the
memory in resolver context ctx that was
allocated to the lwres_noopresponse_t or
lwres_nooprequest_t structures referenced via
structp.
RETURN VALUES
The no-op opcode functions
lwres_nooprequest_render(),
lwres_noopresponse_render()
lwres_nooprequest_parse()
and
lwres_noopresponse_parse()
all return
LWRES_R_SUCCESS
on success.
They return
LWRES_R_NOMEMORY
if memory allocation fails.
LWRES_R_UNEXPECTEDEND
is returned if the available space in the buffer
b
is too small to accommodate the packet header or the
lwres_nooprequest_t
and
lwres_noopresponse_t
structures.
lwres_nooprequest_parse()
and
lwres_noopresponse_parse()
will return
LWRES_R_UNEXPECTEDEND
if the buffer is not empty after decoding the received packet.
These functions will return
LWRES_R_FAILURE
if
pktflags
in the packet header structure
lwres_lwpacket_t
indicate that the packet is not a response to an earlier query.
SEE ALSO
lwres_packet3