/*
* Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: lwpacket.h,v 1.24 2007-06-19 23:47:23 tbox Exp $ */
#ifndef LWRES_LWPACKET_H
#define LWRES_LWPACKET_H 1
#include <lwres/lang.h>
#include <lwres/lwbuffer.h>
#include <lwres/result.h>
/*% lwres_lwpacket_t */
typedef struct lwres_lwpacket lwres_lwpacket_t;
/*% lwres_lwpacket structure */
struct lwres_lwpacket {
/*! The overall packet length, including the
* entire packet header.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
lwres_uint32_t length;
/*! Specifies the header format. Currently,
* there is only one format, #LWRES_LWPACKETVERSION_0.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
lwres_uint16_t version;
/*! Specifies library-defined flags for this packet, such as
* whether the packet is a request or a reply. None of
* these are definable by the caller, but library-defined values
* can be set by the caller. For example, one bit in this field
* indicates if the packet is a request or a response.
* This field is filled in by
* the application wits the exception of the
* #LWRES_LWPACKETFLAG_RESPONSE bit, which is set by the library
* in the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
lwres_uint16_t pktflags;
/*! Set by the requestor and is returned in all replies.
* If two packets from the same source have the same serial
* number and are from the same source, they are assumed to
* be duplicates and the latter ones may be dropped.
* (The library does not do this by default on replies, but
* does so on requests.)
*/
lwres_uint32_t serial;
/*! Opcodes between 0x04000000 and 0xffffffff
* are application defined. Opcodes between
* 0x00000000 and 0x03ffffff are
* reserved for library use.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
lwres_uint32_t opcode;
/*! Only valid for results.
* Results between 0x04000000 and 0xffffffff are application
* defined.
* Results between 0x00000000 and 0x03ffffff are reserved for
* library use.
* (This is the same reserved range defined in <isc/resultclass.h>,
* so it
* would be trivial to map ISC_R_* result codes into packet result
* codes when appropriate.)
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
lwres_uint32_t result;
/*! Set to the maximum buffer size that the receiver can
* handle on requests, and the size of the buffer needed to
* satisfy a request
* when the buffer is too large for replies.
* This field is supplied by the application.
*/
lwres_uint32_t recvlength;
/*! The packet level auth type used.
* Authtypes between 0x1000 and 0xffff are application defined.
* Authtypes
* between 0x0000 and 0x0fff are reserved for library use.
* This is currently
* unused and MUST be set to zero.
*/
lwres_uint16_t authtype;
/*! The length of the authentication data.
* See the specific
* authtypes for more information on what is contained
* in this field. This is currently unused, and
* MUST be set to zero.
*/
lwres_uint16_t authlength;
};
#define LWRES_LWPACKET_LENGTH (4 * 5 + 2 * 4) /*%< Overall length. */
#define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /*%< If set, pkt is a response. */
#define LWRES_LWPACKETVERSION_0 0 /*%< Header format. */
/*! \file lwres/lwpacket.h
*
*
* The remainder of the packet consists of two regions, one described by
* "authlen" and one of "length - authlen - sizeof(lwres_lwpacket_t)".
*
* That is:
*
* \code
* pkt header
* authlen bytes of auth information
* data bytes
* \endcode
*
* Currently defined opcodes:
*
*\li #LWRES_OPCODE_NOOP. Success is always returned, with the packet contents echoed.
*
*\li #LWRES_OPCODE_GETADDRSBYNAME. Return all known addresses for a given name.
* This may return NIS or /etc/hosts info as well as DNS
* information. Flags will be provided to indicate ip4/ip6
* addresses are desired.
*
*\li #LWRES_OPCODE_GETNAMEBYADDR. Return the hostname for the given address. Once
* again, it will return data from multiple sources.
*/
LWRES_LANG_BEGINDECLS
/* XXXMLG document */
lwres_result_t
lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
lwres_result_t
lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
LWRES_LANG_ENDDECLS
#endif /* LWRES_LWPACKET_H */
Copyright 2K16 - 2K18 Indonesian Hacker Rulez