438 lines
12 KiB
C
438 lines
12 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_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
|