|
|
/****************************************************************************/ /* */ /* ERNCGLBL.CPP */ /* */ /* RNC global functions. */ /* */ /* Copyright Data Connection Ltd. 1995 */ /* */ /****************************************************************************/ /* Changes: */ /* */ /* 11Sep95 NFC Created. */ /* 21Sep95 NFC Initialize all combo boxes. */ /* 11Oct95 PM Remove GCC_BAD_PASSWORD */ /* */ /****************************************************************************/
#include "precomp.h"
#include "ms_util.h"
#include "ernccons.h"
#include "nccglbl.hpp"
#include "erncvrsn.hpp"
#include <cuserdta.hpp>
#include "erncconf.hpp"
#include "ernctrc.h"
/****************************************************************************/ /* GCC error table. This must macth exactly the enumeration in NCUI.H */ /****************************************************************************/ const GCCResult rcGCCTable[] = { GCC_RESULT_SUCCESSFUL, // NO_ERROR
GCC_RESULT_ENTRY_ALREADY_EXISTS, // UI_RC_ALREADY_IN_CONFERENCE
GCC_RESULT_ENTRY_ALREADY_EXISTS, // UI_RC_CONFERENCE_ALREADY_EXISTS
GCC_RESULT_INVALID_PASSWORD, // UI_RC_INVALID_PASSWORD,
GCC_RESULT_INVALID_CONFERENCE, // UI_RC_NO_CONFERENCE_NAME,
GCC_RESULT_UNSPECIFIED_FAILURE, // UI_RC_T120_FAILURE,
GCC_RESULT_INVALID_CONFERENCE, // UI_RC_UNKNOWN_CONFERENCE,
GCC_RESULT_INCOMPATIBLE_PROTOCOL, // UI_RC_BAD_TRANSPORT_NAME
GCC_RESULT_USER_REJECTED, // UI_RC_USER_REJECTED,
GCC_RESULT_UNSPECIFIED_FAILURE // UI_RC_ERROR > LAST_RC_GCC_MAPPED_ERROR
};
/****************************************************************************/ /* GCC error table. This must macth exactly the enumeration in GCC.H */ /****************************************************************************/ typedef struct { GCCError rc; HRESULT hr; } RC2HR; const RC2HR c_aRc2Hr[] = { { GCC_ALREADY_INITIALIZED, UI_RC_T120_ALREADY_INITIALIZED }, { GCC_INVALID_CONFERENCE, UI_RC_UNKNOWN_CONFERENCE }, { GCC_CONFERENCE_ALREADY_EXISTS, UI_RC_CONFERENCE_ALREADY_EXISTS }, { GCC_SECURITY_FAILED, UI_RC_T120_SECURITY_FAILED }, };
/****************************************************************************/ /* GCC result table.This must macth exactly the enumeration in GCC.H */ /****************************************************************************/ typedef struct { GCCResult result; HRESULT hr; } RESULT2HR;
const RESULT2HR c_aResult2Hr[] = { { GCC_RESULT_INVALID_CONFERENCE, UI_RC_UNKNOWN_CONFERENCE }, { GCC_RESULT_INVALID_PASSWORD, UI_RC_INVALID_PASSWORD }, { GCC_RESULT_USER_REJECTED, UI_RC_USER_REJECTED }, { GCC_RESULT_ENTRY_ALREADY_EXISTS, UI_RC_CONFERENCE_ALREADY_EXISTS }, { GCC_RESULT_CANCELED, UI_RC_T120_FAILURE }, { GCC_RESULT_CONNECT_PROVIDER_REMOTE_NO_SECURITY, UI_RC_T120_REMOTE_NO_SECURITY }, { GCC_RESULT_CONNECT_PROVIDER_REMOTE_DOWNLEVEL_SECURITY, UI_RC_T120_REMOTE_DOWNLEVEL_SECURITY }, { GCC_RESULT_CONNECT_PROVIDER_REMOTE_REQUIRE_SECURITY, UI_RC_T120_REMOTE_REQUIRE_SECURITY }, { GCC_RESULT_CONNECT_PROVIDER_AUTHENTICATION_FAILED, UI_RC_T120_AUTHENTICATION_FAILED }, };
HRESULT GetGCCRCDetails(GCCError rc) { if (GCC_NO_ERROR == rc) { return NO_ERROR; }
for (int i = 0; i < sizeof(c_aRc2Hr) / sizeof(c_aRc2Hr[0]); i++) { if (c_aRc2Hr[i].rc == rc) { return c_aRc2Hr[i].hr; } }
return UI_RC_T120_FAILURE; }
HRESULT GetGCCResultDetails(GCCResult result) { if (GCC_RESULT_SUCCESSFUL == result) { return NO_ERROR; }
for (int i = 0; i < sizeof(c_aResult2Hr) / sizeof(c_aResult2Hr[0]); i++) { if (c_aResult2Hr[i].result == result) { return c_aResult2Hr[i].hr; } }
return UI_RC_T120_FAILURE; }
GCCResult MapRCToGCCResult(HRESULT rc) { // Called to map an error code to a GCC result to give to GCC.
TRACE_FN("MapRCToGCCResult");
ASSERT(sizeof(rcGCCTable)/sizeof(rcGCCTable[0]) - (LAST_RC_GCC_MAPPED_ERROR & 0x00ff) - 2 == 0);
return (rcGCCTable[(UINT) rc > (UINT) LAST_RC_GCC_MAPPED_ERROR ? (LAST_RC_GCC_MAPPED_ERROR & 0x00ff) + 1 : (rc & 0x00ff)]); }
HRESULT GetUnicodeFromGCC(PCSTR szGCCNumeric, PCWSTR wszGCCUnicode, PWSTR * pwszText) { // Obtain a Unicode string from a funky GCCString that may be
// ANSI numeric or Unicode text. Note that a new Unicode
// string is always allocated or NULL returned.
LPWSTR wszText; HRESULT Status = NO_ERROR;
ASSERT(pwszText);
if (! ::IsEmptyStringW(wszGCCUnicode)) { wszText = ::My_strdupW(wszGCCUnicode); } else if (! ::IsEmptyStringA(szGCCNumeric)) { wszText = ::AnsiToUnicode(szGCCNumeric); } else { *pwszText = NULL; return(Status); } if (!wszText) { Status = UI_RC_OUT_OF_MEMORY; } *pwszText = wszText; return(Status); }
HRESULT GetGCCFromUnicode ( LPCWSTR pcwszText, GCCNumericString * pGCCNumeric, LPWSTR * pGCCUnicode ) { // Construct a funky GCCString that may be ANSI numeric or Unicode text
// from a Unicode string. Note that only a new ANSI numeric string may
// be constructed - the Unicode string passed is is used.
HRESULT hr = NO_ERROR; if (! ::IsEmptyStringW(pcwszText) && ::UnicodeIsNumber(pcwszText)) { *pGCCUnicode = NULL; if (NULL == (*pGCCNumeric = (GCCNumericString) ::UnicodeToAnsi(pcwszText))) { hr = UI_RC_OUT_OF_MEMORY; } } else { *pGCCUnicode = (LPWSTR) pcwszText; *pGCCNumeric = NULL; }
return hr; }
|