350 lines
8.7 KiB
C++
350 lines
8.7 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
Servpp.h
|
||
|
Server properties implementation file
|
||
|
|
||
|
FILE HISTORY:
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "Servpp.h"
|
||
|
#include "server.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
BOOL IsLocalSystemAccount(LPCTSTR pszAccount)
|
||
|
{
|
||
|
BOOL fLocal = FALSE;
|
||
|
CString strLocalSystemAccount;
|
||
|
|
||
|
if (pszAccount != NULL)
|
||
|
{
|
||
|
strLocalSystemAccount.LoadString(IDS_LOCAL_SYSTEM_ACCOUNT);
|
||
|
|
||
|
if (strLocalSystemAccount.CompareNoCase(pszAccount) == 0)
|
||
|
fLocal = TRUE;
|
||
|
}
|
||
|
|
||
|
return fLocal;
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// CMachineProperties holder
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
CMachineProperties::CMachineProperties
|
||
|
(
|
||
|
ITFSNode * pNode,
|
||
|
IComponentData * pComponentData,
|
||
|
ITFSComponentData * pTFSCompData,
|
||
|
ISpdInfo * pSpdInfo,
|
||
|
LPCTSTR pszSheetName,
|
||
|
BOOL fSpdInfoLoaded
|
||
|
) : CPropertyPageHolderBase(pNode, pComponentData, pszSheetName),
|
||
|
m_fSpdInfoLoaded(fSpdInfoLoaded)
|
||
|
{
|
||
|
//ASSERT(pFolderNode == GetContainerNode());
|
||
|
|
||
|
m_bAutoDeletePages = FALSE; // we have the pages as embedded members
|
||
|
|
||
|
AddPageToList((CPropertyPageBase*) &m_pageRefresh);
|
||
|
|
||
|
Assert(pTFSCompData != NULL);
|
||
|
m_spTFSCompData.Set(pTFSCompData);
|
||
|
|
||
|
m_spSpdInfo.Set(pSpdInfo);
|
||
|
|
||
|
}
|
||
|
|
||
|
CMachineProperties::~CMachineProperties()
|
||
|
{
|
||
|
RemovePageFromList((CPropertyPageBase*) &m_pageRefresh, FALSE);
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMachinePropRefresh property page
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CMachinePropRefresh, CPropertyPageBase)
|
||
|
|
||
|
CMachinePropRefresh::CMachinePropRefresh() : CPropertyPageBase(CMachinePropRefresh::IDD)
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CMachinePropRefresh)
|
||
|
// NOTE: the ClassWizard will add member initialization here
|
||
|
//}}AFX_DATA_INIT
|
||
|
}
|
||
|
|
||
|
CMachinePropRefresh::~CMachinePropRefresh()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CPropertyPageBase::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CMachinePropRefresh)
|
||
|
DDX_Control(pDX, IDC_EDIT_SECONDS, m_editSeconds);
|
||
|
DDX_Control(pDX, IDC_EDIT_MINUTES, m_editMinutes);
|
||
|
DDX_Control(pDX, IDC_SPIN_SECONDS, m_spinSeconds);
|
||
|
DDX_Control(pDX, IDC_SPIN_MINUTES, m_spinMinutes);
|
||
|
DDX_Control(pDX, IDC_CHECK_ENABLE_STATS, m_checkEnableStats);
|
||
|
DDX_Control(pDX, IDC_CHECK_ENABLE_DNS, m_checkEnableDns);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CMachinePropRefresh, CPropertyPageBase)
|
||
|
//{{AFX_MSG_MAP(CMachinePropRefresh)
|
||
|
ON_BN_CLICKED(IDC_CHECK_ENABLE_STATS, OnCheckEnableStats)
|
||
|
ON_BN_CLICKED(IDC_CHECK_ENABLE_DNS, OnCheckEnableDns)
|
||
|
ON_EN_CHANGE(IDC_EDIT_MINUTES, OnChangeEditMinutes)
|
||
|
ON_EN_CHANGE(IDC_EDIT_SECONDS, OnChangeEditSeconds)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMachinePropRefresh message handlers
|
||
|
|
||
|
BOOL CMachinePropRefresh::OnInitDialog()
|
||
|
{
|
||
|
CPropertyPageBase::OnInitDialog();
|
||
|
|
||
|
m_spinMinutes.SetRange(0, AUTO_REFRESH_MINUTES_MAX);
|
||
|
m_spinSeconds.SetRange(0, AUTO_REFRESH_SECONDS_MAX);
|
||
|
|
||
|
m_checkEnableStats.SetCheck(m_bAutoRefresh);
|
||
|
m_checkEnableDns.SetCheck(m_bEnableDns);
|
||
|
|
||
|
// update the refresh interval
|
||
|
int nMinutes, nSeconds;
|
||
|
DWORD dwRefreshInterval = m_dwRefreshInterval;
|
||
|
|
||
|
nMinutes = dwRefreshInterval / MILLISEC_PER_MINUTE;
|
||
|
dwRefreshInterval -= nMinutes * MILLISEC_PER_MINUTE;
|
||
|
|
||
|
nSeconds = dwRefreshInterval / MILLISEC_PER_SECOND;
|
||
|
dwRefreshInterval -= nSeconds * MILLISEC_PER_SECOND;
|
||
|
|
||
|
m_spinMinutes.SetPos(nMinutes);
|
||
|
m_spinSeconds.SetPos(nSeconds);
|
||
|
|
||
|
m_editMinutes.LimitText(2);
|
||
|
m_editSeconds.LimitText(2);
|
||
|
|
||
|
// set the button states
|
||
|
UpdateButtons();
|
||
|
|
||
|
SetDirty(FALSE);
|
||
|
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::UpdateButtons()
|
||
|
{
|
||
|
int nCheck = m_checkEnableStats.GetCheck();
|
||
|
|
||
|
GetDlgItem(IDC_EDIT_MINUTES)->EnableWindow(nCheck != 0);
|
||
|
GetDlgItem(IDC_EDIT_SECONDS)->EnableWindow(nCheck != 0);
|
||
|
|
||
|
GetDlgItem(IDC_SPIN_MINUTES)->EnableWindow(nCheck != 0);
|
||
|
GetDlgItem(IDC_SPIN_SECONDS)->EnableWindow(nCheck != 0);
|
||
|
|
||
|
GetDlgItem(IDC_CHECK_ENABLE_DNS)->EnableWindow(nCheck != 0);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::OnCheckEnableStats()
|
||
|
{
|
||
|
SetDirty(TRUE);
|
||
|
|
||
|
UpdateButtons();
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::OnCheckEnableDns()
|
||
|
{
|
||
|
SetDirty(TRUE);
|
||
|
|
||
|
UpdateButtons();
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::OnChangeEditMinutes()
|
||
|
{
|
||
|
ValidateMinutes();
|
||
|
SetDirty(TRUE);
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::OnChangeEditSeconds()
|
||
|
{
|
||
|
ValidateSeconds();
|
||
|
SetDirty(TRUE);
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::ValidateMinutes()
|
||
|
{
|
||
|
CString strValue;
|
||
|
int nValue;
|
||
|
|
||
|
if (m_editMinutes.GetSafeHwnd() != NULL)
|
||
|
{
|
||
|
m_editMinutes.GetWindowText(strValue);
|
||
|
if (!strValue.IsEmpty())
|
||
|
{
|
||
|
nValue = _ttoi(strValue);
|
||
|
|
||
|
if ((nValue >= 0) &&
|
||
|
(nValue <= AUTO_REFRESH_MINUTES_MAX))
|
||
|
{
|
||
|
// everything is good
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (nValue > AUTO_REFRESH_MINUTES_MAX)
|
||
|
nValue = AUTO_REFRESH_MINUTES_MAX;
|
||
|
else
|
||
|
if (nValue < 0)
|
||
|
nValue = 0;
|
||
|
|
||
|
// set the new value and beep
|
||
|
CString strText;
|
||
|
LPTSTR pBuf = strText.GetBuffer(5);
|
||
|
|
||
|
_itot(nValue, pBuf, 10);
|
||
|
strText.ReleaseBuffer();
|
||
|
|
||
|
MessageBeep(MB_ICONEXCLAMATION);
|
||
|
|
||
|
m_editMinutes.SetWindowText(strText);
|
||
|
|
||
|
m_editMinutes.SetSel(0, -1);
|
||
|
m_editMinutes.SetFocus();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CMachinePropRefresh::ValidateSeconds()
|
||
|
{
|
||
|
CString strValue;
|
||
|
int nValue;
|
||
|
|
||
|
if (m_editSeconds.GetSafeHwnd() != NULL)
|
||
|
{
|
||
|
m_editSeconds.GetWindowText(strValue);
|
||
|
if (!strValue.IsEmpty())
|
||
|
{
|
||
|
nValue = _ttoi(strValue);
|
||
|
|
||
|
if ((nValue >= 0) &&
|
||
|
(nValue <= AUTO_REFRESH_SECONDS_MAX))
|
||
|
{
|
||
|
// everything is good
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (nValue > AUTO_REFRESH_SECONDS_MAX)
|
||
|
nValue = AUTO_REFRESH_SECONDS_MAX;
|
||
|
else
|
||
|
if (nValue < 0)
|
||
|
nValue = 0;
|
||
|
|
||
|
CString strText;
|
||
|
LPTSTR pBuf = strText.GetBuffer(5);
|
||
|
|
||
|
_itot(nValue, pBuf, 10);
|
||
|
strText.ReleaseBuffer();
|
||
|
|
||
|
MessageBeep(MB_ICONEXCLAMATION);
|
||
|
|
||
|
m_editSeconds.SetWindowText(strText);
|
||
|
|
||
|
m_editSeconds.SetSel(0, -1);
|
||
|
m_editSeconds.SetFocus();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL CMachinePropRefresh::OnApply()
|
||
|
{
|
||
|
if (!IsDirty())
|
||
|
return TRUE;
|
||
|
|
||
|
UpdateData();
|
||
|
|
||
|
m_bAutoRefresh = (m_checkEnableStats.GetCheck() == 1) ? TRUE : FALSE;
|
||
|
m_bEnableDns = (m_checkEnableDns.GetCheck() == 1) ? TRUE : FALSE;
|
||
|
|
||
|
// Make sure that EnableDns only if AutoRefresh is enabled
|
||
|
if (m_bEnableDns && !m_bAutoRefresh) {
|
||
|
m_bEnableDns = FALSE;
|
||
|
}
|
||
|
|
||
|
int nMinutes = m_spinMinutes.GetPos();
|
||
|
int nSeconds = m_spinSeconds.GetPos();
|
||
|
|
||
|
|
||
|
//use minutes as seconds.
|
||
|
m_dwRefreshInterval = nMinutes * MILLISEC_PER_MINUTE;
|
||
|
m_dwRefreshInterval += nSeconds * MILLISEC_PER_SECOND;
|
||
|
|
||
|
if (m_bAutoRefresh && m_dwRefreshInterval == 0)
|
||
|
{
|
||
|
CString strMessage;
|
||
|
|
||
|
AfxMessageBox(IDS_ERR_AUTO_REFRESH_ZERO);
|
||
|
m_editMinutes.SetSel(0, -1);
|
||
|
m_editMinutes.SetFocus();
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
BOOL bRet = CPropertyPageBase::OnApply();
|
||
|
|
||
|
if (bRet == FALSE)
|
||
|
{
|
||
|
// Something bad happened... grab the error code
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
|
||
|
::IpsmMessageBox(GetHolder()->GetError());
|
||
|
}
|
||
|
|
||
|
return bRet;
|
||
|
}
|
||
|
|
||
|
BOOL CMachinePropRefresh::OnPropertyChange(BOOL bScope, LONG_PTR *ChangeMask)
|
||
|
{
|
||
|
SPITFSNode spNode;
|
||
|
CIpsmServer * pServer;
|
||
|
DWORD dwError;
|
||
|
|
||
|
// do stuff here.
|
||
|
BEGIN_WAIT_CURSOR;
|
||
|
|
||
|
spNode = GetHolder()->GetNode();
|
||
|
pServer = GETHANDLER(CIpsmServer, spNode);
|
||
|
|
||
|
pServer->SetAutoRefresh(spNode, m_bAutoRefresh, m_dwRefreshInterval);
|
||
|
|
||
|
pServer->SetDnsResolve(spNode, m_bEnableDns);
|
||
|
|
||
|
SPITFSNodeMgr spNodeMgr;
|
||
|
SPITFSNode spRootNode;
|
||
|
|
||
|
spNode->GetNodeMgr(&spNodeMgr);
|
||
|
spNodeMgr->GetRootNode(&spRootNode);
|
||
|
spRootNode->SetData(TFS_DATA_DIRTY, TRUE);
|
||
|
|
||
|
END_WAIT_CURSOR;
|
||
|
return FALSE;
|
||
|
}
|
||
|
|