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 ); | 
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.
    
      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.