/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/ /* addrpool.h FILE HISTORY: */ #if !defined _ADDRPOOL_H_ #define _ADDRPOOL_H_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "listctrl.h" #include "dialog.h" #include "ipctrl.h" /*--------------------------------------------------------------------------- Class: AddressPoolInfo This class holds the information pertaining to the address pool. Basically, it holds the start and end addresses (in NETWORK order). ---------------------------------------------------------------------------*/ class AddressPoolInfo { public: AddressPoolInfo() : m_netStart(0), m_netEnd(0), m_netAddress(0), m_netMask(0), m_dwKey(0) {}; DWORD m_netStart; DWORD m_netEnd; DWORD m_netAddress; DWORD m_netMask; DWORD m_dwKey; DWORD GetNumberOfAddresses() { return ntohl(m_netEnd) - ntohl(m_netStart) + 1; } // Calculate the address and the mask from the start/end address BOOL Calc(DWORD *pdwAddress, DWORD *pdwMask); DWORD GetNewKey(); // This is the back door provided for compatibility until the // service is fixed. You can set the address and mask and // add an entry (I will backfill the start/end address). // dwAddress and dwMask are in NETWORK order. void SetAddressAndMask(DWORD dwAddress, DWORD dwMask); void SetStartAndEnd(DWORD dwStart, DWORD dwEnd); }; typedef CList AddressPoolListBase; class AddressPoolList : public AddressPoolListBase { public: AddressPoolList() : m_fMultipleAddressPools(FALSE) { } // This function checks to see if there are any conflicts // with any other address pools (we don't allow overlaps). // Returns S_OK if it is ok. // Else if is a success code, it is a string id of an error // Else if is a failure code, it is an error code HRESULT HrIsValidAddressPool(AddressPoolInfo *pInfo); // This will return TRUE if address pools are supported. // This will return FALSE if the old style, single address // pools are used. // This will not be set correctly until LoadFromReg() is called. BOOL FUsesMultipleAddressPools(); // Load the information from the regsitry. If the StaticAddressPool // key does not exist, read from the old address/mask keys. HRESULT LoadFromReg(HKEY hkeyRasIP, DWORD dwBuildNo); // Save the information to the registry. If the StaticAddressPool // key does not exist, write out the first address in the address pool // to the old address/mask keys. HRESULT SaveToReg(HKEY hkeyRasIP, DWORD dwBuildNo); protected: BOOL m_fMultipleAddressPools; }; // Displays the long version of the address pool control. This // will show the start/stop/count/address/mask columns. // The short version shows the start/stop/count columns. The short // version is intended for the wizard pages. #define ADDRPOOL_LONG 0x01 HRESULT InitializeAddressPoolListControl(CListCtrl *pListCtrl, LPARAM flags, AddressPoolList *pList); void OnNewAddressPool(HWND hWnd, CListCtrl *pList, LPARAM flags, AddressPoolList *pPoolList); void OnEditAddressPool(HWND hWnd, CListCtrl *pList, LPARAM flags, AddressPoolList *pPoolList); void OnDeleteAddressPool(HWND hWnd, CListCtrl *pList, LPARAM flags, AddressPoolList *pPoolList); class CAddressPoolDialog : public CBaseDialog { public: CAddressPoolDialog(AddressPoolInfo *pPool, AddressPoolList *pPoolList, BOOL fCreate); protected: virtual VOID DoDataExchange(CDataExchange *pDX); virtual BOOL OnInitDialog(); virtual void OnOK(); afx_msg void OnChangeStartAddress(); afx_msg void OnChangeEndAddress(); afx_msg void OnChangeRange(); afx_msg void OnKillFocusStartAddress(); afx_msg void OnKillFocusEndAddress(); void GenerateRange(); BOOL m_fCreate; BOOL m_fReady; AddressPoolInfo * m_pPool; AddressPoolList * m_pPoolList; IPControl m_ipStartAddress; IPControl m_ipEndAddress; DECLARE_MESSAGE_MAP() }; /*--------------------------------------------------------------------------- This enum defines the columns for Address pool controls. ---------------------------------------------------------------------------*/ enum { IPPOOLCOL_START = 0, IPPOOLCOL_END, IPPOOLCOL_RANGE, IPPOOLCOL_IPADDRESS, IPPOOLCOL_MASK, IPPOOLCOL_COUNT, }; #endif // !defined _ADDRPOOL_H_