//============================================================================ // 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; }