|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: zone.h
//
//--------------------------------------------------------------------------
#ifndef _ZONE_H
#define _ZONE_H
#include "dnsutil.h"
#include "ZoneUI.h"
#define ASSERT_VALID_ZONE_INFO() \
ASSERT((m_pZoneInfoEx != NULL) && (m_pZoneInfoEx->HasData()) )
#define DNS_ZONE_FLAG_REVERSE (0x0)
#define DNS_ZONE_Paused 0x1
#define DNS_ZONE_Shutdown 0x2
#define DNS_ZONE_Reverse 0x4
#define DNS_ZONE_AutoCreated 0x8
#define DNS_ZONE_DsIntegrated 0x10
#define DNS_ZONE_Unicode 0x20
/////////////////////////////////////////////////////////////////////////
// CDNSZoneNode
class CDNSZoneNode : public CDNSDomainNode { public: CDNSZoneNode(); virtual ~CDNSZoneNode();
// node info
DECLARE_NODE_GUID()
void InitializeFromRPCZoneInfo(PDNS_RPC_ZONE pZoneInfo, BOOL bAdvancedView);
BOOL IsRootZone() { USES_CONVERSION; ASSERT(m_pZoneInfoEx != NULL); return (_wcsicmp(GetFullName(), _T(".")) == 0); }
BOOL IsReverse() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fReverse : ((m_dwZoneFlags & DNS_ZONE_Reverse) != 0); } BOOL IsAutocreated() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fAutoCreated : ((m_dwZoneFlags & DNS_ZONE_AutoCreated) != 0); } DWORD GetZoneType() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwZoneType : m_wZoneType; }
DWORD GetSOARecordMinTTL() { ASSERT(m_pSOARecordNode != NULL); return m_pSOARecordNode->GetMinTTL(); }
// Aging/Scavenging Data Accessors
DWORD GetAgingNoRefreshInterval() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwNoRefreshInterval : DNS_DEFAULT_NOREFRESH_INTERVAL; }
DWORD GetAgingRefreshInterval() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwRefreshInterval : DNS_DEFAULT_REFRESH_INTERVAL; }
DWORD GetScavengingStart() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwAvailForScavengeTime : DNS_DEFAULT_SCAVENGING_INTERVAL; }
BOOL IsScavengingEnabled() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fAging : DNS_DEFAULT_AGING_STATE; }
#ifdef USE_NDNC
DWORD GetDirectoryPartitionFlags() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwDpFlags : 0; }
ReplicationType GetDirectoryPartitionFlagsAsReplType(); PCWSTR GetCustomPartitionName(); DNS_STATUS ChangeDirectoryPartitionType(ReplicationType type, PCWSTR pszCustomPartition); #endif
DNS_STATUS SetAgingNoRefreshInterval(DWORD dwNoRefreshInterval); DNS_STATUS SetAgingRefreshInterval(DWORD dwRefreshInterval); DNS_STATUS SetScavengingEnabled(BOOL bEnable);
BOOL IsForwarderSlave() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fForwarderSlave : DNS_DEFAULT_SLAVE; }
DWORD ForwarderTimeout() { ASSERT(m_pZoneInfoEx != NULL); return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwForwarderTimeout : DNS_DEFAULT_FORWARD_TIMEOUT; }
virtual LPCWSTR GetString(int nCol);
void ChangeViewOption(BOOL bAdvanced, CComponentDataObject* pComponentDataObject); static void SetZoneNormalViewHelper(CString& szDisplayName);
virtual int GetImageIndex(BOOL bOpenImage);
virtual HRESULT OnCommand(long nCommandID, DATA_OBJECT_TYPES type, CComponentDataObject* pComponentData, CNodeList* pNodeList); virtual void OnDelete(CComponentDataObject* pComponentData, CNodeList* pNodeList); virtual BOOL OnRefresh(CComponentDataObject* pComponentData, CNodeList* pNodeList);
virtual BOOL HasPropertyPages(DATA_OBJECT_TYPES type, BOOL* pbHideVerb, CNodeList* pNodeList); virtual HRESULT CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, CNodeList* pNodeList); virtual HRESULT CreatePropertyPagesHelper(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, long nStartPageCode);
virtual void Show(BOOL bShow, CComponentDataObject* pComponentData); virtual HRESULT GetResultViewType(CComponentDataObject* pComponentData, LPOLESTR *ppViewType, long *pViewOptions); virtual HRESULT OnShow(LPCONSOLE lpConsole);
virtual void ShowPageForNode(CComponentDataObject* pComponentDataObject) { if (GetSheetCount() > 0) { // bring up the sheet of the container
ASSERT(pComponentDataObject != NULL); pComponentDataObject->GetPropertyPageHolderTable()->BroadcastSelectPage(this, ZONE_HOLDER_GEN); } }
virtual BOOL OnSetRenameVerbState(DATA_OBJECT_TYPES type, BOOL* pbHide, CNodeList* pNodeList); virtual HRESULT OnRename(CComponentDataObject* pComponentData, LPWSTR lpszNewName);
virtual BOOL CanExpandSync() { return FALSE; }
protected: virtual LPCONTEXTMENUITEM2 OnGetContextMenuItemTable() { return CDNSZoneMenuHolder::GetContextMenuItem(); } virtual BOOL OnAddMenuItem(LPCONTEXTMENUITEM2 pContextMenuItem2, long *pInsertionAllowed);
private: // command handlers
void OnUpdateDataFile(CComponentDataObject* pComponentData); void OnReload(CComponentDataObject* pComponentData); void OnTransferFromMaster(CComponentDataObject* pComponentData); void OnReloadFromMaster(CComponentDataObject* pComponentData);
// DNS specific data
// cached pointers to special record types
CDNS_SOA_RecordNode* m_pSOARecordNode; CDNSRecordNodeBase* m_pWINSRecordNode; // can be a WINS or an NBSTAT record
// DNS specific helpers
public:
// creation
DNS_STATUS CreatePrimary(LPCTSTR lpszDBName, BOOL bLoadExisting, BOOL bDSIntegrated, UINT nDynamicUpdate); DNS_STATUS CreateSecondary(DWORD* ipMastersArray, int nIPMastersCount, LPCTSTR lpszDBName, BOOL bLoadExisting); DNS_STATUS CreateStub(DWORD* ipMastersArray, int nIPMastersCount, LPCTSTR lpszDBName, BOOL bLoadExisting, BOOL bDSIntegrated); DNS_STATUS CreateForwarder(DWORD* ipMastersArray, int nIPMastersCount, DWORD dwTimeout, DWORD fSlave); #ifdef USE_NDNC
DNS_STATUS CreatePrimaryInDirectoryPartition(BOOL bLoadExisting, UINT nDynamicUpdate, ReplicationType replType, PCWSTR pszPartitionName); DNS_STATUS CreateStubInDirectoryPartition(DWORD* ipMastersArray, int nIPMastersCount, BOOL bLoadExisting, ReplicationType replType, PCWSTR pszPartitionName); #endif
//
// change zone type
//
DNS_STATUS SetStub(DWORD cMasters, PIP_ADDRESS aipMasters, DWORD dwLoadOptions, BOOL bDSIntegrated, LPCTSTR lpszDataFile, BOOL bLocalListOfMasters); DNS_STATUS SetSecondary(DWORD cMasters, PIP_ADDRESS aipMasters, DWORD dwLoadOptions, LPCTSTR lpszDataFile); DNS_STATUS SetPrimary(DWORD dwLoadOptions, BOOL bDSIntegrated, LPCTSTR lpszDataFile);
// pause/expire
DNS_STATUS TogglePauseHelper(CComponentDataObject* pComponentData); BOOL IsPaused(); BOOL IsExpired();
// Update the result view
void ToggleView(CComponentDataObject* pComponentData);
// database operations
BOOL IsDSIntegrated(); void GetDataFile(CString& szName); LPCSTR GetDataFile(); DNS_STATUS ResetDatabase(BOOL bDSIntegrated, LPCTSTR lpszDataFile); DNS_STATUS WriteToDatabase(); static DNS_STATUS WriteToDatabase(LPCWSTR lpszServer, LPCWSTR lpszZone); static DNS_STATUS WriteToDatabase(LPCWSTR lpszServer, LPCSTR lpszZone); DNS_STATUS IncrementVersion(); DNS_STATUS Reload(); DNS_STATUS TransferFromMaster(); DNS_STATUS ReloadFromMaster(); PCWSTR GetDN();
// dynamic update (primary only)
UINT GetDynamicUpdate(); DNS_STATUS SetDynamicUpdate(UINT nDynamic);
// primary/secondary zone secondaries manipulation
DNS_STATUS ResetSecondaries(DWORD fSecureSecondaries, DWORD cSecondaries, PIP_ADDRESS aipSecondaries, DWORD fNotifyLevel, DWORD cNotify, PIP_ADDRESS aipNotify); void GetSecondariesInfo(DWORD* pfSecureSecondaries, DWORD* cSecondaries, PIP_ADDRESS* paipSecondaries, DWORD* pfNotifyLevel, DWORD* pcNotify, PIP_ADDRESS* paipNotify);
// secondary zone masters manipulation
DNS_STATUS ResetMasters(DWORD cMasters, PIP_ADDRESS aipMasters, BOOL bLocalMasters = FALSE); void GetMastersInfo(DWORD* pcAddrCount, PIP_ADDRESS* ppipAddrs); void GetLocalListOfMasters(DWORD* pcAddrCount, PIP_ADDRESS* ppipAddrs);
// editing API's for special record types
// SOA record (edit only, cannot delete or create)
BOOL HasSOARecord() { return m_pSOARecordNode != NULL; } CDNS_SOA_Record* GetSOARecordCopy(); DNS_STATUS UpdateSOARecord(CDNS_SOA_Record* pNewRecord, CComponentDataObject* pComponentData);
// WINS record
BOOL HasWinsRecord() { return (m_pWINSRecordNode != NULL);} CDNSRecord* GetWINSRecordCopy(); DNS_STATUS CreateWINSRecord(CDNSRecord* pNewWINSRecord, CComponentDataObject* pComponentData); DNS_STATUS UpdateWINSRecord(CDNSRecord* pNewWINSRecord, CComponentDataObject* pComponentData); DNS_STATUS DeleteWINSRecord(CComponentDataObject* pComponentData);
DNS_STATUS Delete(BOOL bDeleteFromDs);
protected: virtual void OnHaveData(CObjBase* pObj, CComponentDataObject* pComponentDataObject); // called by OnHaveData() to set cached RR ptrs and generally preprocess RR's
virtual void OnHaveRecord(CDNSRecordNodeBase* pRecordNode, CComponentDataObject* pComponentDataObject);
private: void NullCachedPointers(); DNS_STATUS TogglePause();
void FreeZoneInfo(); DNS_STATUS GetZoneInfo(); void AttachZoneInfo(CDNSZoneInfoEx* pNewInfo);
CDNSZoneInfoEx* m_pZoneInfoEx; // following members valid only when m_pZoneInfoEx->HasInfo() is FALSE
DWORD m_dwZoneFlags; WORD m_wZoneType;
#ifdef USE_NDNC
CString m_szPartitionName; #endif
};
#endif // _ZONE_H
|