397 lines
7.4 KiB
C
397 lines
7.4 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1998 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
|
||
|
ipa.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
IP Address value
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Ronald Meijer (ronaldm)
|
||
|
|
||
|
Project:
|
||
|
|
||
|
Internet Services Manager
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _IPA_H
|
||
|
#define _IPA_H
|
||
|
|
||
|
//
|
||
|
// IP Address Conversion Macros
|
||
|
//
|
||
|
#ifdef MAKEIPADDRESS
|
||
|
#undef MAKEIPADDRESS
|
||
|
#endif // MAKEIPADDRESS
|
||
|
|
||
|
#define MAKEIPADDRESS(b1,b2,b3,b4) (((DWORD)(b1)<<24) +\
|
||
|
((DWORD)(b2)<<16) +\
|
||
|
((DWORD)(b3)<< 8) +\
|
||
|
((DWORD)(b4)))
|
||
|
|
||
|
#ifndef GETIP_FIRST
|
||
|
|
||
|
#define GETIP_FIRST(x) ((x>>24) & 0xff)
|
||
|
#define GETIP_SECOND(x) ((x>>16) & 0xff)
|
||
|
#define GETIP_THIRD(x) ((x>> 8) & 0xff)
|
||
|
#define GETIP_FOURTH(x) ((x) & 0xff)
|
||
|
|
||
|
#endif // GETIP_FIRST
|
||
|
|
||
|
//
|
||
|
// Some predefined IP values
|
||
|
//
|
||
|
#define NULL_IP_ADDRESS (DWORD)(0x00000000)
|
||
|
#define NULL_IP_MASK (DWORD)(0xFFFFFFFF)
|
||
|
#define BAD_IP_ADDRESS (DWORD)(0xFFFFFFFF)
|
||
|
|
||
|
|
||
|
|
||
|
class COMDLL CIPAddress : public CObjectPlus
|
||
|
/*++
|
||
|
|
||
|
Class Description:
|
||
|
|
||
|
IP Address classes. Winsock is required to be initialized for this
|
||
|
to work.
|
||
|
|
||
|
Public Interface:
|
||
|
|
||
|
CIPAddress : Various constructors
|
||
|
|
||
|
operator = : Assignment operator
|
||
|
operator == : Comparison operators
|
||
|
operator const DWORD : Cast operator
|
||
|
operator LPCTSTR : Cast operator
|
||
|
operator CString : Cast operator
|
||
|
CompareItem : Comparison function
|
||
|
QueryIPAddress : Get the ip address value
|
||
|
QueryNetworkOrderIPAddress : Get the ip address value (network order)
|
||
|
QueryHostOrderIPAddress : Get the ip address value (host order)
|
||
|
|
||
|
StringToLong : Convert ip address string to 32 bit number
|
||
|
LongToString : Convert 32 bit value to ip address string
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
//
|
||
|
// Helper Functions
|
||
|
//
|
||
|
public:
|
||
|
static DWORD StringToLong(
|
||
|
IN LPCTSTR lpstr,
|
||
|
IN int nLength
|
||
|
);
|
||
|
|
||
|
static DWORD StringToLong(
|
||
|
IN const CString & str
|
||
|
);
|
||
|
|
||
|
static DWORD StringToLong(
|
||
|
IN const CComBSTR & bstr
|
||
|
);
|
||
|
|
||
|
static LPCTSTR LongToString(
|
||
|
IN const DWORD dwIPAddress,
|
||
|
OUT CString & str
|
||
|
);
|
||
|
|
||
|
static LPCTSTR LongToString(
|
||
|
IN const DWORD dwIPAddress,
|
||
|
OUT CComBSTR & bstr
|
||
|
);
|
||
|
|
||
|
static LPTSTR LongToString(
|
||
|
IN const DWORD dwIPAddress,
|
||
|
OUT LPTSTR lpStr,
|
||
|
IN int cbSize
|
||
|
);
|
||
|
|
||
|
static LPBYTE DWORDtoLPBYTE(
|
||
|
IN DWORD dw,
|
||
|
OUT LPBYTE lpBytes
|
||
|
);
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Constructors
|
||
|
//
|
||
|
CIPAddress();
|
||
|
|
||
|
//
|
||
|
// Construct from DWORD
|
||
|
//
|
||
|
CIPAddress(
|
||
|
IN DWORD dwIPValue,
|
||
|
IN BOOL fNetworkByteOrder = FALSE
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Construct from byte stream
|
||
|
//
|
||
|
CIPAddress(
|
||
|
IN LPBYTE lpBytes,
|
||
|
IN BOOL fNetworkByteOrder = FALSE
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Construct from octets
|
||
|
//
|
||
|
CIPAddress(
|
||
|
IN BYTE b1,
|
||
|
IN BYTE b2,
|
||
|
IN BYTE b3,
|
||
|
IN BYTE b4
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Copy constructor
|
||
|
//
|
||
|
CIPAddress(
|
||
|
IN const CIPAddress & ia
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Construct from string
|
||
|
//
|
||
|
CIPAddress(
|
||
|
IN LPCTSTR lpstr,
|
||
|
IN int nLength
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Construct from CString
|
||
|
//
|
||
|
CIPAddress(
|
||
|
IN const CString & str
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Access Functions
|
||
|
//
|
||
|
public:
|
||
|
int CompareItem(
|
||
|
IN const CIPAddress & ia
|
||
|
) const;
|
||
|
|
||
|
//
|
||
|
// Query IP address value as a dword
|
||
|
//
|
||
|
DWORD QueryIPAddress(
|
||
|
IN BOOL fNetworkByteOrder = FALSE
|
||
|
) const;
|
||
|
|
||
|
//
|
||
|
// Get the ip address value as a byte stream
|
||
|
//
|
||
|
LPBYTE QueryIPAddress(
|
||
|
OUT LPBYTE lpBytes,
|
||
|
IN BOOL fNetworkByteOrder = FALSE
|
||
|
) const;
|
||
|
|
||
|
//
|
||
|
// Get the ip address as a CString
|
||
|
//
|
||
|
LPCTSTR QueryIPAddress(
|
||
|
OUT CString & strAddress
|
||
|
) const;
|
||
|
|
||
|
//
|
||
|
// Get the ip address as a CComBSTR
|
||
|
//
|
||
|
LPCTSTR QueryIPAddress(
|
||
|
OUT CComBSTR & bstrAddress
|
||
|
) const;
|
||
|
|
||
|
//
|
||
|
// Get ip address in network byte order DWORD
|
||
|
//
|
||
|
DWORD QueryNetworkOrderIPAddress() const;
|
||
|
|
||
|
//
|
||
|
// Get the ip address in host byte order DWORD
|
||
|
//
|
||
|
DWORD QueryHostOrderIPAddress() const;
|
||
|
|
||
|
//
|
||
|
// Assignment operators
|
||
|
//
|
||
|
const CIPAddress & operator =(
|
||
|
IN const DWORD dwIPAddress
|
||
|
);
|
||
|
|
||
|
const CIPAddress & operator =(
|
||
|
IN LPCTSTR lpstr
|
||
|
);
|
||
|
|
||
|
const CIPAddress & operator =(
|
||
|
IN const CString & str
|
||
|
);
|
||
|
|
||
|
const CIPAddress & operator =(
|
||
|
IN const CIPAddress & ia
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Comparison operators
|
||
|
//
|
||
|
BOOL operator ==(
|
||
|
IN const CIPAddress & ia
|
||
|
) const;
|
||
|
|
||
|
BOOL operator ==(
|
||
|
IN DWORD dwIPAddress
|
||
|
) const;
|
||
|
|
||
|
BOOL operator !=(
|
||
|
IN const CIPAddress & ia
|
||
|
) const;
|
||
|
|
||
|
BOOL operator !=(
|
||
|
IN DWORD dwIPAddress
|
||
|
) const;
|
||
|
|
||
|
//
|
||
|
// Conversion operators
|
||
|
//
|
||
|
operator const DWORD() const { return m_dwIPAddress; }
|
||
|
operator LPCTSTR() const;
|
||
|
operator CString() const;
|
||
|
|
||
|
//
|
||
|
// Value Verification Helpers
|
||
|
//
|
||
|
void SetZeroValue();
|
||
|
BOOL IsZeroValue() const;
|
||
|
BOOL IsBadValue() const;
|
||
|
|
||
|
private:
|
||
|
DWORD m_dwIPAddress;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Inline Expansion
|
||
|
//
|
||
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||
|
|
||
|
inline /* static */ DWORD CIPAddress::StringToLong(
|
||
|
IN const CString & str
|
||
|
)
|
||
|
{
|
||
|
return CIPAddress::StringToLong(str, str.GetLength());
|
||
|
}
|
||
|
|
||
|
inline /* static */ DWORD CIPAddress::StringToLong(
|
||
|
IN const CComBSTR & bstr
|
||
|
)
|
||
|
{
|
||
|
return CIPAddress::StringToLong(bstr, bstr.Length());
|
||
|
}
|
||
|
|
||
|
inline LPCTSTR CIPAddress::QueryIPAddress(
|
||
|
OUT CString & strAddress
|
||
|
) const
|
||
|
{
|
||
|
return LongToString(m_dwIPAddress, strAddress);
|
||
|
}
|
||
|
|
||
|
inline LPCTSTR CIPAddress::QueryIPAddress(
|
||
|
OUT CComBSTR & bstrAddress
|
||
|
) const
|
||
|
{
|
||
|
return LongToString(m_dwIPAddress, bstrAddress);
|
||
|
}
|
||
|
|
||
|
inline DWORD CIPAddress::QueryNetworkOrderIPAddress() const
|
||
|
{
|
||
|
return QueryIPAddress(TRUE);
|
||
|
}
|
||
|
|
||
|
inline DWORD CIPAddress::QueryHostOrderIPAddress() const
|
||
|
{
|
||
|
return QueryIPAddress(FALSE);
|
||
|
}
|
||
|
|
||
|
inline BOOL CIPAddress::operator ==(
|
||
|
IN const CIPAddress & ia
|
||
|
) const
|
||
|
{
|
||
|
return CompareItem(ia) == 0;
|
||
|
}
|
||
|
|
||
|
inline BOOL CIPAddress::operator ==(
|
||
|
IN DWORD dwIPAddress
|
||
|
) const
|
||
|
{
|
||
|
return m_dwIPAddress == dwIPAddress;
|
||
|
}
|
||
|
|
||
|
inline BOOL CIPAddress::operator !=(
|
||
|
IN const CIPAddress & ia
|
||
|
) const
|
||
|
{
|
||
|
return CompareItem(ia) != 0;
|
||
|
}
|
||
|
|
||
|
inline BOOL CIPAddress::operator !=(
|
||
|
IN DWORD dwIPAddress
|
||
|
) const
|
||
|
{
|
||
|
return m_dwIPAddress != dwIPAddress;
|
||
|
}
|
||
|
|
||
|
inline void CIPAddress::SetZeroValue()
|
||
|
{
|
||
|
m_dwIPAddress = NULL_IP_ADDRESS;
|
||
|
}
|
||
|
|
||
|
inline BOOL CIPAddress::IsZeroValue() const
|
||
|
{
|
||
|
return m_dwIPAddress == NULL_IP_ADDRESS;
|
||
|
}
|
||
|
|
||
|
inline BOOL CIPAddress::IsBadValue() const
|
||
|
{
|
||
|
return m_dwIPAddress == BAD_IP_ADDRESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Helper function to build a list of known IP addresses,
|
||
|
// and add them to a combo box
|
||
|
//
|
||
|
DWORD
|
||
|
COMDLL
|
||
|
PopulateComboWithKnownIpAddresses(
|
||
|
IN LPCTSTR lpszServer,
|
||
|
IN CComboBox & combo,
|
||
|
IN CIPAddress & iaIpAddress,
|
||
|
OUT CObListPlus & oblIpAddresses,
|
||
|
OUT int & nIpAddressSel
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Helper function to get an ip address from a combo/edit/list
|
||
|
// control
|
||
|
//
|
||
|
BOOL
|
||
|
COMDLL
|
||
|
FetchIpAddressFromCombo(
|
||
|
IN CComboBox & combo,
|
||
|
IN CObListPlus & oblIpAddresses,
|
||
|
OUT CIPAddress & ia
|
||
|
);
|
||
|
|
||
|
#endif // _IPA_H
|