lwres_resutil.docbook revision 0c27b3fe77ac1d5094ba3521e8142d9e7973133f
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - Copyright (C) 2000, 2001, 2004, 2005, 2007, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein - This Source Code Form is subject to the terms of the Mozilla Public
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley - License, v. 2.0. If a copy of the MPL was not distributed with this
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley - file, You can obtain one at http://mozilla.org/MPL/2.0/.
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews<!-- Converted by db4-upgrade version 1.0 -->
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews<refentry xmlns="http://docbook.org/ns/docbook" version="5.0">
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews <refentryinfo>
6ea1b817e31b89a627e146fe69e23ea0a64c89ecBob Halley <corpauthor>Internet Systems Consortium, Inc.</corpauthor>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refentryinfo>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </copyright>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </copyright>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refnamediv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refpurpose>lightweight resolver utility functions</refpurpose>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refnamediv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refsynopsisdiv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <funcsynopsis>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcsynopsisinfo>#include <lwres/lwres.h></funcsynopsisinfo>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_string_parse</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>char **<parameter>c</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_uint16_t *<parameter>len</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_addr_t *<parameter>addr</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_getaddrsbyname</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>const char *<parameter>name</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_uint32_t <parameter>addrtypes</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_gabnresponse_t **<parameter>structp</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlwres_result_t
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein<function>lwres_getnamebyaddr</function></funcdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_uint32_t <parameter>addrtype</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_uint16_t <parameter>addrlen</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>const unsigned char *<parameter>addr</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <paramdef>lwres_gnbaresponse_t **<parameter>structp</parameter></paramdef>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </funcprototype>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein</funcsynopsis>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refsynopsisdiv>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refsection><info><title>DESCRIPTION</title></info>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein retrieves a DNS-encoded string starting the current pointer of
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lightweight resolver buffer <parameter>b</parameter>: i.e.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <constant>b->current</constant>. When the function returns,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein the address of the first byte of the encoded string is returned
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein via <parameter>*c</parameter> and the length of that string is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein given by <parameter>*len</parameter>. The buffer's current
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein pointer is advanced to point at the character following the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein string length, the encoded string, and the trailing
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein extracts an address from the buffer <parameter>b</parameter>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The buffer's current pointer <constant>b->current</constant>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein is presumed to point at an encoded address: the address preceded
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein by a 32-bit protocol family identifier and a 16-bit length
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein field. The encoded address is copied to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <constant>addr->length</constant> indicates the size in bytes
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein of the address that was copied.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <constant>b->current</constant> is advanced to point at the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next byte of available data in the buffer following the encoded
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <para><function>lwres_getaddrsbyname()</function>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein and <function>lwres_getnamebyaddr()</function> use the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <type>lwres_gnbaresponse_t</type> structure defined below:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintypedef struct {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lwres_uint32_t flags;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lwres_uint16_t naliases;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lwres_uint16_t naddrs;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein char *realname;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein char **aliases;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lwres_uint16_t realnamelen;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lwres_uint16_t *aliaslen;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lwres_addrlist_t addrs;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein size_t baselen;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein} lwres_gabnresponse_t;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The contents of this structure are not manipulated directly but
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein they are controlled through the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <citerefentry>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refentrytitle>lwres_gabn</refentrytitle><manvolnum>3</manvolnum>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </citerefentry>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein The lightweight resolver uses
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <function>lwres_getaddrsbyname()</function> to perform
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein forward lookups.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Hostname <parameter>name</parameter> is looked up using the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein context <parameter>ctx</parameter> for memory allocation.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>addrtypes</parameter> is a bitmask indicating
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein which type of
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein addresses are to be looked up. Current values for this bitmask are
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <type>LWRES_ADDRTYPE_V4</type> for IPv4 addresses and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <type>LWRES_ADDRTYPE_V6</type> for IPv6 addresses. Results of the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein lookup are returned in <parameter>*structp</parameter>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <para><function>lwres_getnamebyaddr()</function>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein performs reverse lookups. Resolver context
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>ctx</parameter> is used for memory allocation. The
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein address type is indicated by <parameter>addrtype</parameter>:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <type>LWRES_ADDRTYPE_V6</type>. The address to be looked up is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein given by <parameter>addr</parameter> and its length is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <parameter>addrlen</parameter> bytes. The result of the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein function call is made available through
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein </refsection>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein <refsection><info><title>RETURN VALUES</title></info>
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Successful calls to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Both functions return
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if the buffer is corrupt or