|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/
/*
sumprop.cpp IPX summary node property sheet and property pages FILE HISTORY: */
#include "stdafx.h"
#include "rtrutil.h" // smart MPR handle pointers
#include "format.h" // FormatNumber function
#include "sumprop.h"
#include "summary.h"
#include "ipxrtdef.h"
#include "mprerror.h"
#include "mprfltr.h"
#include "rtrerr.h"
#include "remras.h"
#include "rrasutil.h"
#include "ipxutil.h"
#include "rtrcomn.h"
extern "C" { #include "routprot.h"
};
IPXSummaryInterfaceProperties::IPXSummaryInterfaceProperties(ITFSNode *pNode, IComponentData *pComponentData, ITFSComponentData *pTFSCompData, LPCTSTR pszSheetName, CWnd *pParent, UINT iPage, BOOL fScopePane) : RtrPropertySheet(pNode, pComponentData, pTFSCompData, pszSheetName, pParent, iPage, fScopePane), m_pageConfig(IDD_IPX_IF_CONFIG_PAGE), m_pageGeneral(IDD_IPX_IF_GENERAL_PAGE), m_bNewInterface(FALSE), m_pIPXConn(NULL) { m_spNode.Set(pNode); }
/*!--------------------------------------------------------------------------
IPXSummaryInterfaceProperties::Init Initialize the property sheets. The general action here will be to initialize/add the various pages. Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryInterfaceProperties::Init(IRtrMgrInfo *pRm, IInterfaceInfo *pIfInfo) { HRESULT hr = hrOK; IPXConnection * pIPXConn; BaseIPXResultNodeData * pData; SPIRouterInfo spRouter; RouterVersionInfo routerVersion;
pData = GET_BASEIPXRESULT_NODEDATA(m_spNode); ASSERT_BASEIPXRESULT_NODEDATA(pData); pIPXConn = pData->m_pIPXConnection;
m_spRm.Set(pRm); m_spIf.Set(pIfInfo); m_spRm->GetParentRouterInfo(&spRouter); // The pages are embedded members of the class
// do not delete them.
m_bAutoDeletePages = FALSE;
// Initialize the infobase
// Do this here, because the init is called in the context
// of the main thread
CORg( LoadInfoBase(pIPXConn) ); m_pageGeneral.Init(m_spIf, pIPXConn, this); AddPageToList((CPropertyPageBase*) &m_pageGeneral);
// Windows NT Bug : 208724
// Only show the IPX configuration page for the internal interface
if (m_spIf && (m_spIf->GetInterfaceType() == ROUTER_IF_TYPE_INTERNAL)) { // Only allow config page for NT5 and up (there is no
// configuration object for NT4).
spRouter->GetRouterVersionInfo(&routerVersion); if (routerVersion.dwRouterVersion >= 5) { HRESULT hrPage; hrPage = m_pageConfig.Init(m_spIf, pIPXConn, this); if (FHrOK(hrPage)) AddPageToList((CPropertyPageBase*) &m_pageConfig); else if (!FHrSucceeded(hrPage)) DisplayTFSErrorMessage(NULL); } }
Error: return hr; }
IPXSummaryInterfaceProperties::~IPXSummaryInterfaceProperties() { if (m_pIPXConn) { m_pIPXConn->Release(); m_pIPXConn = NULL; } }
/*!--------------------------------------------------------------------------
IPXSummaryInterfaceProperties::LoadInfoBase - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryInterfaceProperties::LoadInfoBase(IPXConnection *pIPXConn) { Assert(pIPXConn); HRESULT hr = hrOK; HANDLE hTransport = NULL; LPCOLESTR pszInterfaceId = NULL; SPIInfoBase spInfoBase; BYTE * pDefault; int cBlocks = 0;
m_pIPXConn = pIPXConn; pIPXConn->AddRef(); // If configuring the client-interface, load the client-interface info,
// otherwise, retrieve the interface being configured and load
// its info.
// The client interface doesn't have an ID
if (m_spIf) pszInterfaceId = m_spIf->GetId();
if ((pszInterfaceId == NULL) || (StrLenW(pszInterfaceId) == 0)) { #ifdef DEBUG
// Check to see that this is really an client node
{ BaseIPXResultNodeData * pResultData = NULL; pResultData = GET_BASEIPXRESULT_NODEDATA(m_spNode); Assert(pResultData); ASSERT_BASEIPXRESULT_NODEDATA(pResultData);
Assert(pResultData->m_fClient); } #endif
// Get the transport handle
CWRg( ::MprConfigTransportGetHandle(pIPXConn->GetConfigHandle(), PID_IPX, &hTransport) ); // Load the client interface info
CORg( m_spRm->GetInfoBase(pIPXConn->GetConfigHandle(), hTransport, NULL, &spInfoBase) ); m_bClientInfoBase = TRUE; } else { m_spRmIf.Release(); CORg( m_spIf->FindRtrMgrInterface(PID_IPX, &m_spRmIf) );
//
//$ Opt: This should be made into a sync call rather
// than a Load.
//
// Reload the information for this router-manager interface
// This call could fail for valid reasons (if we are creating
// a new interface, for example).
//
m_spRmIf->Load(m_spIf->GetMachineName(), NULL, NULL, NULL);
//
// The parameters are all NULL so that we can use the
// default RPC handles.
//
m_spRmIf->GetInfoBase(NULL, NULL, NULL, &spInfoBase); m_bClientInfoBase = FALSE; }
if (!spInfoBase) { // No info was found for the inteface
// allocate a new InfoBase instead
CORg( CreateInfoBase(&spInfoBase) ); }
//
// Check that there is a block for interface-status in the info,
// and insert the default block if none is found.
//
if (spInfoBase->BlockExists(IPX_INTERFACE_INFO_TYPE) == hrFalse) { // If it didn't have the general interface info, assume that
// we're adding IPX to this interface
m_bNewInterface = TRUE; }
CORg( AddIpxPerInterfaceBlocks(m_spIf, spInfoBase) );
m_spInfoBase = spInfoBase.Transfer(); Error: return hr; }
/*!--------------------------------------------------------------------------
IPXSummaryInterfaceProperties::GetInfoBase - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryInterfaceProperties::GetInfoBase(IInfoBase **ppInfoBase) { Assert(ppInfoBase); *ppInfoBase = m_spInfoBase; m_spInfoBase->AddRef();
return hrOK; }
/*!--------------------------------------------------------------------------
IPXSummaryInterfaceProperties::SaveSheetData This is performed on the main thread. This will save sheet-wide data (rather than page data). Author: KennT ---------------------------------------------------------------------------*/ BOOL IPXSummaryInterfaceProperties::SaveSheetData() { HRESULT hr = hrOK; SPITFSNodeHandler spHandler; HANDLE hTransport = NULL, hInterface = NULL; DWORD dwErr; SPITFSNode spParent; // By this time each page should have written its information out
// to the infobase
if (m_spInfoBase) { if (m_bClientInfoBase) { Assert(m_spRm); CORg( m_spRm->Save(m_spRm->GetMachineName(), 0, 0, NULL, m_spInfoBase, 0)); } else { // For IPX, we need to have the protocol information in the
// infobase, BEFORE we add the interface to the running router.
Assert(m_spRmIf);
//
// Need to set the infobase back to the registry
//
m_pIPXConn->DisconnectFromConfigServer();
CWRg( ::MprConfigInterfaceGetHandle( m_pIPXConn->GetConfigHandle(), (LPTSTR) m_spRmIf->GetInterfaceId(), &hInterface) );
// Get the transport handle
dwErr = ::MprConfigInterfaceTransportGetHandle( m_pIPXConn->GetConfigHandle(), hInterface,// need hInterface
PID_IPX, &hTransport); if (dwErr != ERROR_SUCCESS) { RtrMgrInterfaceCB rmIfCB;
m_spRmIf->CopyCB(&rmIfCB); dwErr = ::MprConfigInterfaceTransportAdd( m_pIPXConn->GetConfigHandle(), hInterface, m_spRmIf->GetTransportId(), rmIfCB.szId, NULL, 0, &hTransport); } CWRg( dwErr ); m_spRmIf->SetInfoBase(NULL, hInterface, hTransport, m_spInfoBase);
//
// Now, we notify that the interface is being added
// This gives the protocols a chance to add on their information
//
if (m_bNewInterface) m_spRm->RtrNotify(ROUTER_CHILD_PREADD, ROUTER_OBJ_RmIf, 0);
//
// Reload the infobase (to get the new data before calling
// the final save).
//
m_spInfoBase.Release(); m_spRmIf->GetInfoBase(NULL, hInterface, hTransport, &m_spInfoBase);
//
// Perform the final save (since we are passing in a non-NULL
// infobase pointer) this will commit the information back
// to the running router.
//
CORg( m_spRmIf->Save(m_spIf->GetMachineName(), NULL, hInterface, hTransport, m_spInfoBase, 0)); }
if (m_bNewInterface) m_spRm->RtrNotify(ROUTER_CHILD_ADD, ROUTER_OBJ_RmIf, 0); }
if (m_bNewInterface) { SPITFSNodeHandler spHandler; SPITFSNode spParent; m_spNode->SetVisibilityState(TFS_VIS_SHOW); m_spNode->Show(); // Force the node to do a resync
m_spNode->GetParent(&spParent); spParent->GetHandler(&spHandler); spHandler->OnCommand(spParent, IDS_MENU_SYNC, CCT_RESULT, NULL, 0); // Windows NT Bugs : 133891, we have added this to the UI
// we no longer consider this a new interface
m_bNewInterface = FALSE; } Error: if (!FHrSucceeded(hr)) { // Panic1("The Save failed %08lx", hr);
CancelSheetData(); return FALSE; } // Force the node to do a resync
m_spNode->GetParent(&spParent); spParent->GetHandler(&spHandler); spHandler->OnCommand(spParent, IDS_MENU_SYNC, CCT_RESULT, NULL, 0); return TRUE; }
/*!--------------------------------------------------------------------------
IPXSummaryInterfaceProperties::CancelSheetData - Author: KennT ---------------------------------------------------------------------------*/ void IPXSummaryInterfaceProperties::CancelSheetData() { if (m_bNewInterface) { m_spNode->SetVisibilityState(TFS_VIS_DELETE); if (m_spIf) m_spIf->DeleteRtrMgrInterface(PID_IPX, TRUE); else { // This was the client interface, just don't save the
// infobase back
} } }
/*---------------------------------------------------------------------------
IPXSummaryIfPageGeneral ---------------------------------------------------------------------------*/
IPXSummaryIfPageGeneral::~IPXSummaryIfPageGeneral() { if (m_pIPXConn) { m_pIPXConn->Release(); m_pIPXConn = NULL; } }
BEGIN_MESSAGE_MAP(IPXSummaryIfPageGeneral, RtrPropertyPage) //{{AFX_MSG_MAP(IPXSummaryIfPageGeneral)
ON_BN_CLICKED(IDC_IIG_BTN_INPUT_FILTERS, OnInputFilters) ON_BN_CLICKED(IDC_IIG_BTN_OUTPUT_FILTERS, OnOutputFilters) ON_BN_CLICKED(IDC_IIG_BTN_ADMIN_STATE, OnChangeAdminButton) ON_BN_CLICKED(IDC_IIG_BTN_IPX_CP, OnChangeButton) ON_BN_CLICKED(IDC_IIG_BTN_IPX_WAN, OnChangeButton) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
void IPXSummaryIfPageGeneral::OnChangeAdminButton() { BOOL bSelected = IsDlgButtonChecked(IDC_IIG_BTN_ADMIN_STATE);
DWORD dwIfType = m_spIf ? m_spIf->GetInterfaceType() : ROUTER_IF_TYPE_CLIENT;
if (ROUTER_IF_TYPE_CLIENT != dwIfType) { GetDlgItem(IDC_IIG_BTN_INPUT_FILTERS)->EnableWindow(bSelected); GetDlgItem(IDC_IIG_BTN_OUTPUT_FILTERS)->EnableWindow(bSelected); }
// Only if dwIfType == ROUTER_IF_TYPE_FULL_ROUTER can IDC_IIG_BTN_IPX_CP || IDC_IIG_BTN_IPX_WAN be changed
if (ROUTER_IF_TYPE_FULL_ROUTER == dwIfType) { GetDlgItem(IDC_IIG_GRP_CONTROL_PROTOCOL)->EnableWindow(bSelected); GetDlgItem(IDC_IIG_BTN_IPX_CP)->EnableWindow(bSelected); GetDlgItem(IDC_IIG_BTN_IPX_WAN)->EnableWindow(bSelected); } OnChangeButton(); }
void IPXSummaryIfPageGeneral::OnChangeButton() { SetDirty(TRUE); SetModified(); }
void IPXSummaryIfPageGeneral::OnInputFilters() { OnFiltersConfig(FILTER_INBOUND); }
void IPXSummaryIfPageGeneral::OnOutputFilters() { OnFiltersConfig(FILTER_OUTBOUND); }
/*!--------------------------------------------------------------------------
IPXSummaryIfPageGeneral::Init - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryIfPageGeneral::Init(IInterfaceInfo *pIfInfo, IPXConnection *pIPXConn, IPXSummaryInterfaceProperties *pPropSheet) { m_spIf.Set(pIfInfo); m_pIPXConn = pIPXConn; pIPXConn->AddRef(); m_pIPXPropSheet = pPropSheet; return hrOK; }
/*!--------------------------------------------------------------------------
IPXSummaryIfPageGeneral::OnInitDialog - Author: KennT ---------------------------------------------------------------------------*/ BOOL IPXSummaryIfPageGeneral::OnInitDialog() { HRESULT hr = hrOK; PBYTE pData; SPIInfoBase spInfoBase; IPX_IF_INFO * pIpxIf = NULL; IPXWAN_IF_INFO *pIpxWanIf = NULL; DWORD dwIfType; BOOL fEnable;
// create the error info object
CreateTFSErrorInfo(0); RtrPropertyPage::OnInitDialog(); //
// The page is now initialized. Load the current configuration
// for the interface being configured, and display its settings.
//
// Get the infobase from the property sheet.
//
CORg( m_pIPXPropSheet->GetInfoBase(&spInfoBase) ); //
// Retrieve the interface-status block configured
//
CORg( spInfoBase->GetData(IPX_INTERFACE_INFO_TYPE, 0, (BYTE **) &pIpxIf) );
CheckDlgButton(IDC_IIG_BTN_ADMIN_STATE, pIpxIf->AdminState == ADMIN_STATE_ENABLED);
GetDlgItem(IDC_IIG_GRP_CONTROL_PROTOCOL)->EnableWindow(pIpxIf->AdminState == ADMIN_STATE_ENABLED); GetDlgItem(IDC_IIG_BTN_INPUT_FILTERS)->EnableWindow(pIpxIf->AdminState == ADMIN_STATE_ENABLED); GetDlgItem(IDC_IIG_BTN_OUTPUT_FILTERS)->EnableWindow(pIpxIf->AdminState == ADMIN_STATE_ENABLED);
dwIfType = m_spIf ? m_spIf->GetInterfaceType() : ROUTER_IF_TYPE_CLIENT; if (dwIfType == ROUTER_IF_TYPE_FULL_ROUTER) { CORg( spInfoBase->GetData(IPXWAN_INTERFACE_INFO_TYPE, 0, (LPBYTE *) &pIpxWanIf) ); if (pIpxWanIf->AdminState == ADMIN_STATE_ENABLED) CheckDlgButton(IDC_IIG_BTN_IPX_WAN, ENABLED); else CheckDlgButton(IDC_IIG_BTN_IPX_CP, ENABLED); fEnable = TRUE; } else if (dwIfType == ROUTER_IF_TYPE_CLIENT) { CheckDlgButton(IDC_IIG_BTN_IPX_CP, ENABLED); fEnable = FALSE; } else { fEnable = FALSE; }
// by default the controls are enabled, so do this call only
// if we need to disable them
if (fEnable == FALSE) { GetDlgItem(IDC_IIG_GRP_CONTROL_PROTOCOL)->EnableWindow(FALSE); GetDlgItem(IDC_IIG_BTN_IPX_CP)->EnableWindow(FALSE); GetDlgItem(IDC_IIG_BTN_IPX_WAN)->EnableWindow(FALSE); }
if (dwIfType == ROUTER_IF_TYPE_CLIENT) { GetDlgItem(IDC_IIG_BTN_INPUT_FILTERS)->EnableWindow(FALSE); GetDlgItem(IDC_IIG_BTN_OUTPUT_FILTERS)->EnableWindow(FALSE); }
SetDirty(m_pIPXPropSheet->m_bNewInterface ? TRUE : FALSE);
Error: if (!FHrSucceeded(hr)) Cancel(); return FHrSucceeded(hr) ? TRUE : FALSE; }
/*!--------------------------------------------------------------------------
IPXSummaryIfPageGeneral::DoDataExchange - Author: KennT ---------------------------------------------------------------------------*/ void IPXSummaryIfPageGeneral::DoDataExchange(CDataExchange *pDX) { RtrPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(IPXSummaryIfPageGeneral)
//}}AFX_DATA_MAP
}
BOOL IPXSummaryIfPageGeneral::OnApply() {
INT i; SPIInfoBase spInfoBase; IPX_IF_INFO * pIpxIf = NULL; IPXWAN_IF_INFO *pIpxWanIf = NULL; BOOL fReturn; HRESULT hr = hrOK; DWORD dwIfType;
if ( m_pIPXPropSheet->IsCancel() ) { CancelApply(); return TRUE; }
//
// Retrieve the interface-status block configured
//
m_pIPXPropSheet->GetInfoBase(&spInfoBase);
CORg( spInfoBase->GetData(IPX_INTERFACE_INFO_TYPE, 0, (BYTE **) &pIpxIf) );
pIpxIf->AdminState = IsDlgButtonChecked(IDC_IIG_BTN_ADMIN_STATE) ? ADMIN_STATE_ENABLED : ADMIN_STATE_DISABLED;
dwIfType = m_spIf ? m_spIf->GetInterfaceType() : ROUTER_IF_TYPE_CLIENT;
if ((dwIfType == ROUTER_IF_TYPE_FULL_ROUTER) || (dwIfType == ROUTER_IF_TYPE_CLIENT)) { CORg( spInfoBase->GetData(IPXWAN_INTERFACE_INFO_TYPE, 0, (LPBYTE *) &pIpxWanIf) );
pIpxWanIf->AdminState = IsDlgButtonChecked(IDC_IIG_BTN_IPX_WAN) ? ADMIN_STATE_ENABLED : ADMIN_STATE_DISABLED; } fReturn = RtrPropertyPage::OnApply();
Error: return fReturn; }
//----------------------------------------------------------------------------
// Function: CIpxIfGeneral::OnFiltersConfig
//
// does the actual call to MprUIFilterConfig for filter configuration.
//----------------------------------------------------------------------------
void IPXSummaryIfPageGeneral::OnFiltersConfig( DWORD dwFilterDirection ) { CWaitCursor wait; SPIInfoBase spInfoBase;
m_pIPXPropSheet->GetInfoBase(&spInfoBase);
if (FHrOK(MprUIFilterConfigInfoBase(this->GetSafeHwnd(), spInfoBase, NULL, PID_IPX, dwFilterDirection))) { SetDirty(TRUE); SetModified(); } }
/*---------------------------------------------------------------------------
IPXSummaryIfPageConfig ---------------------------------------------------------------------------*/
IPXSummaryIfPageConfig::~IPXSummaryIfPageConfig() { if (m_pIPXConn) { m_pIPXConn->Release(); m_pIPXConn = NULL; } }
BEGIN_MESSAGE_MAP(IPXSummaryIfPageConfig, RtrPropertyPage) //{{AFX_MSG_MAP(IPXSummaryIfPageConfig)
ON_EN_CHANGE(IDC_IIC_EDIT_NETNUMBER, OnChangeEdit) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*!--------------------------------------------------------------------------
IPXSummaryIfPageConfig::Init - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryIfPageConfig::Init(IInterfaceInfo *pIfInfo, IPXConnection *pIPXConn, IPXSummaryInterfaceProperties *pPropSheet) { // create the error info object
CreateTFSErrorInfo(0); m_spIf.Set(pIfInfo); m_pIPXConn = pIPXConn; pIPXConn->AddRef(); m_pIPXPropSheet = pPropSheet;
m_fNetNumberChanged = FALSE;
HRESULT hr = hrOK; SPIRemoteRouterConfig spRemote; SPIRouterInfo spRouter; COSERVERINFO csi; COAUTHINFO cai; COAUTHIDENTITY caid;
ZeroMemory(&csi, sizeof(csi)); ZeroMemory(&cai, sizeof(cai)); ZeroMemory(&caid, sizeof(caid)); csi.pAuthInfo = &cai; cai.pAuthIdentityData = &caid; // If there's no interface (such as for dial-in clients) don't
// add the config page
if (!m_spIf) return S_FALSE;
m_spIf->GetParentRouterInfo(&spRouter);
// Now try to cocreate the object
if (m_spRemote == NULL) { LPCOLESTR pszMachine = m_spIf->GetMachineName(); IUnknown * punk = NULL;
hr = CoCreateRouterConfig(pszMachine, spRouter, &csi, IID_IRemoteRouterConfig, &punk); spRemote = (IRemoteRouterConfig *) punk; } if (FHrSucceeded(hr)) { DWORD dwNet;
m_spRemote = spRemote.Transfer(); hr = m_spRemote->GetIpxVirtualNetworkNumber(&dwNet); m_dwNetNumber = dwNet; }
if (!HandleIRemoteRouterConfigErrors(hr, m_spIf->GetMachineName())) { // other misc errors
AddSystemErrorMessage(hr);
AddHighLevelErrorStringId(IDS_ERR_IPXCONFIG_CANNOT_SHOW); }
if (csi.pAuthInfo) delete csi.pAuthInfo->pAuthIdentityData->Password; return hr; }
BOOL IPXSummaryIfPageConfig::OnPropertyChange(BOOL bScopePane, LONG_PTR *pChangeMask) { BOOL fReturn = TRUE; m_hrRemote = hrOK; if ( m_pIPXPropSheet->IsCancel() ) { RtrPropertyPage::OnPropertyChange(bScopePane, pChangeMask); return FALSE; } if (m_fNetNumberChanged) { Assert(m_spRemote); m_hrRemote = m_spRemote->SetIpxVirtualNetworkNumber(m_dwNetNumber);
fReturn = FHrSucceeded(m_hrRemote); }
BOOL fPageReturn = RtrPropertyPage::OnPropertyChange(bScopePane, pChangeMask);
// Only if both calls succeeded, do we return TRUE
return fPageReturn && fReturn; }
/*!--------------------------------------------------------------------------
IPXSummaryIfPageConfig::OnInitDialog - Author: KennT ---------------------------------------------------------------------------*/ BOOL IPXSummaryIfPageConfig::OnInitDialog() { HRESULT hr = hrOK; TCHAR szNetNumber[64];
RtrPropertyPage::OnInitDialog();
wsprintf(szNetNumber, _T("%08lx"), m_dwNetNumber); SetDlgItemText(IDC_IIC_EDIT_NETNUMBER, szNetNumber); SetDirty(m_pIPXPropSheet->m_bNewInterface ? TRUE : FALSE);
//Error:
if (!FHrSucceeded(hr)) Cancel(); return FHrSucceeded(hr) ? TRUE : FALSE; }
/*!--------------------------------------------------------------------------
IPXSummaryIfPageConfig::DoDataExchange - Author: KennT ---------------------------------------------------------------------------*/ void IPXSummaryIfPageConfig::DoDataExchange(CDataExchange *pDX) { RtrPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(IPXSummaryIfPageConfig)
//}}AFX_DATA_MAP
}
/*!--------------------------------------------------------------------------
IPXSummaryIfPageConfig::OnApply - Author: KennT ---------------------------------------------------------------------------*/ BOOL IPXSummaryIfPageConfig::OnApply() {
BOOL fReturn; DWORD dwNetNumber; CString stNetNumber; HRESULT hr = hrOK;
if ( m_pIPXPropSheet->IsCancel() ) { CancelApply(); return TRUE; }
// Get the value from the edit control
// ----------------------------------------------------------------
GetDlgItemText(IDC_IIC_EDIT_NETNUMBER, stNetNumber);
// Convert this text string into a hex number
// ----------------------------------------------------------------
dwNetNumber = _tcstoul(stNetNumber, NULL, 16);
// Only attempt to write if the value actually changd.
// ----------------------------------------------------------------
if (m_spRemote && (dwNetNumber != m_dwNetNumber)) { m_dwNetNumber = dwNetNumber; m_fNetNumberChanged = TRUE; }
fReturn = RtrPropertyPage::OnApply();
// If this fails warn the user
// ----------------------------------------------------------------
if (!FHrSucceeded(hr)) { DisplayErrorMessage(GetSafeHwnd(), hr); } else if (!FHrSucceeded(m_hrRemote)) { // Return to this page
// ------------------------------------------------------------
GetParent()->PostMessage(PSM_SETCURSEL, 0, (LPARAM) GetSafeHwnd()); AddHighLevelErrorStringId(IDS_ERR_CANNOT_SAVE_IPXCONFIG); AddSystemErrorMessage(m_hrRemote); DisplayTFSErrorMessage(NULL); fReturn = FALSE; } return fReturn; }
void IPXSummaryIfPageConfig::OnChangeEdit() { SetDirty(TRUE); SetModified(); }
/*---------------------------------------------------------------------------
IPXSummaryPageGeneral ---------------------------------------------------------------------------*/
BEGIN_MESSAGE_MAP(IPXSummaryPageGeneral, RtrPropertyPage) //{{AFX_MSG_MAP(IPXSummaryPageGeneral)
ON_BN_CLICKED(IDC_IGG_BTN_LOG_ERRORS, OnButtonClicked) ON_BN_CLICKED(IDC_IGG_BTN_LOG_INFO, OnButtonClicked) ON_BN_CLICKED(IDC_IGG_BTN_LOG_NONE, OnButtonClicked) ON_BN_CLICKED(IDC_IGG_BTN_LOG_WARNINGS, OnButtonClicked) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
void IPXSummaryPageGeneral::OnButtonClicked() { SetDirty(TRUE); SetModified(); }
/*!--------------------------------------------------------------------------
IPXSummaryPageGeneral::Init - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryPageGeneral::Init(IPXSummaryProperties *pPropSheet) { m_pIPXPropSheet = pPropSheet; return hrOK; }
/*!--------------------------------------------------------------------------
IPXSummaryPageGeneral::OnInitDialog - Author: KennT ---------------------------------------------------------------------------*/ BOOL IPXSummaryPageGeneral::OnInitDialog() { HRESULT hr= hrOK; SPIInfoBase spInfoBase; PIPX_GLOBAL_INFO pGlobalInfo = NULL;
RtrPropertyPage::OnInitDialog();
//
// Load the existing global-config
//
CORg( m_pIPXPropSheet->GetInfoBase(&spInfoBase) );
//
// Retrieve the global-info, to set the 'Enable filtering' checkbox
// and the logging levels.
//
CORg( spInfoBase->GetData(IPX_GLOBAL_INFO_TYPE, 0, (BYTE **) &pGlobalInfo) );
// Initialize the logging-level buttons
//
SetLogLevelButtons(pGlobalInfo->EventLogMask);
SetDirty(FALSE);
Error: if (!FHrSucceeded(hr)) Cancel(); return FHrSucceeded(hr) ? TRUE : FALSE; }
/*!--------------------------------------------------------------------------
IPXSummaryPageGeneral::DoDataExchange - Author: KennT ---------------------------------------------------------------------------*/ void IPXSummaryPageGeneral::DoDataExchange(CDataExchange *pDX) { RtrPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(IPXSummaryPageGeneral)
//}}AFX_DATA_MAP
}
BOOL IPXSummaryPageGeneral::OnApply() { SPIInfoBase spInfoBase; BOOL fReturn; HRESULT hr = hrOK; PIPX_GLOBAL_INFO pgi; if ( m_pIPXPropSheet->IsCancel() ) { CancelApply(); return TRUE; }
//
// Save the 'Enable filtering' setting
//
CORg( m_pIPXPropSheet->GetInfoBase(&spInfoBase) ); CORg( spInfoBase->GetData(IPX_GLOBAL_INFO_TYPE, 0, (BYTE **) &pgi) );
pgi->EventLogMask = QueryLogLevelButtons();
fReturn = RtrPropertyPage::OnApply(); Error: if (!FHrSucceeded(hr)) fReturn = FALSE; return fReturn; }
/*!--------------------------------------------------------------------------
IPXSummaryPageGeneral::SetLogLevelButtons - Author: KennT ---------------------------------------------------------------------------*/ void IPXSummaryPageGeneral::SetLogLevelButtons(DWORD dwLogLevel) { switch (dwLogLevel) { case 0: CheckDlgButton(IDC_IGG_BTN_LOG_NONE, TRUE); break; case EVENTLOG_ERROR_TYPE: CheckDlgButton(IDC_IGG_BTN_LOG_ERRORS, TRUE); break; case EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE: CheckDlgButton(IDC_IGG_BTN_LOG_WARNINGS, TRUE); break; case EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE: default: CheckDlgButton(IDC_IGG_BTN_LOG_INFO, TRUE); break; } }
/*!--------------------------------------------------------------------------
IPXSummaryPageGeneral::QueryLogLevelButtons Called to get the value set by the 'Logging level' radio-buttons. Author: KennT ---------------------------------------------------------------------------*/ DWORD IPXSummaryPageGeneral::QueryLogLevelButtons() { if (IsDlgButtonChecked(IDC_IGG_BTN_LOG_INFO)) return EVENTLOG_INFORMATION_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_ERROR_TYPE; else if (IsDlgButtonChecked(IDC_IGG_BTN_LOG_WARNINGS)) return EVENTLOG_WARNING_TYPE | EVENTLOG_ERROR_TYPE; else if (IsDlgButtonChecked(IDC_IGG_BTN_LOG_ERRORS)) return EVENTLOG_ERROR_TYPE; else return 0; }
/*---------------------------------------------------------------------------
IPXSummaryProperties implementation ---------------------------------------------------------------------------*/
IPXSummaryProperties::IPXSummaryProperties(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_IPX_GLOBAL_GENERAL_PAGE) { m_spNode.Set(pNode); }
/*!--------------------------------------------------------------------------
IPXSummaryProperties::Init Initialize the property sheets. The general action here will be to initialize/add the various pages. Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryProperties::Init(IRtrMgrInfo *pRm) { HRESULT hr = hrOK; IPXConnection * pIPXConn; BaseIPXResultNodeData * pData; SPIRouterInfo spRouter;
m_spRm.Set(pRm);
pIPXConn = GET_IPXSUMMARY_NODEDATA(m_spNode);
// The pages are embedded members of the class
// do not delete them.
m_bAutoDeletePages = FALSE;
// Get the router info
CORg( pRm->GetParentRouterInfo(&spRouter) );
// Initialize the infobase
// Do this here, because the init is called in the context
// of the main thread
CORg( LoadInfoBase(pIPXConn) ); m_pageGeneral.Init(this); AddPageToList((CPropertyPageBase*) &m_pageGeneral);
Error: return hr; }
/*!--------------------------------------------------------------------------
IPXSummaryProperties::LoadInfoBase - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryProperties::LoadInfoBase(IPXConnection *pIPXConn) { Assert(pIPXConn); HRESULT hr = hrOK; HANDLE hTransport = NULL; LPCOLESTR pszInterfaceId; SPIInfoBase spInfoBase; BYTE * pDefault;
Assert(m_spRm);
// Get the transport handle
CWRg( ::MprConfigTransportGetHandle(pIPXConn->GetConfigHandle(), PID_IPX, &hTransport) );
// Load the current IPX global info
CORg( m_spRm->GetInfoBase(pIPXConn->GetConfigHandle(), hTransport, &spInfoBase, NULL) );
// Ensure that the global info block for IPX exists, adding
// the default block if none is found.
if (!FHrOK(spInfoBase->BlockExists(IPX_GLOBAL_INFO_TYPE))) { IPX_GLOBAL_INFO ipxgl;
ipxgl.RoutingTableHashSize = IPX_MEDIUM_ROUTING_TABLE_HASH_SIZE; ipxgl.EventLogMask = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE; CORg( spInfoBase->AddBlock(IPX_GLOBAL_INFO_TYPE, sizeof(ipxgl), (PBYTE) &ipxgl, 1 /* dwCount */, 0 /* bRemoveFirst */) ); }
Error: if (!FHrSucceeded(hr)) spInfoBase.Release(); m_spInfoBase.Release(); m_spInfoBase = spInfoBase.Transfer(); return hr; }
/*!--------------------------------------------------------------------------
IPXSummaryProperties::GetInfoBase - Author: KennT ---------------------------------------------------------------------------*/ HRESULT IPXSummaryProperties::GetInfoBase(IInfoBase **ppInfoBase) { Assert(ppInfoBase); *ppInfoBase = m_spInfoBase; m_spInfoBase->AddRef();
return hrOK; }
BOOL IPXSummaryProperties::SaveSheetData() { Assert(m_spRm);
// Save the global info
// We don't need to pass in the hMachine, hTransport since they
// got set up in the Load call.
m_spRm->Save(m_spRm->GetMachineName(), // pszMachine
0, // hMachine
0, // hTransport
m_spInfoBase, // pGlobalInfo
NULL, // pClientInfo
0); // dwDeleteProtocolId
return TRUE; }
|