|
|
/**********************************************************************/ /** 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
|