lwres_gnbarequest_render, lwres_gnbaresponse_render, lwres_gnbarequest_parse, lwres_gnbaresponse_parse, lwres_gnbaresponse_free, lwres_gnbarequest_free — lightweight resolver getnamebyaddress message handling
#include <lwres/lwres.h>
| 
lwres_result_t
lwres_gnbarequest_render
( | lwres_context_t * | ctx, | 
| lwres_gnbarequest_t * | req, | |
| lwres_lwpacket_t * | pkt, | |
| lwres_buffer_t * | b ); | 
| 
lwres_result_t
lwres_gnbaresponse_render
( | lwres_context_t * | ctx, | 
| lwres_gnbaresponse_t * | req, | |
| lwres_lwpacket_t * | pkt, | |
| lwres_buffer_t * | b ); | 
| 
lwres_result_t
lwres_gnbarequest_parse( | lwres_context_t * | ctx, | 
| lwres_buffer_t * | b, | |
| lwres_lwpacket_t * | pkt, | |
| lwres_gnbarequest_t ** | structp ); | 
| 
lwres_result_t
lwres_gnbaresponse_parse( | lwres_context_t * | ctx, | 
| lwres_buffer_t * | b, | |
| lwres_lwpacket_t * | pkt, | |
| lwres_gnbaresponse_t ** | structp ); | 
| 
void
lwres_gnbaresponse_free
( | lwres_context_t * | ctx, | 
| lwres_gnbaresponse_t ** | structp ); | 
| 
void
lwres_gnbarequest_free( | lwres_context_t * | ctx, | 
| lwres_gnbarequest_t ** | structp ); | 
These are low-level routines for creating and parsing lightweight resolver address-to-name lookup request and response messages.
There are four main functions for the getnamebyaddr opcode. One render function converts a getnamebyaddr request structure — lwres_gnbarequest_t — to the lightweight resolver's canonical format. It is complemented by a parse function that converts a packet in this canonical format to a getnamebyaddr request structure. Another render function converts the getnamebyaddr response structure — lwres_gnbaresponse_t to the canonical format. This is complemented by a parse function which converts a packet in canonical format to a getnamebyaddr response structure.
      These structures are defined in
      lwres/lwres.h.
      They are shown below.
    
#define LWRES_OPCODE_GETNAMEBYADDR 0x00010002U
typedef struct {
        lwres_uint32_t  flags;
        lwres_addr_t    addr;
} lwres_gnbarequest_t;
typedef struct {
        lwres_uint32_t  flags;
        lwres_uint16_t  naliases;
        char           *realname;
        char          **aliases;
        lwres_uint16_t  realnamelen;
        lwres_uint16_t *aliaslen;
        void           *base;
        size_t          baselen;
} lwres_gnbaresponse_t;
lwres_gnbarequest_render()
      uses resolver context ctx to convert
      getnamebyaddr 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_gnbaresponse_render() performs the
      same task, except it converts a getnamebyaddr response structure
      lwres_gnbaresponse_t to the lightweight resolver's
      canonical format.
    
lwres_gnbarequest_parse()
      uses context ctx to convert the contents of
      packet pkt to a
      lwres_gnbarequest_t structure.  Buffer
      b provides space to be used for storing this
      structure.  When the function succeeds, the resulting
      lwres_gnbarequest_t is made available through
      *structp.
      lwres_gnbaresponse_parse() offers the same
      semantics as lwres_gnbarequest_parse()
      except it yields a lwres_gnbaresponse_t structure.
    
lwres_gnbaresponse_free()
      and lwres_gnbarequest_free() release the
      memory in resolver context ctx that was
      allocated to the lwres_gnbaresponse_t or
      lwres_gnbarequest_t structures referenced via
      structp.  Any memory associated with
      ancillary buffers and strings for those structures is also
      discarded.
    
      The getnamebyaddr opcode functions
      lwres_gnbarequest_render(),
      lwres_gnbaresponse_render()
      lwres_gnbarequest_parse()
      and
      lwres_gnbaresponse_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_gnbarequest_t
      and
      lwres_gnbaresponse_t
      structures.
      lwres_gnbarequest_parse()
      and
      lwres_gnbaresponse_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.