lwres.html revision 8a66318e41ed14c5a88130e8c362610e8faa2121
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder<!--
ad53c2449238379699243be05926645262e9581eChristian Maeder - Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC")
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner - Copyright (C) 2001 Internet Software Consortium.
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski -
7968d3a131e5a684ec1ff0c6d88aae638549153dChristian Maeder - Permission to use, copy, modify, and distribute this software for any
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu - purpose with or without fee is hereby granted, provided that the above
e899b993b4f642217274fda6f462fe1318ae3626Christian Maeder - copyright notice and this permission notice appear in all copies.
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder -
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
679d3f541f7a9ede4079e045f7758873bb901872Till Mossakowski - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
02dc9cda66fc907229f0c74658c5f0bec550f898Till Mossakowski - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
02dc9cda66fc907229f0c74658c5f0bec550f898Till Mossakowski - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
02dc9cda66fc907229f0c74658c5f0bec550f898Till Mossakowski - PERFORMANCE OF THIS SOFTWARE.
56c56b2181e76c239929ddade2925ba5c3f3fffdChristian Maeder-->
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder<!-- $Id: lwres.html,v 1.5 2004/03/05 08:32:19 marka Exp $ -->
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder<HTML
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><HEAD
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><TITLE
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder>lwres</TITLE
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><META
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian MaederNAME="GENERATOR"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian MaederCONTENT="Modular DocBook HTML Stylesheet Version 1.73
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder"></HEAD
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><BODY
b09c4ce9ee62d8b62f6c7bb12956a3dea4defd95Till MossakowskiCLASS="REFENTRY"
b09c4ce9ee62d8b62f6c7bb12956a3dea4defd95Till MossakowskiBGCOLOR="#FFFFFF"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian MaederTEXT="#000000"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian MaederLINK="#0000FF"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian MaederVLINK="#840084"
1842453990fed8a1bd7a5ac792d7982c1d2bfcd5Christian MaederALINK="#0000FF"
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><H1
5022458dbee9d20a1b9d0925384202124341c371Till Mossakowski><A
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian MaederNAME="AEN1"
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maeder>lwres</A
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian Maeder></H1
c208973c890b8f993297720fd0247bc7481d4304Christian Maeder><DIV
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian MaederCLASS="REFNAMEDIV"
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian Maeder><A
ba904a15082557e939db689fcfba0c68c9a4f740Christian MaederNAME="AEN8"
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder></A
b60a22e76e983e8129c5dae4d713fe2794ed7054Christian Maeder><H2
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder>Name</H2
e220b2051a2342a9291721e6c7f408860bed01b7Jorina Freya Gerken>lwres&nbsp;--&nbsp;introduction to the lightweight resolver library</DIV
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><DIV
f3e815e0f960f2c002904b18ad75c149a3827d9fChristian MaederCLASS="REFSYNOPSISDIV"
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian Maeder><A
bac5a791547aa3ac8e7554fcc2c9533e609ef474Christian MaederNAME="AEN11"
4b136ad539bd9f4e115dff4eee4d552a42d4437eChristian Maeder></A
b91b82fd2625c349da6284f252cf4c50a6519650Christian Maeder><H2
e1abb0a8a17632e11db927958ab8cf58635bdf96Christian Maeder>Synopsis</H2
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian Maeder><DIV
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian MaederCLASS="FUNCSYNOPSIS"
076d5429ce08d87ebced34c308d41225e0d12cdeChristian Maeder><A
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederNAME="AEN12"
54ea981a0503c396c2923a1c06421c6235baf27fChristian Maeder></A
e1abb0a8a17632e11db927958ab8cf58635bdf96Christian Maeder><P
be688cc3aa83344b0141321d2d20bf6a8d5c5686Christian Maeder></P
be688cc3aa83344b0141321d2d20bf6a8d5c5686Christian Maeder><PRE
df9a64f1f61bf944b2116f92fce7083ff291debcChristian MaederCLASS="FUNCSYNOPSISINFO"
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian Maeder>#include &lt;lwres/lwres.h&gt;</PRE
df9a64f1f61bf944b2116f92fce7083ff291debcChristian Maeder><P
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder></P
f4651a172fa4d00037b061fbe4df71abc69f12b5Christian Maeder></DIV
607b972b45ce513052c55cc28e2bab19d6bf7311Christian Maeder></DIV
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maeder><DIV
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederCLASS="REFSECT1"
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian Maeder><A
5b14cb4855372bd9578cc07a9f6f9f3076bc033cChristian MaederNAME="AEN14"
c7e03d0708369f944b6f235057b39142a21599f2Mihai Codescu></A
28cbeb7eb61216d3b5a27dca176333d1ff8d3357Mihai Codescu><H2
87ad371ce86a15cd4424f59fa2fb8393f496cca4Mihai Codescu>DESCRIPTION</H2
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder><P
9fa5b06733fe318e18d9b8e0ef58e5d1ec953f7cMaciek Makowski>The BIND 9 lightweight resolver library is a simple, name service
22dac733a93bc32b8db195625edea6364079a89eChristian Maederindependent stub resolver library. It provides hostname-to-address
22dac733a93bc32b8db195625edea6364079a89eChristian Maederand address-to-hostname lookup services to applications by
22dac733a93bc32b8db195625edea6364079a89eChristian Maedertransmitting lookup requests to a resolver daemon
74d9a385499bf903b24848dff450a153f525bda7Christian Maeder<B
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederCLASS="COMMAND"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>lwresd</B
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>
28cbeb7eb61216d3b5a27dca176333d1ff8d3357Mihai Codescurunning on the local host. The resover daemon performs the
22dac733a93bc32b8db195625edea6364079a89eChristian Maederlookup using the DNS or possibly other name service protocols,
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederand returns the results to the application through the library.
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederThe library and resolver daemon communicate using a simple
22dac733a93bc32b8db195625edea6364079a89eChristian MaederUDP-based protocol.</P
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian Maeder></DIV
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian Maeder><DIV
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian MaederCLASS="REFSECT1"
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian Maeder><A
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian MaederNAME="AEN18"
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder></A
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder><H2
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder>OVERVIEW</H2
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder><P
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder>The lwresd library implements multiple name service APIs.
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian MaederThe standard
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder<TT
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian MaederCLASS="FUNCTION"
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder>gethostbyname()</TT
7a6c50ecdec40e0278e8ed4fdadfd669112d887dChristian Maeder>,
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder<TT
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederCLASS="FUNCTION"
7a6c50ecdec40e0278e8ed4fdadfd669112d887dChristian Maeder>gethostbyaddr()</TT
e46d78f7c6324ed9f1a191d46b6e5732e61e1835Simon Ulbricht>,
7a6c50ecdec40e0278e8ed4fdadfd669112d887dChristian Maeder<TT
7a6c50ecdec40e0278e8ed4fdadfd669112d887dChristian MaederCLASS="FUNCTION"
e46d78f7c6324ed9f1a191d46b6e5732e61e1835Simon Ulbricht>gethostbyname_r()</TT
7a6c50ecdec40e0278e8ed4fdadfd669112d887dChristian Maeder>,
7a6c50ecdec40e0278e8ed4fdadfd669112d887dChristian Maeder<TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="FUNCTION"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>gethostbyaddr_r()</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>,
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder<TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="FUNCTION"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>getaddrinfo()</TT
da4b55f4795a4b585f513eaceb67cda10485febfChristian Maeder>,
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder<TT
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian MaederCLASS="FUNCTION"
4fc9de0da898448f1d3597ebbd8c04a066464c21Christian Maeder>getipnodebyname()</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>,
42e78fd3454812d4f98b06154fdabc5ec3488718mcodescuand
b091c4dea1b7100eea1c1e61cfd534e85e43c5c3mcodescu<TT
e46d78f7c6324ed9f1a191d46b6e5732e61e1835Simon UlbrichtCLASS="FUNCTION"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>getipnodebyaddr()</TT
a4cb1786d23060c8521a88f08f9909589fa83a12Christian Maeder>
22dac733a93bc32b8db195625edea6364079a89eChristian Maederfunctions are all supported. To allow the lwres library to coexist
22dac733a93bc32b8db195625edea6364079a89eChristian Maederwith system libraries that define functions of the same name,
22dac733a93bc32b8db195625edea6364079a89eChristian Maederthe library defines these functions with names prefixed by
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder<TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="LITERAL"
3c5c7e3fbc88e305dfb8a017757da84b2565d919mscodescu>lwres_</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>.
ea8e98e298f33f9362293f392c8fb192722b8904Eugen KuksaTo define the standard names, applications must include the
22dac733a93bc32b8db195625edea6364079a89eChristian Maederheader file
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa<TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="FILENAME"
f4651a172fa4d00037b061fbe4df71abc69f12b5Christian Maeder>&lt;lwres/netdb.h&gt;</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>
94fab9c2984681c5be0eb1c718efa70dd8f7bd31Igor Stassiywhich contains macro definitions mapping the standard function names
e4e39c9a78ab34bafd75b292839c20506e7f539bMihai Codescuinto
87ad371ce86a15cd4424f59fa2fb8393f496cca4Mihai Codescu<TT
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederCLASS="LITERAL"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>lwres_</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maederprefixed ones. Operating system vendors who integrate the lwres
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maederlibrary into their base distributions should rename the functions
2b6aa5d5fc7da111461c0837f1a0abe0f35fa984Christian Maederin the library proper so that the renaming macros are not needed.</P
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maeder><P
e49fd57c63845c7806860a9736ad09f6d44dbaedChristian Maeder>The library also provides a native API consisting of the functions
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maeder<TT
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederCLASS="FUNCTION"
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maeder>lwres_getaddrsbyname()</TT
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maeder>
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maederand
ad53c2449238379699243be05926645262e9581eChristian Maeder<TT
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian MaederCLASS="FUNCTION"
7688e20f844fe88f75c04016841ebb5e5e3d927fChristian Maeder>lwres_getnamebyaddr()</TT
1c039dc13801bb9c90ad6a1bac0e56af19fd2fbfMihai Codescu>.
0155c8d32b79581866f07cc593aa8a4c722ceef2Christian MaederThese may be called by applications that require more detailed
bfb2ae5ac1ccfacbfa29ffa240838461e18f4d49Christian Maedercontrol over the lookup process than the standard functions
0bc3e99a05ed12fafe271ab855c15c866b50827cMihai Codescuprovide.</P
b5a5755f7d034f5ebc9f7f45e878c68695e139c4Thiemo Wiedemeyer><P
b5a5755f7d034f5ebc9f7f45e878c68695e139c4Thiemo Wiedemeyer>In addition to these name service independent address lookup
0bc3e99a05ed12fafe271ab855c15c866b50827cMihai Codescufunctions, the library implements a new, experimental API
c488ac18796ad6383b1edf7fa2820edc8296c89eChristian Maederfor looking up arbitrary DNS resource records, using the
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maeder<TT
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian MaederCLASS="FUNCTION"
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian Maeder>lwres_getaddrsbyname()</TT
7ad31de80b6544478f15dde43e22f0b7f612c438Thiemo Wiedemeyer>
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaederfunction.</P
8a8880f1b6a0681e636480991d45dfea11d62ff8Christian Maeder><P
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian Maeder>Finally, there is a low-level API for converting lookup
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian Maederrequests and responses to and from raw lwres protocol packets.
b5a5755f7d034f5ebc9f7f45e878c68695e139c4Thiemo WiedemeyerThis API can be used by clients requiring nonblocking operation,
22dac733a93bc32b8db195625edea6364079a89eChristian Maederand is also used when implementing the server side of the lwres
22dac733a93bc32b8db195625edea6364079a89eChristian Maederprotocol, for example in the
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder<B
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="COMMAND"
b46e2dfbd64caaedc51507fbff7f08f4d2b4d080Christian Maeder>lwresd</B
8a2beea4bd05c640b6848837c2ab0399f22afb72Christian Maeder>
8a2beea4bd05c640b6848837c2ab0399f22afb72Christian Maederresolver daemon. The use of this low-level API in clients
c1d06b3018b34ede2b3fb6c7fe2ad28cd5ce5b68Christian Maederand servers is outlined in the following sections.</P
8a2beea4bd05c640b6848837c2ab0399f22afb72Christian Maeder></DIV
c72a6b711518a31fe947a03601426d06c59edbd2Christian Maeder><DIV
c72a6b711518a31fe947a03601426d06c59edbd2Christian MaederCLASS="REFSECT1"
8a2beea4bd05c640b6848837c2ab0399f22afb72Christian Maeder><A
c72a6b711518a31fe947a03601426d06c59edbd2Christian MaederNAME="AEN38"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder></A
74d9a385499bf903b24848dff450a153f525bda7Christian Maeder><H2
c72a6b711518a31fe947a03601426d06c59edbd2Christian Maeder>CLIENT-SIDE LOW-LEVEL API CALL FLOW</H2
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder><P
39a2520d13a7d43f0c0fa71b94255c3f7c500005Christian Maeder>When a client program wishes to make an lwres request using the
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowskinative low-level API, it typically performs the following
39a2520d13a7d43f0c0fa71b94255c3f7c500005Christian Maedersequence of actions.</P
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski><P
2b6aa5d5fc7da111461c0837f1a0abe0f35fa984Christian Maeder>(1) Allocate or use an existing <SPAN
2b6aa5d5fc7da111461c0837f1a0abe0f35fa984Christian MaederCLASS="TYPE"
2b6aa5d5fc7da111461c0837f1a0abe0f35fa984Christian Maeder>lwres_packet_t</SPAN
2b6aa5d5fc7da111461c0837f1a0abe0f35fa984Christian Maeder>,
2b6aa5d5fc7da111461c0837f1a0abe0f35fa984Christian Maedercalled <TT
9a9860760c6f30558e5e60049692b6fc63904590Markus GrossCLASS="VARNAME"
4f8a6dee8333cac3769f6952d64965867e017f4dChristian Maeder>pkt</TT
9a9860760c6f30558e5e60049692b6fc63904590Markus Gross> below.</P
9a9860760c6f30558e5e60049692b6fc63904590Markus Gross><P
9a9860760c6f30558e5e60049692b6fc63904590Markus Gross>(2) Set <TT
591c279c7bacf79bccdb1e7417cc44130527d895Christian MaederCLASS="STRUCTFIELD"
9a9860760c6f30558e5e60049692b6fc63904590Markus Gross><I
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maeder>pkt.recvlength</I
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maeder></TT
260bfc3b7dc8ed037b7d98ee044302415db6fcd7Christian Maeder> to the maximum length we will accept.
260bfc3b7dc8ed037b7d98ee044302415db6fcd7Christian MaederThis is done so the receiver of our packets knows how large our receive
260bfc3b7dc8ed037b7d98ee044302415db6fcd7Christian Maederbuffer is. The "default" is a constant in
260bfc3b7dc8ed037b7d98ee044302415db6fcd7Christian Maeder<TT
a3963596b8a24e870708767e064a9e24cfa7e5edChristian MaederCLASS="FILENAME"
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder>lwres.h</TT
591c279c7bacf79bccdb1e7417cc44130527d895Christian Maeder>: <TT
591c279c7bacf79bccdb1e7417cc44130527d895Christian MaederCLASS="CONSTANT"
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder>LWRES_RECVLENGTH = 4096</TT
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder>.</P
6f08518fe3561930fef290b8e01384a6f1c90598Till Mossakowski><P
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder>(3) Set <TT
92487d2ec0c4f9fa81e0213311e214861d232f42Thiemo WiedemeyerCLASS="STRUCTFIELD"
92487d2ec0c4f9fa81e0213311e214861d232f42Thiemo Wiedemeyer><I
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder>pkt.serial</I
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder></TT
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maeder>
92487d2ec0c4f9fa81e0213311e214861d232f42Thiemo Wiedemeyerto a unique serial number. This value is echoed
a3963596b8a24e870708767e064a9e24cfa7e5edChristian Maederback to the application by the remote server.</P
591c279c7bacf79bccdb1e7417cc44130527d895Christian Maeder><P
15a50ae940b17c65d2b3c68918a26de29e565370Thiemo Wiedemeyer>(4) Set <TT
84ba39232a012abf2085c8a421ebce6abc52d56eThiemo WiedemeyerCLASS="STRUCTFIELD"
5b00a9d748d5bea461601ed7ed5198dfd30cf2d2Thiemo Wiedemeyer><I
39a2520d13a7d43f0c0fa71b94255c3f7c500005Christian Maeder>pkt.pktflags</I
39a2520d13a7d43f0c0fa71b94255c3f7c500005Christian Maeder></TT
39a2520d13a7d43f0c0fa71b94255c3f7c500005Christian Maeder>. Usually this is set to 0.</P
39a2520d13a7d43f0c0fa71b94255c3f7c500005Christian Maeder><P
84ba39232a012abf2085c8a421ebce6abc52d56eThiemo Wiedemeyer>(5) Set <TT
38e6a7281140deb96436868d396e1a0a3c934c2cChristian MaederCLASS="STRUCTFIELD"
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder><I
38e6a7281140deb96436868d396e1a0a3c934c2cChristian Maeder>pkt.result</I
38e6a7281140deb96436868d396e1a0a3c934c2cChristian Maeder></TT
38e6a7281140deb96436868d396e1a0a3c934c2cChristian Maeder> to 0.</P
38e6a7281140deb96436868d396e1a0a3c934c2cChristian Maeder><P
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>(6) Call <TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="FUNCTION"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>lwres_*request_render()</TT
28cbeb7eb61216d3b5a27dca176333d1ff8d3357Mihai Codescu>,
87ad371ce86a15cd4424f59fa2fb8393f496cca4Mihai Codescuor marshall in the data using the primitives
1af66b491a6164e07ac202abfa0d06c6c2462d64Christian Maedersuch as <TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="FUNCTION"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>lwres_packet_render()</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>
22dac733a93bc32b8db195625edea6364079a89eChristian Maederand storing the packet data.</P
42e78fd3454812d4f98b06154fdabc5ec3488718mcodescu><P
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa>(7) Transmit the resulting buffer.</P
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa><P
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa>(8) Call <TT
ea8e98e298f33f9362293f392c8fb192722b8904Eugen KuksaCLASS="FUNCTION"
e4e39c9a78ab34bafd75b292839c20506e7f539bMihai Codescu>lwres_*response_parse()</TT
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa>
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksato parse any packets received.</P
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder><P
10f46e60ea9ea8787e4584ad0a9e5db6cfd76446Christian Maeder>(9) Verify that the opcode and serial match a request, and process the
10f46e60ea9ea8787e4584ad0a9e5db6cfd76446Christian Maederpacket specific information contained in the body.</P
ea8e98e298f33f9362293f392c8fb192722b8904Eugen Kuksa></DIV
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder><DIV
3fe83d4c932a8266edcf0304a97814c59821d91fChristian MaederCLASS="REFSECT1"
c488ac18796ad6383b1edf7fa2820edc8296c89eChristian Maeder><A
c488ac18796ad6383b1edf7fa2820edc8296c89eChristian MaederNAME="AEN61"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder></A
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder><H2
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder>SERVER-SIDE LOW-LEVEL API CALL FLOW</H2
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder><P
d24317c8197e565e60c8f41309de246249c1e57eChristian Maeder>When implementing the server side of the lightweight resolver
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maederprotocol using the lwres library, a sequence of actions like the
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maederfollowing is typically involved in processing each request packet.</P
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maeder><P
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder>Note that the same <SPAN
e426842636f7f3b76ad57d4c7b16a024cf6cf08cCui JianCLASS="TYPE"
09aa12aebe61c224a53ed608808baf11130e03b1Christian Maeder>lwres_packet_t</SPAN
09aa12aebe61c224a53ed608808baf11130e03b1Christian Maeder> is used
09aa12aebe61c224a53ed608808baf11130e03b1Christian Maederin both the <TT
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian MaederCLASS="FUNCTION"
d24317c8197e565e60c8f41309de246249c1e57eChristian Maeder>_parse()</TT
09aa12aebe61c224a53ed608808baf11130e03b1Christian Maeder> and <TT
09aa12aebe61c224a53ed608808baf11130e03b1Christian MaederCLASS="FUNCTION"
e055d03c5a3acdcaa978bceadbd4e27926f54756Christian Maeder>_render()</TT
e055d03c5a3acdcaa978bceadbd4e27926f54756Christian Maeder> calls,
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian Maederwith only a few modifications made
e055d03c5a3acdcaa978bceadbd4e27926f54756Christian Maederto the packet header's contents between uses. This method is recommended
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian Maederas it keeps the serial, opcode, and other fields correct.</P
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian Maeder><P
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian Maeder>(1) When a packet is received, call <TT
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian MaederCLASS="FUNCTION"
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian Maeder>lwres_*request_parse()</TT
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian Maeder> to
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian Maederunmarshall it. This returns a <SPAN
26210e52bda19c75ac6a4287d16ce9d8789b68deChristian MaederCLASS="TYPE"
ad53c2449238379699243be05926645262e9581eChristian Maeder>lwres_packet_t</SPAN
17d4f8c5576d93f36cafe68161cdb960ec49ce7cChristian Maeder> (also called <TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="VARNAME"
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>pkt</TT
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>, below)
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maederas well as a data specific type, such as <SPAN
810292cfd2cc8ab106e371d86d605678f752fc89Christian MaederCLASS="TYPE"
f5257648a040fda02fc27a28b1d17f6ba53307c5Christian Maeder>lwres_gabnrequest_t</SPAN
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder>.</P
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian Maeder><P
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian Maeder>(2) Process the request in the data specific type.</P
0d0278c34a374b29c2d6c58b39b8b56e283d48e8Christian Maeder><P
f45fad43ee1673ab280fbc700821d5d20a493eaaChristian Maeder>(3) Set the <TT
f5257648a040fda02fc27a28b1d17f6ba53307c5Christian MaederCLASS="STRUCTFIELD"
40f8e29910681011b2bd04b21e85eb6a8d348f9cEwaryst Schulz><I
40f8e29910681011b2bd04b21e85eb6a8d348f9cEwaryst Schulz>pkt.result</I
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder></TT
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder>,
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder<TT
d11391a2447a2005329a95b5d770f24e62bf5b63Christian MaederCLASS="STRUCTFIELD"
9d2674ede8060c67e3af884c58e1a7ab9d19a611Christian Maeder><I
40f8e29910681011b2bd04b21e85eb6a8d348f9cEwaryst Schulz>pkt.recvlength</I
9d2674ede8060c67e3af884c58e1a7ab9d19a611Christian Maeder></TT
9d2674ede8060c67e3af884c58e1a7ab9d19a611Christian Maeder> as above. All other fields can
f5257648a040fda02fc27a28b1d17f6ba53307c5Christian Maederbe left untouched since they were filled in by the <TT
40f8e29910681011b2bd04b21e85eb6a8d348f9cEwaryst SchulzCLASS="FUNCTION"
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder>*_parse()</TT
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder> call
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian Maederabove. If using <TT
df5eb1b8e587946c9d072f4ee6ac7d001719b034Christian MaederCLASS="FUNCTION"
f5257648a040fda02fc27a28b1d17f6ba53307c5Christian Maeder>lwres_*response_render()</TT
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder>,
eccd7c7446e270bda674c07248d04fccc41cba0bSimon Ulbricht<TT
eccd7c7446e270bda674c07248d04fccc41cba0bSimon UlbrichtCLASS="STRUCTFIELD"
eccd7c7446e270bda674c07248d04fccc41cba0bSimon Ulbricht><I
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder>pkt.pktflags</I
c488ac18796ad6383b1edf7fa2820edc8296c89eChristian Maeder></TT
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder> will be set up
22dac733a93bc32b8db195625edea6364079a89eChristian Maederproperly. Otherwise, the <TT
22dac733a93bc32b8db195625edea6364079a89eChristian MaederCLASS="CONSTANT"
ad1f65fa6375114f84888537c9b6d34deae8e16eChristian Maeder>LWRES_LWPACKETFLAG_RESPONSE</TT
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder> bit should be
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maederset.</P
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder><P
fa1bf658051ac503f27ff1b59edb093398eed6edThiemo Wiedemeyer>(4) Call the data specific rendering function, such as
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder<TT
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian MaederCLASS="FUNCTION"
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder>lwres_gabnresponse_render()</TT
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder>.</P
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder><P
fa1bf658051ac503f27ff1b59edb093398eed6edThiemo Wiedemeyer>(5) Send the resulting packet to the client.</P
8e7df4df486c21d40207c537b7d9a82b17e3916cThiemo Wiedemeyer><P
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder></P
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder></DIV
5c9d9c85e0aac314175d6804a994993aabbd1a89Simon Ulbricht><DIV
d24317c8197e565e60c8f41309de246249c1e57eChristian MaederCLASS="REFSECT1"
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder><A
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian MaederNAME="AEN85"
6991b9cb29b2d8f106642e547fee727aeac5e52bSimon Ulbricht></A
fa1bf658051ac503f27ff1b59edb093398eed6edThiemo Wiedemeyer><H2
8e7df4df486c21d40207c537b7d9a82b17e3916cThiemo Wiedemeyer>SEE ALSO</H2
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder><P
a0efda9ffb465daf1e735c5ced1be3174af42dffChristian Maeder><SPAN
a0efda9ffb465daf1e735c5ced1be3174af42dffChristian MaederCLASS="CITEREFENTRY"
a0efda9ffb465daf1e735c5ced1be3174af42dffChristian Maeder><SPAN
a0efda9ffb465daf1e735c5ced1be3174af42dffChristian MaederCLASS="REFENTRYTITLE"
a0efda9ffb465daf1e735c5ced1be3174af42dffChristian Maeder>lwres_gethostent</SPAN
a0efda9ffb465daf1e735c5ced1be3174af42dffChristian Maeder>(3)</SPAN
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder>,
d11391a2447a2005329a95b5d770f24e62bf5b63Christian Maeder
9192fdd8f0e682ac0f0183dd854d5210fbfa4ec5Christian Maeder<SPAN
5b00a9d748d5bea461601ed7ed5198dfd30cf2d2Thiemo WiedemeyerCLASS="CITEREFENTRY"
5b00a9d748d5bea461601ed7ed5198dfd30cf2d2Thiemo Wiedemeyer><SPAN
84ba39232a012abf2085c8a421ebce6abc52d56eThiemo WiedemeyerCLASS="REFENTRYTITLE"
be5ff99194b2ba0a1a35093e0ea21d4da332b526Christian Maeder>lwres_getipnode</SPAN
be5ff99194b2ba0a1a35093e0ea21d4da332b526Christian Maeder>(3)</SPAN
be5ff99194b2ba0a1a35093e0ea21d4da332b526Christian Maeder>,
be5ff99194b2ba0a1a35093e0ea21d4da332b526Christian Maeder
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian Maeder<SPAN
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian MaederCLASS="CITEREFENTRY"
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian Maeder><SPAN
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian MaederCLASS="REFENTRYTITLE"
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian Maeder>lwres_getnameinfo</SPAN
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian Maeder>(3)</SPAN
17be7914f897d0b0c6488eb1391f5695ec74f7e1Christian Maeder>,
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder<SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="CITEREFENTRY"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder><SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="REFENTRYTITLE"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>lwres_noop</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>(3)</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>,
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder<SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="CITEREFENTRY"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder><SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="REFENTRYTITLE"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>lwres_gabn</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>(3)</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>,
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder<SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="CITEREFENTRY"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder><SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="REFENTRYTITLE"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>lwres_gnba</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>(3)</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>,
a5bd19ccaa5ad701cbfb9fdee0514f6e5d7fbc35Christian Maeder
a5bd19ccaa5ad701cbfb9fdee0514f6e5d7fbc35Christian Maeder<SPAN
a5bd19ccaa5ad701cbfb9fdee0514f6e5d7fbc35Christian MaederCLASS="CITEREFENTRY"
a5bd19ccaa5ad701cbfb9fdee0514f6e5d7fbc35Christian Maeder><SPAN
a5bd19ccaa5ad701cbfb9fdee0514f6e5d7fbc35Christian MaederCLASS="REFENTRYTITLE"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>lwres_context</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>(3)</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>,
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder<SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="CITEREFENTRY"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder><SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="REFENTRYTITLE"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>lwres_config</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>(3)</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>,
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder<SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="CITEREFENTRY"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder><SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian MaederCLASS="REFENTRYTITLE"
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>resolver</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>(5)</SPAN
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder>,
cb677b28797cf29452620f58606e174ab93ac426Christian Maeder
85e47ae3b5dc43834dd9b10af3bd42ca2e10fc88mscodescu<SPAN
85e47ae3b5dc43834dd9b10af3bd42ca2e10fc88mscodescuCLASS="CITEREFENTRY"
85e47ae3b5dc43834dd9b10af3bd42ca2e10fc88mscodescu><SPAN
85e47ae3b5dc43834dd9b10af3bd42ca2e10fc88mscodescuCLASS="REFENTRYTITLE"
85e47ae3b5dc43834dd9b10af3bd42ca2e10fc88mscodescu>lwresd</SPAN
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder>(8)</SPAN
f45fad43ee1673ab280fbc700821d5d20a493eaaChristian Maeder>.&#13;</P
22dac733a93bc32b8db195625edea6364079a89eChristian Maeder></DIV
fa8878c6145f652f615a04a5e9c15a1d1327bc92cmaeder></BODY
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder></HTML
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian Maeder>
c246854fd9abd0cdb3d11a52a350ebad2fbaa09bChristian Maeder