/*++ Copyright (c) 2000 Microsoft Corporation Module Name: FaxActivityLogging.cpp Abstract: Implementation of Activity Logging Class. Author: Iv Garber (IvG) Jun, 2000 Revision History: --*/ #include "stdafx.h" #include "FaxComEx.h" #include "FaxActivityLogging.h" // //==================== SAVE ======================================== // STDMETHODIMP CFaxActivityLogging::Save( ) /*++ Routine name : CFaxActivityLogging::Save Routine description: Save current Activity Logging Configuration to the Server. Author: Iv Garber (IvG), June, 2000 Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER(_T("CFaxActivityLogging::Save"), hr); if (!m_bInited) { // // nothing was done to the Configuration // return hr; } // // Get Fax Server Handle // HANDLE hFaxHandle = NULL; hr = GetFaxHandle(&hFaxHandle); if (FAILED(hr)) { AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); return hr; } // // Create Activity Logging Configuration // FAX_ACTIVITY_LOGGING_CONFIG alConfig; alConfig.dwSizeOfStruct = sizeof(FAX_ACTIVITY_LOGGING_CONFIG); alConfig.bLogIncoming = VARIANT_BOOL2bool(m_bLogIncoming); alConfig.bLogOutgoing = VARIANT_BOOL2bool(m_bLogOutgoing); alConfig.lptstrDBPath = m_bstrDatabasePath; // // Ask the Server to set the Activity Configuration // if (!FaxSetActivityLoggingConfiguration(hFaxHandle, &alConfig)) { // // Failed to set the Configuration to the Server // hr = Fax_HRESULT_FROM_WIN32(GetLastError()); AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); CALL_FAIL(GENERAL_ERR, _T("FaxSetActivityLoggingConfiguration()"), hr); return hr; } return hr; } // //==================== REFRESH ======================================== // STDMETHODIMP CFaxActivityLogging::Refresh( ) /*++ Routine name : CFaxActivityLogging::Refresh Routine description: Bring new Activity Logging cofiguration from the Server. Author: Iv Garber (IvG), June, 2000 Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER(_T("CFaxActivityLogging::Refresh"), hr); // // Get Fax Server Handle // HANDLE hFaxHandle = NULL; hr = GetFaxHandle(&hFaxHandle); if (FAILED(hr)) { AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); return hr; } // // Ask the Server for the Mail Configuration // CFaxPtr pConfig; if (!FaxGetActivityLoggingConfiguration(hFaxHandle, &pConfig)) { // // Failed to get the Configuration from the Server // hr = Fax_HRESULT_FROM_WIN32(GetLastError()); AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); CALL_FAIL(GENERAL_ERR, _T("FaxGetActivityLoggingConfiguration()"), hr); return hr; } // // Check that pConfig is valid // if (!pConfig || pConfig->dwSizeOfStruct != sizeof(FAX_ACTIVITY_LOGGING_CONFIG)) { hr = E_FAIL; AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); CALL_FAIL(GENERAL_ERR, _T("(!pConfig || SizeOfStruct != sizeof(FAX_ACTIVITY_LOGGING_CONFIG))"), hr); return hr; } m_bLogIncoming = bool2VARIANT_BOOL(pConfig->bLogIncoming); m_bLogOutgoing = bool2VARIANT_BOOL(pConfig->bLogOutgoing); m_bstrDatabasePath = pConfig->lptstrDBPath; if ( (pConfig->lptstrDBPath) && !m_bstrDatabasePath ) { // // Failed to Copy // hr = E_OUTOFMEMORY; AtlReportError(CLSID_FaxActivityLogging, IDS_ERROR_OUTOFMEMORY, IID_IFaxActivityLogging, hr); CALL_FAIL(MEM_ERR, _T("::SysAllocString()"), hr); return hr; } m_bInited = true; return hr; } // //============================= DATABASE PATH ==================================== // STDMETHODIMP CFaxActivityLogging::put_DatabasePath( BSTR bstrDatabasePath ) /*++ Routine name : CFaxActivityLogging::put_DatabasePath Routine description: Set the Database Path Author: Iv Garber (IvG), June, 2000 Arguments: bstrDatabasePath [in] - the new value of Database Path Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (_T("CFaxActivityLogging::put_DatabasePath"), hr, _T("%s"), bstrDatabasePath); // // Sync with the Server for the first time // if (!m_bInited) { hr = Refresh(); if (FAILED(hr)) { return hr; } } m_bstrDatabasePath = bstrDatabasePath; if (bstrDatabasePath && !m_bstrDatabasePath) { // // not enough memory // hr = E_OUTOFMEMORY; AtlReportError(CLSID_FaxActivityLogging, IDS_ERROR_OUTOFMEMORY, IID_IFaxActivityLogging, hr); CALL_FAIL(MEM_ERR, _T("CComBSTR::operator=()"), hr); return hr; } return hr; } STDMETHODIMP CFaxActivityLogging::get_DatabasePath( BSTR *pbstrDatabasePath ) /*++ Routine name : CFaxActivityLogging::get_DatabasePath Routine description: Return current Database Path Author: Iv Garber (IvG), June, 2000 Arguments: pbstrDatabasePath [out] - the current Database Path Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER (TEXT("CFaxActivityLogging::get_DatabasePath"), hr); // // Sync with the Server for the first time // if (!m_bInited) { hr = Refresh(); if (FAILED(hr)) { return hr; } } hr = GetBstr(pbstrDatabasePath, m_bstrDatabasePath); if (FAILED(hr)) { AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); return hr; } return hr; } // //===================== LOG OUTGOING ====================================== // STDMETHODIMP CFaxActivityLogging::get_LogOutgoing( VARIANT_BOOL *pbLogOutgoing ) /*++ Routine name : CFaxActivityLogging::get_LogOutgoing Routine description: Return Log Incoming value Author: Iv Garber (IvG), Jun, 2000 Arguments: pbLogOutgoing [out] - the value of the Log Incoming to return Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER(_T("CFaxActivityLogging::get_LogOutgoing"), hr); // // Sync with the Server for the first time // if (!m_bInited) { hr = Refresh(); if (FAILED(hr)) { return hr; } } hr = GetVariantBool(pbLogOutgoing, m_bLogOutgoing); if (FAILED(hr)) if (FAILED(hr)) { AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); return hr; } return hr; } STDMETHODIMP CFaxActivityLogging::put_LogOutgoing( VARIANT_BOOL bLogOutgoing ) /*++ Routine name : CFaxActivityLogging::put_LogOutgoing Routine description: Set new Log Incoming value Author: Iv Garber (IvG), Jun, 2000 Arguments: bLogOutgoing [in] - the value of the Log Incoming to set Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER(_T("CFaxActivityLogging::put_LogOutgoing"), hr, _T("Log Incoming : %d"), bLogOutgoing); // // Sync with the Server for the first time // if (!m_bInited) { hr = Refresh(); if (FAILED(hr)) { return hr; } } m_bLogOutgoing = bLogOutgoing; return hr; } // //===================== LOG INCOMING ====================================== // STDMETHODIMP CFaxActivityLogging::get_LogIncoming( VARIANT_BOOL *pbLogIncoming ) /*++ Routine name : CFaxActivityLogging::get_LogIncoming Routine description: Return Log Incoming value Author: Iv Garber (IvG), Jun, 2000 Arguments: pbLogIncoming [out] - the value of the Log Incoming to return Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER(_T("CFaxActivityLogging::get_LogIncoming"), hr); // // Sync with the Server for the first time // if (!m_bInited) { hr = Refresh(); if (FAILED(hr)) { return hr; } } hr = GetVariantBool(pbLogIncoming, m_bLogIncoming); if (FAILED(hr)) { AtlReportError(CLSID_FaxActivityLogging, GetErrorMsgId(hr), IID_IFaxActivityLogging, hr); return hr; } return hr; } STDMETHODIMP CFaxActivityLogging::put_LogIncoming( VARIANT_BOOL bLogIncoming ) /*++ Routine name : CFaxActivityLogging::put_LogIncoming Routine description: Set new Log Incoming value Author: Iv Garber (IvG), Jun, 2000 Arguments: bLogIncoming [in] - the value of the Log Incoming to set Return Value: Standard HRESULT code --*/ { HRESULT hr = S_OK; DBG_ENTER(_T("CFaxActivityLogging::put_LogIncoming"), hr, _T("Log Incoming : %d"), bLogIncoming); // // Sync with the Server for the first time // if (!m_bInited) { hr = Refresh(); if (FAILED(hr)) { return hr; } } m_bLogIncoming = bLogIncoming; return hr; } // //================ SUPPORT ERROR INFO ==================================== // STDMETHODIMP CFaxActivityLogging::InterfaceSupportsErrorInfo( REFIID riid ) /*++ Routine name : CFaxActivityLogging::InterfaceSupportsErrorInfo Routine description: ATL's implementation of Support Error Info. Author: Iv Garber (IvG), Jun, 2000 Arguments: riid [in] - Reference to the IID Return Value: Standard HRESULT code --*/ { static const IID* arr[] = { &IID_IFaxActivityLogging }; for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) { if (InlineIsEqualGUID(*arr[i],riid)) return S_OK; } return S_FALSE; }