|
|
/*++
Copyright (c) 1994-95 Microsoft Corporation
Module Name:
srvppgr.cpp
Abstract:
Server property page (repl) implementation.
Author:
Don Ryan (donryan) 02-Feb-1995
Environment:
User Mode - Win32
Revision History:
Chandana Surlu 05-Apr-1995 Redid the replication dialog (mostly modeled after liccpa.cpl)
JeffParh (jeffparh) 16-Dec-1996 o Disallowed server as own enterprise server. o Changed "Start At" to use locale info for time format rather than private registry settings. Merged OnClose() functionality into OnKillActive(). o Added warning of possible license loss when changing replication target server. o No longer automatically saves when page is flipped.
--*/
#include "stdafx.h"
#include "llsmgr.h"
#include "srvppgr.h"
extern "C" { #include <lmcons.h>
#include <icanon.h>
}
#ifndef WS_EX_CLIENTEDGE
#define WS_EX_CLIENTEDGE 0x00000200L
#endif // WS_EX_CLIENTEDGE
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__; #endif
IMPLEMENT_DYNCREATE(CServerPropertyPageReplication, CPropertyPage)
BEGIN_MESSAGE_MAP(CServerPropertyPageReplication, CPropertyPage) //{{AFX_MSG_MAP(CServerPropertyPageReplication)
ON_BN_CLICKED(IDC_PP_SERVER_REPLICATION_AT, OnAt) ON_BN_CLICKED(IDC_PP_SERVER_REPLICATION_DC, OnDc) ON_BN_CLICKED(IDC_PP_SERVER_REPLICATION_ESRV, OnEsrv) ON_BN_CLICKED(IDC_PP_SERVER_REPLICATION_EVERY, OnEvery) ON_WM_CTLCOLOR() ON_LBN_SETFOCUS(IDC_PP_SERVER_REPLICATION_AT_AMPM, OnSetfocusAmpm) ON_LBN_KILLFOCUS(IDC_PP_SERVER_REPLICATION_AT_AMPM, OnKillfocusAmpm) ON_EN_KILLFOCUS(IDC_PP_SERVER_REPLICATION_AT_HOUR, OnKillFocusHour) ON_EN_SETFOCUS(IDC_PP_SERVER_REPLICATION_AT_HOUR, OnSetFocusHour) ON_EN_KILLFOCUS(IDC_PP_SERVER_REPLICATION_AT_MINUTE, OnKillFocusMinute) ON_EN_SETFOCUS(IDC_PP_SERVER_REPLICATION_AT_MINUTE, OnSetFocusMinute) ON_EN_SETFOCUS(IDC_PP_SERVER_REPLICATION_AT_SECOND, OnSetFocusSecond) ON_EN_KILLFOCUS(IDC_PP_SERVER_REPLICATION_AT_SECOND, OnKillFocusSecond) ON_EN_SETFOCUS(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, OnSetfocusEvery) ON_EN_KILLFOCUS(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, OnKillfocusEvery) ON_EN_UPDATE(IDC_PP_SERVER_REPLICATION_ESRV_NAME, OnUpdateEsrvName) ON_EN_UPDATE(IDC_PP_SERVER_REPLICATION_AT_HOUR, OnUpdateAtHour) ON_EN_UPDATE(IDC_PP_SERVER_REPLICATION_AT_MINUTE, OnUpdateAtMinute) ON_EN_UPDATE(IDC_PP_SERVER_REPLICATION_AT_SECOND, OnUpdateAtSecond) ON_EN_UPDATE(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, OnUpdateEveryValue) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
CServerPropertyPageReplication::CServerPropertyPageReplication() : CPropertyPage(CServerPropertyPageReplication::IDD)
/*++
Routine Description:
Constructor for server properties (replication).
Arguments:
None.
Return Values:
None.
--*/
{ //{{AFX_DATA_INIT(CServerPropertyPageReplication)
//}}AFX_DATA_INIT
m_pServer = NULL;
m_bReplAt = FALSE; m_bUseEsrv = FALSE; m_bOnInit = TRUE; m_nHourMax = HOUR_MAX_24; m_nHourMin = HOUR_MIN_24; }
CServerPropertyPageReplication::~CServerPropertyPageReplication()
/*++
Routine Description:
Destructor for server properties (replication).
Arguments:
None.
Return Values:
None.
--*/
{ //
// Nothing to do here.
//
}
void CServerPropertyPageReplication::DoDataExchange(CDataExchange* pDX)
/*++
Routine Description:
Called by framework to exchange dialog data.
Arguments:
pDX - data exchange object.
Return Values:
None.
--*/
{ CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CServerPropertyPageReplication)
DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_EVERY_VALUE, m_everyEdit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_ESRV_NAME, m_esrvEdit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT, m_atBtn); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_EVERY, m_everyBtn); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_DC, m_dcBtn); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_ESRV, m_esrvBtn); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_SPIN_AT, m_spinAt); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_SPIN_EVERY, m_spinEvery); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_BORDER, m_atBorderEdit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_SEP1, m_atSep1Edit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_SEP2, m_atSep2Edit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_HOUR, m_atHourEdit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_MINUTE, m_atMinEdit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_SECOND, m_atSecEdit); DDX_Control(pDX, IDC_PP_SERVER_REPLICATION_AT_AMPM, m_atAmPmEdit); //}}AFX_DATA_MAP
}
void CServerPropertyPageReplication::InitPage(CServer* pServer)
/*++
Routine Description:
Initializes server property page (replication).
Arguments:
pServer - server object.
Return Values:
None.
--*/
{ ASSERT_VALID(pServer); m_pServer = pServer; }
BOOL CServerPropertyPageReplication::OnInitDialog()
/*++
Routine Description:
Message handler for WM_INITDIALOG.
Arguments:
None.
Return Values:
VT_BOOL.
--*/
{ BeginWaitCursor();
GetProfile(); CPropertyPage::OnInitDialog();
if (!m_bIsMode24) { m_atAmPmEdit.InsertString(0, m_str1159); m_atAmPmEdit.InsertString(1, m_str2359); m_atAmPmEdit.InsertString(2, TEXT("")); // fake it for the 24 hour mode
} // Do the edit text limits
m_everyEdit.LimitText(2); m_esrvEdit.LimitText(MAX_PATH); // we'll eat up the \\ chars
m_atHourEdit.LimitText(2); m_atMinEdit.LimitText(2); m_atSecEdit.LimitText(2);
m_spinEvery.SetRange(INTERVAL_MIN, INTERVAL_MAX);
if (Refresh()) { // UpdateData(FALSE);
} else { theApp.DisplayLastStatus(); }
m_atBorderEdit.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);
if (m_bReplAt) m_atHourEdit.SetFocus(); else m_everyEdit.SetFocus();
if ( m_pServer->IsWin2000() ) { m_dcBtn.SetCheck(FALSE); m_esrvBtn.SetCheck(FALSE); m_esrvEdit.EnableWindow(FALSE); m_dcBtn.EnableWindow(FALSE); m_esrvBtn.EnableWindow(FALSE);
CWnd * pWndMasterGB = GetDlgItem( IDC_PP_SERVER_REPLICATION_MASTER_GB );
ASSERT( pWndMasterGB != NULL );
if (pWndMasterGB != NULL) { pWndMasterGB->EnableWindow(FALSE); } } else { if (m_bUseEsrv) m_esrvEdit.SetFocus(); }
m_bOnInit = FALSE;
EndWaitCursor();
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CServerPropertyPageReplication::Refresh()
/*++
Routine Description:
Refreshs property page.
Arguments:
None.
Return Values:
VT_BOOL.
--*/
{ m_bReplAt = m_pServer->IsReplicatingDaily(); if (FALSE != m_bReplAt) { DWORD dwTemp = m_pServer->GetReplicationTime(); m_nHour = dwTemp / (60 * 60); m_nMinute = (dwTemp - (m_nHour * 60 * 60)) / 60; m_nSecond = dwTemp - (m_nHour * 60 * 60) - (m_nMinute * 60); m_nStartingHour = DEFAULT_EVERY; // When the every button is selected, we always show the default.
if (!m_bIsMode24) { // it's in 12 hour format
if (m_nHour > 12) { m_bPM = TRUE; m_nHour -= 12; } else if (m_nHour == 12) { m_bPM = TRUE; } else { if (m_nHour == 0) m_nHour = m_nHourMax; m_bPM = FALSE; } } } else { m_nStartingHour = m_pServer->GetReplicationTime() / 3600; if (!m_bIsMode24) // it's in 12 hour format
m_nHour = m_nHourMax; else m_nHour = m_nHourMin; m_nMinute = MINUTE_MIN; m_nSecond = SECOND_MIN; m_bPM = FALSE; }
m_bUseEsrv = !m_pServer->IsReplicatingToDC(); if (m_bReplAt) { OnAt(); } else { OnEvery(); }
if (m_bUseEsrv) { BSTR bstrEnterpriseServer = m_pServer->GetController(); m_strEnterpriseServer = bstrEnterpriseServer; SysFreeString(bstrEnterpriseServer); OnEsrv(); } else { OnDc(); }
return TRUE; }
void CServerPropertyPageReplication::OnAt()
/*++
Routine Description:
Enables LLS_REPLICATION_TYPE_TIME controls.
Arguments:
None.
Return Values:
None.
--*/
{ // change time edit control bg color
m_atBorderEdit.Invalidate(); m_atBorderEdit.UpdateWindow(); m_atSep1Edit.Invalidate(); m_atSep1Edit.UpdateWindow(); m_atSep2Edit.Invalidate(); m_atSep2Edit.UpdateWindow();
if (!m_bOnInit) SetModified(TRUE); m_bReplAt = TRUE; m_atBtn.SetCheck(TRUE); m_everyBtn.SetCheck(FALSE);
TCHAR szTemp[3];
if (m_bIsHourLZ) { wsprintf(szTemp, TEXT("%02u"), m_nHour); szTemp[2] = NULL; SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_HOUR, szTemp); } else SetDlgItemInt(IDC_PP_SERVER_REPLICATION_AT_HOUR, m_nHour);
wsprintf(szTemp, TEXT("%02u"), m_nMinute); szTemp[2] = NULL; SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_MINUTE, szTemp);
wsprintf(szTemp, TEXT("%02u"), m_nSecond); szTemp[2] = NULL; SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SECOND, szTemp);
SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SEP1, m_strSep1); SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SEP2, m_strSep1);
if (m_bPM) m_atAmPmEdit.SetTopIndex(1); else m_atAmPmEdit.SetTopIndex(0);
SetDlgItemText(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, TEXT(""));
m_everyEdit.EnableWindow(FALSE); m_spinEvery.EnableWindow(FALSE);
m_atHourEdit.EnableWindow(TRUE); m_atMinEdit.EnableWindow(TRUE); m_atSecEdit.EnableWindow(TRUE); m_spinAt.EnableWindow(TRUE);
if ( m_bIsMode24 ) { m_atAmPmEdit.ShowWindow( SW_HIDE ); } else { m_atAmPmEdit.ShowWindow( SW_SHOWNOACTIVATE ); m_atAmPmEdit.EnableWindow( TRUE ); }
m_atBtn.SetFocus(); }
void CServerPropertyPageReplication::OnEvery()
/*++
Routine Description:
Enables LLS_REPLICATION_TYPE_DELTA controls.
Arguments:
None.
Return Values:
None.
--*/
{ // change time edit control bg color
m_atBorderEdit.Invalidate(); m_atBorderEdit.UpdateWindow(); m_atSep1Edit.Invalidate(); m_atSep1Edit.UpdateWindow(); m_atSep2Edit.Invalidate(); m_atSep2Edit.UpdateWindow();
if (!m_bOnInit) SetModified(TRUE); m_bReplAt = FALSE; m_atBtn.SetCheck(FALSE); m_everyBtn.SetCheck(TRUE);
SetDlgItemInt(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, m_nStartingHour); SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_HOUR, TEXT("")); SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_MINUTE, TEXT("")); SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SECOND, TEXT("")); SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SEP1, TEXT("")); SetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SEP2, TEXT("")); m_atAmPmEdit.SetTopIndex(2); // Have to fake this
m_atHourEdit.EnableWindow(FALSE); m_atMinEdit.EnableWindow(FALSE); m_atSecEdit.EnableWindow(FALSE); m_spinAt.EnableWindow(FALSE); m_atAmPmEdit.EnableWindow(FALSE); m_atAmPmEdit.ShowWindow( SW_HIDE );
m_everyEdit.EnableWindow(TRUE); m_spinEvery.EnableWindow(TRUE); m_everyBtn.SetFocus(); }
void CServerPropertyPageReplication::OnDc()
/*++
Routine Description:
Enables LLS_REPLICATION_TYPE_DELTA controls.
Arguments:
None.
Return Values:
None.
--*/
{ if (!m_bOnInit) SetModified(TRUE); m_bUseEsrv = FALSE; m_dcBtn.SetCheck(TRUE); m_esrvBtn.SetCheck(FALSE); SetDlgItemText(IDC_PP_SERVER_REPLICATION_ESRV_NAME, TEXT("")); m_esrvEdit.EnableWindow(FALSE); m_dcBtn.SetFocus(); }
void CServerPropertyPageReplication::OnEsrv()
/*++
Routine Description:
Enables LLS_REPLICATION_TYPE_DELTA controls.
Arguments:
None.
Return Values:
None.
--*/
{ if (!m_bOnInit) SetModified(TRUE); m_bUseEsrv = TRUE; m_dcBtn.SetCheck(FALSE); m_esrvBtn.SetCheck(TRUE); m_esrvEdit.EnableWindow(TRUE); SetDlgItemText(IDC_PP_SERVER_REPLICATION_ESRV_NAME, m_strEnterpriseServer); m_esrvBtn.SetFocus(); }
BOOL CServerPropertyPageReplication::OnKillActive()
/*++
Routine Description:
Process property page (replication).
Arguments:
None.
Return Values:
Returns true if successful.
--*/
{ short nID; BOOL fBeep = TRUE;
if ( EditValidate(&nID, &fBeep)) { return TRUE; } else { EditInvalidDlg(fBeep); return FALSE; } }
HBRUSH CServerPropertyPageReplication::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
/*++
Routine Description:
Message handler for WM_CTLCOLOR.
Arguments:
pDC - device context. pWnd - control window. nCtlColor - color selected.
Return Values:
Brush of background color.
--*/
{ if ( ( m_atBtn.GetCheck() ) && ( ( pWnd == &m_atSep1Edit ) || ( pWnd == &m_atSep2Edit ) || ( pWnd == &m_atBorderEdit ) ) ) { return (HBRUSH)DefWindowProc(WM_CTLCOLOREDIT, (WPARAM)pDC->GetSafeHdc(), (LPARAM)pWnd->GetSafeHwnd()); } else { return CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); } }
void CServerPropertyPageReplication::GetProfile()
/*++
Routine Description:
Loads international config info.
Arguments:
None.
Return Values:
None..
--*/
{ int cch; int cchBuffer; LPTSTR pszBuffer; TCHAR szValue[ 2 ];
// defaults in case of memory allocation failure
m_strSep1 = TEXT( ":" ); m_strSep2 = TEXT( ":" ); m_str1159 = TEXT( "AM" ); m_str2359 = TEXT( "PM" ); m_bIsMode24 = FALSE; m_bIsHourLZ = FALSE;
// time seperator
cchBuffer = 16; pszBuffer = m_strSep1.GetBuffer( cchBuffer ); ASSERT( NULL != pszBuffer );
if ( NULL != pszBuffer ) { cch = GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_STIME, pszBuffer, cchBuffer ); m_strSep1.ReleaseBuffer(); ASSERT( cch > 0 ); m_strSep2 = m_strSep1; }
// AM string
cchBuffer = 16; pszBuffer = m_str1159.GetBuffer( cchBuffer ); ASSERT( NULL != pszBuffer );
if ( NULL != pszBuffer ) { cch = GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_S1159, pszBuffer, cchBuffer ); m_str1159.ReleaseBuffer(); ASSERT( cch > 0 ); }
// PM string
cchBuffer = 16; pszBuffer = m_str2359.GetBuffer( cchBuffer ); ASSERT( NULL != pszBuffer );
if ( NULL != pszBuffer ) { cch = GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_S2359, pszBuffer, cchBuffer ); m_str2359.ReleaseBuffer(); ASSERT( cch > 0 ); }
// Leading zero for hours?
cch = GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szValue, sizeof( szValue ) / sizeof( TCHAR ) ); ASSERT( cch > 0 );
if ( cch > 0 ) { m_bIsHourLZ = _wtoi( szValue ); }
// time format; 0 = AM/PM, 1 = 24hr
cch = GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_ITIME, szValue, sizeof( szValue ) / sizeof( TCHAR ) ); ASSERT( cch > 0 );
if ( cch > 0 ) { m_bIsMode24 = _wtoi( szValue ); }
if (!m_bIsMode24) { m_nHourMax = HOUR_MAX_12; m_nHourMin = HOUR_MIN_12; }
if ( NULL == pszBuffer ) { theApp.DisplayStatus( STATUS_NO_MEMORY ); } }
void CServerPropertyPageReplication::OnSetfocusAmpm()
/*++
Routine Description:
Message handler for Listbox control IDC_PP_SERVER_REPLICATION_AT_AMPM on message LBN_SETFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ if (!m_bOnInit) SetModified(TRUE); m_spinAt.SetRange(0, 1); m_spinAt.SetBuddy(&m_atAmPmEdit); }
void CServerPropertyPageReplication::OnKillfocusAmpm()
/*++
Routine Description:
Message handler for Listbox control IDC_PP_SERVER_REPLICATION_AT_AMPM on message LBN_KILLFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ m_atAmPmEdit.SetCurSel(-1); //if (m_spinAt.GetBuddy() == &m_atAmPmEdit)
// m_spinAt.SendMessage(UDM_SETBUDDY, 0, 0);
}
void CServerPropertyPageReplication::OnSetFocusHour()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_HOUR on message EN_SETFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ if (!m_bOnInit) SetModified(TRUE); m_spinAt.SetRange(m_bIsMode24 ? 0 :1, m_bIsMode24 ? 23 : 12); m_spinAt.SetBuddy(&m_atHourEdit); }
void CServerPropertyPageReplication::OnKillFocusHour()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_HOUR on message EN_KILLFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ // if (m_spinAt.GetBuddy() == &m_atHourEdit)
// m_spinAt.SendMessage(UDM_SETBUDDY, 0, 0);
}
void CServerPropertyPageReplication::OnSetFocusMinute()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_MINUTE on message EN_SETFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ if (!m_bOnInit) SetModified(TRUE); m_spinAt.SetRange(0, 59); m_spinAt.SetBuddy(&m_atMinEdit); }
void CServerPropertyPageReplication::OnKillFocusMinute()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_MINUTE on message EN_KILLFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ // if (m_spinAt.GetBuddy() == &m_atMinEdit)
// m_spinAt.SendMessage(UDM_SETBUDDY, 0, 0);
}
void CServerPropertyPageReplication::OnSetFocusSecond()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_SECOND on message EN_SETFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ if (!m_bOnInit) SetModified(TRUE); m_spinAt.SetRange(0, 59); m_spinAt.SetBuddy(&m_atSecEdit); }
void CServerPropertyPageReplication::OnKillFocusSecond()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_SECOND on message EN_KILLFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ // if (m_spinAt.GetBuddy() == &m_atSecEdit)
// m_spinAt.SendMessage(UDM_SETBUDDY, 0, 0);
}
void CServerPropertyPageReplication::OnSetfocusEvery()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_EVERY_VALUE on message EN_SETFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ if (!m_bOnInit) SetModified(TRUE); }
void CServerPropertyPageReplication::OnKillfocusEvery()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_EVERY_VALUE on message EN_KILLFOCUS.
Arguments:
None.
Return Values:
None..
--*/
{ // if (m_spinEvery.GetBuddy() == &m_everyEdit)
// m_spinEvery.SendMessage(UDM_SETBUDDY, 0, 0);
}
void CServerPropertyPageReplication::OnUpdateEsrvName()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_ESRV_NAME on message EN_UPDATE
Arguments:
None.
Return Values:
None..
--*/
{ TCHAR szName[MAX_PATH + 3]; // MAX_PATH + 2 \ char's + null
UINT nValue; if (!m_bOnInit) SetModified(TRUE);
nValue = GetDlgItemText(IDC_PP_SERVER_REPLICATION_ESRV_NAME, szName, MAX_PATH +3); szName[nValue] = NULL;
if (!(wcsncmp(szName, TEXT("\\\\"), 2))) SetDlgItemText(IDC_PP_SERVER_REPLICATION_ESRV_NAME, szName + 2); }
void CServerPropertyPageReplication::OnUpdateAtHour()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_HOUR on message EN_UPDATE
Arguments:
None.
Return Values:
None..
--*/
{
TCHAR szNum[3]; UINT nValue; short i; int iVal; BOOL fOk = TRUE; if (!m_bOnInit) SetModified(TRUE); nValue = GetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_HOUR, szNum, sizeof(szNum) / sizeof( TCHAR ));
for (i=0;szNum[i];i++) if(!_istdigit(szNum[i])) fOk = FALSE;
if (fOk) { iVal = _wtoi(szNum);
if (!nValue) { if (m_bIsMode24) { m_nHour = 0; m_bPM = FALSE; } else { m_nHour = m_nHourMax; m_bPM = FALSE; } } else if ((iVal < (int)m_nHourMin) || (iVal > (int)m_nHourMax)) fOk = FALSE; }
if (!fOk) m_atHourEdit.Undo(); }
void CServerPropertyPageReplication::OnUpdateAtMinute()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_MINUTE on message EN_UPDATE
Arguments:
None.
Return Values:
None..
--*/
{
TCHAR szNum[3]; UINT nValue; short i; int iVal; BOOL fOk = TRUE; if (!m_bOnInit) SetModified(TRUE); nValue = GetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_MINUTE, szNum, sizeof(szNum) / sizeof( TCHAR ));
for (i=0;szNum[i];i++) if(!_istdigit(szNum[i])) fOk = FALSE;
if (fOk) { iVal = _wtoi(szNum);
if (!nValue) { m_nSecond = MINUTE_MIN; } else if ((iVal < MINUTE_MIN) || (iVal > MINUTE_MAX)) fOk = FALSE; }
if (!fOk) m_atMinEdit.Undo(); }
void CServerPropertyPageReplication::OnUpdateAtSecond()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_AT_SECOND on message EN_UPDATE
Arguments:
None.
Return Values:
None..
--*/
{
TCHAR szNum[3]; UINT nValue; short i; int iVal; BOOL fOk = TRUE; if (!m_bOnInit) SetModified(TRUE); nValue = GetDlgItemText(IDC_PP_SERVER_REPLICATION_AT_SECOND, szNum, sizeof(szNum) / sizeof( TCHAR ));
for (i=0;szNum[i];i++) if(!_istdigit(szNum[i])) fOk = FALSE;
if (fOk) { iVal = _wtoi(szNum);
if (!nValue) { m_nSecond = SECOND_MIN; } else if ((iVal < SECOND_MIN) || (iVal > SECOND_MAX)) fOk = FALSE; }
if (!fOk) m_atSecEdit.Undo(); }
void CServerPropertyPageReplication::OnUpdateEveryValue()
/*++
Routine Description:
Message handler for Edit control IDC_PP_SERVER_REPLICATION_EVERY_VALUE on message EN_UPDATE
Arguments:
None.
Return Values:
None..
--*/
{ TCHAR szNum[3]; UINT nValue; short i; int iVal; BOOL fOk = TRUE; if (!m_bOnInit) SetModified(TRUE); nValue = GetDlgItemText(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, szNum, sizeof(szNum) / sizeof( TCHAR ));
for (i=0;szNum[i];i++) if(!_istdigit(szNum[i])) fOk = FALSE;
if (fOk) { iVal = _wtoi(szNum); if (!nValue) { m_nStartingHour = DEFAULT_EVERY; } else if (iVal < 9) { m_nStartingHour = (DWORD) iVal; } else if ((iVal < INTERVAL_MIN) || (iVal > INTERVAL_MAX)) fOk = FALSE; else m_nStartingHour = (DWORD) iVal; }
if (!fOk) m_everyEdit.Undo(); }
BOOL CServerPropertyPageReplication::EditValidate(short *pnID, BOOL *pfBeep) /*++
Routine Description:
Validate all edit & other fields.
Arguments:
None.
Return Values:
short *pnID Pass back the bad ID BOOL *pfBeep Whether to Beep
--*/
{ UINT nValue; BOOL fValid = FALSE; TCHAR szTemp[MAX_PATH + 1]; DWORD NumberOfHours, SecondsinHours;
ASSERT(NULL != pfBeep); ASSERT(NULL != pnID);
*pfBeep = TRUE;
// only do this if license info is replicated to an ES
do { if (m_esrvBtn.GetCheck()) { if ( m_pServer->IsReplicatingToDC() ) { // the user has changed the "UseEnterprise" value from "no" to "yes";
// warn of possible license loss
int nButton; CString strMessage;
AfxFormatString1( strMessage, IDP_CONFIRM_USE_ENTERPRISE, m_pServer->m_strName ); nButton = AfxMessageBox( strMessage, MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2, IDP_CONFIRM_USE_ENTERPRISE );
if ( IDYES != nButton ) { *pnID = IDC_PP_SERVER_REPLICATION_ESRV; *pfBeep = FALSE; fValid = FALSE; m_esrvBtn.SetFocus(); break; } }
nValue = GetDlgItemText( IDC_PP_SERVER_REPLICATION_ESRV_NAME, szTemp, MAX_PATH + 1);
if (nValue == 0) { if ( m_pServer->IsWin2000() ) { // It is ok for Enterprise Server to be blank
fValid = TRUE; szTemp[nValue] = UNICODE_NULL; // 375761 JonN 8/9/99 do not break here, this is not an error
} else { *pnID = IDC_PP_SERVER_REPLICATION_ESRV_NAME; m_esrvEdit.SetFocus(); m_esrvEdit.SetSel(MAKELONG(0, -1), FALSE); break; } } else { fValid = TRUE; // we got a name, assume valid
// 375761 JonN 8/9/99 moved this stuff into this "else"
if (nValue > MAX_PATH) nValue = MAX_PATH;
// Validate server name
if (I_NetNameValidate(NULL, szTemp, NAMETYPE_COMPUTER, LM2X_COMPATIBLE) != ERROR_SUCCESS) { AfxMessageBox(IDP_ERROR_INVALID_COMPUTERNAME, MB_OK|MB_ICONSTOP); *pnID = IDC_PP_SERVER_REPLICATION_ESRV_NAME; *pfBeep = FALSE; fValid = FALSE; m_esrvEdit.SetFocus(); m_esrvEdit.SetSel(MAKELONG(0, -1), FALSE); break; }
ASSERT_VALID( m_pServer ); if ( !m_pServer->m_strName.CompareNoCase( szTemp ) ) { // can't replicate to yourself
AfxMessageBox(IDP_ERROR_NO_SELF_REPLICATION, MB_OK|MB_ICONSTOP); *pnID = IDC_PP_SERVER_REPLICATION_ESRV_NAME; *pfBeep = FALSE; fValid = FALSE; m_esrvEdit.SetFocus(); m_esrvEdit.SetSel(MAKELONG(0, -1), FALSE); break; }
if ( m_strEnterpriseServer.CompareNoCase( szTemp ) && !m_pServer->IsReplicatingToDC() ) { // this server was already set to replicate to an enterprise server,
// but the user has changed the name of the enterprise server;
// warn of possible license loss
int nButton; CString strMessage;
AfxFormatString1( strMessage, IDP_CONFIRM_ENTERPRISE_CHANGE, m_pServer->m_strName ); nButton = AfxMessageBox( strMessage, MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2, IDP_CONFIRM_ENTERPRISE_CHANGE );
if ( IDYES != nButton ) { *pnID = IDC_PP_SERVER_REPLICATION_ESRV_NAME; *pfBeep = FALSE; fValid = FALSE; m_esrvEdit.SetFocus(); m_esrvEdit.SetSel(MAKELONG(0, -1), FALSE); break; } } }
m_strEnterpriseServer = szTemp; m_bUseEsrv = TRUE; } else { if ((m_dcBtn.GetCheck()) && (!m_pServer->IsReplicatingToDC())) { // the user has changed the "UseEnterprise" value from "yes" to "no";
// warn of possible license loss
int nButton; CString strMessage;
AfxFormatString1( strMessage, IDP_CONFIRM_NOT_USE_ENTERPRISE, m_pServer->m_strName ); nButton = AfxMessageBox( strMessage, MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2, IDP_CONFIRM_NOT_USE_ENTERPRISE );
if ( IDYES != nButton ) { *pnID = IDC_PP_SERVER_REPLICATION_ESRV; *pfBeep = FALSE; fValid = FALSE; m_esrvBtn.SetFocus(); break; } }
// Get rid of the Server Name.
m_strEnterpriseServer = TEXT(""); m_bUseEsrv = FALSE; }
if (m_everyBtn.GetCheck()) { nValue = GetDlgItemInt(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, &fValid, FALSE); *pnID = IDC_PP_SERVER_REPLICATION_EVERY_VALUE; if (fValid) { if (nValue < INTERVAL_MIN) { fValid = FALSE; m_nStartingHour = INTERVAL_MIN; SetDlgItemInt(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, INTERVAL_MIN, FALSE); m_everyEdit.SetFocus(); m_everyEdit.SetSel(MAKELONG(0, -1), FALSE); break; } else if (nValue > INTERVAL_MAX) { fValid = FALSE; m_nStartingHour = INTERVAL_MAX; SetDlgItemInt(IDC_PP_SERVER_REPLICATION_EVERY_VALUE, INTERVAL_MAX, FALSE); m_everyEdit.SetFocus(); m_everyEdit.SetSel(MAKELONG(0, -1), FALSE); break; } else m_nStartingHour = nValue; m_nReplicationTime = m_nStartingHour; } else { fValid = FALSE; m_everyEdit.SetFocus(); m_everyEdit.SetSel(MAKELONG(0, -1), FALSE); break; } m_bReplAt = FALSE; } else { nValue = GetDlgItemInt(IDC_PP_SERVER_REPLICATION_AT_HOUR, &fValid, FALSE); if (fValid) m_nHour = nValue; else { *pnID = IDC_PP_SERVER_REPLICATION_AT_HOUR; m_atHourEdit.SetFocus(); m_atHourEdit.SetSel(MAKELONG(0, -1), FALSE); break; }
nValue = GetDlgItemInt(IDC_PP_SERVER_REPLICATION_AT_MINUTE, &fValid, FALSE); if (fValid) m_nMinute = nValue; else { *pnID = IDC_PP_SERVER_REPLICATION_AT_MINUTE; m_atMinEdit.SetFocus(); m_atMinEdit.SetSel(MAKELONG(0, -1), FALSE); break; }
nValue = GetDlgItemInt(IDC_PP_SERVER_REPLICATION_AT_SECOND, &fValid, FALSE); if (fValid) m_nSecond = nValue; else { *pnID = IDC_PP_SERVER_REPLICATION_AT_SECOND; m_atSecEdit.SetFocus(); m_atSecEdit.SetSel(MAKELONG(0, -1), FALSE); break; }
if (!m_bIsMode24) { *pnID = IDC_PP_SERVER_REPLICATION_AT_AMPM; nValue = m_atAmPmEdit.GetTopIndex(); if (nValue == 0) { m_bPM = FALSE; } else if (nValue == 1) { m_bPM = TRUE; } else { fValid = FALSE; m_atAmPmEdit.SetFocus(); break; } } if (!m_bIsMode24) { // It's in 12 hour format
if (m_bPM) { NumberOfHours = 12 + m_nHour - ((m_nHour / 12) * 12); } else { NumberOfHours = m_nHour - ((m_nHour / 12) * 12); } } else { // It's in 24 hour format
NumberOfHours = m_nHour; } SecondsinHours = NumberOfHours * 60 * 60; m_nReplicationTime = SecondsinHours + (m_nMinute * 60) + m_nSecond; // Cheating. Use the same member
m_bReplAt = TRUE; }
} while(FALSE);
return( fValid ); }
void CServerPropertyPageReplication::EditInvalidDlg(BOOL fBeep)
/*++
Routine Description:
If any edit/listbox field has an invalid data item.
Arguments:
BOOL fBeep Beep only if we haven't yet put up a MessageBox.
Return Values:
None..
--*/
{ if (fBeep) ::MessageBeep(MB_OK); }
void CServerPropertyPageReplication::SaveReplicationParams()
/*++
Routine Description:
Write to the remote registry. REG_VALUE_ENTERPRISE_SERVER m_strEnterpriseServer REG_VALUE_USE_ENTERPRISE m_bUseEsrv REG_VALUE_REPLICATION_TYPE m_bReplAt REG_VALUE_REPLICATION_TIME m_nReplicationTime
Arguments:
None.
Return Values:
None..
--*/
{ long Status;
ASSERT(m_bUseEsrv == m_esrvBtn.GetCheck()); ASSERT(m_bReplAt == m_atBtn.GetCheck());
#ifdef CONFIG_THROUGH_REGISTRY
do {
dwValue = m_esrvBtn.GetCheck(); Status = RegSetValueEx(m_pServer->GetReplRegHandle(),REG_VALUE_USE_ENTERPRISE,0,REG_DWORD, (PBYTE)&dwValue, sizeof(DWORD)); ASSERT(Status == ERROR_SUCCESS); if (Status != ERROR_SUCCESS) break;
Status = RegSetValueEx(m_pServer->GetReplRegHandle(), REG_VALUE_ENTERPRISE_SERVER, 0, REG_SZ, (LPBYTE)MKSTR(m_strEnterpriseServer), (lstrlen(m_strEnterpriseServer) + 1) * sizeof(TCHAR));
ASSERT(Status == ERROR_SUCCESS); if (Status != ERROR_SUCCESS) break;
dwValue = m_atBtn.GetCheck(); Status = RegSetValueEx(m_pServer->GetReplRegHandle(), REG_VALUE_REPLICATION_TYPE,0,REG_DWORD, (PBYTE)&dwValue, sizeof(DWORD));
ASSERT(Status == ERROR_SUCCESS); if (Status != ERROR_SUCCESS) break;
dwValue = (m_bReplAt? m_nReplicationTime : (m_nStartingHour * 3600)); Status = RegSetValueEx(m_pServer->GetReplRegHandle(), REG_VALUE_REPLICATION_TIME,0,REG_DWORD, (PBYTE)&dwValue, sizeof(DWORD)); ASSERT(Status == ERROR_SUCCESS); if (Status != ERROR_SUCCESS) break; } while (FALSE); #else
if ( m_pServer->ConnectLls() ) { LLS_SERVICE_INFO_0 ServiceInfo;
ZeroMemory( &ServiceInfo, sizeof( ServiceInfo ) );
ServiceInfo.UseEnterprise = m_esrvBtn.GetCheck(); ServiceInfo.EnterpriseServer = MKSTR(m_strEnterpriseServer); ServiceInfo.ReplicationType = m_atBtn.GetCheck(); ServiceInfo.ReplicationTime = ( LLS_REPLICATION_TYPE_TIME == ServiceInfo.ReplicationType ) ? m_nReplicationTime : (m_nStartingHour * 3600);
Status = ::LlsServiceInfoSet( m_pServer->GetLlsHandle(), 0, (LPBYTE) &ServiceInfo ); LlsSetLastStatus( Status );
if ( IsConnectionDropped( Status ) ) { m_pServer->DisconnectLls(); } } else { Status = LlsGetLastStatus(); } #endif
if (Status != ERROR_SUCCESS) { theApp.DisplayStatus(Status); } else { SetModified(FALSE); } }
void CServerPropertyPageReplication::OnOK()
/*++
Routine Description:
Handler for Apply button.
Arguments:
None.
Return Values:
None.
--*/
{ SaveReplicationParams(); }
|