Windows2003-3790/net/mmc/dhcp/mscope.h
2020-09-30 16:53:55 +02:00

439 lines
14 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
mscope.h
This file contains the prototypes for the Multicast scope node
and it's children.
FILE HISTORY:
07 Oct 1997 EricDav Created
*/
#ifndef _MSCOPE_H
#define _MSCOPE_H
#ifndef _DHCPHAND_H
#include "dhcphand.h"
#endif
#ifndef _DHCPNODE_H
#include "nodes.h"
#endif
#ifndef _MSCPSTAT_H
#include "mscpstat.h"
#endif
#ifndef _SERVER_H
#include "server.h"
#endif
#define DHCP_QDATA_SUBNET_INFO 0x00000004
class CMScopeAddressPool;
void GetLangTag(CString & strLangTag);
/*---------------------------------------------------------------------------
Class: CDhcpMScope
---------------------------------------------------------------------------*/
class CDhcpMScope : public CMTDhcpHandler
{
public:
CDhcpMScope(ITFSComponentData * pComponentData);
~CDhcpMScope();
// Interface
public:
// base handler functionality we override
OVERRIDE_NodeHandler_OnAddMenuItems();
OVERRIDE_NodeHandler_OnCommand();
OVERRIDE_NodeHandler_GetString();
OVERRIDE_NodeHandler_DestroyHandler();
OVERRIDE_NodeHandler_HasPropertyPages() { return hrOK; }
OVERRIDE_NodeHandler_CreatePropertyPages();
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
OVERRIDE_BaseHandlerNotify_OnPropertyChange();
OVERRIDE_BaseHandlerNotify_OnDelete();
// 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);
virtual void OnHaveData(ITFSNode * pParent, ITFSNode * pNew);
virtual void OnHaveData(ITFSNode * pParentNode, LPARAM Data, LPARAM Type);
HRESULT OnUpdateToolbarButtons(ITFSNode * pNode, LPDHCPTOOLBARNOTIFY pToolbarNotify);
ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
CDhcpServer* GetServerObject(ITFSNode * pNode)
{
SPITFSNode spServerNode;
pNode->GetParent(&spServerNode);
return GETHANDLER(CDhcpServer, spServerNode);
}
CMScopeAddressPool* GetAddressPoolObject()
{
if (m_spAddressPool)
return GETHANDLER(CMScopeAddressPool, m_spAddressPool);
else
return NULL;
}
// implementation
public:
// helpers
void SetServer(ITFSNode * pServerNode) { m_spServerNode.Set(pServerNode); }
HRESULT GetServerNode(ITFSNode ** ppNode)
{
m_spServerNode->AddRef();
*ppNode = m_spServerNode;
return hrOK;
}
CDhcpServer * GetServerObject() { return GETHANDLER(CDhcpServer, m_spServerNode); }
LPCWSTR GetServerIpAddress();
void GetServerIpAddress(DHCP_IP_ADDRESS * pdhcpIpAddress);
void GetServerVersion(LARGE_INTEGER& liVersion);
HRESULT BuildDisplayName(CString * pstrDisplayName, LPCTSTR pName);
void UpdateToolbarStates();
// dhcp specific
DWORD SetInfo(LPCTSTR pNewName = NULL);
HRESULT InitMScopeInfo(LPDHCP_MSCOPE_INFO pMScopeInfo);
HRESULT InitMScopeInfo(CSubnetInfo & subnetInfo);
// public functions for scope manipulation
LPCWSTR GetName() { return m_SubnetInfo.SubnetName; };
HRESULT SetName(LPCTSTR pName);
LPCWSTR GetComment() { return m_SubnetInfo.SubnetComment; };
void SetComment(LPCWSTR pComment) { m_SubnetInfo.SubnetComment = pComment; };
DWORD GetScopeId() { return m_SubnetInfo.SubnetAddress; }
// Functions to get and set the lease time
DWORD GetLeaseTime(LPDWORD pdwLeaseTime);
DWORD SetLeaseTime(DWORD dwLeaseTime);
// Functions to get and set the madcap scope lifetime
DWORD GetLifetime(DATE_TIME * pdtLifetime);
DWORD SetLifetime(DATE_TIME * pdtLifetime);
// Functions to get and set the TTL
DWORD GetTTL(LPBYTE TTL);
DWORD SetTTL(BYTE TTL);
// option functionality
DWORD SetOptionValue(CDhcpOption * pdhcType);
DWORD GetOptionValue(DHCP_OPTION_ID OptionID,
DHCP_OPTION_VALUE ** ppdhcOptionValue);
DWORD RemoveOptionValue(DHCP_OPTION_ID dhcOptId);
DWORD DeleteClient(DHCP_IP_ADDRESS dhcpClientIpAddress);
DWORD UpdateIpRange(DHCP_IP_RANGE * pdhipr);
DWORD SetIpRange(DHCP_IP_RANGE *pdhcpIpRange, BOOL bSetOnServer);
DWORD SetIpRange(const CDhcpIpRange & dhcpIpRange, BOOL bSetOnServer);
void QueryIpRange (DHCP_IP_RANGE * pdhipr);
DWORD GetIpRange (DHCP_IP_RANGE * pdhipr);
DWORD StoreExceptionList(CExclusionList * plistExclusions);
DWORD AddExclusion(CDhcpIpRange & dhcpIpRange, BOOL bAddToUI = FALSE);
DWORD RemoveExclusion(CDhcpIpRange & dhcpIpRange);
BOOL IsOverlappingRange(CDhcpIpRange & dhcpIpRange);
DWORD IsValidExclusion(CDhcpIpRange & dhcpExclusion);
DWORD AddElement(DHCP_SUBNET_ELEMENT_DATA_V4 * pdhcpSubnetElementData);
DWORD RemoveElement(DHCP_SUBNET_ELEMENT_DATA_V4 * pdhcpSubnetElementData, BOOL bForce = FALSE);
// interal state information
BOOL IsEnabled() { return m_SubnetInfo.SubnetState == DhcpSubnetEnabled; }
void SetState(DHCP_SUBNET_STATE dhcpSubnetState) { m_SubnetInfo.SubnetState = dhcpSubnetState; }
DHCP_SUBNET_STATE GetState() { return m_SubnetInfo.SubnetState; }
private:
// command handlers
DWORD OnActivateScope(ITFSNode * pNode);
HRESULT OnReconcileScope(ITFSNode * pNode);
HRESULT OnShowScopeStats(ITFSNode * pNode);
HRESULT OnDelete(ITFSNode * pNode);
// Implementation
private:
// Attributes
private:
CSubnetInfo m_SubnetInfo;
CString m_strState;
DHCP_SUBNET_STATE m_dhcpSubnetState;
DWORD m_dwLeaseTime;
SPITFSNode m_spAddressPool;
SPITFSNode m_spActiveLeases;
SPITFSNode m_spServerNode;
CMScopeStats m_dlgStats;
};
/*---------------------------------------------------------------------------
Class: CDhcpMScopeSubobject
All subobjects of a scope derive from this to provide base
functionality to get information from the scope.
---------------------------------------------------------------------------*/
class CDhcpMScopeSubobject
{
public:
CDhcpMScope * GetScopeObject(ITFSNode * pNode,
BOOL bResClient = FALSE)
{
if (pNode == NULL)
return NULL;
SPITFSNode spScopeNode;
if (bResClient)
{
SPITFSNode spResNode;
pNode->GetParent(&spResNode);
spResNode->GetParent(&spScopeNode);
}
else
{
pNode->GetParent(&spScopeNode);
}
return GETHANDLER(CDhcpMScope, spScopeNode);
}
ITFSNode * GetServerNode(ITFSNode * pNode, BOOL bResClient = FALSE)
{
CDhcpMScope * pScope = GetScopeObject(pNode, bResClient);
SPITFSNode spServerNode;
if (pScope)
{
pScope->GetServerNode(&spServerNode);
spServerNode->AddRef();
}
return spServerNode;
}
LPCTSTR GetServerName(ITFSNode * pNode,
BOOL bResClient = FALSE)
{
LPCTSTR pszReturn = NULL;
CDhcpMScope * pScope = GetScopeObject(pNode, bResClient);
if (pScope)
{
CDhcpServer * pServer = pScope->GetServerObject();
if (pServer)
pszReturn = pServer->GetName();
}
return pszReturn;
}
LPCTSTR GetServerIpAddress(ITFSNode * pNode,
BOOL bResClient = FALSE)
{
CDhcpMScope * pScope = GetScopeObject(pNode, bResClient);
if (pScope)
return pScope->GetServerIpAddress();
else
return NULL;
}
void GetServerIpAddress(ITFSNode * pNode,
DHCP_IP_ADDRESS * pdhcpIpAddress,
BOOL bResClient = FALSE)
{
CDhcpMScope * pScope = GetScopeObject(pNode, bResClient);
if (pScope)
pScope->GetServerIpAddress(pdhcpIpAddress);
}
void GetServerVersion(ITFSNode * pNode,
LARGE_INTEGER& liVersion,
BOOL bResClient = FALSE)
{
CDhcpMScope * pScope = GetScopeObject(pNode, bResClient);
if (pScope)
pScope->GetServerVersion(liVersion);
}
};
/*---------------------------------------------------------------------------
Class: CMScopeActiveLeases
---------------------------------------------------------------------------*/
class CMScopeActiveLeases :
public CMTDhcpHandler,
public CDhcpMScopeSubobject
{
public:
CMScopeActiveLeases(ITFSComponentData * pComponentData);
~CMScopeActiveLeases();
// Interface
public:
// Node handler functionality we override
OVERRIDE_NodeHandler_OnAddMenuItems();
OVERRIDE_NodeHandler_OnCommand();
OVERRIDE_NodeHandler_GetString()
{ return (nCol == 0) ? GetDisplayName() : NULL; }
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
// Result Handler notification
OVERRIDE_BaseResultHandlerNotify_OnResultDelete();
OVERRIDE_ResultHandler_OnGetResultViewType();
OVERRIDE_ResultHandler_CompareItems();
public:
// CDhcpHandler overrides
virtual HRESULT InitializeNode(ITFSNode * pNode);
virtual int GetImageIndex(BOOL bOpenImage);
public:
// implementation specifiec
ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
// Implementation
private:
int CompareIpAddresses(CDhcpMCastLease * pDhcpAL1, CDhcpMCastLease * pDhcpAL2);
// Attributes
private:
};
/*---------------------------------------------------------------------------
Class: CMScopeAddressPool
---------------------------------------------------------------------------*/
class CMScopeAddressPool :
public CMTDhcpHandler,
public CDhcpMScopeSubobject
{
public:
CMScopeAddressPool(ITFSComponentData * pComponentData);
~CMScopeAddressPool();
// Interface
public:
// Node handler functionality we override
OVERRIDE_NodeHandler_OnAddMenuItems();
OVERRIDE_NodeHandler_OnCommand();
OVERRIDE_NodeHandler_GetString()
{ return (nCol == 0) ? GetDisplayName() : NULL; }
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
// Result Handler notification
OVERRIDE_BaseResultHandlerNotify_OnResultDelete();
OVERRIDE_ResultHandler_CompareItems();
OVERRIDE_ResultHandler_OnGetResultViewType();
public:
// CDhcpHandler overrides
virtual HRESULT InitializeNode(ITFSNode * pNode);
virtual int GetImageIndex(BOOL bOpenImage);
public:
// implementation specific
ITFSQueryObject* OnCreateQuery(ITFSNode * pNode);
private:
// command handlers
DWORD OnCreateNewExclusion(ITFSNode * pNode);
// Attributes
private:
};
/*---------------------------------------------------------------------------
Class: CDhcpMScopeQueryObj
---------------------------------------------------------------------------*/
class CDhcpMScopeQueryObj : public CDHCPQueryObj
{
public:
CDhcpMScopeQueryObj
(
ITFSComponentData* pTFSComponentData,
ITFSNodeMgr* pNodeMgr
) : CDHCPQueryObj(pTFSComponentData, pNodeMgr) {};
STDMETHODIMP Execute();
HRESULT CreateSubcontainers();
public:
CString m_strName;
};
/*---------------------------------------------------------------------------
Class: CMScopeActiveLeasesQueryObj
---------------------------------------------------------------------------*/
class CMScopeActiveLeasesQueryObj : public CDHCPQueryObj
{
public:
CMScopeActiveLeasesQueryObj(ITFSComponentData * pTFSCompData,
ITFSNodeMgr * pNodeMgr)
: CDHCPQueryObj(pTFSCompData, pNodeMgr) { m_nQueueCountMax = 20; }
STDMETHODIMP Execute();
HRESULT EnumerateLeases();
LARGE_INTEGER m_liDhcpVersion;
DHCP_RESUME_HANDLE m_dhcpResumeHandle;
DWORD m_dwPreferredMax;
CString m_strName;
};
/*---------------------------------------------------------------------------
Class: CMScopeAddressPoolQueryObj
---------------------------------------------------------------------------*/
class CMScopeAddressPoolQueryObj : public CDHCPQueryObj
{
public:
CMScopeAddressPoolQueryObj(ITFSComponentData * pTFSCompData,
ITFSNodeMgr * pNodeMgr)
: CDHCPQueryObj(pTFSCompData, pNodeMgr),
m_dwError(0) {};
STDMETHODIMP Execute();
HRESULT EnumerateIpRanges();
HRESULT EnumerateExcludedIpRanges();
public:
CString m_strName;
DHCP_RESUME_HANDLE m_dhcpExclResumeHandle;
DWORD m_dwExclPreferredMax;
DHCP_RESUME_HANDLE m_dhcpIpResumeHandle;
DWORD m_dwIpPreferredMax;
DWORD m_dwError;
};
#endif _MSCOPE_H