/*++ 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 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 ; iPriority; 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; }