Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

243 lines
6.6 KiB

// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
/*-----------------------------------------------------------------
Filename: address.hpp
Written By: B.Rajeev
Purpose:
Provides an abstract class SnmpTransportAddress for manipulating
SNMP transport address information. The class SnmpTransportIpAddress
provides an implementation of the abstract class for IP addresses
-----------------------------------------------------------------*/
#ifndef __ADDRESS__
#define __ADDRESS__
// an IP address is specified using these many UCHAR fields
#define SNMP_IP_ADDR_LEN 4
#define SNMP_IPX_ADDR_LEN 10
#define SNMP_IPX_NETWORK_LEN 4
#define SNMP_IPX_STATION_LEN 6
// behaviour of ip address resolution
#define SNMP_ADDRESS_RESOLVE_VALUE 1
#define SNMP_ADDRESS_RESOLVE_NAME 2
// The SNMP transport information is defined by this abstract class
// since this class may not be instantiated, the copy constructor
// and the "=" operators have been made private and give null definitions
class DllImportExport SnmpTransportAddress
{
private:
// should not be called - returns itself
SnmpTransportAddress & operator= ( IN const SnmpTransportAddress &address )
{
return *this;
}
// private copy constructor
SnmpTransportAddress(IN const SnmpTransportAddress &address) {}
protected:
// protected constructor
SnmpTransportAddress () {}
public:
virtual ~SnmpTransportAddress () {}
virtual BOOL IsValid () const = 0;
virtual SnmpTransportAddress *Copy () const = 0;
// enables indexing a particular UCHAR field of the address
virtual UCHAR operator [] ( IN const USHORT index ) const = 0;
// copies the UCHAR fields describing the address onto the OUT UCHAR *
// parameter. atmost the specified USHORT fields are copied and the
// number of copied fields is returned
virtual USHORT GetAddress ( OUT UCHAR * , IN const USHORT ) const = 0;
// returns the number of UCHAR fields currently describing the address
virtual USHORT GetAddressLength () const = 0;
// returns a character string representation of the address
virtual char *GetAddress () = 0;
virtual operator void *() const = 0;
virtual void *operator()(void) const = 0;
} ;
// provides an implementation of the SnmpTransportAddress for IP addresses
class DllImportExport SnmpTransportIpAddress : public SnmpTransportAddress
{
private:
BOOL is_valid;
UCHAR field[SNMP_IP_ADDR_LEN];
// the dotted notation character string representation of the address
// is constructed on demand and stored in the field 'dotted_notation'
// the field 'allocated' is flagged 'dotted_notation' points to
// allocated memory
BOOL allocated;
char *dotted_notation;
BOOL GetIpAddress ( IN const char *address ) ;
public:
SnmpTransportIpAddress ( IN const UCHAR *address, IN const USHORT address_length );
SnmpTransportIpAddress ( IN const char *address, IN const ULONG addressResolution = SNMP_ADDRESS_RESOLVE_VALUE );
// the input parameter 'address' contains a single value (32bits) to
// be stored internally in SNMP_IP_ADDR_LEN UCHAR fields
SnmpTransportIpAddress ( IN const ULONG address );
SnmpTransportIpAddress ( IN const SnmpTransportIpAddress &address )
{
allocated = FALSE;
*this = address;
}
SnmpTransportIpAddress ()
{
is_valid = FALSE;
allocated = FALSE;
}
~SnmpTransportIpAddress();
USHORT GetAddress ( OUT UCHAR *address , IN const USHORT length ) const ;
USHORT GetAddressLength () const
{
return ((is_valid)?SNMP_IP_ADDR_LEN:0);
}
// memory for the decimal notation string is allocated only when
// the char *GetAddress method is called (and the address is valid)
// this memory must be freed if required
char *GetAddress ();
BOOL IsValid () const
{
return is_valid;
}
SnmpTransportAddress *Copy () const ;
BOOL operator== ( IN const SnmpTransportIpAddress & address ) const ;
BOOL operator!= ( IN const SnmpTransportIpAddress & address ) const
{
return !(*this==address);
}
SnmpTransportIpAddress & operator= ( IN const UCHAR *ipAddr ) ;
SnmpTransportIpAddress & operator= ( IN const SnmpTransportIpAddress &address );
UCHAR operator [] ( IN const USHORT index ) const ;
void * operator()(void) const
{
return ( (is_valid==TRUE)?(void *)this:NULL );
}
operator void *() const
{
return SnmpTransportIpAddress::operator()();
}
static BOOL ValidateAddress ( IN const char *address , IN const ULONG addressResolution = SNMP_ADDRESS_RESOLVE_VALUE ) ;
};
// provides an implementation of the SnmpTransportAddress for IP addresses
class DllImportExport SnmpTransportIpxAddress : public SnmpTransportAddress
{
private:
BOOL is_valid;
UCHAR field[SNMP_IPX_ADDR_LEN];
// the dotted notation character string representation of the address
// is constructed on demand and stored in the field 'dotted_notation'
// the field 'allocated' is flagged 'dotted_notation' points to
// allocated memory
BOOL allocated;
char *dotted_notation;
BOOL GetIpxAddress ( IN const char *address ) ;
public:
SnmpTransportIpxAddress ( IN const UCHAR *address, IN const USHORT address_length );
SnmpTransportIpxAddress ( IN const char *address );
SnmpTransportIpxAddress ( IN const SnmpTransportIpxAddress &address )
{
allocated = FALSE;
*this = address;
}
SnmpTransportIpxAddress ()
{
is_valid = FALSE;
allocated = FALSE;
}
~SnmpTransportIpxAddress();
USHORT GetAddress ( OUT UCHAR *address , IN const USHORT length ) const ;
USHORT GetAddressLength () const
{
return ((is_valid)?SNMP_IPX_ADDR_LEN:0);
}
// memory for the decimal notation string is allocated only when
// the char *GetAddress method is called (and the address is valid)
// this memory must be freed if required
char *GetAddress ();
BOOL IsValid () const
{
return is_valid;
}
SnmpTransportAddress *Copy () const ;
BOOL operator== ( IN const SnmpTransportIpxAddress & address ) const ;
BOOL operator!= ( IN const SnmpTransportIpxAddress & address ) const
{
return !(*this==address);
}
SnmpTransportIpxAddress & operator= ( IN const UCHAR *ipxAddr ) ;
SnmpTransportIpxAddress & operator= ( IN const SnmpTransportIpxAddress &address );
UCHAR operator [] ( IN const USHORT index ) const ;
void * operator()(void) const
{
return ( (is_valid==TRUE)?(void *)this:NULL );
}
operator void *() const
{
return SnmpTransportIpxAddress::operator()();
}
static BOOL ValidateAddress ( IN const char *address ) ;
};
#endif // __ADDRESS__