ABCDEFGHIJKLMNOPQRSTUVWXYZ

lwres_gnbarequest_free

LWRES_GNBA(3)                                                    LWRES_GNBA(3)



NAME
       lwres_gnbarequest_render,    lwres_gnbaresponse_render,   lwres_gnbare-
       quest_parse,     lwres_gnbaresponse_parse,     lwres_gnbaresponse_free,
       lwres_gnbarequest_free  - lightweight resolver getnamebyaddress message
       handling

SYNOPSIS
       #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);

DESCRIPTION
       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_gnbare-
       quest_t  ¿  to the lightweight resolver's canonical format.  It is com-
       plemented 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 get-
       namebyaddr 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_gnbare-
       quest_parse() except it yields a lwres_gnbaresponse_t structure.

       lwres_gnbaresponse_free() and lwres_gnbarequest_free() release the mem-
       ory  in  resolver  context  ctx that was allocated to the lwres_gnbare-
       sponse_t or lwres_gnbarequest_t structures referenced via structp.  Any
       memory  associated  with ancillary buffers and strings for those struc-
       tures is also discarded.

RETURN VALUES
       The   getnamebyaddr   opcode   functions    lwres_gnbarequest_render(),
       lwres_gnbaresponse_render() lwres_gnbarequest_parse() and lwres_gnbare-
       sponse_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  accom-
       modate  the  packet header or the lwres_gnbarequest_t and lwres_gnbare-
       sponse_t  structures.   lwres_gnbarequest_parse()   and   lwres_gnbare-
       sponse_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  ear-
       lier query.

SEE ALSO
       lwres_packet(3).



BIND9                            Jun 30, 2000                    LWRES_GNBA(3)