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.
 
 
 
 
 
 

312 lines
6.8 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
FaxOutboundRoutingGroup.cpp
Abstract:
Implementation of CFaxOutboundRoutingGroup class.
Author:
Iv Garber (IvG) Jun, 2000
Revision History:
--*/
#include "stdafx.h"
#include "FaxComEx.h"
#include "FaxOutboundRoutingGroup.h"
#include "FaxDeviceIds.h"
//
//========================= GET DEVICE IDS ========================================
//
STDMETHODIMP
CFaxOutboundRoutingGroup::get_DeviceIds(
/*[out, retval]*/ IFaxDeviceIds **pFaxDeviceIds
)
/*++
Routine name : CFaxOutboundRoutingGroup::get_DeviceIds
Routine description:
Returns DeviceIds Collection owned by the Group
Author:
Iv Garber (IvG), Jun, 2000
Arguments:
pFaxDeviceIds [out] - the Collection to Return
Return Value:
Standard HRESULT code
--*/
{
HRESULT hr = S_OK;
DBG_ENTER(_T("CFaxOutboundRoutingGroup::get_DeviceIds"), hr);
//
// Check that Ptr we have got -- is OK
//
if (IsBadWritePtr(pFaxDeviceIds, sizeof(IFaxDeviceIds*)))
{
hr = E_POINTER;
CALL_FAIL(GENERAL_ERR, _T("::IsBadWritePtr(pFaxDeviceIds, sizeof(IFaxDeviceIds *))"), hr);
AtlReportError(CLSID_FaxOutboundRoutingGroup, GetErrorMsgId(hr), IID_IFaxOutboundRoutingGroup, hr);
return hr;
}
//
// Return the m_pDeviceIds Collection Object
//
hr = m_pDeviceIds.CopyTo(pFaxDeviceIds);
if (FAILED(hr))
{
hr = E_FAIL;
CALL_FAIL(GENERAL_ERR, _T("CComPtr.CopyTo(pFaxDeviceIds)"), hr);
AtlReportError(CLSID_FaxOutboundRoutingGroup, GetErrorMsgId(hr), IID_IFaxOutboundRoutingGroup, hr);
return hr;
}
return hr;
}
//
//========================= INIT ========================================
//
STDMETHODIMP
CFaxOutboundRoutingGroup::Init(
/*[in]*/ FAX_OUTBOUND_ROUTING_GROUP *pInfo,
/*[in]*/ IFaxServerInner *pServer
)
/*++
Routine name : CFaxOutboundRoutingGroup::Init
Routine description:
Initialize the Group Object with given Data.
Author:
Iv Garber (IvG), Jun, 2000
Arguments:
pInfo [in] - Data of the Group
pServer [in] - Ptr to the Server
Return Value:
Standard HRESULT code
--*/
{
HRESULT hr = S_OK;
DBG_ENTER(_T("CFaxOutboundRoutingGroup::Init"), hr);
m_Status = FAX_GROUP_STATUS_ENUM(pInfo->Status);
m_bstrName = pInfo->lpctstrGroupName;
if (pInfo->lpctstrGroupName && !m_bstrName)
{
//
// not enough memory
//
hr = E_OUTOFMEMORY;
AtlReportError(CLSID_FaxOutboundRoutingGroup, IDS_ERROR_OUTOFMEMORY, IID_IFaxOutboundRoutingGroup, hr);
CALL_FAIL(MEM_ERR, _T("CComBSTR::operator=()"), hr);
return hr;
}
//
// Create Device Ids Collection
//
CComObject<CFaxDeviceIds> *pClass = NULL;
hr = CComObject<CFaxDeviceIds>::CreateInstance(&pClass);
if (FAILED(hr) || (!pClass))
{
if (!pClass)
{
hr = E_OUTOFMEMORY;
CALL_FAIL(MEM_ERR, _T("CComObject<CFaxDeviceIds>::CreateInstance(&pClass)"), hr);
}
else
{
CALL_FAIL(GENERAL_ERR, _T("CComObject<CFaxDeviceIds>::CreateInstance(&pClass)"), hr);
}
AtlReportError(CLSID_FaxOutboundRoutingGroup, IDS_ERROR_OUTOFMEMORY, IID_IFaxOutboundRoutingGroup, hr);
return hr;
}
//
// Init the DeviceIds Collection
//
hr = pClass->Init(pInfo->lpdwDevices, pInfo->dwNumDevices, m_bstrName, pServer);
if (FAILED(hr))
{
CALL_FAIL(GENERAL_ERR, _T("pClass->Init(pInfo->lpdwDevices, pInfo->dwNumDevices, m_bstrName, pServer)"), hr);
AtlReportError(CLSID_FaxOutboundRoutingGroup, IDS_ERROR_OUTOFMEMORY, IID_IFaxOutboundRoutingGroup, hr);
delete pClass;
return hr;
}
//
// Get Interface from the pClass.
// This will make AddRef() on the Interface.
// This is the Collection's AddRef, which is freed at Collection's Dtor.
//
hr = pClass->QueryInterface(&m_pDeviceIds);
if (FAILED(hr) || (!m_pDeviceIds))
{
if (!m_pDeviceIds)
{
hr = E_FAIL;
}
CALL_FAIL(GENERAL_ERR, _T("pClass->QueryInterface(&m_pDeviceIds)"), hr);
AtlReportError(CLSID_FaxOutboundRoutingGroup, IDS_ERROR_OUTOFMEMORY, IID_IFaxOutboundRoutingGroup, hr);
delete pClass;
return hr;
}
return hr;
}
//
//========================= GET STATUS ========================================
//
STDMETHODIMP
CFaxOutboundRoutingGroup::get_Status(
/*[out, retval]*/ FAX_GROUP_STATUS_ENUM *pStatus
)
/*++
Routine name : CFaxOutboundRoutingGroup::get_Status
Routine description:
Return the Status of the Group
Author:
Iv Garber (IvG), Jun, 2000
Arguments:
pStatus [out] - the return value
Return Value:
Standard HRESULT code
--*/
{
HRESULT hr = S_OK;
DBG_ENTER (_T("CFaxOutboundRoutingGroup::get_Status"), hr);
//
// Check that we have got good Ptr
//
if (::IsBadWritePtr(pStatus, sizeof(FAX_GROUP_STATUS_ENUM)))
{
hr = E_POINTER;
CALL_FAIL(GENERAL_ERR, _T("::IsBadWritePtr(pStatus, sizeof(FAX_GROUP_STATUS_ENUM))"), hr);
AtlReportError(CLSID_FaxOutboundRoutingGroup, GetErrorMsgId(hr), IID_IFaxOutboundRoutingGroup, hr);
return hr;
}
*pStatus = m_Status;
return hr;
}
//
//========================= GET NAME ========================================
//
STDMETHODIMP
CFaxOutboundRoutingGroup::get_Name(
BSTR *pbstrName
)
/*++
Routine name : CFaxOutboundRoutingGroup::get_Name
Routine description:
Return Name of the OR Group
Author:
Iv Garber (IvG), Jun, 2000
Arguments:
pbstrName [out] - Ptr to put the Name
Return Value:
Standard HRESULT code
--*/
{
HRESULT hr = S_OK;
DBG_ENTER (TEXT("CFaxOutboundRoutingGroup::get_Name"), hr);
hr = GetBstr(pbstrName, m_bstrName);
if (FAILED(hr))
{
AtlReportError(CLSID_FaxOutboundRoutingGroup, GetErrorMsgId(hr), IID_IFaxOutboundRoutingGroup, hr);
return hr;
}
return hr;
}
//
//===================== SUPPORT ERROR INFO ======================================
//
STDMETHODIMP
CFaxOutboundRoutingGroup::InterfaceSupportsErrorInfo(
REFIID riid
)
/*++
Routine name : CFaxOutboundRoutingGroup::InterfaceSupportsErrorInfo
Routine description:
ATL's implementation of the ISupportErrorInfo Interface.
Author:
Iv Garber (IvG), Jun, 2000
Arguments:
riid [in] - Reference to the Interface
Return Value:
Standard HRESULT code
--*/
{
static const IID* arr[] =
{
&IID_IFaxOutboundRoutingGroup
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}