Jun 30, 2000
lwres_noop
3
BIND9
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