---
name: "lwres_resutil"
section: "3"
platform: "linux"
package: "libbind-dev"
version: "1:9.11.5.P4+dfsg-5.1+deb10u7"
release: "Debian 10 (Buster)"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/lwres_resutil"
---

# lwres\_resutil(3)

lightweight resolver utility functions

## NAME

lwres\_string\_parse, lwres\_addr\_parse, lwres\_getaddrsbyname, lwres\_getnamebyaddr - lightweight resolver utility functions

## SYNOPSIS

```
#include <lwres/lwres.h>
```

**lwres\_result\_t lwres\_string\_parse(lwres\_buffer\_t \****b***, char \*\****c***, 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***, uint32\_t** *addrtypes***, lwres\_gabnresponse\_t \*\****structp***);**

**lwres\_result\_t lwres\_getnamebyaddr(lwres\_context\_t \****ctx***, uint32\_t** *addrtype***, uint16\_t** *addrlen***, const unsigned char \****addr***, lwres\_gnbaresponse\_t \*\****structp***);**

## DESCRIPTION

**lwres\_string\_parse()** retrieves a DNS-encoded string starting the current 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 character 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\_gnbaresponse\_t** structure defined below:

```
typedef struct {
        uint32_t          flags;
        uint16_t          naliases;
        uint16_t          naddrs;
        char                   *realname;
        char                  **aliases;
        uint16_t          realnamelen;
        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)](/lwres_gabn/3.md) functions.

The lightweight resolver uses **lwres\_getaddrsbyname()** to perform forward 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 *addrtype*: **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\_getnamebyaddr()**.

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_buffer/3.md), [**lwres\_gabn**(3)](/lwres_gabn/3.md).

## AUTHOR

**Internet Systems Consortium, Inc.**

## COPYRIGHT

Copyright © 2000, 2001, 2004, 2005, 2007, 2014-2016, 2018, 2019 Internet Systems Consortium, Inc. ("ISC")\
