133 lines
3 KiB
C++
133 lines
3 KiB
C++
//============================================================================
|
|
// Copyright(c) 1996, Microsoft Corporation
|
|
//
|
|
// File: ipxcfg.cpp
|
|
//
|
|
// History:
|
|
// 08/30/96 Ram Cherala Created
|
|
//
|
|
// Implementation of IPX Packet Filters Configuration
|
|
//============================================================================
|
|
|
|
// ipxcfg.cpp : Defines the initialization routines for the DLL.
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "rtrfiltr.h"
|
|
#include "ipxfltr.h"
|
|
#include "format.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
DWORD APIENTRY
|
|
IpxFilterConfig(
|
|
IN CWnd* pParent,
|
|
IN LPCWSTR pwsMachineName,
|
|
IN LPCWSTR pwsInterfaceName,
|
|
IN DWORD dwFilterType // FILTER_INBOUND, FILTER_OUTBOUND
|
|
) {
|
|
|
|
DWORD dwErr;
|
|
HANDLE hMprConfig = NULL, hInterface = NULL, hIfTransport = NULL;
|
|
TCHAR* pszMachine;
|
|
SPIRouterInfo spRouterInfo;
|
|
SPIRtrMgrInterfaceInfo spRmIf;
|
|
SPIInfoBase spInfoBase;
|
|
HRESULT hr = hrOK;
|
|
|
|
//
|
|
// Convert the machine name from Unicode
|
|
//
|
|
|
|
if (!pwsMachineName) { pszMachine = NULL; }
|
|
else {
|
|
|
|
pszMachine = (TCHAR *) alloca((StrLenW(pwsMachineName)+3) * sizeof(TCHAR));
|
|
StrCpyTFromW(pszMachine, pwsMachineName);
|
|
}
|
|
|
|
// Connect to the server first
|
|
dwErr = ::MprConfigServerConnect((LPWSTR)pwsMachineName, &hMprConfig);
|
|
|
|
if (dwErr != NO_ERROR) { return dwErr; }
|
|
|
|
// create a CRouterInfo object
|
|
CreateRouterInfo(&spRouterInfo, NULL, pwsMachineName);
|
|
if (!spRouterInfo) { return ERROR_NOT_ENOUGH_MEMORY; }
|
|
|
|
CWaitCursor wait;
|
|
|
|
// Now load the RouterInfo data from the registry
|
|
hr = spRouterInfo->Load((LPCTSTR)pszMachine, hMprConfig);
|
|
if (!FHrSucceeded(hr)) { return WIN32_FROM_HRESULT(hr); }
|
|
|
|
// Get the pointer to the CRmInterfaceInfo object for the specified
|
|
// protocol and interface
|
|
LookupRtrMgrInterface(spRouterInfo,
|
|
pwsInterfaceName,
|
|
PID_IPX,
|
|
&spRmIf);
|
|
|
|
if (!spRmIf) { return ERROR_INVALID_DATA ;}
|
|
|
|
// Load the data for the specified interface
|
|
hr = spRmIf->Load(pszMachine, hMprConfig, NULL, NULL);
|
|
|
|
if (!FHrSucceeded(hr)) { return WIN32_FROM_HRESULT(hr); }
|
|
|
|
//
|
|
// Display the IPX filter configuration dialog
|
|
//
|
|
spRmIf->GetInfoBase(hMprConfig, NULL, NULL, &spInfoBase);
|
|
|
|
if (IpxFilterConfigInfoBase(pParent->GetSafeHwnd(), spInfoBase,
|
|
spRmIf, dwFilterType) == hrOK)
|
|
{
|
|
hr = spRmIf->Save(pszMachine,
|
|
hMprConfig,
|
|
NULL,
|
|
NULL,
|
|
spInfoBase,
|
|
0);
|
|
if (FHrSucceeded(hr))
|
|
dwErr = ERROR_SUCCESS;
|
|
else
|
|
dwErr = WIN32_FROM_HRESULT(hr);
|
|
}
|
|
|
|
//
|
|
// do clean up here and return
|
|
//
|
|
|
|
::MprConfigServerDisconnect( hMprConfig );
|
|
|
|
return dwErr;
|
|
}
|
|
|
|
|
|
HRESULT APIENTRY
|
|
IpxFilterConfigInfoBase(
|
|
IN HWND hwndParent,
|
|
IN IInfoBase * pInfoBase,
|
|
IN IRtrMgrInterfaceInfo *pRmIf,
|
|
IN DWORD dwFilterType // FILTER_INBOUND, FILTER_OUTBOUND
|
|
) {
|
|
|
|
HRESULT hr = hrOK;
|
|
|
|
CIpxFilter dlg(CWnd::FromHandle(hwndParent), pInfoBase, dwFilterType);
|
|
if( dlg.DoModal() == IDOK )
|
|
{
|
|
hr = hrOK;
|
|
}
|
|
else
|
|
{
|
|
hr = hrFalse;
|
|
}
|
|
return hr;
|
|
}
|