863 lines
19 KiB
C++
863 lines
19 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
atlkprop.cpp
|
||
|
|
||
|
FILE HISTORY:
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "atlkprop.h"
|
||
|
#include "atlkview.h"
|
||
|
#include "globals.h"
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CATLKGeneralPage, RtrPropertyPage)
|
||
|
//{{AFX_MSG_MAP(CATLKGeneralPage)
|
||
|
ON_BN_CLICKED(IDC_RTR_ATLK_SEEDNETWORK, OnSeedNetwork) // Checkbox
|
||
|
|
||
|
ON_BN_CLICKED(IDC_BTN_ATLK_ZONEADD, OnZoneAdd)
|
||
|
ON_BN_CLICKED(IDC_BTN_ATLK_ZONEREMOVE, OnZoneRemove)
|
||
|
ON_BN_CLICKED(IDC_BTN_ATLK_GETZONES, OnZoneGetZones)
|
||
|
ON_BN_CLICKED(IDC_ATLK_BTN_SET_DEFAULT, OnSetAsDefault)
|
||
|
|
||
|
ON_EN_CHANGE(IDC_RTR_ATLK_FROM, OnRangeLowerChange)
|
||
|
ON_EN_CHANGE(IDC_RTR_ATLK_TO, OnRangeUpperChange)
|
||
|
|
||
|
ON_CBN_SELCHANGE(IDC_RTR_ATLK_LB_DEFZONES, OnSelChangeZones)
|
||
|
// ON_CBN_SELCHANGE(IDC_CMB_ATLK_ZONEDEF, OnSelchangeCmbAtlkZonedef)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
|
||
|
HRESULT CATLKGeneralPage::Init(CATLKPropertySheet *pPropSheet, CAdapterInfo* pAdapterInfo)
|
||
|
{
|
||
|
m_pAdapterInfo=pAdapterInfo;
|
||
|
m_pATLKPropSheet = pPropSheet;
|
||
|
m_fDynFetch=false;
|
||
|
return hrOK;
|
||
|
}
|
||
|
|
||
|
CATLKGeneralPage::~CATLKGeneralPage()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
RtrPropertyPage::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CATLKGeneralPage)
|
||
|
// DDX_Control(pDX, IDC_CMB_ATLK_ZONEDEF, m_cmbZoneDef);
|
||
|
DDX_Text(pDX, IDC_RTR_ATLK_DEFAULTZONE_DISPLAY, m_szZoneDef);
|
||
|
DDX_Control(pDX, IDC_RTR_ATLK_FROM, m_RangeLower);
|
||
|
DDX_Text(pDX, IDC_RTR_ATLK_FROM, m_iRangeLower);
|
||
|
DDX_Control(pDX, IDC_RTR_ATLK_TO, m_RangeUpper);
|
||
|
DDX_Text(pDX, IDC_RTR_ATLK_TO, m_iRangeUpper);
|
||
|
DDX_Control(pDX, IDC_RTR_ATLK_LB_DEFZONES, m_zones);
|
||
|
|
||
|
DDX_Control(pDX, IDC_ATLK_SPIN_FROM, m_spinFrom);
|
||
|
DDX_Control(pDX, IDC_ATLK_SPIN_TO, m_spinTo);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CATLKGeneralPage::OnInitDialog()
|
||
|
{
|
||
|
HRESULT hr= hrOK;
|
||
|
DWORD * pdw;
|
||
|
int i;
|
||
|
|
||
|
// check if router is enabled, if not then disable all the controls on the page
|
||
|
if(!IfATLKRoutingEnabled())
|
||
|
EnableChildControls(GetSafeHwnd(), PROPPAGE_CHILD_DISABLE);
|
||
|
|
||
|
Assert(m_pAdapterInfo);
|
||
|
|
||
|
RtrPropertyPage::OnInitDialog();
|
||
|
|
||
|
CheckDlgButton(IDC_RTR_ATLK_SEEDNETWORK, m_pAdapterInfo->m_regInfo.m_dwSeedingNetwork );
|
||
|
|
||
|
if (m_pAdapterInfo->m_regInfo.m_dwSeedingNetwork)
|
||
|
{
|
||
|
TCHAR buf[11];
|
||
|
m_RangeLower.SetWindowText( _ltot(m_pAdapterInfo->m_regInfo.m_dwRangeLower,buf,10) );
|
||
|
m_RangeUpper.SetWindowText( _ltot(m_pAdapterInfo->m_regInfo.m_dwRangeUpper,buf,10) );
|
||
|
}
|
||
|
else
|
||
|
{ //non-seeded
|
||
|
|
||
|
TCHAR buf[11];
|
||
|
m_RangeLower.SetWindowText( _ltot(1,buf,10) );
|
||
|
m_RangeUpper.SetWindowText( _ltot(1,buf,10) );
|
||
|
|
||
|
hr = LoadDynForAdapter();
|
||
|
|
||
|
if(!FAILED(hr))
|
||
|
{
|
||
|
m_RangeLower.SetWindowText( _ltot(m_pAdapterInfo->m_dynInfo.m_dwRangeLower,buf,10) );
|
||
|
m_RangeUpper.SetWindowText( _ltot(m_pAdapterInfo->m_dynInfo.m_dwRangeUpper,buf,10) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SetZones();
|
||
|
|
||
|
if(IfATLKRoutingEnabled())
|
||
|
EnableSeedCtrls ( m_pAdapterInfo->m_regInfo.m_dwSeedingNetwork!=0 );
|
||
|
|
||
|
m_spinFrom.SetRange(0, 8192);
|
||
|
m_spinTo.SetRange(0, 8192);
|
||
|
|
||
|
m_spinFrom.SetBuddy(GetDlgItem(IDC_RTR_ATLK_FROM));
|
||
|
m_spinTo.SetBuddy(GetDlgItem(IDC_RTR_ATLK_TO));
|
||
|
|
||
|
// disable upper range on local talk
|
||
|
if(m_pAdapterInfo->m_regInfo.m_dwMediaType == MEDIATYPE_LOCALTALK)
|
||
|
m_RangeUpper.EnableWindow(FALSE);
|
||
|
|
||
|
m_dwDefID=GetDefID();
|
||
|
|
||
|
SetDirty(FALSE);
|
||
|
SetModified();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
HRESULT CATLKGeneralPage::LoadDynForAdapter(bool fForce/*=false*/)
|
||
|
{
|
||
|
CWaitCursor wait;
|
||
|
HRESULT hr = S_OK;
|
||
|
if (fForce || !m_fDynFetch)
|
||
|
{
|
||
|
if ( !FHrSucceeded(hr = m_pATLKPropSheet->m_atlkEnv.ReloadAdapter(m_pAdapterInfo, true)) )
|
||
|
{
|
||
|
DisplayIdErrorMessage2(NULL, IDS_ERR_ARAP_NOADAPTINFO, hr);
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
m_fDynFetch=true;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnZoneGetZones()
|
||
|
{
|
||
|
CWaitCursor wait;
|
||
|
Assert(m_pATLKPropSheet);
|
||
|
|
||
|
//forced fetch on dynamic zones for this adapter
|
||
|
HRESULT hr = LoadDynForAdapter(true);
|
||
|
if(FAILED(hr))
|
||
|
{
|
||
|
//XX EnableWindow(FALSE);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//load the controls with dynamic zones
|
||
|
SetZones(true);
|
||
|
|
||
|
//load new winsock netranges also
|
||
|
TCHAR buf[11];
|
||
|
m_RangeLower.SetWindowText( _ltot(m_pAdapterInfo->m_dynInfo.m_dwRangeLower,buf,10) );
|
||
|
m_RangeUpper.SetWindowText( _ltot(m_pAdapterInfo->m_dynInfo.m_dwRangeUpper,buf,10) );
|
||
|
|
||
|
if (m_pAdapterInfo->m_dynInfo.m_listZones.GetCount()==0)
|
||
|
{
|
||
|
AfxMessageBox(IDS_ATLK_NOZONES);
|
||
|
}
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnRangeLowerChange()
|
||
|
{
|
||
|
// update upper range automaticcaly on local talk
|
||
|
if(m_pAdapterInfo->m_regInfo.m_dwMediaType == MEDIATYPE_LOCALTALK)
|
||
|
{
|
||
|
CString str;
|
||
|
m_RangeLower.GetWindowText(str);
|
||
|
m_RangeUpper.SetWindowText(str);
|
||
|
m_RangeUpper.UpdateWindow();
|
||
|
}
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnRangeUpperChange()
|
||
|
{
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnSetAsDefault()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
UpdateData(TRUE);
|
||
|
|
||
|
int i;
|
||
|
|
||
|
if ( (i = m_zones.GetCurSel()) == LB_ERR )
|
||
|
return;
|
||
|
|
||
|
CString sz;
|
||
|
m_zones.GetText(i, sz);
|
||
|
|
||
|
m_szZoneDef = sz;
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
|
||
|
GetDlgItem(IDC_ATLK_BTN_SET_DEFAULT)->EnableWindow(false);
|
||
|
|
||
|
UpdateData(FALSE);
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::SetZones(bool fForceDyn/*=false*/)
|
||
|
{
|
||
|
POSITION pos;
|
||
|
Assert(m_pAdapterInfo);
|
||
|
HRESULT hr = S_OK;
|
||
|
CString stDefZone;
|
||
|
int iCmb;
|
||
|
|
||
|
UpdateData(TRUE);
|
||
|
|
||
|
Assert(m_zones.GetSafeHwnd());
|
||
|
m_zones.ResetContent();
|
||
|
// m_cmbZoneDef.ResetContent();
|
||
|
|
||
|
CStringList* psl=NULL;
|
||
|
|
||
|
if (fForceDyn || m_pAdapterInfo->m_regInfo.m_dwSeedingNetwork==0)
|
||
|
{ //non-seeded or forced uses network zones only
|
||
|
hr = LoadDynForAdapter();
|
||
|
if(FAILED(hr))
|
||
|
{
|
||
|
//XX EnableWindow(FALSE);
|
||
|
goto Error;
|
||
|
}
|
||
|
|
||
|
stDefZone = m_pAdapterInfo->m_dynInfo.m_szDefaultZone;
|
||
|
|
||
|
psl= &(m_pAdapterInfo->m_dynInfo.m_listZones);
|
||
|
}
|
||
|
else
|
||
|
{ //seeded uses registry settings
|
||
|
if (m_pAdapterInfo->m_regInfo.m_szDefaultZone.IsEmpty())
|
||
|
{
|
||
|
hr = LoadDynForAdapter();
|
||
|
if(FAILED(hr))
|
||
|
{
|
||
|
//XX EnableWindow(FALSE);
|
||
|
goto Error;
|
||
|
}
|
||
|
stDefZone = m_pAdapterInfo->m_dynInfo.m_szDefaultZone;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
stDefZone = m_pAdapterInfo->m_regInfo.m_szDefaultZone;
|
||
|
}
|
||
|
|
||
|
//seed rtr--fetch from reg if present; otherwize get winsock ones.
|
||
|
if (m_pAdapterInfo->m_regInfo.m_listZones.GetCount()>0)
|
||
|
psl= &(m_pAdapterInfo->m_regInfo.m_listZones);
|
||
|
else
|
||
|
{
|
||
|
hr = LoadDynForAdapter();
|
||
|
if(FAILED(hr))
|
||
|
{
|
||
|
//XX EnableWindow(FALSE);
|
||
|
goto Error;
|
||
|
}
|
||
|
psl= &(m_pAdapterInfo->m_dynInfo.m_listZones);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Assert(psl);
|
||
|
|
||
|
pos = psl->GetHeadPosition();
|
||
|
while ( pos )
|
||
|
{
|
||
|
CString& sz = psl->GetNext(pos);
|
||
|
if ( sz!=_T("") )
|
||
|
{
|
||
|
m_zones.AddString(sz);
|
||
|
// m_cmbZoneDef.AddString((LPCTSTR)sz);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( m_zones.GetCount()>=1 )
|
||
|
{
|
||
|
m_zones.SetCurSel(0);
|
||
|
OnSelChangeZones();
|
||
|
}
|
||
|
|
||
|
|
||
|
// if((iCmb = m_cmbZoneDef.FindStringExact(-1, (LPCTSTR)stDefZone)) != CB_ERR)
|
||
|
// m_cmbZoneDef.SetCurSel( iCmb );
|
||
|
m_szZoneDef = stDefZone;
|
||
|
|
||
|
UpdateData(FALSE);
|
||
|
|
||
|
if(IfATLKRoutingEnabled())
|
||
|
EnableZoneCtrls();
|
||
|
Error:
|
||
|
;
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::EnableZoneCtrls()
|
||
|
{
|
||
|
bool f= (m_zones.GetCount()>=1);
|
||
|
GetDlgItem(IDC_BTN_ATLK_ZONEREMOVE)->EnableWindow(f);
|
||
|
|
||
|
// Wei Jiang, BUG # 145767
|
||
|
if(!f && (GetFocus() == GetDlgItem(IDC_BTN_ATLK_ZONEREMOVE)))
|
||
|
GetDlgItem(IDC_RTR_ATLK_SEEDNETWORK)->SetFocus();
|
||
|
|
||
|
|
||
|
DWORD i;
|
||
|
if ( (i = m_zones.GetCurSel()) == LB_ERR )
|
||
|
return;
|
||
|
|
||
|
CString sz;
|
||
|
m_zones.GetText(i, sz);
|
||
|
|
||
|
if (sz == m_szZoneDef)
|
||
|
GetDlgItem(IDC_ATLK_BTN_SET_DEFAULT)->EnableWindow(false);
|
||
|
else
|
||
|
GetDlgItem(IDC_ATLK_BTN_SET_DEFAULT)->EnableWindow(true);
|
||
|
}
|
||
|
|
||
|
BOOL CATLKGeneralPage::OnApply()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
BOOL fReturn;
|
||
|
HRESULT hr = hrOK;
|
||
|
CString sz;
|
||
|
int iCmb;
|
||
|
Assert(m_pAdapterInfo);
|
||
|
|
||
|
|
||
|
m_pAdapterInfo->m_fModified= !m_pATLKPropSheet->IsCancel();
|
||
|
|
||
|
if ( m_pAdapterInfo->m_fModified )
|
||
|
{
|
||
|
m_pAdapterInfo->m_regInfo.m_dwSeedingNetwork = IsDlgButtonChecked(IDC_RTR_ATLK_SEEDNETWORK);
|
||
|
|
||
|
if ( m_pAdapterInfo->m_regInfo.m_dwSeedingNetwork )
|
||
|
{
|
||
|
sz = m_szZoneDef;
|
||
|
BOOL bDefaultZoneInZoneList = FALSE;
|
||
|
CString szZoneString;
|
||
|
for (int n = 0; n < m_zones.GetCount(); n++)
|
||
|
{
|
||
|
m_zones.GetText(n, szZoneString);
|
||
|
if ( sz.CompareNoCase(szZoneString) == 0 )
|
||
|
{
|
||
|
bDefaultZoneInZoneList = TRUE;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( sz.GetLength()>0 )
|
||
|
{
|
||
|
if (!bDefaultZoneInZoneList)
|
||
|
{
|
||
|
AfxMessageBox(IDS_WRN_ATLK_DELDEFZONE);
|
||
|
return FALSE;
|
||
|
}
|
||
|
m_pAdapterInfo->m_regInfo.m_szDefaultZone=sz;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AfxMessageBox(IDS_WRN_ATLK_SEEDDEFZONE);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
if ( !ValidateNetworkRange() )
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
m_RangeLower.GetWindowText(sz);
|
||
|
m_pAdapterInfo->m_regInfo.m_dwRangeLower = _ttol(sz);
|
||
|
m_RangeUpper.GetWindowText(sz);
|
||
|
m_pAdapterInfo->m_regInfo.m_dwRangeUpper = _ttol(sz);
|
||
|
|
||
|
m_pAdapterInfo->m_regInfo.m_listZones.RemoveAll();
|
||
|
for ( int i=0, c=m_zones.GetCount(); i<c ; i++ )
|
||
|
{
|
||
|
m_zones.GetText(i,sz);
|
||
|
m_pAdapterInfo->m_regInfo.m_listZones.AddTail(sz);
|
||
|
}
|
||
|
m_pAdapterInfo->m_regInfo.m_listZones.AddTail( _T("") );
|
||
|
}
|
||
|
else
|
||
|
{ //for non-seeded network, remove all seeded values
|
||
|
m_pAdapterInfo->m_regInfo.m_szDefaultZone=_T("");
|
||
|
m_pAdapterInfo->m_regInfo.m_dwRangeLower=0;
|
||
|
m_pAdapterInfo->m_regInfo.m_dwRangeUpper=0;
|
||
|
m_pAdapterInfo->m_regInfo.m_listZones.RemoveAll();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fReturn = RtrPropertyPage::OnApply();
|
||
|
|
||
|
if ( !FHrSucceeded(hr) )
|
||
|
fReturn = FALSE;
|
||
|
return fReturn;
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CATLKGeneralPage::ValidateNetworkRange()
|
||
|
{
|
||
|
CWaitCursor wait;
|
||
|
CString szLower, szUpper;
|
||
|
CATLKEnv::AI iter;
|
||
|
Assert(m_pATLKPropSheet);
|
||
|
Assert(m_pAdapterInfo);
|
||
|
|
||
|
|
||
|
static bool fLoaded=false;
|
||
|
|
||
|
if (!fLoaded)
|
||
|
{ //fetch all adapter's dynamic zone & range
|
||
|
|
||
|
if (m_pATLKPropSheet->m_atlkEnv.m_adapterinfolist.size() <= 1)
|
||
|
{
|
||
|
if(FAILED(LoadDynForAdapter()))
|
||
|
{
|
||
|
//XX EnableWindow(FALSE);
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pATLKPropSheet->m_atlkEnv.GetAdapterInfo(false);
|
||
|
}
|
||
|
|
||
|
fLoaded=true;
|
||
|
}
|
||
|
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
CATLKEnv::AL& list = m_pATLKPropSheet->m_atlkEnv.m_adapterinfolist;
|
||
|
|
||
|
m_RangeLower.GetWindowText(szLower);
|
||
|
m_RangeUpper.GetWindowText(szUpper);
|
||
|
DWORD dwValueLower = _ttol(szLower);
|
||
|
DWORD dwValueUpper = _ttol(szUpper);
|
||
|
|
||
|
BOOL bRetVal = TRUE;
|
||
|
|
||
|
if ( (dwValueLower < MIN_RANGE_ALLOWED) || (dwValueLower > MAX_RANGE_ALLOWED) )
|
||
|
{
|
||
|
CString st;
|
||
|
st.Format(IDS_ERR_ARAP_LOWERRANGE, MIN_RANGE_ALLOWED, MAX_RANGE_ALLOWED);
|
||
|
AfxMessageBox((LPCTSTR)st);
|
||
|
m_RangeLower.SetFocus();
|
||
|
m_RangeLower.SetSel(0,-1);
|
||
|
bRetVal = FALSE;
|
||
|
goto END;
|
||
|
}
|
||
|
|
||
|
if ( (dwValueUpper < MIN_RANGE_ALLOWED) || (dwValueUpper > MAX_RANGE_ALLOWED) )
|
||
|
{
|
||
|
CString st;
|
||
|
st.Format(IDS_ERR_ARAP_UPPERRANGE, MIN_RANGE_ALLOWED, MAX_RANGE_ALLOWED);
|
||
|
AfxMessageBox((LPCTSTR)st);
|
||
|
m_RangeUpper.SetFocus();
|
||
|
m_RangeUpper.SetSel(0,-1);
|
||
|
bRetVal = FALSE;
|
||
|
goto END;
|
||
|
}
|
||
|
|
||
|
if ( dwValueLower > dwValueUpper )
|
||
|
{
|
||
|
AfxMessageBox(IDS_ERR_ARAP_RANGE);
|
||
|
m_RangeLower.SetFocus();
|
||
|
m_RangeLower.SetSel(0,-1);
|
||
|
bRetVal = FALSE;
|
||
|
goto END;
|
||
|
}
|
||
|
|
||
|
|
||
|
for ( iter = list.begin();iter != list.end(); iter++ )
|
||
|
{
|
||
|
ATLK_DYN_ADAPTER& adapt =(*iter)->m_dynInfo;
|
||
|
|
||
|
if ( adapt.m_dwRangeLower==0 && adapt.m_dwRangeUpper==0 )
|
||
|
continue;
|
||
|
|
||
|
if ( (*iter)->m_regInfo.m_szAdapter==m_pAdapterInfo->m_regInfo.m_szAdapter )
|
||
|
continue;
|
||
|
|
||
|
if ( (dwValueLower >= adapt.m_dwRangeLower) && (dwValueLower <= adapt.m_dwRangeUpper) )
|
||
|
{
|
||
|
AfxMessageBox(IDS_ERR_ARAP_LOWERRANGE_OVERLAP);
|
||
|
m_RangeLower.SetFocus();
|
||
|
m_RangeLower.SetSel(0,-1);
|
||
|
bRetVal = FALSE;
|
||
|
goto END;
|
||
|
}
|
||
|
|
||
|
if ( (dwValueUpper >= adapt.m_dwRangeLower) && (dwValueUpper <= adapt.m_dwRangeUpper) )
|
||
|
{
|
||
|
AfxMessageBox(IDS_ERR_ARAP_UPPERRANGE_OVERLAP);
|
||
|
m_RangeUpper.SetFocus();
|
||
|
m_RangeUpper.SetSel(0,-1);
|
||
|
bRetVal = FALSE;
|
||
|
goto END;
|
||
|
}
|
||
|
|
||
|
if ( (dwValueLower <= adapt.m_dwRangeLower) && (dwValueUpper >= adapt.m_dwRangeUpper) )
|
||
|
{
|
||
|
AfxMessageBox(IDS_ERR_ARAP_RANGE_OVERLAP);
|
||
|
m_RangeLower.SetFocus();
|
||
|
m_RangeLower.SetSel(0,-1);
|
||
|
bRetVal = FALSE;
|
||
|
goto END;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
END:
|
||
|
return bRetVal;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CATLKGeneralPage::OnSeedNetwork()
|
||
|
{
|
||
|
EnableSeedCtrls(IsDlgButtonChecked(IDC_RTR_ATLK_SEEDNETWORK)!=0);
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
BOOL IsValidZoneName(CString& str)
|
||
|
{
|
||
|
if(str.GetLength() > 31 || str.GetLength() <= 0)
|
||
|
return FALSE;
|
||
|
|
||
|
if(str.FindOneOf(_T("*:=@")) != -1)
|
||
|
return FALSE;
|
||
|
|
||
|
int n = str.GetLength();
|
||
|
|
||
|
while(--n)
|
||
|
{
|
||
|
int c = str.GetAt(n);
|
||
|
if(c >= 128 || !_istprint((wint_t) c))
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnZoneAdd()
|
||
|
{
|
||
|
CEditNewZoneDialog editNewZone(this);
|
||
|
|
||
|
if( editNewZone.DoModal() == IDOK )
|
||
|
{
|
||
|
CString sz;
|
||
|
|
||
|
editNewZone.GetZone(sz);
|
||
|
if( sz.GetLength() <= 0 )
|
||
|
return;
|
||
|
|
||
|
|
||
|
sz.TrimLeft();
|
||
|
sz.TrimRight();
|
||
|
|
||
|
if (!IsValidZoneName(sz))
|
||
|
{
|
||
|
AfxMessageBox(IDS_ERR_ATLK_ZONE_NAME);
|
||
|
return;
|
||
|
}
|
||
|
// Validate if the Zone name is valid
|
||
|
|
||
|
if( LB_ERR != m_zones.FindStringExact(-1, (LPCTSTR)sz))
|
||
|
{
|
||
|
CString stDupZoneMsg;
|
||
|
stDupZoneMsg.Format(IDS_ERR_ATLK_DUP_ZONE_NAME, (LPCTSTR)sz);
|
||
|
AfxMessageBox(stDupZoneMsg);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
m_zones.AddString(sz);
|
||
|
m_zones.SelectString(-1,sz);
|
||
|
|
||
|
// m_cmbZoneDef.AddString((LPCTSTR)sz);
|
||
|
if (m_szZoneDef.IsEmpty())
|
||
|
OnSetAsDefault();
|
||
|
|
||
|
EnableZoneCtrls();
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnZoneRemove()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
int i;
|
||
|
|
||
|
if ( (i = m_zones.GetCurSel()) == LB_ERR )
|
||
|
return;
|
||
|
|
||
|
CString sz;
|
||
|
m_zones.GetText(i, sz);
|
||
|
m_zones.DeleteString(i);
|
||
|
|
||
|
|
||
|
EnableZoneCtrls();
|
||
|
|
||
|
if ( sz.CompareNoCase(m_szZoneDef)==0 )
|
||
|
{
|
||
|
m_szZoneDef = _T("");
|
||
|
AfxMessageBox(IDS_WRN_ATLK_DELDEFZONE);
|
||
|
}
|
||
|
|
||
|
m_zones.SetCurSel( (m_zones.GetCount() == i) ? i-1 : i );
|
||
|
OnSelChangeZones();
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
|
||
|
void CATLKGeneralPage::OnSelChangeZones()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
if ( (i = m_zones.GetCurSel()) == LB_ERR )
|
||
|
return;
|
||
|
|
||
|
CString sz;
|
||
|
m_zones.GetText(i, sz);
|
||
|
|
||
|
if (sz == m_szZoneDef)
|
||
|
GetDlgItem(IDC_ATLK_BTN_SET_DEFAULT)->EnableWindow(false);
|
||
|
else
|
||
|
if(IfATLKRoutingEnabled())
|
||
|
GetDlgItem(IDC_ATLK_BTN_SET_DEFAULT)->EnableWindow(true);
|
||
|
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
void CATLKGeneralPage::OnSelchangeCmbAtlkZonedef()
|
||
|
{
|
||
|
SetDirty(TRUE);
|
||
|
SetModified();
|
||
|
}
|
||
|
|
||
|
|
||
|
void CATLKGeneralPage::EnableSeedCtrls(bool fEnable)
|
||
|
{
|
||
|
GetDlgItem(IDC_RTR_ATLK_S_RANGE)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_RTR_ATLK_S_LOWER)->EnableWindow(fEnable);
|
||
|
|
||
|
GetDlgItem(IDC_RTR_ATLK_DEFAULTZONE_PROMPT)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_RTR_ATLK_DEFAULTZONE_DISPLAY)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_ATLK_SPIN_FROM)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_ATLK_SPIN_TO)->EnableWindow(fEnable);
|
||
|
|
||
|
m_RangeLower.EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_RTR_ATLK_S_UPPER)->EnableWindow(fEnable);
|
||
|
m_RangeUpper.EnableWindow(fEnable);
|
||
|
|
||
|
// Windows NT Bug : 354771
|
||
|
// disable upper range on local talk
|
||
|
|
||
|
if(m_pAdapterInfo->m_regInfo.m_dwMediaType == MEDIATYPE_LOCALTALK)
|
||
|
m_RangeUpper.EnableWindow(FALSE);
|
||
|
|
||
|
m_zones.EnableWindow(fEnable);
|
||
|
// m_cmbZoneDef.EnableWindow(fEnable);
|
||
|
|
||
|
GetDlgItem(IDC_ATLK_BTN_SET_DEFAULT)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_RTR_ATLK_S_DEF)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_BTN_ATLK_ZONEADD)->EnableWindow(fEnable);
|
||
|
GetDlgItem(IDC_BTN_ATLK_GETZONES)->EnableWindow(fEnable);
|
||
|
|
||
|
if ( fEnable )
|
||
|
EnableZoneCtrls();
|
||
|
else
|
||
|
{
|
||
|
GetDlgItem(IDC_BTN_ATLK_ZONEREMOVE)->EnableWindow(false);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//***********************************************************************
|
||
|
// Apple talk property sheet
|
||
|
//***********************************************************************
|
||
|
CATLKPropertySheet::CATLKPropertySheet(ITFSNode *pNode,
|
||
|
IComponentData *pComponentData,
|
||
|
ITFSComponentData *pTFSCompData,
|
||
|
LPCTSTR pszSheetName,
|
||
|
CWnd *pParent,
|
||
|
UINT iPage,
|
||
|
BOOL fScopePane)
|
||
|
: RtrPropertySheet(pNode, pComponentData, pTFSCompData,
|
||
|
pszSheetName, pParent, iPage, fScopePane),
|
||
|
m_pageGeneral(IDD_RTR_ATLK)
|
||
|
{
|
||
|
m_spNode.Set(pNode);
|
||
|
}
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
CATLKPropertySheet::Init
|
||
|
Initialize the property sheets. The general action here will be
|
||
|
to initialize/add the various pages.
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
HRESULT CATLKPropertySheet::Init(IInterfaceInfo *pIf)
|
||
|
{
|
||
|
Assert(pIf);
|
||
|
HRESULT hr = hrOK;
|
||
|
|
||
|
m_spIf.Set(pIf);
|
||
|
|
||
|
// The pages are embedded members of the class
|
||
|
// do not delete them.
|
||
|
m_bAutoDeletePages = FALSE;
|
||
|
|
||
|
//winsock on adapter only
|
||
|
m_atlkEnv.SetFlags(CATLKEnv::ATLK_ONLY_ONADAPTER);
|
||
|
|
||
|
//load up container of adapters names
|
||
|
m_atlkEnv.FetchRegInit();
|
||
|
|
||
|
//find this adapterinfo in the container
|
||
|
CString sz=m_spIf->GetId();
|
||
|
CAdapterInfo* p = m_atlkEnv.FindAdapter(sz);
|
||
|
Assert(p);
|
||
|
if (p==NULL)
|
||
|
{
|
||
|
TRACE1("The adapter GUID %s was not found in appletalk\\parameters\\adapters key", sz);
|
||
|
goto Error;
|
||
|
}
|
||
|
|
||
|
//add general appletalk page
|
||
|
m_pageGeneral.Init(this, p);
|
||
|
AddPageToList((CPropertyPageBase*) &m_pageGeneral);
|
||
|
|
||
|
Error:
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*!--------------------------------------------------------------------------
|
||
|
CATLKPropertySheet::SaveSheetData
|
||
|
-
|
||
|
Author: KennT
|
||
|
---------------------------------------------------------------------------*/
|
||
|
BOOL CATLKPropertySheet::SaveSheetData()
|
||
|
{
|
||
|
Assert(m_spIf);
|
||
|
|
||
|
HRESULT hr = m_atlkEnv.SetAdapterInfo();
|
||
|
|
||
|
if ( FHrFailed(hr) )
|
||
|
{
|
||
|
DisplayIdErrorMessage2(NULL, IDS_ERR_ATLK_CONFIG, hr);
|
||
|
}
|
||
|
|
||
|
SPITFSNode spParent;
|
||
|
SPITFSNodeHandler spHandler;
|
||
|
|
||
|
m_spNode->GetParent(&spParent);
|
||
|
spParent->GetHandler(&spHandler);
|
||
|
|
||
|
spHandler->OnCommand(spParent,
|
||
|
IDS_MENU_REFRESH,
|
||
|
CCT_RESULT, NULL, 0);
|
||
|
|
||
|
return TRUE; return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CEditNewZoneDialog dialog
|
||
|
//
|
||
|
// Author: NSun
|
||
|
|
||
|
CEditNewZoneDialog::CEditNewZoneDialog(CWnd* pParent /*=NULL*/)
|
||
|
: CDialog(CEditNewZoneDialog::IDD, pParent)
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CEditNewZoneDialog)
|
||
|
// NOTE: the ClassWizard will add member initialization here
|
||
|
//}}AFX_DATA_INIT
|
||
|
}
|
||
|
|
||
|
|
||
|
void CEditNewZoneDialog::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CEditNewZoneDialog)
|
||
|
DDX_Control(pDX, IDC_RTR_ATLK_NEWZONE_EDIT, m_editZone);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CEditNewZoneDialog, CDialog)
|
||
|
//{{AFX_MSG_MAP(CEditNewZoneDialog)
|
||
|
// NOTE: the ClassWizard will add message map macros here
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/*!----------------------------------------------------------------------------
|
||
|
CEditNewZoneDialog::GetZone
|
||
|
-
|
||
|
Author: NSun
|
||
|
------------------------------------------------------------------------------*/
|
||
|
void CEditNewZoneDialog::GetZone(OUT CString& stZone)
|
||
|
{
|
||
|
stZone = m_stZone;
|
||
|
}
|
||
|
|
||
|
BOOL CEditNewZoneDialog::OnInitDialog()
|
||
|
{
|
||
|
CDialog::OnInitDialog();
|
||
|
m_editZone.SetFocus();
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void CEditNewZoneDialog::OnOK()
|
||
|
{
|
||
|
CString st;
|
||
|
m_editZone.GetWindowText(st);
|
||
|
|
||
|
if(st.IsEmpty())
|
||
|
{
|
||
|
AfxMessageBox(IDS_ERR_ATLK_EMPTY_ZONE);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
m_stZone = st;
|
||
|
CDialog::OnOK();
|
||
|
}
|
||
|
|
||
|
void CEditNewZoneDialog::OnCancel()
|
||
|
{
|
||
|
CDialog::OnCancel();
|
||
|
}
|
||
|
|