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

249 lines
5.9 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1999 - 1999 **/
/**********************************************************************/
/*
dnsprop.cpp
The dynamic DNS property page
FILE HISTORY:
*/
#include "stdafx.h"
#include "DnsProp.h"
#include "server.h"
#include "scope.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDnsPropRegistration property page
IMPLEMENT_DYNCREATE(CDnsPropRegistration, CPropertyPageBase)
CDnsPropRegistration::CDnsPropRegistration() : CPropertyPageBase(CDnsPropRegistration::IDD)
{
//{{AFX_DATA_INIT(CDnsPropRegistration)
m_fEnableDynDns = FALSE;
m_fGarbageCollect = FALSE;
m_fUpdateDownlevel = FALSE;
m_nRegistrationType = -1;
//}}AFX_DATA_INIT
}
CDnsPropRegistration::~CDnsPropRegistration()
{
}
void CDnsPropRegistration::DoDataExchange(CDataExchange* pDX)
{
CPropertyPageBase::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDnsPropRegistration)
DDX_Check(pDX, IDC_CHECK_ENABLE_DYN_DNS, m_fEnableDynDns);
DDX_Check(pDX, IDC_CHECK_GARBAGE_COLLECT, m_fGarbageCollect);
DDX_Check(pDX, IDC_CHECK_UPDATE_DOWNLEVEL, m_fUpdateDownlevel);
DDX_Radio(pDX, IDC_RADIO_CLIENT, m_nRegistrationType);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDnsPropRegistration, CPropertyPageBase)
//{{AFX_MSG_MAP(CDnsPropRegistration)
ON_BN_CLICKED(IDC_RADIO_ALWAYS, OnRadioAlways)
ON_BN_CLICKED(IDC_RADIO_CLIENT, OnRadioClient)
ON_BN_CLICKED(IDC_CHECK_ENABLE_DYN_DNS, OnCheckEnableDynDns)
ON_BN_CLICKED(IDC_CHECK_GARBAGE_COLLECT, OnCheckGarbageCollect)
ON_BN_CLICKED(IDC_CHECK_UPDATE_DOWNLEVEL, OnCheckUpdateDownlevel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDnsPropRegistration message handlers
void CDnsPropRegistration::OnRadioAlways()
{
DWORD dwFlags = m_dwFlags;
UpdateControls();
if (dwFlags != m_dwFlags)
SetDirty(TRUE);
}
void CDnsPropRegistration::OnRadioClient()
{
DWORD dwFlags = m_dwFlags;
UpdateControls();
if (dwFlags != m_dwFlags)
SetDirty(TRUE);
}
BOOL CDnsPropRegistration::OnInitDialog()
{
m_fEnableDynDns = (m_dwFlags & DNS_FLAG_ENABLED) ? TRUE : FALSE;
m_fUpdateDownlevel = (m_dwFlags & DNS_FLAG_UPDATE_DOWNLEVEL) ? TRUE : FALSE;
m_fGarbageCollect = (m_dwFlags & DNS_FLAG_CLEANUP_EXPIRED) ? TRUE : FALSE;
m_nRegistrationType = (m_dwFlags & DNS_FLAG_UPDATE_BOTH_ALWAYS) ? 1 : 0;
CPropertyPageBase::OnInitDialog();
UpdateControls();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDnsPropRegistration::OnPropertyChange(BOOL bScope, LONG_PTR *ChangeMask)
{
SPITFSNode spNode;
DWORD dwFlags = m_dwFlags;
DWORD dwError;
BEGIN_WAIT_CURSOR;
spNode = GetHolder()->GetNode();
switch (m_dhcpOptionType)
{
case DhcpGlobalOptions:
{
CDhcpServer * pServer = GETHANDLER(CDhcpServer, spNode);
dwError = pServer->SetDnsRegistration(dwFlags);
if (dwError != ERROR_SUCCESS)
{
GetHolder()->SetError(dwError);
}
break;
}
case DhcpSubnetOptions:
{
CDhcpScope * pScope = GETHANDLER(CDhcpScope, spNode);
dwError = pScope->SetDnsRegistration(dwFlags);
if (dwError != ERROR_SUCCESS)
{
GetHolder()->SetError(dwError);
}
break;
}
case DhcpReservedOptions:
{
CDhcpReservationClient * pClient = GETHANDLER(CDhcpReservationClient, spNode);
dwError = pClient->SetDnsRegistration(spNode, dwFlags);
if (dwError != ERROR_SUCCESS)
{
GetHolder()->SetError(dwError);
}
break;
}
default:
Assert(FALSE);
break;
}
END_WAIT_CURSOR;
return FALSE;
}
BOOL CDnsPropRegistration::OnApply()
{
UpdateData();
BOOL bRet = CPropertyPageBase::OnApply();
if (bRet == FALSE)
{
// Something bad happened... grab the error code
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
::DhcpMessageBox(GetHolder()->GetError());
}
return bRet;
}
void CDnsPropRegistration::OnCheckEnableDynDns()
{
DWORD dwFlags = m_dwFlags;
UpdateControls();
if (dwFlags != m_dwFlags)
SetDirty(TRUE);
}
void CDnsPropRegistration::OnCheckGarbageCollect()
{
DWORD dwFlags = m_dwFlags;
UpdateControls();
if (dwFlags != m_dwFlags)
SetDirty(TRUE);
}
void CDnsPropRegistration::OnCheckUpdateDownlevel()
{
DWORD dwFlags = m_dwFlags;
UpdateControls();
if (dwFlags != m_dwFlags)
SetDirty(TRUE);
}
void CDnsPropRegistration::UpdateControls()
{
UpdateData();
if (m_fEnableDynDns)
{
GetDlgItem(IDC_RADIO_CLIENT)->EnableWindow(TRUE);
GetDlgItem(IDC_RADIO_ALWAYS)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_GARBAGE_COLLECT)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_UPDATE_DOWNLEVEL)->EnableWindow(TRUE);
m_dwFlags = DNS_FLAG_ENABLED;
if (m_nRegistrationType == 1)
{
// user has selected to always update client information
m_dwFlags |= DNS_FLAG_UPDATE_BOTH_ALWAYS;
}
if (m_fGarbageCollect)
{
m_dwFlags |= DNS_FLAG_CLEANUP_EXPIRED;
}
if (m_fUpdateDownlevel)
{
m_dwFlags |= DNS_FLAG_UPDATE_DOWNLEVEL;
}
}
else
{
// turn off everything. If DynDns is turned off then
// all other flags are ignored.
GetDlgItem(IDC_RADIO_CLIENT)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_ALWAYS)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_GARBAGE_COLLECT)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_UPDATE_DOWNLEVEL)->EnableWindow(FALSE);
m_dwFlags = 0;
}
}