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.
569 lines
12 KiB
569 lines
12 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
FaxInboundRoutingMethod.cpp
|
|
|
|
Abstract:
|
|
|
|
Implementation of CFaxInboundRoutingMethod Class.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG) Jun, 2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "stdafx.h"
|
|
#include "FaxComEx.h"
|
|
#include "FaxInboundRoutingMethod.h"
|
|
|
|
//
|
|
//==================== REFRESH ========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::Refresh()
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::Refresh
|
|
|
|
Routine description:
|
|
|
|
Bring from the Server new Method Data ( only Priority may change ).
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingMethod::Refresh"), hr);
|
|
|
|
//
|
|
// Get Fax Server Handle
|
|
//
|
|
HANDLE faxHandle;
|
|
hr = m_pIFaxServerInner->GetHandle(&faxHandle);
|
|
ATLASSERT(SUCCEEDED(hr));
|
|
|
|
if (faxHandle == NULL)
|
|
{
|
|
//
|
|
// Fax Server is not connected
|
|
//
|
|
hr = Fax_HRESULT_FROM_WIN32(ERROR_NOT_CONNECTED);
|
|
CALL_FAIL(GENERAL_ERR, _T("(faxHandle == NULL)"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Bring from the Server all Inbound Routing Methods
|
|
//
|
|
DWORD dwNum = 0;
|
|
CFaxPtr<FAX_GLOBAL_ROUTING_INFO> pMethods;
|
|
if (!FaxEnumGlobalRoutingInfo(faxHandle, &pMethods, &dwNum))
|
|
{
|
|
hr = Fax_HRESULT_FROM_WIN32(GetLastError());
|
|
CALL_FAIL(GENERAL_ERR, _T("FaxEnumGlobalRoutingInfo(faxHandle, &pMethods, &dwNum)"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// find our Method
|
|
//
|
|
for ( DWORD i=0 ; i<dwNum ; i++ )
|
|
{
|
|
if ( _tcsicmp(pMethods[i].Guid, m_bstrGUID) == 0 )
|
|
{
|
|
hr = Init(&pMethods[i], NULL);
|
|
return hr;
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//==================== INIT ========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::Init(
|
|
FAX_GLOBAL_ROUTING_INFO *pInfo,
|
|
IFaxServerInner *pServer
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::Init
|
|
|
|
Routine description:
|
|
|
|
Initialize the IR Method Object with given Information.
|
|
Allocates memory and stores given pInfo.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
pInfo [in] -- the Info of the IR Method Object
|
|
pServer [in] -- Ptr to the Server
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingMethod::Init"), hr);
|
|
|
|
//
|
|
// Copy the FAX_GLOBAL_ROUTING_INFO structure
|
|
//
|
|
m_lPriority = pInfo->Priority;
|
|
|
|
m_bstrGUID = pInfo->Guid;
|
|
m_bstrImageName = pInfo->ExtensionImageName;
|
|
m_bstrFriendlyName = pInfo->ExtensionFriendlyName;
|
|
m_bstrFunctionName = pInfo->FunctionName;
|
|
m_bstrName = pInfo->FriendlyName;
|
|
if ( (pInfo->Guid && !m_bstrGUID) ||
|
|
(pInfo->FriendlyName && !m_bstrName) ||
|
|
(pInfo->ExtensionImageName && !m_bstrImageName) ||
|
|
(pInfo->ExtensionFriendlyName && !m_bstrFriendlyName) ||
|
|
(pInfo->FunctionName && !m_bstrFunctionName) )
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
CALL_FAIL(MEM_ERR, _T("CComBSTR::operator=()"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
|
|
if (pServer)
|
|
{
|
|
|
|
//
|
|
// Store Ptr to the Server
|
|
//
|
|
hr = CFaxInitInnerAddRef::Init(pServer);
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== SAVE ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::Save()
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::Save
|
|
|
|
Routine description:
|
|
|
|
Save the Method's Priority.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::Save"), hr);
|
|
|
|
//
|
|
// Get Fax Server Handle
|
|
//
|
|
HANDLE faxHandle;
|
|
hr = m_pIFaxServerInner->GetHandle(&faxHandle);
|
|
ATLASSERT(SUCCEEDED(hr));
|
|
|
|
if (faxHandle == NULL)
|
|
{
|
|
//
|
|
// Fax Server is not connected
|
|
//
|
|
hr = Fax_HRESULT_FROM_WIN32(ERROR_NOT_CONNECTED);
|
|
CALL_FAIL(GENERAL_ERR, _T("(faxHandle == NULL)"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Prepare Structure
|
|
//
|
|
FAX_GLOBAL_ROUTING_INFO Data;
|
|
Data.Guid = m_bstrGUID;
|
|
Data.Priority = m_lPriority;
|
|
Data.SizeOfStruct = sizeof(FAX_GLOBAL_ROUTING_INFO);
|
|
Data.ExtensionFriendlyName = NULL;
|
|
Data.ExtensionImageName = NULL;
|
|
Data.FriendlyName = NULL;
|
|
Data.FunctionName = NULL;
|
|
|
|
//
|
|
// Call Server to update its data about the Method
|
|
//
|
|
if (!FaxSetGlobalRoutingInfo(faxHandle, &Data))
|
|
{
|
|
hr = Fax_HRESULT_FROM_WIN32(GetLastError());
|
|
CALL_FAIL(GENERAL_ERR, _T("FaxSetGlobalRoutingInfo(faxHandle, &Data)"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== PUT PRIORITY ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::put_Priority(
|
|
/*[in]*/ long lPriority
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::put_Priority
|
|
|
|
Routine description:
|
|
|
|
Set the Method's Priority -- Order within the Collection of all Methods.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
lPriority [out] - the value to set
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::put_Priority"), hr, _T("PR=%d"), lPriority);
|
|
|
|
if (lPriority < 1)
|
|
{
|
|
//
|
|
// Out Of Range
|
|
//
|
|
hr = E_INVALIDARG;
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, IDS_ERROR_OUTOFRANGE, IID_IFaxInboundRoutingMethod, hr);
|
|
CALL_FAIL(GENERAL_ERR, _T("(lPriority < 1)"), hr);
|
|
return hr;
|
|
}
|
|
|
|
m_lPriority = lPriority;
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET PRIORITY ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::get_Priority(
|
|
/*[out, retval]*/ long *plPriority
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::get_Priority
|
|
|
|
Routine description:
|
|
|
|
Return the Method's Priority -- Order within the Collection of all Methods.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
plPriority [out] - the Ptr where to put the value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::get_Priority"), hr);
|
|
|
|
hr = GetLong(plPriority, m_lPriority);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET EXTENSION IMAGE NAME ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::get_ExtensionImageName(
|
|
/*[out, retval]*/ BSTR *pbstrExtensionImageName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::get_ExtensionImageName
|
|
|
|
Routine description:
|
|
|
|
Return the Method's Extension Image Name.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrExtensionImageName [out] - the Ptr where to put the value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::get_ExtensionImageName"), hr);
|
|
|
|
hr = GetBstr(pbstrExtensionImageName, m_bstrImageName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET EXTENSION FRIENDLY NAME ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::get_ExtensionFriendlyName(
|
|
/*[out, retval]*/ BSTR *pbstrExtensionFriendlyName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::get_ExtensionFriendlyName
|
|
|
|
Routine description:
|
|
|
|
Return the Method's Extension Friendly Name.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrExtensionFriendlyName [out] - the Ptr where to put the value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::get_ExtensionFriendlyName"), hr);
|
|
|
|
hr = GetBstr(pbstrExtensionFriendlyName, m_bstrFriendlyName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET FUNCTION NAME ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::get_FunctionName(
|
|
/*[out, retval]*/ BSTR *pbstrFunctionName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::get_FunctionName
|
|
|
|
Routine description:
|
|
|
|
Return the Method's Function Name.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrFunctionName [out] - the Ptr where to put the value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::get_FunctionName"), hr);
|
|
|
|
hr = GetBstr(pbstrFunctionName, m_bstrFunctionName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET GUID ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::get_GUID(
|
|
/*[out, retval]*/ BSTR *pbstrGUID
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::get_GUID
|
|
|
|
Routine description:
|
|
|
|
Return the Method's GUID.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrGUID [out] - the Ptr where to put the value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::get_GUID"), hr);
|
|
|
|
hr = GetBstr(pbstrGUID, m_bstrGUID);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET NAME ================================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::get_Name(
|
|
/*[out, retval]*/ BSTR *pbstrName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::get_Name
|
|
|
|
Routine description:
|
|
|
|
Return the Method's Name.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrName [out] - the Ptr where to put the value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER(_T("CFaxInboundRoutingMethod::get_Name"), hr);
|
|
|
|
hr = GetBstr(pbstrName, m_bstrName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingMethod, GetErrorMsgId(hr), IID_IFaxInboundRoutingMethod, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//========================= SUPPORT ERROR INFO ====================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingMethod::InterfaceSupportsErrorInfo(
|
|
REFIID riid
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingMethod::InterfaceSupportsErrorInfo
|
|
|
|
Routine description:
|
|
|
|
ATL's implementation of Support Error Info.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
riid [in] - Reference to the Interface.
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
static const IID* arr[] =
|
|
{
|
|
&IID_IFaxInboundRoutingMethod
|
|
};
|
|
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
|
|
{
|
|
if (InlineIsEqualGUID(*arr[i],riid))
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|