/*++ Copyright (c) 2000 Microsoft Corporation Module Name: FaxRecipient.cpp Abstract: Implementation of Fax Recipient Interface Author: Iv Garber (IvG) Apr, 2000 Revision History: --*/ #include "stdafx.h" #include "FaxComEx.h" #include "FaxRecipient.h" #include "..\..\inc\FaxUIConstants.h" // //===================== GET RECIPIENT PROFILE ===================================== // STDMETHODIMP CFaxRecipient::GetRecipientProfile( FAX_PERSONAL_PROFILE *pRecipientProfile ) /*++ Routine name : CFaxRecipient::GetRecipientProfile Routine description: Fills the pRecipientProfile with the data of the object. Author: Iv Garber (IvG), May, 2000 Arguments: pRecipientProfile [out] - the FAX_PERSONAL_PROFILE struct to fill Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (TEXT("CFaxRecipient::GetRecipientProfile"), hr); if (::IsBadWritePtr(pRecipientProfile, sizeof(FAX_PERSONAL_PROFILE))) { // // Bad Return OR Interface Pointer // hr = E_POINTER; CALL_FAIL(GENERAL_ERR, _T("::IsBadWritePtr()"), hr); return hr; } ZeroMemory(pRecipientProfile, sizeof(FAX_PERSONAL_PROFILE)); pRecipientProfile->dwSizeOfStruct = sizeof(FAX_PERSONAL_PROFILE); pRecipientProfile->lptstrName = m_bstrName; pRecipientProfile->lptstrFaxNumber = m_bstrFaxNumber; return hr; } // //============== PUT RECIPIENT PROFILE ============================================ // STDMETHODIMP CFaxRecipient::PutRecipientProfile( FAX_PERSONAL_PROFILE *pRecipientProfile ) /*++ Routine name : CFaxRecipient::PutRecipientProfile Routine description: Receives FAX_PERSONAL_PROFILE structure and fills the Recipient's fields. Author: Iv Garber (IvG), May, 2000 Arguments: pRecipientProfile [in] - the data to put into the object's variables Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (_T("CFaxRecipient::PutRecipientProfile"), hr); m_bstrFaxNumber = pRecipientProfile->lptstrFaxNumber; m_bstrName = pRecipientProfile->lptstrName; if ((pRecipientProfile->lptstrFaxNumber && !m_bstrFaxNumber) || (pRecipientProfile->lptstrName && !m_bstrName)) { // // Not enough memory // hr = E_OUTOFMEMORY; CALL_FAIL(MEM_ERR, _T("CComBSTR::operator=()"), hr); } return hr; } // //==================== INTERFACE SUPPORT ERROR INFO ===================== // STDMETHODIMP CFaxRecipient::InterfaceSupportsErrorInfo ( REFIID riid ) /*++ Routine name : CFaxRecipient::InterfaceSupportsErrorInfo Routine description: ATL's implementation of Support Error Info Author: Iv Garber (IvG), Apr, 2000 Arguments: riid [in] - Interface ID Return Value: Standard HRESULT code --*/ { static const IID* arr[] = { &IID_IFaxRecipient }; for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) { if (InlineIsEqualGUID(*arr[i],riid)) return S_OK; } return S_FALSE; } // //==================== CREATE ======================================== // HRESULT CFaxRecipient::Create ( IFaxRecipient **ppRecipient ) /*++ Routine name : CFaxRecipient::Create Routine description: Static function to create the Fax Recipient Instance Author: Iv Garber (IvG), Apr, 2000 Arguments: ppRecipient [out] -- the new Fax Recipient Instance Return Value: Standard HRESULT code --*/ { CComObject *pClass; HRESULT hr = S_OK; DBG_ENTER (TEXT("CFaxRecipient::Create"), hr); hr = CComObject::CreateInstance(&pClass); if (FAILED(hr)) { // // Failed to create Instance // CALL_FAIL(GENERAL_ERR, _T("CComObject::CreateInstance()"), hr); return hr; } hr = pClass->QueryInterface(__uuidof(IFaxRecipient), (void **) ppRecipient); if (FAILED(hr)) { // // Failed to Query Recipient Interface // CALL_FAIL(GENERAL_ERR, _T("QueryInterface()"), hr); return hr; } return hr; } // //==================== FAX NUMBER ======================================== // STDMETHODIMP CFaxRecipient::get_FaxNumber( BSTR *pbstrFaxNumber ) /*++ Routine name : CFaxRecipient::get_FaxNumber Routine description: return FaxNumber Author: Iv Garber (IvG), Apr, 2000 Arguments: pbstrFaxNumber [out] - the FaxNumber Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (TEXT("CFaxRecipient::get_FaxNumber"), hr); hr = GetBstr(pbstrFaxNumber, m_bstrFaxNumber); if (FAILED(hr)) { AtlReportError(CLSID_FaxRecipient, GetErrorMsgId(hr), IID_IFaxRecipient, hr); return hr; } return hr; } STDMETHODIMP CFaxRecipient::put_FaxNumber ( BSTR bstrFaxNumber ) /*++ Routine name : CFaxRecipient::put_FaxNumber Routine description: Set FaxNumber Author: Iv Garber (IvG), Apr, 2000 Arguments: bstrFaxNumber [in] - new Fax Number Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (_T("CFaxRecipient::put_FaxNumber"), hr, _T("%s"), bstrFaxNumber); m_bstrFaxNumber = bstrFaxNumber; if (!m_bstrFaxNumber && bstrFaxNumber) { // // Not enough memory // hr = E_OUTOFMEMORY; AtlReportError(CLSID_FaxRecipient, IDS_ERROR_OUTOFMEMORY, IID_IFaxRecipient, hr); CALL_FAIL(MEM_ERR, _T("CComBSTR::operator="), hr); return hr; } return hr; } // //==================== NAME ======================================== // STDMETHODIMP CFaxRecipient::get_Name( BSTR *pbstrName ) /*++ Routine name : CFaxRecipient::get_Name Routine description: return Name Author: Iv Garber (IvG), Apr, 2000 Arguments: pbstrName [out] - the Name Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (_T("CFaxRecipient::get_Name"), hr); hr = GetBstr(pbstrName, m_bstrName); if (FAILED(hr)) { AtlReportError(CLSID_FaxRecipient, GetErrorMsgId(hr), IID_IFaxRecipient, hr); return hr; } return hr; } STDMETHODIMP CFaxRecipient::put_Name ( BSTR bstrName ) /*++ Routine name : CFaxRecipient::put_Name Routine description: Set Name Author: Iv Garber (IvG), Apr, 2000 Arguments: bstrName [in] - new Name Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (_T("CFaxRecipient::put_Name"), hr, _T("%s"), bstrName); m_bstrName = bstrName; if (!m_bstrName && bstrName) { // // Not enough memory // hr = E_OUTOFMEMORY; AtlReportError(CLSID_FaxRecipient, IDS_ERROR_OUTOFMEMORY, IID_IFaxRecipient, hr); CALL_FAIL(MEM_ERR, _T("CComBSTR::operator="), hr); return hr; } return hr; }