/**********************************************************************/
/**     		  Microsoft Windows NT  		     **/
/**     	   Copyright(c) Microsoft Corporation, 1991 - 1998 	     **/
/**********************************************************************/

/*
	utils.h
	    Utility routine header file for DHCPSNAP.DLL

    FILE HISTORY:
		DavidHov	6/15/93 	Created
		EricDav		2/13/97		Updated 
*/

#if !defined(_DHCPUTIL_H_)
#define _DHCPUTIL_H_

enum ENUM_HOST_NAME_TYPE 
{
     HNM_TYPE_INVALID,
     HNM_TYPE_IP,
     HNM_TYPE_DNS,
     HNM_TYPE_NB,
     HNM_TYPE_MAX
};

#define DHCPSNAP_STRING_MAX  			256
#define DHCPSNAP_COMPUTER_NAME_MAX   	20

extern wchar_t rgchHex[];

typedef struct
{
    DHCP_IP_ADDRESS _dhipa ;    						//   IP Address
    TCHAR _chHostName [DHCPSNAP_STRING_MAX*2] ; 			//   Host DNS name
    TCHAR _chNetbiosName [DHCPSNAP_STRING_MAX*2] ;  //   Host NetBIOS name (if known)
} DHC_HOST_INFO_STRUCT ;

int
UtilGetOptionPriority(int nOpt1, int nOpt2);

BOOL
UtilGetFolderName(CString & strInitialPath, CString& strHelpText, CString& strSelectedPath);

void  
UtilConvertLeaseTime(DWORD dwLeaseTime, int *pnDays, int *pnHours, int *pnMinutes);

DWORD 
UtilConvertLeaseTime(int pnDays, int pnHours, int pnMinutes);

ENUM_HOST_NAME_TYPE
UtilCategorizeName (LPCTSTR pszName);

//  Convert a string to an IP address
extern DHCP_IP_ADDRESS 
UtilCvtStringToIpAddr 
(
	const CHAR * pszString
);

extern DHCP_IP_ADDRESS
UtilCvtWstrToIpAddr 
(
    const LPCWSTR pcwString
);


//  Convert an IP address into a displayable string

extern void 
UtilCvtIpAddrToString 
(
    DHCP_IP_ADDRESS dhipa,
    CHAR * pszString,
    UINT cBuffSize
);

extern BOOL
UtilCvtIpAddrToWstr 
(
    DHCP_IP_ADDRESS		dhipa,
	CString *			pstrIpAddress
);


extern BOOL 
UtilCvtIpAddrToWstr 
(
    DHCP_IP_ADDRESS dhipa,
    WCHAR * pwcszString,
    INT cBuffCount
);

extern WCHAR * 
UtilDupIpAddrToWstr 
(
    DHCP_IP_ADDRESS dhipa 
);

//  "strdup" for C++ wcstrs.
extern WCHAR * 
UtilWcstrDup 
(
    const WCHAR * pwcsz,
    INT * pccwLength = NULL 
);

extern WCHAR * 
UtilWcstrDup 
(
    const CHAR * psz,
    INT * pccwLength = NULL
);

extern CHAR * 
UtilCstrDup 
(
    const WCHAR * pwcsz
);

extern CHAR * 
UtilCstrDup 
(
    const CHAR * psz 
);

//  Return a standard information structure for the given
//  host IP address

extern DWORD
UtilGetHostInfo 
(
    DHCP_IP_ADDRESS dhipa,
    DHC_HOST_INFO_STRUCT * pdhsrvi
);


//  Return the IP address of this host machine

extern HRESULT 
UtilGetLocalHostAddress 
(
    DHCP_IP_ADDRESS * pdhipa
);

extern HRESULT 
UtilGetHostAddressFQDN
(
    LPCTSTR				pszHostName,
    CString *           pstrFQDN,
    DHCP_IP_ADDRESS *	pdhipa
);

extern HRESULT 
UtilGetHostAddress 
(
    LPCTSTR			  pszHostName,
    DHCP_IP_ADDRESS * pdhipa
);

extern HRESULT 
UtilGetLocalHostName
(
    CString * pstrName
);

extern HRESULT 
UtilGetNetbiosAddress 
(
    LPCTSTR           pszNetbiosName,
    DHCP_IP_ADDRESS * pdhipa
);


extern BOOL
UtilCvtHexString 
(
    LPCTSTR		 pszNum,
    CByteArray & cByte
);

extern BOOL
UtilCvtByteArrayToString 
(
    const CByteArray & abAddr,
    CString & str
);

WCHAR * 
PchParseUnicodeString
(
	CONST WCHAR *   szwString, 
    DWORD           dwLength,
	CString&        rString
);

BOOL FGetCtrlDWordValue(HWND hwndEdit, DWORD * pdwValue, DWORD dwMin, DWORD dwMax);

//  Convert ASCII string of decimal or hex numbers to binary integer
BOOL FCvtAsciiToInteger(IN const TCHAR * pszNum, OUT DWORD * pdwValue);

void UtilConvertStringToDwordDword(LPCTSTR pszString, DWORD_DWORD * pdwdw);
void UtilConvertDwordDwordToString(DWORD_DWORD * pdwdw, CString * pstrString, BOOL bDecimal);

#endif  //  _DHCPUTIL_H_

// End of DHCPUTIL.H