lwres_buffer.docbook revision 938440694b33cd752e9e4b71a526368b4811c177
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>
6c3b9cebb551140fbb25d58bae08b539b3802133ylavic </refentryinfo>
69301145375a889e7e37caf7cc7321ac0f91801erpluem <copyright>
d58a848a016d401b965111e50ef829e1641f7834minfrin <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
d58a848a016d401b965111e50ef829e1641f7834minfrin </copyright>
d58a848a016d401b965111e50ef829e1641f7834minfrin <copyright>
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic </copyright>
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic <refnamediv>
44ff304057225e944e220e981d434a046d14cf06covener <refpurpose>lightweight resolver buffer management</refpurpose>
44ff304057225e944e220e981d434a046d14cf06covener </refnamediv>
44ff304057225e944e220e981d434a046d14cf06covener <refsynopsisdiv>
5d1ba75b8794925e67591c209085a49279791de9covener <funcsynopsis>
5d1ba75b8794925e67591c209085a49279791de9covener<funcsynopsisinfo>
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand</funcsynopsisinfo>
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand<funcprototype>
45a10d38e6051fd7bdf9d742aaae633d97ff02abjailletc <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
f7317ff316c2b141feea31bddb74d5d3fa1584edjorton <paramdef>void *<parameter>base</parameter></paramdef>
f7317ff316c2b141feea31bddb74d5d3fa1584edjorton <paramdef>unsigned int <parameter>length</parameter></paramdef>
2165214331e4afafca4048f66f303d0253d7b001covener </funcprototype>
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem<funcprototype>
1e2d421a36999d292042a5539971070d54aa6c63ylavic<function>lwres_buffer_invalidate</function></funcdef>
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh </funcprototype>
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh<funcprototype>
0b67eb8568cd58bb77082703951679b42cf098actrawick <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
5ef3c61605a3a021ff71f488983cb0065f8e1a79covener <paramdef>unsigned int <parameter>n</parameter></paramdef>
fb1985a97912b25ec6564c73e610a31e5fc6e25fcovener </funcprototype>
6502b7b32f980cc2093bb3ebce37e5e4dc68fba4ylavic<funcprototype>
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic <paramdef>unsigned int <parameter>n</parameter></paramdef>
e6b4bd1113567627ab6bb6c6a7105e1e01a7d889jailletc </funcprototype>
e466c40e1801982602ee0200c9e8b61cc148742djailletc<funcprototype>
457468b82e59d01eba00dd9d0817309c8f5e414ejim <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
04983e3bd1754764eec7d6bb772fe3b0bf391771jorton </funcprototype>
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem<funcprototype>
49dacedb6c387b786b7911082ff35121a45f414bcovener <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
cfd9415521847b2f9394fad04fb701cfb955f503rjung </funcprototype>
cfd9415521847b2f9394fad04fb701cfb955f503rjung<funcprototype>
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe <paramdef>unsigned int <parameter>n</parameter></paramdef>
8491e0600f69b0405e156ea8a419653c065c645bcovener </funcprototype>
63b9f1f5880391261705f696d7d65507bbe9ace3covener<funcprototype>
49dacedb6c387b786b7911082ff35121a45f414bcovener <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
49dacedb6c387b786b7911082ff35121a45f414bcovener <paramdef>unsigned int <parameter>n</parameter></paramdef>
3c990331fc6702119e4f5b8ba9eae3021aea5265jim </funcprototype>
3c990331fc6702119e4f5b8ba9eae3021aea5265jim<funcprototype>
fc42512879dd0504532f52fe5d0d0383dda96a1eniqlwres_uint8_t
fc42512879dd0504532f52fe5d0d0383dda96a1eniq <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
0451df5dc50fa5d8b3e07d92ee6a92e36a1181a5niq </funcprototype>
0451df5dc50fa5d8b3e07d92ee6a92e36a1181a5niq<funcprototype>
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc<function>lwres_buffer_putuint8</function></funcdef>
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
06b8f183140c8e02e0974e938a05078b511d1603covener <paramdef>lwres_uint8_t <parameter>val</parameter></paramdef>
06b8f183140c8e02e0974e938a05078b511d1603covener </funcprototype>
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem<funcprototype>
259878293a997ff49f5ddfc53d3739cbdc25444ecovenerlwres_uint16_t
259878293a997ff49f5ddfc53d3739cbdc25444ecovener<function>lwres_buffer_getuint16</function></funcdef>
259878293a997ff49f5ddfc53d3739cbdc25444ecovener <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem </funcprototype>
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrin<funcprototype>
65967d05f839dbf27cf91d91fa79585eeae19660minfrin<function>lwres_buffer_putuint16</function></funcdef>
65967d05f839dbf27cf91d91fa79585eeae19660minfrin <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
65967d05f839dbf27cf91d91fa79585eeae19660minfrin <paramdef>lwres_uint16_t <parameter>val</parameter></paramdef>
8152945ae46857b170cb227e79bb799f4fc7710dminfrin </funcprototype>
8152945ae46857b170cb227e79bb799f4fc7710dminfrin<funcprototype>
75f5c2db254c0167a0e396254460de09b775d203trawicklwres_uint32_t
75f5c2db254c0167a0e396254460de09b775d203trawick<function>lwres_buffer_getuint32</function></funcdef>
75f5c2db254c0167a0e396254460de09b775d203trawick <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
4f0358189bfa57b8e75bd6b94db264302a8f336amrumph </funcprototype>
4f0358189bfa57b8e75bd6b94db264302a8f336amrumph<funcprototype>
5716f9c6daa92dde5f2f9d11ed63f7c9549c223atrawick<function>lwres_buffer_putuint32</function></funcdef>
5716f9c6daa92dde5f2f9d11ed63f7c9549c223atrawick <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
54d750a84a175d8e338880514d440773eb986b50covener <paramdef>lwres_uint32_t <parameter>val</parameter></paramdef>
54d750a84a175d8e338880514d440773eb986b50covener </funcprototype>
54d750a84a175d8e338880514d440773eb986b50covener<funcprototype>
54d750a84a175d8e338880514d440773eb986b50covener <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
7a3aa12f0eda24793ee26d6a179bd53132e9dae8covener <paramdef>const unsigned char *<parameter>base</parameter></paramdef>
54d750a84a175d8e338880514d440773eb986b50covener <paramdef>unsigned int <parameter>length</parameter></paramdef>
54d750a84a175d8e338880514d440773eb986b50covener </funcprototype>
4e30ef014533a7e93c92d88306291f5e49c9692ftrawick<funcprototype>
5f066f496cd9f20a2a701255bc67d44e7cb46daetrawick <paramdef>lwres_buffer_t *<parameter>b</parameter></paramdef>
2e15620d724fb8e3a5be183b917359a2fd6e9468covener <paramdef>unsigned char *<parameter>base</parameter></paramdef>
2e15620d724fb8e3a5be183b917359a2fd6e9468covener <paramdef>unsigned int <parameter>length</parameter></paramdef>
2e15620d724fb8e3a5be183b917359a2fd6e9468covener </funcprototype>
1b988c41ee505962781d110a3e4c2c90f1ea0aa4covener</funcsynopsis>
1b988c41ee505962781d110a3e4c2c90f1ea0aa4covener </refsynopsisdiv>
f06e7c4b1bce6b6491e5de0b7998d3f5696b293dchrisd These functions provide bounds checked access to a region of memory
f06e7c4b1bce6b6491e5de0b7998d3f5696b293dchrisd where data is being read or written.
f06e7c4b1bce6b6491e5de0b7998d3f5696b293dchrisd They are based on, and similar to, the
179565be4043d7e5f9161aa75271fa0a001866d9covener functions in the ISC library.
fce4949fb0b309a5744afcd503c6ed2d35621ee2covener A buffer is a region of memory, together with a set of related
fce4949fb0b309a5744afcd503c6ed2d35621ee2covener subregions.
fce4949fb0b309a5744afcd503c6ed2d35621ee2covener <emphasis>available</emphasis> region are disjoint, and
7b7430e701e9a31ce809da7c220bb8dfcf68c86etrawick their union is the buffer's region.
7b7430e701e9a31ce809da7c220bb8dfcf68c86etrawick The used region extends from the beginning of the buffer region to the
7b7430e701e9a31ce809da7c220bb8dfcf68c86etrawick last used byte.
ccc20788c1e5fc973f36df634399c89acb70deaejerenkrantz The available region extends from one byte greater than the last used
ccc20788c1e5fc973f36df634399c89acb70deaejerenkrantz byte to the end of the buffer's region.
ccc20788c1e5fc973f36df634399c89acb70deaejerenkrantz The size of the used region can be changed using various
273e512f20f262e5e2aa8e0e83371d1929fb76adjkaluza buffer commands.
273e512f20f262e5e2aa8e0e83371d1929fb76adjkaluza Initially, the used region is empty.
fe83f60b41477b14a37edcfcd1f7f5c5a1ebfe44minfrin The used region is further subdivided into two disjoint regions: the
fe83f60b41477b14a37edcfcd1f7f5c5a1ebfe44minfrin <emphasis>consumed region</emphasis> and the <emphasis>remaining region</emphasis>.
fe83f60b41477b14a37edcfcd1f7f5c5a1ebfe44minfrin The union of these two regions is the used region.
993d1261a278d7322bccef219101220b7b4fb8c5jkaluza The consumed region extends from the beginning of the used region to
993d1261a278d7322bccef219101220b7b4fb8c5jkaluza the byte before the <emphasis>current</emphasis> offset (if any).
993d1261a278d7322bccef219101220b7b4fb8c5jkaluza The <emphasis>remaining</emphasis> region the current pointer to the end
ba050a6f942b9fa0e81ed73437588005c569655ccovener of the used
ba050a6f942b9fa0e81ed73437588005c569655ccovener The size of the consumed region can be changed using various
ba050a6f942b9fa0e81ed73437588005c569655ccovener buffer commands.
135ddda3a989215d2bedbcf1529bfb269c3eda23niq Initially, the consumed region is empty.
001a44c352f89c9ec332ffd3e0a6927dcd19432chumbedooh The <emphasis>active region</emphasis> is an (optional) subregion of the
efe780dcf13b2b95effabf897d694d8f23feac74trawick It extends from the current offset to an offset in the
793214f67dede32edfd9ee96c664ead04d175cbbjfclere remaining region.
cc5a4a08dc9783fcbc52ce86f11e01c281a43810minfrin Initially, the active region is empty.
9b0076ddd1103e5fa9c1f9bafde4b06ce244fbaecovener If the current offset advances beyond the chosen offset,
9b0076ddd1103e5fa9c1f9bafde4b06ce244fbaecovener the active region will also be empty.
249d09d51808cb7981af99762c3b3736ca126cd5jkaluza /------------entire length---------------\\
249d09d51808cb7981af99762c3b3736ca126cd5jkaluza /----- used region -----\\/-- available --\\
249d09d51808cb7981af99762c3b3736ca126cd5jkaluza +----------------------------------------+
56589be3d7a3e9343370df240010c6928cc78b39jkaluza | consumed | remaining | |
56589be3d7a3e9343370df240010c6928cc78b39jkaluza +----------------------------------------+
77ca16c5676da23155311e13cee61e7eaba9fa3ejailletc </programlisting>
77ca16c5676da23155311e13cee61e7eaba9fa3ejailletc a == base of buffer.
f87299dab99bc04b51a6b8cad51b6795db862c0atrawick b == current pointer. Can be anywhere between a and d.
f87299dab99bc04b51a6b8cad51b6795db862c0atrawick c == active pointer. Meaningful between b and d.
f87299dab99bc04b51a6b8cad51b6795db862c0atrawick d == used pointer.
4d12805e6c18253040223ea637acd6b3b3c18f60jorton e == length of buffer.
4d12805e6c18253040223ea637acd6b3b3c18f60jorton </programlisting>
85eacfc96a04547ef25aabbc06440039715084c2jorton a-e == entire length of buffer.
e5d909f2b06bd880fb3675cd49363df981caa631trawick a-d == used region.
a4df2cd1e1391575a327c2a90ba4315f805a0a78covener a-b == consumed region.
a4df2cd1e1391575a327c2a90ba4315f805a0a78covener b-d == remaining region.
a4df2cd1e1391575a327c2a90ba4315f805a0a78covener b-c == optional active region.
cb666b29f81df1d11d65002250153353568021fccovener</programlisting>
6a80c3c6f4b8ea7ba5e89402b8b779b09ce020e0covener initializes the
75a230a728338d84dcfe81edd375352f34de22d0covener and assocates it with the memory region of size
75a230a728338d84dcfe81edd375352f34de22d0covener bytes starting at location
1f50dc34ae069adeed20b2986e5ffdefa5c410e0covener <para><function>lwres_buffer_invalidate()</function>
63a5ea80bddcc84a462e40f402b4f330e0e05411covener as invalid. Invalidating a buffer after use is not required,
63a5ea80bddcc84a462e40f402b4f330e0e05411covener but makes it possible to catch its possible accidental use.
65a4e663b82f8bce28ac22ab2edfd7502de36998sf The functions
74e7f6c55fd67b10cb400b3f6d1dc718a303d944minfrin respectively increase and decrease the used space in
a511a29faf2ff7ead3b67680154a624effb31aafminfrin checks for buffer overflow and
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin checks for underflow.
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin These functions do not allocate or deallocate memory.
63921358ef93fcb41bc71d9894221ba3d7fbb87bminfrin They just change the value of
6d601599d3d65df0410eae6e573e75b2dbfb1fb4minfrin A buffer is re-initialised by
684e0cfc200f66287a93bbd1708d1dd8a92a7eefcovener The function sets
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq makes the consumed region of buffer
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq empty by setting
ef82e8fa164e0a1f8b813f7deb6b7ead96018c94niq to zero (the start of the buffer).
c12917da693bae4028a1d5a5e8224bceed8c739dsf increases the consumed region of buffer
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf bytes, checking for overflow.
eafcc0ebf263d0ba69855b6e10958c4c1a2361bdsf Similarly,
d7ffd2da16d58b1a0de212e4d56f7aebb72bef26sf decreases buffer
4576c1a9ef54cd1e5555ee07d016a7f559f80338sf consumed region by
4576c1a9ef54cd1e5555ee07d016a7f559f80338sf bytes and checks for underflow.
9811aed12bbc71783d2e544ccb5fecd193843eadsf reads an unsigned 8-bit integer from
88fac54d9d64f85bbdab5d7010816f4377f95bd7rjung and returns it.
bd3f5647b96d378d9c75c954e3f13582af32c643sf writes the unsigned 8-bit integer
584a85dd4047e38d3ed3a29b6662fcc9d100ae4csf are identical to
584a85dd4047e38d3ed3a29b6662fcc9d100ae4csf except that they respectively read an unsigned 16-bit or 32-bit integer
f21e9e3d0bfb7a507ecc5bc963f2159d693503d1sf in network byte order from
f21e9e3d0bfb7a507ecc5bc963f2159d693503d1sf Similarly,
132ee6ac1c26d6e8953836316ba50734eefab47bsf writes the unsigned 16-bit or 32-bit integer
85eacfc96a04547ef25aabbc06440039715084c2jorton in network byte order.
536d2e7cd1fdec1255b8c3bdf41fdc714c506a54trawick Arbitrary amounts of data are read or written from a lightweight
536d2e7cd1fdec1255b8c3bdf41fdc714c506a54trawick resolver buffer with
79c5787b92ac5f0e1cc82393816c77a006399316trawick respectively.
79c5787b92ac5f0e1cc82393816c77a006399316trawick bytes of memory at
7b395e4e878c28a4784919cfd2e704ddd14a3390jorton Conversely,
536e48c08d674acac5d44929318f2ad928edc361jorton bytes of memory from
3e4e54d4e3fc0123c63d57aa84ac7ad7a8c73ff8jorton </refsect1>
53e9b27aba029b18be814df40bcf6f0428771d1efuankg - Local variables:
53e9b27aba029b18be814df40bcf6f0428771d1efuankg - mode: sgml