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.
 
 
 
 
 
 

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