lwres_packet.html revision 8eea877894ea5bcf5cdd9ca124a8601ad421d753
321N/A<!--
321N/A - Copyright (C) 2000, 2001 Internet Software Consortium.
321N/A -
321N/A - Permission to use, copy, modify, and distribute this software for any
321N/A - purpose with or without fee is hereby granted, provided that the above
321N/A - copyright notice and this permission notice appear in all copies.
321N/A -
321N/A - THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
6982N/A - DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
6982N/A - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
321N/A - INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
321N/A - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
321N/A - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
321N/A - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
6982N/A - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
6982N/A-->
6982N/A<HTML
6982N/A><HEAD
321N/A><TITLE
321N/A>lwres_packet</TITLE
321N/A><META
321N/ANAME="GENERATOR"
321N/ACONTENT="Modular DocBook HTML Stylesheet Version 1.61
3232N/A"></HEAD
6375N/A><BODY
321N/ACLASS="REFENTRY"
321N/ABGCOLOR="#FFFFFF"
321N/ATEXT="#000000"
321N/ALINK="#0000FF"
321N/AVLINK="#840084"
6375N/AALINK="#0000FF"
6375N/A><H1
1689N/A><A
321N/ANAME="AEN1"
321N/A>lwres_packet</A
333N/A></H1
321N/A><DIV
6375N/ACLASS="REFNAMEDIV"
321N/A><A
321N/ANAME="AEN8"
321N/A></A
321N/A><H2
6375N/A>Name</H2
6375N/A>lwres_lwpacket_renderheader, lwres_lwpacket_parseheader&nbsp;--&nbsp;lightweight resolver packet handling functions</DIV
6375N/A><DIV
4134N/ACLASS="REFSYNOPSISDIV"
6375N/A><A
6375N/ANAME="AEN12"
1689N/A></A
321N/A><H2
321N/A>Synopsis</H2
321N/A><DIV
321N/ACLASS="FUNCSYNOPSIS"
321N/A><A
321N/ANAME="AEN13"
321N/A></A
321N/A><P
321N/A></P
333N/A><PRE
321N/ACLASS="FUNCSYNOPSISINFO"
333N/A>#include &lt;lwres/lwpacket.h&gt;</PRE
2342N/A><P
321N/A><CODE
321N/A><CODE
321N/ACLASS="FUNCDEF"
321N/A>lwres_result_t
321N/Alwres_lwpacket_renderheader</CODE
321N/A>(lwres_buffer_t *b, lwres_lwpacket_t *pkt);</CODE
321N/A></P
5902N/A><P
5902N/A><CODE
321N/A><CODE
321N/ACLASS="FUNCDEF"
321N/A>lwres_result_t
321N/Alwres_lwpacket_parseheader</CODE
321N/A>(lwres_buffer_t *b, lwres_lwpacket_t *pkt);</CODE
2342N/A></P
2342N/A><P
2342N/A></P
6375N/A></DIV
2342N/A></DIV
2342N/A><DIV
2342N/ACLASS="REFSECT1"
2342N/A><A
321N/ANAME="AEN25"
321N/A></A
321N/A><H2
321N/A>DESCRIPTION</H2
321N/A><P
321N/A>These functions rely on a
321N/A<SPAN
321N/ACLASS="TYPE"
321N/A>struct lwres_lwpacket</SPAN
321N/A>
1857N/Awhich is defined in
5902N/A<TT
5902N/ACLASS="FILENAME"
321N/A>lwres/lwpacket.h</TT
321N/A>.
321N/A
321N/A<PRE
321N/ACLASS="PROGRAMLISTING"
321N/A>typedef struct lwres_lwpacket lwres_lwpacket_t;
321N/A
321N/Astruct lwres_lwpacket {
321N/A lwres_uint32_t length;
321N/A lwres_uint16_t version;
321N/A lwres_uint16_t pktflags;
321N/A lwres_uint32_t serial;
321N/A lwres_uint32_t opcode;
321N/A lwres_uint32_t result;
1857N/A lwres_uint32_t recvlength;
5902N/A lwres_uint16_t authtype;
5902N/A lwres_uint16_t authlength;
321N/A};</PRE
2086N/A></P
2086N/A><P
3352N/A></P
3352N/A><P
3352N/A>The elements of this structure are:
321N/A<P
321N/A></P
321N/A><DIV
321N/ACLASS="VARIABLELIST"
321N/A><DL
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>length</TT
321N/A></DT
321N/A><DD
321N/A><P
321N/A>the overall packet length, including the entire packet header.
1857N/AThis field is filled in by the lwres_gabn_*() and lwres_gnba_*()
5902N/Acalls.</P
5902N/A></DD
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>version</TT
321N/A></DT
321N/A><DD
321N/A><P
321N/A>the header format. There is currently only one format,
321N/A<SPAN
321N/ACLASS="TYPE"
321N/A>LWRES_LWPACKETVERSION_0</SPAN
321N/A>.
321N/A
321N/AThis field is filled in by the lwres_gabn_*() and lwres_gnba_*()
321N/Acalls.</P
321N/A></DD
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>pktflags</TT
321N/A></DT
321N/A><DD
321N/A><P
321N/A>library-defined flags for this packet: for instance whether the packet
321N/Ais a request or a reply. Flag values can be set, but not defined by
321N/Athe caller.
321N/AThis field is filled in by the application wit the exception of the
321N/ALWRES_LWPACKETFLAG_RESPONSE bit, which is set by the library in the
321N/Alwres_gabn_*() and lwres_gnba_*() calls.</P
321N/A></DD
321N/A><DT
1857N/A><TT
5902N/ACLASS="CONSTANT"
5902N/A>serial</TT
321N/A></DT
321N/A><DD
3948N/A><P
321N/A>is set by the requestor and is returned in all replies. If two or more
321N/Apackets from the same source have the same serial number and are from
321N/Athe same source, they are assumed to be duplicates and the latter ones
321N/Amay be dropped.
321N/AThis field must be set by the application.</P
321N/A></DD
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>opcode</TT
321N/A></DT
321N/A><DD
321N/A><P
321N/A>indicates the operation.
321N/AOpcodes between 0x00000000 and 0x03ffffff are
321N/Areserved for use by the lightweight resolver library. Opcodes between
321N/A0x04000000 and 0xffffffff are application defined.
1118N/AThis field is filled in by the lwres_gabn_*() and lwres_gnba_*()
4134N/Acalls.</P
321N/A></DD
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>result</TT
321N/A></DT
4134N/A><DD
4134N/A><P
321N/A>is only valid for replies.
321N/AResults between 0x04000000 and 0xffffffff are application defined.
321N/AResults between 0x00000000 and 0x03ffffff are reserved for library use.
6375N/AThis field is filled in by the lwres_gabn_*() and lwres_gnba_*()
321N/Acalls.</P
321N/A></DD
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>recvlength</TT
321N/A></DT
321N/A><DD
321N/A><P
321N/A>is the maximum buffer size that the receiver can handle on requests
321N/Aand the size of the buffer needed to satisfy a request when the buffer
321N/Ais too large for replies.
321N/AThis field is supplied by the application.</P
321N/A></DD
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>authtype</TT
321N/A></DT
321N/A><DD
321N/A><P
1118N/A>defines the packet level authentication that is used.
4134N/AAuthorisation types between 0x1000 and 0xffff are application defined
321N/Aand types between 0x0000 and 0x0fff are reserved for library use.
321N/ACurrently these are not used and must be zero.</P
321N/A></DD
321N/A><DT
321N/A><TT
4134N/ACLASS="CONSTANT"
321N/A>authlen</TT
321N/A></DT
321N/A><DD
321N/A><P
321N/A>gives the length of the authentication data.
321N/ASince packet authentication is currently not used, this must be zero.</P
321N/A></DD
321N/A></DL
321N/A></DIV
321N/A></P
321N/A><P
321N/A>The following opcodes are currently defined:
321N/A<P
321N/A></P
321N/A><DIV
321N/ACLASS="VARIABLELIST"
321N/A><DL
321N/A><DT
321N/A><TT
321N/ACLASS="CONSTANT"
321N/A>NOOP</TT
1118N/A></DT
4134N/A><DD
4134N/A><P
5496N/A>Success is always returned and the packet contents are echoed.
321N/AThe lwres_noop_*() functions should be used for this type.</P
321N/A></DD
4134N/A><DT
4134N/A><TT
321N/ACLASS="CONSTANT"
4134N/A>GETADDRSBYNAME</TT
321N/A></DT
4134N/A><DD
321N/A><P
321N/A>returns all known addresses for a given name.
321N/AThe lwres_gabn_*() functions should be used for this type.</P
321N/A></DD
650N/A><DT
650N/A><TT
650N/ACLASS="CONSTANT"
650N/A>GETNAMEBYADDR</TT
321N/A></DT
321N/A><DD
321N/A><P
1177N/A>return the hostname for the given address.
321N/AThe lwres_gnba_*() functions should be used for this type.</P
4134N/A></DD
4134N/A></DL
4134N/A></DIV
321N/A></P
321N/A><P
4134N/A><TT
4134N/ACLASS="FUNCTION"
321N/A>lwres_lwpacket_renderheader()</TT
321N/A>
321N/Atransfers the contents of lightweight resolver packet structure
4134N/A<SPAN
321N/ACLASS="TYPE"
321N/A>lwres_lwpacket_t</SPAN
4134N/A>
4134N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>*pkt</I
321N/A></TT
4134N/A>
321N/Ain network byte order to the lightweight resolver buffer,
321N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>*b</I
321N/A></TT
4134N/A>.&#13;</P
321N/A><P
321N/A><TT
321N/ACLASS="FUNCTION"
650N/A>lwres_lwpacket_parseheader()</TT
650N/A>
650N/Aperforms the converse operation.
321N/AIt transfers data in network byte order from buffer
321N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>*b</I
321N/A></TT
321N/A>
321N/Ato resolver packet
321N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>*pkt</I
321N/A></TT
321N/A>.
321N/A
321N/AThe contents of the buffer
321N/A<TT
321N/ACLASS="PARAMETER"
1118N/A><I
4134N/A>b</I
4134N/A></TT
5496N/A>
321N/Ashould correspond to a
321N/A<SPAN
4134N/ACLASS="TYPE"
4134N/A>lwres_lwpacket_t</SPAN
321N/A>.&#13;</P
4134N/A><P
321N/A>Both functions have assertion checks to ensure that
4134N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>b</I
321N/A></TT
650N/A>
650N/Aand
650N/A<TT
650N/ACLASS="PARAMETER"
321N/A><I
321N/A>pkt</I
321N/A></TT
321N/A>
4134N/Aare not
4134N/A<SPAN
321N/ACLASS="TYPE"
4134N/A>NULL</SPAN
4134N/A>.&#13;</P
321N/A></DIV
321N/A><DIV
321N/ACLASS="REFSECT1"
321N/A><A
321N/ANAME="AEN112"
4134N/A></A
321N/A><H2
321N/A>RETURN VALUES</H2
321N/A><P
321N/A>Successful calls to
321N/A<TT
321N/ACLASS="FUNCTION"
4134N/A>lwres_lwpacket_renderheader()</TT
321N/A>
321N/Aand
321N/A<TT
321N/ACLASS="FUNCTION"
650N/A>lwres_lwpacket_parseheader()</TT
650N/A>
650N/Areturn
321N/A<SPAN
321N/ACLASS="ERRORCODE"
321N/A>LWRES_R_SUCCESS</SPAN
321N/A>.
321N/A
321N/AIf there is insufficient space to copy data between the buffer
321N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>*b</I
333N/A></TT
321N/A>
321N/Aand lightweight resolver packet
321N/A<TT
321N/ACLASS="PARAMETER"
321N/A><I
321N/A>*pkt</I
321N/A></TT
321N/A>
321N/Aboth functions return
321N/A<SPAN
321N/ACLASS="ERRORCODE"
321N/A>LWRES_R_UNEXPECTEDEND</SPAN
321N/A>.&#13;</P
321N/A></DIV
321N/A></BODY
321N/A></HTML
321N/A>