|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/
/*
server.h This file contains the prototypes for a DHCP Server object and the Bootp and Global Options objects contained within it. The other object that a can be within a DHCP server is a superscope, which is defined is in cdhcpss.cpp and cdhcpss.h. FILE HISTORY: */
#ifndef _SERVER_H
#define _SERVER_H
#ifndef _DHCPHAND_H
#include "dhcphand.h"
#endif
#ifndef _SERVSTAT_H
#include "servstat.h" // Server statistics
#endif
#ifndef _SSCPSTAT_H
#include "sscpstat.h" // Superscope statistics
#endif
#ifndef _CLASSMOD_H
#include "classmod.h" // Class Stuff
#endif
#define SERVER_OPTION_AUTO_REFRESH 0x00000001
#define SERVER_OPTION_AUDIT_LOGGING 0x00000002
#define SERVER_OPTION_SHOW_BOOTP 0x00000004
#define SERVER_OPTION_EXTENSION 0x00000008 // this server was added as an extension
#define SERVER_OPTION_SHOW_ROGUE 0x00000010
#define AUTO_REFRESH_HOURS_MAX 23
#define AUTO_REFRESH_MINUTES_MAX 59
#define AUTO_REFRESH_SECONDS_MAX 59
#define DHCP_QDATA_VERSION 0x00000001
#define DHCP_QDATA_SERVER_INFO 0x00000002
#define DHCP_QDATA_STATS 0x00000003
#define DHCP_QDATA_CLASS_INFO 0x00000004
#define DHCP_QDATA_MCAST_STATS 0x00000005
#define DHCP_QDATA_OPTION_VALUES 0x00000006
#define DHCP_QDATA_ROGUE_INFO 0x00000007
#define DHCP_QDATA_SERVER_ID 0x00000008
#define DHCP_QDATA_SUBNET_INFO_CACHE 0x00000009
typedef struct DhcpRogueInfo_tag { BOOL fIsRogue; BOOL fIsInNt5Domain; } DHCP_ROGUE_INFO, * LPDHCP_ROGUE_INFO;
typedef struct DhcpServerInfo_tag { BOOL fAuditLog; DWORD dwPingRetries; CString strDatabasePath; CString strBackupPath;
// audit logging stuff
CString strAuditLogDir; DWORD dwDiskCheckInterval; DWORD dwMaxLogFilesSize; DWORD dwMinSpaceOnDisk; // Does it support DynamicBOOTP?
BOOL fSupportsDynBootp;
// Does it support Bindings?
BOOL fSupportsBindings; } DHCP_SERVER_CONFIG, * LPDHCP_SERVER_CONFIG;
typedef struct DhcpServerId_tag { CString strIp; CString strName; } DHCP_SERVER_ID, * LPDHCP_SERVER_ID;
class CDhcpGlobalOptions; class CSubnetInfoCache;
/*---------------------------------------------------------------------------
Class: CDhcpServer ---------------------------------------------------------------------------*/ class CDhcpServer : public CMTDhcpHandler { public: CDhcpServer(ITFSComponentData* pTFSComponentData, LPCWSTR pServerName = NULL); ~CDhcpServer();
// Interface
public: // base handler functionality we override
OVERRIDE_NodeHandler_HasPropertyPages(); OVERRIDE_NodeHandler_CreatePropertyPages(); OVERRIDE_NodeHandler_OnAddMenuItems(); OVERRIDE_NodeHandler_OnCommand(); OVERRIDE_NodeHandler_GetString(); OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
OVERRIDE_NodeHandler_DestroyHandler();
// Choose which messages we want to handle
OVERRIDE_BaseHandlerNotify_OnDelete(); OVERRIDE_BaseHandlerNotify_OnPropertyChange();
// Result handler functionality
OVERRIDE_BaseResultHandlerNotify_OnResultSelect(); OVERRIDE_BaseResultHandlerNotify_OnResultDelete(); OVERRIDE_ResultHandler_CompareItems(); OVERRIDE_ResultHandler_CompareItemsEx(); OVERRIDE_ResultHandler_OnGetResultViewType();
public: // CMTDhcpHandler functionality
virtual HRESULT InitializeNode(ITFSNode * pNode); virtual int GetImageIndex(BOOL bOpenImage); ITFSQueryObject* OnCreateQuery(ITFSNode * pNode); virtual void OnHaveData(ITFSNode * pParentNode, ITFSNode * pNode); virtual void OnHaveData(ITFSNode * pParentNode, LPARAM Data, LPARAM Type); virtual DWORD UpdateStatistics(ITFSNode * pNode); ITFSQueryObject* OnCreateStatsQuery(ITFSNode *pNode); virtual void UpdateToolbar(IToolbar * pToolbar, LONG_PTR dwNodeType, BOOL bSelect); void UpdateConsoleVerbs(ITFSComponent* pComponent, IConsoleVerb * pConsoleVerb, LONG_PTR dwNodeType, BOOL bMultiSelect = FALSE); STDMETHOD(OnNotifyExiting)(LPARAM);
HRESULT OnUpdateToolbarButtons(ITFSNode * pNode, LPDHCPTOOLBARNOTIFY pToolbarNotify);
public: // implementation specific
HRESULT RestartService(ITFSNode * pNode);
BOOL FEnableCreateSuperscope(ITFSNode * pNode); void UpdateToolbarStates(ITFSNode * pNode); void SetExtensionName(); HRESULT BuildDisplayName(CString * pstrDisplayName);
LPCWSTR GetIpAddress(); void GetIpAddress(DHCP_IP_ADDRESS *pdhcpIpAddress);
LPCTSTR GetName() { return m_strDnsName; } void SetName(LPCTSTR pName) { m_strDnsName = pName; }
BOOL GetDefaultOptions(); CDhcpOption * FindOption(DHCP_OPTION_ID dhcpOptionId, LPCTSTR pszVendor);
void SetVersion(LARGE_INTEGER & liVersion) { m_liDhcpVersion.QuadPart = liVersion.QuadPart; } void GetVersion(LARGE_INTEGER & liVersion) { liVersion.QuadPart = m_liDhcpVersion.QuadPart; }
DWORD CreateScope(DHCP_IP_ADDRESS dhcpSubnetAddress, DHCP_IP_ADDRESS dhcpSubnetMask, LPCTSTR pName, LPCTSTR pComment); DWORD CreateMScope(LPDHCP_MSCOPE_INFO pMScopeInfo);
DWORD DeleteScope(ITFSNode * pScopeNode, BOOL * pfWantCancel = NULL); DWORD DeleteSubnet(DWORD dwScopeId, BOOL bForce = FALSE);
DWORD DeleteSuperscope(ITFSNode * pNode, BOOL * pfRefresh = NULL); DWORD RemoveSuperscope(LPCTSTR pszName);
DWORD DeleteMScope(ITFSNode * pScopeNode, BOOL * pfWantCancel = NULL); DWORD DeleteMSubnet(LPCTSTR pszName, BOOL bForce = FALSE);
DWORD SetConfigInfo(BOOL bAuditLogging, DWORD dwPingRetries, LPCTSTR pszDatabasePath = NULL, LPCTSTR pszBackupPath = NULL); DWORD SetConfigInfo(DWORD dwSetFlags, LPDHCP_SERVER_CONFIG_INFO pServerConfigInfo); DWORD SetConfigInfo(DWORD dwSetFlags, LPDHCP_SERVER_CONFIG_INFO_V4 pServerConfigInfo);
DWORD SetAutoRefresh(ITFSNode * pNode, BOOL bAutoRefreshOn, DWORD dwRefreshInterval); BOOL IsAutoRefreshEnabled() { return m_dwServerOptions & SERVER_OPTION_AUTO_REFRESH; } void GetAutoRefresh(BOOL * pbAutoRefreshOn, LPDWORD pdwRefreshInterval) { if (pbAutoRefreshOn) *pbAutoRefreshOn = m_dwServerOptions & SERVER_OPTION_AUTO_REFRESH; if (pdwRefreshInterval) *pdwRefreshInterval = m_dwRefreshInterval; }
// default option functions
LONG CreateOption(CDhcpOption * pdhcType); LONG DeleteOption(DHCP_OPTION_ID dhcid, LPCTSTR pszVendor); LONG UpdateOptionList(COptionList * poblValues, COptionList * poblDefunct, CWnd *pwndMsgParent); void DisplayUpdateErrors(COptionList * poblValues, COptionList * poblDefunct, CWnd *pwndMsgParent);
// Functions to get and set the DNS reg option
DWORD GetDnsRegistration(LPDWORD pDnsRegOption); DWORD SetDnsRegistration(DWORD DnsRegOption); LONG ScanDatabase(DWORD FixFlag, LPDHCP_SCAN_LIST *ScanList, DHCP_IP_ADDRESS dhcpSubnetAddress); LONG ScanDatabase(DWORD FixFlag, LPDHCP_SCAN_LIST *ScanList, LPWSTR pMScopeName);
CDhcpDefaultOptionsOnServer * GetDefaultOptionsList() { return m_pDefaultOptionsOnServer; } CDhcpGlobalOptions * GetGlobalOptionsContainer();
// These funtions allow initialization of cached values in the server object.
// use SetConfigInfo to actually set them on the server
BOOL SetAuditLogging(BOOL bNewAuditLogging) { BOOL bOld = m_dwServerOptions & SERVER_OPTION_AUDIT_LOGGING; m_dwServerOptions = bNewAuditLogging ? m_dwServerOptions | SERVER_OPTION_AUDIT_LOGGING : m_dwServerOptions & ~SERVER_OPTION_AUDIT_LOGGING; return bOld; } BOOL GetAuditLogging() { return m_dwServerOptions & SERVER_OPTION_AUDIT_LOGGING; } DWORD SetPingRetries(DWORD dwNewCount) { DWORD dwOld = m_dwPingRetries; m_dwPingRetries = dwNewCount; return dwOld; } DWORD GetPingRetries() { return m_dwPingRetries; }
void SetAuditLogPath(LPCTSTR pszPath) { m_strAuditLogPath = pszPath; }
// determine if the server has superscopes
BOOL HasSuperscopes(ITFSNode * pNode);
// statistics information
LPDHCP_MIB_INFO SetMibInfo(LPDHCP_MIB_INFO pMibInfo); LPDHCP_MIB_INFO DuplicateMibInfo(); void FreeDupMibInfo(LPDHCP_MIB_INFO pDupMibInfo);
LPDHCP_MCAST_MIB_INFO SetMCastMibInfo(LPDHCP_MCAST_MIB_INFO pMibInfo); LPDHCP_MCAST_MIB_INFO DuplicateMCastMibInfo(); void FreeDupMCastMibInfo(LPDHCP_MCAST_MIB_INFO pDupMibInfo);
// adding child nodes sorted
HRESULT AddScopeSorted(ITFSNode * pServerNode, ITFSNode * pScopeNode); HRESULT AddSuperscopeSorted(ITFSNode * pServerNode, ITFSNode * pScopeNode); HRESULT AddMScopeSorted(ITFSNode * pServerNode, ITFSNode * pScopeNode); HRESULT GetBootpPosition(ITFSNode * pServerNode, LONG_PTR * puRelativeFlag, LONG_PTR * puRelativeID);
// hide/show/query bootp folders
BOOL IsBootpVisible() { return m_dwServerOptions & SERVER_OPTION_SHOW_BOOTP; }
HRESULT ShowNode(ITFSNode * pServerNode, UINT uNodeType, BOOL bVisible);
// access to the server options for save/restore
DWORD GetServerOptions() { return m_dwServerOptions; } void SetServerOptions(DWORD dwServerOptions) { m_dwServerOptions = dwServerOptions; } HRESULT TriggerStatsRefresh(ITFSNode * pNode);
void DisplayRogueWarning();
// multicast scope stuff
BOOL DoesMScopeExist(ITFSNode * pServerNode, DWORD dwScopeId);
// Dynamic Bootp support
BOOL FSupportsDynBootp() { return m_fSupportsDynBootp; }
// Bindings support
BOOL FSupportsBindings() { return m_fSupportsBindings; } // Access to the classInfoarray
void SetClassInfoArray(CClassInfoArray * pClassInfoArray) { CSingleLock sl(&m_csMibInfo); sl.Lock();
m_ClassInfoArray.RemoveAll(); m_ClassInfoArray.Copy(*pClassInfoArray); }
void GetClassInfoArray(CClassInfoArray & ClassInfoArray) { CSingleLock sl(&m_csMibInfo); sl.Lock();
ClassInfoArray.Copy(m_ClassInfoArray); }
CClassInfoArray * GetClassInfoArray() { CSingleLock sl(&m_csMibInfo); sl.Lock();
return &m_ClassInfoArray; }
BOOL RemoveClass(LPCTSTR pClassName) { CSingleLock sl(&m_csMibInfo); sl.Lock();
return m_ClassInfoArray.RemoveClass(pClassName); }
void AddClass(LPCTSTR pName, LPCTSTR pComment, CByteArray & baData) { CSingleLock sl(&m_csMibInfo); sl.Lock();
CClassInfo ClassInfo;
ClassInfo.strName = pName; ClassInfo.strComment = pComment; ClassInfo.baData.Copy(baData);
m_ClassInfoArray.Add(ClassInfo); }
void SetOptionValueEnum(COptionValueEnum * pEnum) { CSingleLock sl(&m_csMibInfo); sl.Lock();
m_ServerOptionValues.DeleteAll(); m_ServerOptionValues.Copy(pEnum); }
COptionValueEnum * GetOptionValueEnum() { CSingleLock sl(&m_csMibInfo); sl.Lock();
return &m_ServerOptionValues; }
// Implementation
private: // Command handlers
HRESULT OnDefineUserClasses(ITFSNode * pNode); HRESULT OnDefineVendorClasses(ITFSNode * pNode); HRESULT OnCreateNewSuperscope(ITFSNode * pNode); HRESULT OnCreateNewScope(ITFSNode * pNode); HRESULT OnCreateNewMScope(ITFSNode * pNode); HRESULT OnShowServerStats(ITFSNode * pNode); HRESULT OnSetDefaultOptions(ITFSNode * pNode); HRESULT OnReconcileAll(ITFSNode * pNode); HRESULT OnServerAuthorize(ITFSNode * pNode); HRESULT OnServerDeauthorize(ITFSNode * pNode); HRESULT OnDelete(ITFSNode * pNode); HRESULT OnControlService(ITFSNode * pNode, BOOL fStart); HRESULT OnPauseResumeService(ITFSNode * pNode, BOOL fPause); HRESULT OnServerBackup(ITFSNode * pNode); HRESULT OnServerRestore(ITFSNode * pNode);
// Attributes
public: DWORD SetBindings(LPDHCP_BIND_ELEMENT_ARRAY BindArray); DWORD GetBindings(LPDHCP_BIND_ELEMENT_ARRAY &BindArray); BOOL m_bStatsOnly; CSubnetInfoCache * m_pSubnetInfoCache;
protected: void UpdateResultMessage(ITFSNode * pNode); // we override this because we handle the error messages ourselves in UpdateResultMessage
// by not returning anything the base class won't put up a result pane message
void GetErrorMessages(CString & strTitle, CString & strBody, IconIdentifier * icon) {};
private: BOOL m_bNetbios; // Name is a NetBIOS name
DHCP_IP_ADDRESS m_dhcpServerAddress; // Standard 32-bit value (eg: 0x7f000001)
CString m_strServerAddress; CString m_strDnsName; CString m_strState; // rogue or not
LARGE_INTEGER m_liDhcpVersion; DWORD m_dwServerOptions; // Any of the SERVER_OPTIONS
DWORD m_dwRefreshInterval; DWORD m_dwPingRetries; CString m_strAuditLogPath; CString m_strDatabasePath; CString m_strBackupPath;
BOOL m_fSupportsDynBootp; BOOL m_fSupportsBindings;
int m_StatsTimerId;
LPDHCP_MIB_INFO m_pMibInfo; // for statistics
LPDHCP_MCAST_MIB_INFO m_pMCastMibInfo;
DHCP_ROGUE_INFO m_RogueInfo;
CCriticalSection m_csMibInfo;
CDhcpDefaultOptionsOnServer * m_pDefaultOptionsOnServer;
CServerStats m_dlgStats; CClassInfoArray m_ClassInfoArray; COptionValueEnum m_ServerOptionValues; };
/*---------------------------------------------------------------------------
Class: CDhcpGlobalOptions ---------------------------------------------------------------------------*/ class CDhcpGlobalOptions : public CMTDhcpHandler { public: CDhcpGlobalOptions(ITFSComponentData * pComponentData); ~CDhcpGlobalOptions();
// Interface
public: // base handler functionality we override
OVERRIDE_NodeHandler_OnAddMenuItems(); OVERRIDE_NodeHandler_HasPropertyPages(); OVERRIDE_NodeHandler_CreatePropertyPages(); OVERRIDE_NodeHandler_OnCommand(); OVERRIDE_NodeHandler_GetString() { return (nCol == 0) ? GetDisplayName() : NULL; }
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2(); OVERRIDE_BaseHandlerNotify_OnPropertyChange();
virtual HRESULT EnumerateResultPane(ITFSComponent *, MMC_COOKIE, LPARAM, LPARAM);
// Result handler functionality we override
OVERRIDE_BaseResultHandlerNotify_OnResultSelect(); OVERRIDE_BaseResultHandlerNotify_OnResultDelete(); OVERRIDE_BaseResultHandlerNotify_OnResultUpdateView(); OVERRIDE_BaseResultHandlerNotify_OnResultPropertyChange(); OVERRIDE_ResultHandler_CompareItems(); OVERRIDE_ResultHandler_OnGetResultViewType();
public: // CMTDhcpHandler functionality
virtual HRESULT InitializeNode(ITFSNode * pNode); virtual int GetImageIndex(BOOL bOpenImage); ITFSQueryObject* OnCreateQuery(ITFSNode * pNode); virtual void OnHaveData(ITFSNode * pParentNode, LPARAM Data, LPARAM Type);
STDMETHOD(OnNotifyExiting)(LPARAM);
CDhcpServer* GetServerObject(ITFSNode * pNode) { SPITFSNode spServerNode; pNode->GetParent(&spServerNode); return GETHANDLER(CDhcpServer, spServerNode); }
private: // command handlers
HRESULT OnCreateNewOptions(ITFSNode * pNode);
// Attributes
private: void UpdateResultMessage(ITFSNode * pNode);
};
/*---------------------------------------------------------------------------
Class: CDhcpBootp ---------------------------------------------------------------------------*/ class CDhcpBootp : public CMTDhcpHandler { public: CDhcpBootp(ITFSComponentData * pComponentData); ~CDhcpBootp();
// Interface
public: // base handler functionality we override
OVERRIDE_NodeHandler_OnAddMenuItems(); OVERRIDE_NodeHandler_OnCommand(); OVERRIDE_NodeHandler_GetString() { return (nCol == 0) ? GetDisplayName() : NULL; } OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
// Result handler functionality we override
OVERRIDE_BaseResultHandlerNotify_OnResultDelete();
OVERRIDE_ResultHandler_CompareItems(); OVERRIDE_ResultHandler_OnGetResultViewType();
public: // CMTDhcpHandler functionality
virtual HRESULT InitializeNode(ITFSNode * pNode); virtual int GetImageIndex(BOOL bOpenImage); ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
CDhcpServer* GetServerObject(ITFSNode * pNode) { SPITFSNode spServerNode; pNode->GetParent(&spServerNode); return GETHANDLER(CDhcpServer, spServerNode); }
private: // command handlers
DWORD OnCreateNewBootpEntry(ITFSNode * pNode);
// Implementation
private:
// Attributes
private: };
/*---------------------------------------------------------------------------
Class: CDhcpSuperscope ---------------------------------------------------------------------------*/ class CDhcpSuperscope : public CMTDhcpHandler { public: CDhcpSuperscope(ITFSComponentData * pComponentData, LPCWSTR pSuperscopeName = NULL); ~CDhcpSuperscope();
public: // base handler functionality we override
OVERRIDE_NodeHandler_HasPropertyPages() { return hrOK; } OVERRIDE_NodeHandler_CreatePropertyPages(); OVERRIDE_NodeHandler_OnAddMenuItems(); OVERRIDE_NodeHandler_OnCommand(); OVERRIDE_NodeHandler_GetString();
OVERRIDE_NodeHandler_DestroyHandler();
// Choose which messages we want to handle
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2(); OVERRIDE_BaseHandlerNotify_OnDelete(); OVERRIDE_BaseHandlerNotify_OnPropertyChange();
// Result handler functionality we override
OVERRIDE_BaseResultHandlerNotify_OnResultDelete(); OVERRIDE_ResultHandler_OnGetResultViewType(); OVERRIDE_ResultHandler_CompareItemsEx();
// Implementation
private: // Command handlers
HRESULT OnActivateSuperscope(ITFSNode * pNode); HRESULT OnCreateNewScope(ITFSNode * pNode); HRESULT OnDelete(ITFSNode * pNode); HRESULT OnShowSuperscopeStats(ITFSNode * pNode);
public: // public functions for superscope manipulation
LPCWSTR GetName() { return m_strName; }; void SetName(LPCWSTR pName) { m_strName = pName; } HRESULT DoesSuperscopeExist(LPCWSTR szName); HRESULT AddScope(DHCP_IP_ADDRESS scopeAddress); HRESULT RemoveScope(DHCP_IP_ADDRESS scopeAddress); HRESULT Rename(ITFSNode * pNode, LPCWSTR szNewName); HRESULT GetSuperscopeInfo(LPDHCP_SUPER_SCOPE_TABLE *pSuperscopeTable); HRESULT SetSuperscope(DHCP_IP_ADDRESS SubnetAddress, BOOL ChangeExisting);
public: // helpers
void SetServer(ITFSNode * pServerNode) { m_spServerNode.Set(pServerNode); } HRESULT BuildDisplayName(CString * pstrDisplayName, LPCTSTR pName); void UpdateToolbarStates(); void SetState(DHCP_SUBNET_STATE dhcpState) { m_SuperscopeState = dhcpState; } void NotifyScopeStateChange(ITFSNode * pNode, DHCP_SUBNET_STATE newScopeState); // adding child nodes sorted
HRESULT AddScopeSorted(ITFSNode * pServerNode, ITFSNode * pScopeNode);
public: // CMTDhcpHandler functionality
virtual HRESULT InitializeNode(ITFSNode * pNode); virtual void OnHaveData(ITFSNode * pParentNode, ITFSNode * pNode); virtual int GetImageIndex(BOOL bOpenImage); virtual DWORD UpdateStatistics(ITFSNode * pNode); ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
STDMETHOD(OnNotifyExiting)(LPARAM lParam);
CDhcpServer* GetServerObject() { return GETHANDLER(CDhcpServer, m_spServerNode); }
HRESULT OnUpdateToolbarButtons(ITFSNode * pNode, LPDHCPTOOLBARNOTIFY pToolbarNotify);
// Implementation
private:
// Attributes
private: CString m_strName; CString m_strState; DHCP_SUBNET_STATE m_SuperscopeState; SPITFSNode m_spServerNode; CSuperscopeStats m_dlgStats; };
/*---------------------------------------------------------------------------
Class: CHostInfo ---------------------------------------------------------------------------*/ class CHostInfo { public: CHostInfo() { IpAddress = 0; }
CHostInfo(LPDHCP_HOST_INFO pDhcpHostInfo) { Set(pDhcpHostInfo); }
CHostInfo(CHostInfo & hostInfo) { *this = hostInfo; }
CHostInfo & operator = (const CHostInfo & hostInfo) { if (this != &hostInfo) { IpAddress = hostInfo.IpAddress; NetBiosName = hostInfo.NetBiosName; HostName = hostInfo.HostName; } return *this; }
void Set(LPDHCP_HOST_INFO pDhcpHostInfo) { IpAddress = pDhcpHostInfo->IpAddress; NetBiosName = pDhcpHostInfo->NetBiosName; HostName = pDhcpHostInfo->HostName; }
public: DHCP_IP_ADDRESS IpAddress; // minimum information always available
CString NetBiosName; // optional information
CString HostName; // optional information
};
/*---------------------------------------------------------------------------
Class: CSubnetInfo ---------------------------------------------------------------------------*/ class CSubnetInfo { public: CSubnetInfo() { SubnetAddress = 0; SubnetMask = 0; SubnetState = DhcpSubnetDisabled;
// multicast specific fields
MScopeAddressPolicy = 0; MScopeFlags = 0; TTL = 0; ExpiryTime.dwLowDateTime = 0; ExpiryTime.dwHighDateTime = 0; }
CSubnetInfo(LPDHCP_SUBNET_INFO pDhcpSubnetInfo) { Set(pDhcpSubnetInfo); }
CSubnetInfo(CSubnetInfo & subnetInfo) { *this = subnetInfo; }
CSubnetInfo & operator = (const CSubnetInfo & subnetInfo) { if (this != &subnetInfo) { SubnetAddress = subnetInfo.SubnetAddress; SubnetMask = subnetInfo.SubnetMask; SubnetName = subnetInfo.SubnetName; SubnetComment = subnetInfo.SubnetComment; PrimaryHost = subnetInfo.PrimaryHost; SubnetState = subnetInfo.SubnetState;
MScopeAddressPolicy = subnetInfo.MScopeAddressPolicy; MScopeFlags = subnetInfo.MScopeFlags; TTL = subnetInfo.TTL; ExpiryTime = subnetInfo.ExpiryTime; LangTag = subnetInfo.LangTag; }
return *this; }
void Set(LPDHCP_SUBNET_INFO pDhcpSubnetInfo) { SubnetAddress = pDhcpSubnetInfo->SubnetAddress; SubnetMask = pDhcpSubnetInfo->SubnetMask; SubnetName = pDhcpSubnetInfo->SubnetName; SubnetComment = pDhcpSubnetInfo->SubnetComment; PrimaryHost.Set(&pDhcpSubnetInfo->PrimaryHost); SubnetState = pDhcpSubnetInfo->SubnetState; MScopeAddressPolicy = 0; MScopeFlags = 0; TTL = 0; ExpiryTime.dwLowDateTime = 0; ExpiryTime.dwHighDateTime = 0; }
void Set(LPDHCP_MSCOPE_INFO pMScopeInfo) { SubnetName = pMScopeInfo->MScopeName; SubnetComment = pMScopeInfo->MScopeComment; SubnetAddress = pMScopeInfo->MScopeId; MScopeAddressPolicy = pMScopeInfo->MScopeAddressPolicy; PrimaryHost.Set(&pMScopeInfo->PrimaryHost); SubnetState = pMScopeInfo->MScopeState; MScopeFlags = pMScopeInfo->MScopeFlags; TTL = pMScopeInfo->TTL; ExpiryTime = pMScopeInfo->ExpiryTime; LangTag = pMScopeInfo->LangTag;
SubnetMask = 0; }
public: // common fields
DHCP_IP_ADDRESS SubnetAddress; DHCP_IP_MASK SubnetMask; CString SubnetName; CString SubnetComment; CHostInfo PrimaryHost; DHCP_SUBNET_STATE SubnetState;
// multicast specific fields
DWORD MScopeAddressPolicy; DWORD MScopeFlags; BYTE TTL; DATE_TIME ExpiryTime; CString LangTag; };
typedef CArray<CSubnetInfo, CSubnetInfo&> CSubnetInfoArrayBase; typedef CMap<DHCP_IP_ADDRESS, DHCP_IP_ADDRESS, CSubnetInfo, CSubnetInfo &> CSubnetInfoCacheBase;
/*---------------------------------------------------------------------------
Class: CSubnetInfoCache ---------------------------------------------------------------------------*/ class CSubnetInfoCache : public CSubnetInfoCacheBase { public: DWORD GetInfo(CString & strServer, DHCP_IP_ADDRESS ipAddress, CSubnetInfo & subnetInfo); };
class CMScopeInfoCache : public CSubnetInfoArrayBase { public: DWORD GetInfo(CString & strServer, LPCTSTR pszName, CSubnetInfo & subnetInfo); BOOL Lookup(LPCTSTR pszName, CSubnetInfo & subnetInfo) { BOOL fFound = FALSE;
for (int i = 0; i < GetSize(); i++) { if (GetAt(i).SubnetName.Compare(pszName) == 0) { subnetInfo = GetAt(i); fFound = TRUE; } }
return fFound; } };
/*---------------------------------------------------------------------------
Class: CDhcpServerQueryObj ---------------------------------------------------------------------------*/ class CDhcpServerQueryObj : public CDHCPQueryObj { public: CDhcpServerQueryObj(ITFSComponentData * pTFSComponentData, ITFSNodeMgr * pNodeMgr) : CDHCPQueryObj(pTFSComponentData, pNodeMgr) { // default to the cache in this object
m_pSubnetInfoCache = &m_SubnetInfoCache; }; STDMETHODIMP Execute(); virtual void OnEventAbort(LPARAM Data, LPARAM Type);
LONG CreateOption(CDhcpOption * pOption); void UpdateDefaultOptionsOnServer(CDhcpDefaultOptionsOnServer * pOptionsOnServer, CDhcpDefaultOptionsMasterList * pMasterList); void EnumSubnetsV4(); void EnumSubnets(); void EnumMScopes(); //Multicast scopes
CDhcpSuperscope * FindSuperscope(CNodeListBase & listSuperscopes, LPWSTR pSuperScopeName); DWORD SetVersion(); DWORD GetConfigInfo(); DWORD GetStatistics(); DWORD GetStatus();
BOOL VerifyDhcpServer();
public: DHCP_RESUME_HANDLE m_dhcpResumeHandle; DWORD m_dwPreferredMax; LARGE_INTEGER m_liDhcpVersion;
DWORD m_dwPingRetries; BOOL m_fAuditLog; BOOL m_bStatsOnly; BOOL m_fSupportsDynBootp; BOOL m_fSupportsBindings; CString m_strDatabasePath; CString m_strBackupPath; CString m_strAuditLogPath; CString m_strServerName;
CDhcpDefaultOptionsOnServer * m_pDefaultOptionsOnServer;
CSubnetInfoCache * m_pSubnetInfoCache; CSubnetInfoCache m_SubnetInfoCache; CMScopeInfoCache m_MScopeInfoCache; };
/*---------------------------------------------------------------------------
Class: CDhcpSuperscopeQueryObj ---------------------------------------------------------------------------*/ class CDhcpSuperscopeQueryObj : public CDHCPQueryObj { public: CDhcpSuperscopeQueryObj ( ITFSComponentData* pTFSComponentData, ITFSNodeMgr* pNodeMgr ) : CDHCPQueryObj(pTFSComponentData, pNodeMgr) {}; STDMETHODIMP Execute();
public: CString m_strSuperscopeName; };
/*---------------------------------------------------------------------------
Class: CDhcpBootpQueryObj ---------------------------------------------------------------------------*/ class CDhcpBootpQueryObj : public CDHCPQueryObj { public: CDhcpBootpQueryObj ( ITFSComponentData* pTFSComponentData, ITFSNodeMgr* pNodeMgr ) : CDHCPQueryObj(pTFSComponentData, pNodeMgr) {}; STDMETHODIMP Execute(); };
/*---------------------------------------------------------------------------
Class: CDhcpGlobalOptionsQueryObj ---------------------------------------------------------------------------*/ class CDhcpGlobalOptionsQueryObj : public CDHCPQueryObj { public: CDhcpGlobalOptionsQueryObj ( ITFSComponentData* pTFSComponentData, ITFSNodeMgr* pNodeMgr ) : CDHCPQueryObj(pTFSComponentData, pNodeMgr) {};
STDMETHODIMP Execute();
public: DHCP_RESUME_HANDLE m_dhcpResumeHandle; DWORD m_dwPreferredMax; LARGE_INTEGER m_liDhcpVersion; };
/*---------------------------------------------------------------------------
Class: COptionNodeEnum ---------------------------------------------------------------------------*/ class COptionNodeEnum : public CTFSNodeList { public: COptionNodeEnum(ITFSComponentData * pTFSCompData, ITFSNodeMgr * pNodeMgr); DWORD Enum(LPCTSTR pServer, LARGE_INTEGER & liVersion, DHCP_OPTION_SCOPE_INFO & dhcpOptionScopeInfo);
protected: DWORD EnumOptions(LPCTSTR pServer, DHCP_OPTION_SCOPE_INFO & dhcpOptionScopeInfo); DWORD EnumOptionsV5(LPCTSTR pServer, DHCP_OPTION_SCOPE_INFO & dhcpOptionScopeInfo);
// V5 Helper
HRESULT CreateOptions(LPDHCP_OPTION_VALUE_ARRAY pOptionValues, LPCTSTR pClassName, LPCTSTR pszVendor);
protected: SPITFSComponentData m_spTFSCompData; SPITFSNodeMgr m_spNodeMgr; };
#endif _SERVER_H
|