lwres_noop.docbook revision 821350367e2c7313c02eb275e8e05d5193b47cfd
f743002678eb67b99bbc29fee116b65d9530fec0wrowe<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
80833bb9a1bf25dcf19e814438a4b311d2e1f4cffuankg "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem [<!ENTITY mdash "—">]>
1337c7673efc1f80f634139fbad7cbb98a0dc657ylavic - Copyright (C) 2004, 2005, 2007, 2014 Internet Systems Consortium, Inc. ("ISC")
1337c7673efc1f80f634139fbad7cbb98a0dc657ylavic - Copyright (C) 2000, 2001 Internet Software Consortium.
4da61833a1cbbca94094f9653fd970582b97a72etrawick - Permission to use, copy, modify, and/or distribute this software for any
4da61833a1cbbca94094f9653fd970582b97a72etrawick - purpose with or without fee is hereby granted, provided that the above
4da61833a1cbbca94094f9653fd970582b97a72etrawick - copyright notice and this permission notice appear in all copies.
4da61833a1cbbca94094f9653fd970582b97a72etrawick - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
4789804be088bcd86ae637a29cdb7fda25169521jailletc - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4789804be088bcd86ae637a29cdb7fda25169521jailletc - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
4789804be088bcd86ae637a29cdb7fda25169521jailletc - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4789804be088bcd86ae637a29cdb7fda25169521jailletc - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
e50c3026198fd496f183cda4c32a202925476778covener - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
e50c3026198fd496f183cda4c32a202925476778covener - PERFORMANCE OF THIS SOFTWARE.
6c3b9cebb551140fbb25d58bae08b539b3802133ylavic <refentryinfo>
4f29b65ab4b547ad5dbe506e2d0ff5d12ead9247ylavic </refentryinfo>
506bfe33206b2fece40ef25f695af39dd4130facjkaluza <copyright>
d58a848a016d401b965111e50ef829e1641f7834minfrin <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
d58a848a016d401b965111e50ef829e1641f7834minfrin </copyright>
2e6f4d654c96c98b761fb012fd25c5d5b1558c44sf <copyright>
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic </copyright>
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic <refnamediv>
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic <refpurpose>lightweight resolver no-op message handling</refpurpose>
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic </refnamediv>
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic <refsynopsisdiv>
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic <funcsynopsis>
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener<funcsynopsisinfo>
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener<funcprototype>
d7205b1a86c51c27b71a2c458dc453fd53a261c1covenerlwres_result_t
44ff304057225e944e220e981d434a046d14cf06covener<function>lwres_nooprequest_render</function></funcdef>
44ff304057225e944e220e981d434a046d14cf06covener <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
44ff304057225e944e220e981d434a046d14cf06covener <paramdef>lwres_nooprequest_t *<parameter>req</parameter></paramdef>
44ff304057225e944e220e981d434a046d14cf06covener <paramdef>lwres_lwpacket_t *<parameter>pkt</parameter></paramdef>
5d1ba75b8794925e67591c209085a49279791de9covener <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
5d1ba75b8794925e67591c209085a49279791de9covener </funcprototype>
5d1ba75b8794925e67591c209085a49279791de9covener<funcprototype>
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrandlwres_result_t
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand<function>lwres_noopresponse_render</function></funcdef>
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
caad2986f81ab263f7af41467dd622dc9add17f3ylavic <paramdef>lwres_noopresponse_t *<parameter>req</parameter></paramdef>
caad2986f81ab263f7af41467dd622dc9add17f3ylavic <paramdef>lwres_lwpacket_t *<parameter>pkt</parameter></paramdef>
caad2986f81ab263f7af41467dd622dc9add17f3ylavic <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
caad2986f81ab263f7af41467dd622dc9add17f3ylavic </funcprototype>
45a10d38e6051fd7bdf9d742aaae633d97ff02abjailletc<funcprototype>
f7317ff316c2b141feea31bddb74d5d3fa1584edjortonlwres_result_t
2165214331e4afafca4048f66f303d0253d7b001covener<function>lwres_nooprequest_parse</function></funcdef>
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
1e2d421a36999d292042a5539971070d54aa6c63ylavic <paramdef>lwres_lwpacket_t *<parameter>pkt</parameter></paramdef>
1e2d421a36999d292042a5539971070d54aa6c63ylavic <paramdef>lwres_nooprequest_t **<parameter>structp</parameter></paramdef>
1e2d421a36999d292042a5539971070d54aa6c63ylavic </funcprototype>
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh<funcprototype>
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedoohlwres_result_t
0b67eb8568cd58bb77082703951679b42cf098actrawick<function>lwres_noopresponse_parse</function></funcdef>
0b67eb8568cd58bb77082703951679b42cf098actrawick <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
0b67eb8568cd58bb77082703951679b42cf098actrawick <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
0b67eb8568cd58bb77082703951679b42cf098actrawick <paramdef>lwres_lwpacket_t *<parameter>pkt</parameter></paramdef>
5ef3c61605a3a021ff71f488983cb0065f8e1a79covener <paramdef>lwres_noopresponse_t **<parameter>structp</parameter></paramdef>
fb1985a97912b25ec6564c73e610a31e5fc6e25fcovener </funcprototype>
09c87c777bed1655621bb20e1c46cb6b1a63279dcovener<funcprototype>
3060ce7f798fbda7999cd4ddf89b525d2b294185covener<function>lwres_noopresponse_free</function></funcdef>
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic <paramdef>lwres_noopresponse_t **<parameter>structp</parameter></paramdef>
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic </funcprototype>
e6b4bd1113567627ab6bb6c6a7105e1e01a7d889jailletc<funcprototype>
e466c40e1801982602ee0200c9e8b61cc148742djailletc<function>lwres_nooprequest_free</function></funcdef>
457468b82e59d01eba00dd9d0817309c8f5e414ejim <paramdef>lwres_context_t *<parameter>ctx</parameter></paramdef>
457468b82e59d01eba00dd9d0817309c8f5e414ejim <paramdef>lwres_nooprequest_t **<parameter>structp</parameter></paramdef>
457468b82e59d01eba00dd9d0817309c8f5e414ejim </funcprototype>
04983e3bd1754764eec7d6bb772fe3b0bf391771jorton</funcsynopsis>
04983e3bd1754764eec7d6bb772fe3b0bf391771jorton </refsynopsisdiv>
49dacedb6c387b786b7911082ff35121a45f414bcovener These are low-level routines for creating and parsing
49dacedb6c387b786b7911082ff35121a45f414bcovener lightweight resolver no-op request and response messages.
cfd9415521847b2f9394fad04fb701cfb955f503rjung The no-op message is analogous to a <command>ping</command>
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe a packet is sent to the resolver daemon and is simply echoed back.
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe The opcode is intended to allow a client to determine if the server is
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe operational or not.
63b9f1f5880391261705f696d7d65507bbe9ace3covener There are four main functions for the no-op opcode.
63b9f1f5880391261705f696d7d65507bbe9ace3covener One render function converts a no-op request structure —
49dacedb6c387b786b7911082ff35121a45f414bcovener to the lightweight resolver's canonical format.
49dacedb6c387b786b7911082ff35121a45f414bcovener It is complemented by a parse function that converts a packet in this
49dacedb6c387b786b7911082ff35121a45f414bcovener canonical format to a no-op request structure.
49dacedb6c387b786b7911082ff35121a45f414bcovener Another render function converts the no-op response structure —
3c990331fc6702119e4f5b8ba9eae3021aea5265jim to the canonical format.
3c990331fc6702119e4f5b8ba9eae3021aea5265jim This is complemented by a parse function which converts a packet in
3c990331fc6702119e4f5b8ba9eae3021aea5265jim canonical format to a no-op response structure.
fc42512879dd0504532f52fe5d0d0383dda96a1eniq These structures are defined in
0451df5dc50fa5d8b3e07d92ee6a92e36a1181a5niq They are shown below.
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc#define LWRES_OPCODE_NOOP 0x00000000U
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc</programlisting>
06b8f183140c8e02e0974e938a05078b511d1603covenertypedef struct {
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem lwres_uint16_t datalength;
259878293a997ff49f5ddfc53d3739cbdc25444ecovener unsigned char *data;
259878293a997ff49f5ddfc53d3739cbdc25444ecovener} lwres_nooprequest_t;
259878293a997ff49f5ddfc53d3739cbdc25444ecovener</programlisting>
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrintypedef struct {
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrin lwres_uint16_t datalength;
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrin unsigned char *data;
65967d05f839dbf27cf91d91fa79585eeae19660minfrin} lwres_noopresponse_t;
65967d05f839dbf27cf91d91fa79585eeae19660minfrin</programlisting>
8152945ae46857b170cb227e79bb799f4fc7710dminfrin Although the structures have different types, they are identical.
8152945ae46857b170cb227e79bb799f4fc7710dminfrin This is because the no-op opcode simply echos whatever data was sent:
8152945ae46857b170cb227e79bb799f4fc7710dminfrin the response is therefore identical to the request.
75f5c2db254c0167a0e396254460de09b775d203trawick <para><function>lwres_nooprequest_render()</function>
75f5c2db254c0167a0e396254460de09b775d203trawick uses resolver context <parameter>ctx</parameter> to convert
4f0358189bfa57b8e75bd6b94db264302a8f336amrumph no-op request structure <parameter>req</parameter> to canonical
4f0358189bfa57b8e75bd6b94db264302a8f336amrumph format. The packet header structure <parameter>pkt</parameter>
4f0358189bfa57b8e75bd6b94db264302a8f336amrumph is initialised and transferred to buffer
5716f9c6daa92dde5f2f9d11ed63f7c9549c223atrawick <parameter>*req</parameter> are then appended to the buffer in
5716f9c6daa92dde5f2f9d11ed63f7c9549c223atrawick canonical format.
5716f9c6daa92dde5f2f9d11ed63f7c9549c223atrawick <function>lwres_noopresponse_render()</function> performs the
54d750a84a175d8e338880514d440773eb986b50covener same task, except it converts a no-op response structure
54d750a84a175d8e338880514d440773eb986b50covener <type>lwres_noopresponse_t</type> to the lightweight resolver's
54d750a84a175d8e338880514d440773eb986b50covener canonical format.
54d750a84a175d8e338880514d440773eb986b50covener <para><function>lwres_nooprequest_parse()</function>
54d750a84a175d8e338880514d440773eb986b50covener uses context <parameter>ctx</parameter> to convert the contents
54d750a84a175d8e338880514d440773eb986b50covener <parameter>b</parameter> provides space to be used for storing
54d750a84a175d8e338880514d440773eb986b50covener this structure. When the function succeeds, the resulting
83b50288fa7d306324bba68832011ea08f5c7832covener <type>lwres_nooprequest_t</type> is made available through
83b50288fa7d306324bba68832011ea08f5c7832covener <function>lwres_noopresponse_parse()</function> offers the same
5f066f496cd9f20a2a701255bc67d44e7cb46daetrawick semantics as <function>lwres_nooprequest_parse()</function>
5f066f496cd9f20a2a701255bc67d44e7cb46daetrawick except it yields a <type>lwres_noopresponse_t</type> structure.
2e15620d724fb8e3a5be183b917359a2fd6e9468covener <para><function>lwres_noopresponse_free()</function>
2e15620d724fb8e3a5be183b917359a2fd6e9468covener and <function>lwres_nooprequest_free()</function> release the
2e15620d724fb8e3a5be183b917359a2fd6e9468covener memory in resolver context <parameter>ctx</parameter> that was
1b988c41ee505962781d110a3e4c2c90f1ea0aa4covener allocated to the <type>lwres_noopresponse_t</type> or
1b988c41ee505962781d110a3e4c2c90f1ea0aa4covener <type>lwres_nooprequest_t</type> structures referenced via
b8efdc95bec9cf089aa1be0bfd07d46aa1137a7acovener </refsect1>
f06e7c4b1bce6b6491e5de0b7998d3f5696b293dchrisd The no-op opcode functions
7b7430e701e9a31ce809da7c220bb8dfcf68c86etrawick on success.
7b7430e701e9a31ce809da7c220bb8dfcf68c86etrawick They return
ccc20788c1e5fc973f36df634399c89acb70deaejerenkrantz if memory allocation fails.
ccc20788c1e5fc973f36df634399c89acb70deaejerenkrantz is returned if the available space in the buffer
273e512f20f262e5e2aa8e0e83371d1929fb76adjkaluza is too small to accommodate the packet header or the
fe83f60b41477b14a37edcfcd1f7f5c5a1ebfe44minfrin structures.
993d1261a278d7322bccef219101220b7b4fb8c5jkaluza will return
ba050a6f942b9fa0e81ed73437588005c569655ccovener if the buffer is not empty after decoding the received packet.
ba050a6f942b9fa0e81ed73437588005c569655ccovener These functions will return
135ddda3a989215d2bedbcf1529bfb269c3eda23niq in the packet header structure
001a44c352f89c9ec332ffd3e0a6927dcd19432chumbedooh indicate that the packet is not a response to an earlier query.
efe780dcf13b2b95effabf897d694d8f23feac74trawick </refsect1>
9b0076ddd1103e5fa9c1f9bafde4b06ce244fbaecovener <refentrytitle>lwres_packet</refentrytitle><manvolnum>3</manvolnum>
9b0076ddd1103e5fa9c1f9bafde4b06ce244fbaecovener </citerefentry>
249d09d51808cb7981af99762c3b3736ca126cd5jkaluza </refsect1>
249d09d51808cb7981af99762c3b3736ca126cd5jkaluza - Local variables:
56589be3d7a3e9343370df240010c6928cc78b39jkaluza - mode: sgml