Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

397 lines
11 KiB

#include "stdafx.h"
#include "FaxMMCUtils.h"
#include <faxres.h>
/*
- GetFaxServerErrorMsg
-
* Purpose:
* Translate Error Code to IDS.
*
* Arguments:
* dwEc - error code DWORD
*
* Return:
* integer represents the IDS of error message
* for this ec.
*
*/
int GetFaxServerErrorMsg(DWORD dwEc)
{
DEBUG_FUNCTION_NAME( _T("GetFaxServerErrorMsg"));
int iIDS = IDS_GENERAL_FAILURE;
if (IsNetworkError(dwEc))
{
iIDS = IDS_NETWORK_PROBLEMS;
}
else
{
switch (dwEc)
{
case ERROR_NOT_ENOUGH_MEMORY:
iIDS = IDS_MEMORY;
break;
case ERROR_INVALID_PARAMETER:
iIDS = IDS_INVALID_PARAMETER;
break;
case ERROR_ACCESS_DENIED:
iIDS = IDS_ACCESS_DENIED;
break;
case ERROR_INVALID_HANDLE:
//
// ERROR_INVALID_HANDLE should not been
// retreived except of FaxOpenPort while
// handle sharing corruption was occoured.
// This case treated without calling this
// function.
//
ATLASSERT(FALSE);
//
// iIDS stays IDS_GENERAL_FAILURE due to
// the fact that we are not going report
// to the user on an invalid handle issue.
// This peace of code here should not been reached
// ever and this is the reason to the assert.
//
break;
case ERROR_BAD_UNIT:
iIDS = IDS_CANNOT_FIND_DEVICE;
break;
case ERROR_DIRECTORY: // The directory name is invalid.
iIDS = IDS_ERROR_DIRECTORY;
break;
case ERROR_BAD_PATHNAME:
iIDS = IDS_ERROR_BAD_PATHNAME;
break;
case ERROR_EAS_NOT_SUPPORTED:
iIDS = IDS_ERROR_EAS_NOT_SUPPORTED;
break;
case ERROR_REGISTRY_CORRUPT:
iIDS = IDS_ERROR_REGISTRY_CORRUPT;
break;
case ERROR_PATH_NOT_FOUND:
iIDS = IDS_ERROR_PATH_NOT_FOUND;
break;
case FAX_ERR_DIRECTORY_IN_USE:
iIDS = IDS_FAX_ERR_DIRECTORY_IN_USE;
break;
case FAX_ERR_RULE_NOT_FOUND:
iIDS = IDS_FAX_ERR_RULE_NOT_FOUND;
break;
case FAX_ERR_BAD_GROUP_CONFIGURATION:
iIDS = IDS_FAX_ERR_BAD_GROUP_CONFIGURATION;
break;
case FAX_ERR_GROUP_NOT_FOUND:
iIDS = IDS_FAX_ERR_GROUP_NOT_FOUND;
break;
case FAX_ERR_SRV_OUTOFMEMORY:
iIDS = IDS_FAX_ERR_SRV_OUTOFMEMORY;
break;
case FAXUI_ERROR_INVALID_CSID:
iIDS = IDS_FAX_ERR_INVALID_CSID;
break;
case FAXUI_ERROR_INVALID_TSID:
iIDS = IDS_FAX_ERR_INVALID_TSID;
break;
default:
break;
}
}
return iIDS;
}
/*
- IsNetworkError
-
* Purpose:
* Verify if Error Code represents a network error.
*
* Arguments:
* dwEc - error code DWORD
*
* Return:
* Boolean TRUE if the dwEc represents a
* network error, and FALSE if not.
*
*/
BOOL IsNetworkError(DWORD dwEc)
{
DEBUG_FUNCTION_NAME( _T("IsNetworkError"));
BOOL bIsNetworkError = FALSE;
//Initialized to avoid an option to future mistakes
switch (dwEc)
{
case RPC_S_INVALID_BINDING:
bIsNetworkError = TRUE;
break;
case EPT_S_CANT_PERFORM_OP:
bIsNetworkError = TRUE;
break;
case RPC_S_ADDRESS_ERROR:
bIsNetworkError = TRUE;
break;
case RPC_S_CALL_CANCELLED:
bIsNetworkError = TRUE;
break;
case RPC_S_CALL_FAILED:
bIsNetworkError = TRUE;
break;
case RPC_S_CALL_FAILED_DNE:
bIsNetworkError = TRUE;
break;
case RPC_S_COMM_FAILURE:
bIsNetworkError = TRUE;
break;
case RPC_S_NO_BINDINGS:
bIsNetworkError = TRUE;
break;
case RPC_S_SERVER_TOO_BUSY:
bIsNetworkError = TRUE;
break;
case RPC_S_SERVER_UNAVAILABLE:
bIsNetworkError = TRUE;
break;
default:
bIsNetworkError = FALSE;
break;
}
return (bIsNetworkError);
}
/*
- Routine Description:
-
* Invokes the browse dialog
*
* Arguments:
*
* lpszBrowseItem [in/out] folder path
* dwMaxPath [in] max length of lpszBrowseItem
* lpszBrowseDlgTitle [in] browse dialog title
* ulBrowseFlags [in] browse dialog flags
* pParentWin [in] parent window
*
* Return Value:
*
* TRUE if successful, FALSE if the user presses Cancel
*/
BOOL
InvokeBrowseDialog( LPTSTR lpszBrowseItem,
DWORD dwMaxPath,
LPCTSTR lpszBrowseDlgTitle,
unsigned long ulBrowseFlags,
CWindow* pParentWin)
{
DEBUG_FUNCTION_NAME( _T("InvokeBrowseDialog"));
BOOL fResult = FALSE;
BROWSEINFO bi;
LPITEMIDLIST pidl;
LPMALLOC pMalloc;
VOID SHFree(LPVOID);
ATLASSERT( pParentWin != NULL);
//
// Preparing the BROWSEINFO structure.
//
bi.hwndOwner = (HWND)(*pParentWin); //Parents hWndDlg
bi.pidlRoot = NULL;
bi.pszDisplayName = lpszBrowseItem;
bi.lpszTitle = lpszBrowseDlgTitle;
bi.ulFlags = ulBrowseFlags;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM) (lpszBrowseItem);
bi.iImage = 0;
//
// Memory check
//
if (FAILED(SHGetMalloc(&pMalloc)))
{
DlgMsgBox(pParentWin, IDS_MEMORY);
return fResult;
}
//
// Calling to the BrowseForFolder dialog
//
if(pidl = SHBrowseForFolder(&bi)) //pidl != NULL
{
TCHAR szPath[MAX_PATH+1] = {0};
//
// Retrieving the New Path
//
if(SHGetPathFromIDList(pidl, szPath))
{
if(wcslen(szPath) >= dwMaxPath)
{
DlgMsgBox(pParentWin, IDS_ERR_DIR_TOO_LONG, MB_OK | MB_ICONERROR);
}
else
{
DebugPrintEx(DEBUG_MSG, _T("Succeeded to Retrieve the path from browse dialog."));
_tcsncpy(lpszBrowseItem, szPath, dwMaxPath);
// Now the path was retreived successfully to
// the back parameter lpszBrowseItem
// and this is the only case in which the calling
// function gets TRUE as return value.
fResult = TRUE;
}
}
//
// Free using shell allocator
//
pMalloc->Free(pidl);
pMalloc->Release();
}
return fResult;
}
/*++
Routine Description:
Callback function for the folder browser
Arguments:
hwnd : Handle to the browse dialog box. The callback function can
send the following messages to this window:
BFFM_ENABLEOK Enables the OK button if the wParam parameter
is nonzero or disables it if wParam is zero.
BFFM_SETSELECTION Selects the specified folder. The lParam
parameter is the PIDL of the folder to select
if wParam is FALSE, or it is the path of the
folder otherwise.
BFFM_SETSTATUSTEXT Sets the status text to the null-terminated
string specified by the lParam parameter.
uMsg : Value identifying the event. This parameter can be one of the
following values:
0 Initialize dir path. lParam is the path.
BFFM_INITIALIZED The browse dialog box has finished
initializing. lpData is NULL.
BFFM_SELCHANGED The selection has changed. lpData
is a pointer to the item identifier list for
the newly selected folder.
lParam : Message-specific value. For more information, see the
description of uMsg.
lpData : Application-defined value that was specified in the lParam
member of the BROWSEINFO structure.
Return Value:
0 (1)
--*/
int CALLBACK BrowseCallbackProc(
HWND hWnd,
UINT uMsg,
LPARAM lParam,
LPARAM lpData)
{
int iRet = 0;
switch(uMsg)
{
case BFFM_INITIALIZED:
// LParam is TRUE since you are passing a path.
// It would be FALSE if you were passing a pidl.
// the lpData points to the folder path.
// It must contain a path.
// ASSERT(lpData && _T('\0') != *((LPTSTR)lpData));
SendMessage(hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData);
break;
case BFFM_SELCHANGED:
{
BOOL bFolderIsOK = FALSE;
TCHAR szPath [MAX_PATH + 1] = {0};
if (SHGetPathFromIDList ((LPITEMIDLIST) lParam, szPath))
{
DWORD dwFileAttr = GetFileAttributes(szPath);
::SendMessage(hWnd, BFFM_SETSTATUSTEXT, TRUE, (LPARAM)szPath);
if (-1 != dwFileAttr && (dwFileAttr & FILE_ATTRIBUTE_DIRECTORY))
{
//
// The directory exists - enable the 'Ok' button
//
bFolderIsOK = TRUE;
}
}
//
// Enable / disable the 'ok' button
//
::SendMessage(hWnd, BFFM_ENABLEOK , 0, (LPARAM)bFolderIsOK);
break;
}
break;
case BFFM_VALIDATEFAILED:
break;
default:
ATLTRACE2(atlTraceWindowing, 0, _T("Unknown message received in CFolderDialogImpl::BrowseCallbackProc\n"));
break;
}
return iRet;
}