|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/
/*
rtrerr.cpp FILE HISTORY: */
#include "stdafx.h"
#include "tfschar.h"
#include "tfsres.h"
#include "info.h"
#include "errutil.h"
#include "rtrerr.h"
#include "mprapi.h"
#include "mprerror.h"
#include "raserror.h"
#define IS_WIN32_HRESULT(x) (((x) & 0xFFFF0000) == 0x80070000)
#define WIN32_FROM_HRESULT(hr) (0x0000FFFF & (hr))
/*!--------------------------------------------------------------------------
HandleIRemoteRouterConfigErrors - Author: KennT ---------------------------------------------------------------------------*/ BOOL HandleIRemoteRouterConfigErrors(HRESULT hr, LPCTSTR pszMachineName) { BOOL fReturn = FALSE;
if (FHrSucceeded(hr)) return TRUE; if ((hr == REGDB_E_CLASSNOTREG) || (hr == REGDB_E_IIDNOTREG)) { CString st, stGeek; // This error indicates that we could not find the server
// on the remote machine. This means that it could be a
// down-level machine or the setup is messed up.
AfxFormatString1(st, IDS_ERR_BAD_INTERFACE, pszMachineName); AfxFormatString1(stGeek, IDS_ERR_BAD_INTERFACE_GEEK, pszMachineName); AddStringErrorMessage2(hr, st, stGeek); fReturn = TRUE; } else if (hr == E_NOINTERFACE) { // These errors indicate that there was an installation
// problem (this IID, probably rrasprxy.dll, should have
// been registered).
CString st, stGeek;
AfxFormatString1(st, IDS_ERR_BAD_CLASSREG, pszMachineName); AfxFormatString1(stGeek, IDS_ERR_BAD_CLASSREG_GEEK, pszMachineName); AddStringErrorMessage2(hr, st, stGeek); fReturn = TRUE; }
return fReturn; }
HRESULT FormatRasError(HRESULT hr, TCHAR *pszBuffer, UINT cchBuffer) { HRESULT hrReturn = hrFalse; // Copy over default message into szBuffer
_tcscpy(pszBuffer, _T("Error"));
// Ok, we can't get the error info, so try to format it
// using the FormatMessage
// Ignore the return message, if this call fails then I don't
// know what to do.
if (IS_WIN32_HRESULT(hr)) { DWORD dwErr;
dwErr = WIN32_FROM_HRESULT(hr);
if (((dwErr >= ROUTEBASE) && (dwErr <= ROUTEBASEEND)) || ((dwErr >= RASBASE) && (dwErr <= RASBASEEND))) { WCHAR * pswzErr; if ( ::MprAdminGetErrorString(dwErr, &pswzErr) == NO_ERROR ) { StrnCpyTFromW(pszBuffer, pswzErr, cchBuffer); ::MprAdminBufferFree(pswzErr); hrReturn = hrOK; } } }
if (!FHrOK(hrReturn)) { // If we didn't get any error info, try again
FormatError(hr, pszBuffer, cchBuffer); }
return hrReturn; }
void AddRasErrorMessage(HRESULT hr) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (!FHrSucceeded(hr)) { TCHAR szBuffer[4096]; CString st, stHr;
FormatRasError(hr, szBuffer, DimensionOf(szBuffer)); stHr.Format(_T("%08lx"), hr);
AfxFormatString2(st, IDS_ERROR_SYSTEM_ERROR_FORMAT, szBuffer, (LPCTSTR) stHr);
FillTFSError(0, hr, FILLTFSERR_LOW, NULL, (LPCTSTR) st, NULL); } }
|