lwres_string_parse

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
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_UNEXPECTEDEND  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)