|
Listing 1.7 Reading/Writing Question Records
NS_Qrec.h:
/* Query Type */
#define QTYPE_NB 0x0020 /* Name Query */
#define QTYPE_NBSTAT 0x0021 /* Adapter Status */
/* Query Class */
#define QCLASS_IN 0x0001 /* Internet Class */
NS_Qrec.c:
#include <string.h> /* For memcpy() */
#include <netinet/in.h> /* htons(), ntohs(), etc. */
#include "NS_Qrec.h"
int Put_Qrec( uchar *dst,
const uchar *name,
const uchar pad,
const uchar sfx,
const uchar *scope,
const ushort qtype )
/* ---------------------------------------------------- **
* Store the fully encoded NBT name in the destination
* buffer. Also write the QUERY_TYPE and QUERY_CLASS
* values.
* ---------------------------------------------------- **
*/
{
int len;
ushort tmp;
ushort qclass_in;
qclass_in = htons( QCLASS_IN );
/* Validate the qtype. */
if( (QTYPE_NB != qtype)
&& (QTYPE_NBSTAT != qtype ) )
return( -1 );
len = L2_Encode( dst, name, pad, sfx, scope );
if( len < 0 )
return( len );
tmp = htons( qtype );
(void)memcpy( &(dst[len]), &tmp, 2 );
len += 2;
(void)memcpy( &(dst[len]), &qclass_in, 2 );
return( len + 2 );
} /* Put_Qrec */
ushort Get_Qtype( const uchar *qrec, int offset )
/* ---------------------------------------------------- **
* Read the QUERY_TYPE field from a query record.
* Note that the offset parameter can be derived using
* L2_Decode() function in listing 1.4. Either that,
* or use 1+strlen( qrec ).
* ---------------------------------------------------- **
*/
{
ushort tmp;
/* Read the two bytes from the packet.
*/
tmp = (ushort)(qrec[offset]) * 256;
tmp |= qrec[1+offset];
/* Convert to host byte order and return. */
return( ntohs( tmp ) );
} /* Get_Qtype */
$Revision: 1.10 $
$Date: 2003/02/18 21:43:58 $
|
Copyright © 1999-2003 Christopher R. Hertel
Released under the terms of the
LGPL
|
|