ABCDEFGHIJKLMNOPQRSTUVWXYZ

lwres_string_parse

LWRES_RESUTIL(3)                                              LWRES_RESUTIL(3)



NAME
       lwres_string_parse,  lwres_addr_parse, lwres_getaddrsbyname, lwres_get-
       namebyaddr - lightweight resolver utility functions

SYNOPSIS
       #include <lwres/lwres.h>

       lwres_result_t lwres_string_parse(lwres_buffer_t *b, char **c,
       lwres_uint16_t *len);

       lwres_result_t lwres_addr_parse(lwres_buffer_t *b, lwres_addr_t *addr);

       lwres_result_t lwres_getaddrsbyname(lwres_context_t *ctx, const char
       *name, lwres_uint32_t addrtypes, lwres_gabnresponse_t **structp);

       lwres_result_t lwres_getnamebyaddr(lwres_context_t *ctx, lwres_uint32_t
       addrtype, lwres_uint16_t addrlen, const unsigned char *addr,
       lwres_gnbaresponse_t **structp);

DESCRIPTION
       lwres_string_parse()  retrieves  a DNS-encoded string starting the cur-
       rent pointer of lightweight resolver buffer b: i.e.  b->current.   When
       the  function  returns,  the  address  of the first byte of the encoded
       string is returned via *c and the length of that  string  is  given  by
       *len.  The buffer's current pointer is advanced to point at the charac-
       ter following the string length, the encoded string, and  the  trailing
       NULL character.

       lwres_addr_parse()  extracts an address from the buffer b. The buffer's
       current pointer b->current is presumed to point at an encoded  address:
       the  address  preceded  by  a  32-bit  protocol family identifier and a
       16-bit length field. The encoded address is copied to addr->address and
       addr->length  indicates  the  size  in  bytes  of  the address that was
       copied. b->current is advanced to point at the next byte  of  available
       data in the buffer following the encoded address.

       lwres_getaddrsbyname()  and lwres_getnamebyaddr() use the lwres_gnbare-
       sponse_t structure defined below:

       typedef struct {
               lwres_uint32_t          flags;
               lwres_uint16_t          naliases;
               lwres_uint16_t          naddrs;
               char                   *realname;
               char                  **aliases;
               lwres_uint16_t          realnamelen;
               lwres_uint16_t         *aliaslen;
               lwres_addrlist_t        addrs;
               void                   *base;
               size_t                  baselen;
       } lwres_gabnresponse_t;

       The contents of this structure are not manipulated  directly  but  they
       are controlled through the lwres_gabn(3) functions.

       The  lightweight resolver uses lwres_getaddrsbyname() to perform foward
       lookups.  Hostname name is looked up using the resolver context ctx for
       memory  allocation.   addrtypes  is  a bitmask indicating which type of
       addresses are to be looked up. Current  values  for  this  bitmask  are
       LWRES_ADDRTYPE_V4  for  IPv4  addresses  and LWRES_ADDRTYPE_V6 for IPv6
       addresses. Results of the lookup are returned in *structp.

       lwres_getnamebyaddr() performs reverse lookups.  Resolver  context  ctx
       is  used  for memory allocation. The address type is indicated by addr-
       type: LWRES_ADDRTYPE_V4 or LWRES_ADDRTYPE_V6. The address to be  looked
       up  is given by addr and its length is addrlen bytes. The result of the
       function call is made available through *structp.

RETURN VALUES
       Successful calls to lwres_string_parse() and lwres_addr_parse()  return
       LWRES_R_SUCCESS.   Both  functions return LWRES_R_FAILURE if the buffer
       is corrupt or LWRES_R_UNEXPECTEDEND if the buffer has less  space  than
       expected for the components of the encoded string or address.

       lwres_getaddrsbyname()   returns  LWRES_R_SUCCESS  on  success  and  it
       returns LWRES_R_NOTFOUND if the hostname name could not be found.

       LWRES_R_SUCCESS is returned by  a  successful  call  to  lwres_getname-
       byaddr().

       Both    lwres_getaddrsbyname()    and    lwres_getnamebyaddr()   return
       LWRES_R_NOMEMORY when memory allocation requests fail and LWRES_R_UNEX-
       PECTEDEND if the buffers used for sending queries and receiving replies
       are too small.

SEE ALSO
       lwres_buffer(3), lwres_gabn(3).



BIND9                            Jun 30, 2000                 LWRES_RESUTIL(3)