/***************************************************************************** * * $Workfile: IPAddr.cpp $ * * Copyright (C) 1997 Hewlett-Packard Company. * All rights reserved. * * 11311 Chinden Blvd. * Boise, Idaho 83714 * *****************************************************************************/ #include "precomp.h" // pre-compiled header /////////////////////////////////////////////////////////////////////////////// // CIPAddress::CIPAddress() // Initializes the IP address CIPAddress::CIPAddress() { m_psztStorageStringComponent[0] = '\0'; m_psztStorageString[0] = '\0'; } // ::CIPAddress() /////////////////////////////////////////////////////////////////////////////// // CIPAddress::CIPAddress(someString) // Initializes the IP address given a string CIPAddress::CIPAddress(LPTSTR in psztIPAddr) { int num0 = 0; int num1 = 0; int num2 = 0; int num3 = 0; if (_stscanf(psztIPAddr, _TEXT("%d.%d.%d.%d"), &num0, &num1, &num2, &num3) == 4) { m_bAddress[0] = (BYTE)num0; m_bAddress[1] = (BYTE)num1; m_bAddress[2] = (BYTE)num2; m_bAddress[3] = (BYTE)num3; } else { ZeroMemory (m_bAddress, sizeof m_bAddress); } } // ::CIPAddress() /////////////////////////////////////////////////////////////////////////////// // CIPAddress::~CIPAddress() // CIPAddress::~CIPAddress() { } // ::~CIPAddress() /////////////////////////////////////////////////////////////////////////////// // IsValid -- validate an ip address // BOOL CIPAddress::IsValid(TCHAR *psztStringAddress, TCHAR *psztReturnVal, DWORD CRtnValSize) { BOOL bIsValid = TRUE; CHAR szHostName[MAX_NETWORKNAME_LEN]; UNICODE_TO_MBCS(szHostName, MAX_NETWORKNAME_LEN, psztStringAddress, -1); if ( inet_addr(szHostName) == INADDR_NONE ) { bIsValid = FALSE; } else { int num0 = 0; int num1 = 0; int num2 = 0; int num3 = 0; // // Scan for correct dotted notation // if( _stscanf(psztStringAddress, _TEXT("%d.%d.%d.%d"), &num0, &num1, &num2, &num3) != 4 ) { bIsValid = FALSE; } if( num0 == 0 ) { bIsValid = FALSE; } } // Finish if (!bIsValid) { if(psztReturnVal != NULL) { lstrcpyn(psztReturnVal, m_psztStorageString, CRtnValSize); } } else { lstrcpyn(m_psztStorageString, psztStringAddress, STORAGE_STRING_LEN); } return(bIsValid); } // IsValid /////////////////////////////////////////////////////////////////////////////// // IsValid -- validate an ip number entered in an edit control. // BOOL CIPAddress::IsValid(BYTE Address[4]) { for(int i=0; i<4; i++) { if ((Address[i] > 255) || (Address[i] < 0)) { return FALSE; } } // if we got through all that stuff: return TRUE; } // IsValid /////////////////////////////////////////////////////////////////////////////// // SetAddress -- set the value of this IPAddress object given 4 strings // void CIPAddress::SetAddress(TCHAR *psztAddr1, TCHAR *psztAddr2, TCHAR *psztAddr3, TCHAR *psztAddr4) { m_bAddress[0] = (BYTE) _ttoi( psztAddr1 ); m_bAddress[1] = (BYTE) _ttoi( psztAddr2 ); m_bAddress[2] = (BYTE) _ttoi( psztAddr3 ); m_bAddress[3] = (BYTE) _ttoi( psztAddr4 ); } // SetAddress /////////////////////////////////////////////////////////////////////////////// // SetAddress -- Set the address given a string // void CIPAddress::SetAddress(TCHAR *psztAddress) { int num0 = 0; int num1 = 0; int num2 = 0; int num3 = 0; if(IsValid(psztAddress) && _stscanf(psztAddress, _TEXT("%d.%d.%d.%d"), &num0, &num1, &num2, &num3) == 4 ) { m_bAddress[0] = (BYTE)num0; m_bAddress[1] = (BYTE)num1; m_bAddress[2] = (BYTE)num2; m_bAddress[3] = (BYTE)num3; } else { ZeroMemory (m_bAddress, sizeof m_bAddress); } } // SetAddress /////////////////////////////////////////////////////////////////////////////// // ToString -- fill the given buffer with a string representing the IP address. // void CIPAddress::ToString(TCHAR *psztBuffer, int iSize) { TCHAR strAddr[MAX_IPADDR_STR_LEN] = NULLSTR; StringCchPrintf (strAddr, COUNTOF (strAddr), _TEXT("%d.%d.%d.%d"), m_bAddress[0], m_bAddress[1], m_bAddress[2], m_bAddress[3]); lstrcpyn(psztBuffer, strAddr, iSize); } // ToString /////////////////////////////////////////////////////////////////////////////// // ToComponentStrings -- fill the given buffers with 4 strings representing the IP address. // void CIPAddress::ToComponentStrings(TCHAR *str1, TCHAR *str2, TCHAR *str3, TCHAR *str4, size_t cchStr) { StringCchPrintf (str1, cchStr, TEXT("%d"), m_bAddress[0]); StringCchPrintf (str2, cchStr, TEXT("%d"), m_bAddress[1]); StringCchPrintf (str3, cchStr, TEXT("%d"), m_bAddress[2]); StringCchPrintf (str4, cchStr, TEXT("%d"), m_bAddress[3]); } // ToComponentStrings