///////////////////////////////////////////////////////////////////////////// // FILE : ppFaxServerEvents.cpp // // // // DESCRIPTION : prop pages of event reports policies // // // // AUTHOR : yossg // // // // HISTORY : // // Oct 25 1999 yossg created // // Nov 24 1999 yossg OnApply create call to all tabs from parent // // Oct 17 2000 yossg // // // // Copyright (C) 1999 Microsoft Corporation All Rights Reserved // // // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "MSFxsSnp.h" #include "ppFaxServerEvents.h" #include "FaxServer.h" #include "FaxServerNode.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // // Constructor // CppFaxServerEvents::CppFaxServerEvents( LONG_PTR hNotificationHandle, CSnapInItem *pNode, BOOL bOwnsNotificationHandle, HINSTANCE hInst) : CPropertyPageExImpl(pNode, NULL) { m_pParentNode = static_cast (pNode); m_pFaxLogCategories = NULL; m_fIsDialogInitiated = FALSE; m_fIsDirty = FALSE; } // // Destructor // CppFaxServerEvents::~CppFaxServerEvents() { if (NULL != m_pFaxLogCategories) { FaxFreeBuffer( m_pFaxLogCategories); } } #define FXS_NUM_OF_CATEGORIES 4 ///////////////////////////////////////////////////////////////////////////// // CppFaxServerEvents message handlers /* - CppFaxServerEvents::InitRPC - * Purpose: * Initiates the configuration structure from RPC get Call. * * Arguments: * * Return: * OLE error code */ HRESULT CppFaxServerEvents::InitRPC( ) { DEBUG_FUNCTION_NAME( _T("CppFaxServerEvents::InitRPC")); HRESULT hRc = S_OK; DWORD ec = ERROR_SUCCESS; DWORD dwNumCategories; // // get RPC Handle // if (!m_pFaxServer->GetFaxServerHandle()) { ec= GetLastError(); DebugPrintEx( DEBUG_ERR, _T("Failed to GetFaxServerHandle. (ec: %ld)"), ec); goto Error; } // // Retrieve the fax Event Reports /Logging Policy configuration // if (!FaxGetLoggingCategories(m_pFaxServer->GetFaxServerHandle(), &m_pFaxLogCategories, &dwNumCategories)) { ec = GetLastError(); DebugPrintEx( DEBUG_ERR, _T("Fail to get Logging Categories configuration. (ec: %ld)"), ec); if (IsNetworkError(ec)) { DebugPrintEx( DEBUG_ERR, _T("Network Error was found. (ec: %ld)"), ec); m_pFaxServer->Disconnect(); } goto Error; } // for max verification ATLASSERT(m_pFaxLogCategories); // internal assumeption in this version ATLASSERT( FXS_NUM_OF_CATEGORIES == dwNumCategories); ATLASSERT(S_OK == hRc); DebugPrintEx( DEBUG_MSG, _T("Succeed to get Logging Categories configuration.")); goto Exit; Error: ATLASSERT(ERROR_SUCCESS != ec); hRc = HRESULT_FROM_WIN32(ec); ATLASSERT(NULL != m_pParentNode); m_pParentNode->NodeMsgBox(GetFaxServerErrorMsg(ec)); Exit: return (hRc); } /* - CppFaxServerEvents::OnInitDialog - * Purpose: * Initiates all controls when dialog is called. * * Arguments: * * Return: * */ LRESULT CppFaxServerEvents::OnInitDialog( UINT uiMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled ) { DEBUG_FUNCTION_NAME( _T("CppFaxServerEvents::OnInitDialog")); UNREFERENCED_PARAMETER( uiMsg ); UNREFERENCED_PARAMETER( wParam ); UNREFERENCED_PARAMETER( lParam ); UNREFERENCED_PARAMETER( fHandled ); int iInboundLevel = 0, iOutboundLevel = 0, iInitLevel = 0, iGeneralLevel = 0; // Retrieve the Number of Categories const int iNumCategories = FXS_NUM_OF_CATEGORIES; int i; // index // // Attach Controls // m_InitErrSlider.Attach(GetDlgItem(IDC_SLIDER4)); m_InboundErrSlider.Attach(GetDlgItem(IDC_SLIDER2)); m_OutboundErrSlider.Attach(GetDlgItem(IDC_SLIDER3)); m_GeneralErrSlider.Attach(GetDlgItem(IDC_SLIDER1)); // // Init sliders // m_InboundErrSlider.SetRange(0,FXS_MAX_LOG_REPORT_LEVEL - 1,TRUE); m_OutboundErrSlider.SetRange(0,FXS_MAX_LOG_REPORT_LEVEL - 1,TRUE); m_InitErrSlider.SetRange(0,FXS_MAX_LOG_REPORT_LEVEL - 1,TRUE); m_GeneralErrSlider.SetRange(0,FXS_MAX_LOG_REPORT_LEVEL - 1,TRUE); // // Verify the Number of Categories is the same // as the code assumes (This version). // To avoid replacement of defined contant elsewhere // ATLASSERT (iNumCategories == 4); for (i = 0; i < iNumCategories; i++) { //for each category switch (m_pFaxLogCategories[i].Category) { case FAXLOG_CATEGORY_INIT: iInitLevel= m_pFaxLogCategories[i].Level; break; case FAXLOG_CATEGORY_OUTBOUND: iOutboundLevel= m_pFaxLogCategories[i].Level; break; case FAXLOG_CATEGORY_INBOUND: iInboundLevel= m_pFaxLogCategories[i].Level; break; case FAXLOG_CATEGORY_UNKNOWN: iGeneralLevel= m_pFaxLogCategories[i].Level; break; } } // // Init slider Positions // m_InboundErrSlider.SetPos(iInboundLevel); m_OutboundErrSlider.SetPos(iOutboundLevel); m_InitErrSlider.SetPos(iInitLevel); m_GeneralErrSlider.SetPos(iGeneralLevel); m_fIsDialogInitiated = TRUE; return 1; } /* - CppFaxServerEvents::SetProps - * Purpose: * Sets properties on apply. * * Arguments: * pCtrlFocus - focus pointer (int) * * Return: * OLE error code */ HRESULT CppFaxServerEvents::SetProps(int *pCtrlFocus) { DEBUG_FUNCTION_NAME( _T("CppFaxServerEvents::SetProps")); HRESULT hRc = S_OK; DWORD ec = ERROR_SUCCESS; int iInboundErrPos, iOutboundErrPos, iInitErrPos, iGeneralErrPos; FAX_LOG_CATEGORY FaxLogCategories[FXS_NUM_OF_CATEGORIES] = {0}; // // Our base assumption for this version // const int iNumCategories = FXS_NUM_OF_CATEGORIES; ATLASSERT (iNumCategories == 4); // // Collect All Slider Positions // iInitErrPos = m_InitErrSlider.GetPos(); iInboundErrPos = m_InboundErrSlider.GetPos(); iOutboundErrPos = m_OutboundErrSlider.GetPos(); iGeneralErrPos = m_GeneralErrSlider.GetPos(); // // Prepare all structure fields // // notice: legacy EnumLoggingChanges in the server's code depends on the order only! // our code indentifies the categories by their unique id number - the Category DWORD field // FaxLogCategories[0].Name = L"Initialization/Termination"; //NOT to be localized a registry info only FaxLogCategories[0].Category = FAXLOG_CATEGORY_INIT; FaxLogCategories[0].Level = (DWORD)iInitErrPos; FaxLogCategories[1].Name = L"Outbound"; //NOT to be localized a registry info only FaxLogCategories[1].Category = FAXLOG_CATEGORY_OUTBOUND; FaxLogCategories[1].Level = (DWORD)iOutboundErrPos; FaxLogCategories[2].Name = L"Inbound"; //NOT to be localized a registry info only FaxLogCategories[2].Category = FAXLOG_CATEGORY_INBOUND;; FaxLogCategories[2].Level = (DWORD)iInboundErrPos; FaxLogCategories[3].Name = L"Unknown"; //NOT to be localized a registry info only FaxLogCategories[3].Category = FAXLOG_CATEGORY_UNKNOWN; FaxLogCategories[3].Level = (DWORD)iGeneralErrPos; // // get RPC Handle // if (!m_pFaxServer->GetFaxServerHandle()) { ec= GetLastError(); DebugPrintEx( DEBUG_ERR, _T("Failed to GetFaxServerHandle. (ec: %ld)"), ec); goto Error; } // // Set Config // if (!FaxSetLoggingCategories( m_pFaxServer->GetFaxServerHandle(), FaxLogCategories, (DWORD)iNumCategories)) { ec = GetLastError(); DebugPrintEx( DEBUG_ERR, _T("Fail to Set Logging Categories. (ec: %ld)"), ec); if (IsNetworkError(ec)) { DebugPrintEx( DEBUG_ERR, _T("Network Error was found. (ec: %ld)"), ec); m_pFaxServer->Disconnect(); } goto Error; } ATLASSERT(S_OK == hRc); m_fIsDirty = FALSE; DebugPrintEx( DEBUG_MSG, _T("Succeed to set Logging Categories configuration.")); goto Exit; Error: ATLASSERT(ERROR_SUCCESS != ec); hRc = HRESULT_FROM_WIN32(ec); PropSheet_SetCurSelByID( GetParent(), IDD); ATLASSERT(::IsWindow(m_hWnd)); PageError(GetFaxServerErrorMsg(ec),m_hWnd); Exit: return(hRc); } /* - CppFaxServerEvents::PreApply - * Purpose: * Checks properties before apply. * * Arguments: * * Return: * OLE error code */ HRESULT CppFaxServerEvents::PreApply(int *pCtrlFocus) { return(S_OK); } /* - CppFaxServerEvents::OnApply - * Purpose: * Calls PreApply and SetProp to Apply changes. * * Arguments: * * Return: * TRUE or FALSE */ BOOL CppFaxServerEvents::OnApply() { DEBUG_FUNCTION_NAME( _T("CppFaxServerEvents::OnApply")); HRESULT hRc = S_OK; int CtrlFocus = 0; if (!m_fIsDirty) { return TRUE; } hRc = SetProps(&CtrlFocus); if (FAILED(hRc)) { //Error Msg by called func. if (CtrlFocus) { GotoDlgCtrl(GetDlgItem(CtrlFocus)); } return FALSE; } else //(Succeeded(hRc)) { return TRUE; } } /* - CppFaxServerEvents::SliderMoved - * Purpose: * set Apply buttom modified. * Arguments: * IN pParentNode - parent node pointer * * Return: * none */ LRESULT CppFaxServerEvents::SliderMoved ( UINT uiMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled) { if (!m_fIsDialogInitiated) //event receieved in too early stage { return 0; } else { m_fIsDirty = TRUE; } SetModified(TRUE); fHandled = TRUE; return(1); } ////////////////////////////////////////////////////////////////////////////// /*++ CppFaxServerEvents::OnHelpRequest This is called in response to the WM_HELP Notify message and to the WM_CONTEXTMENU Notify message. WM_HELP Notify message. This message is sent when the user presses F1 or -F1 over an item or when the user clicks on the ? icon and then presses the mouse over an item. WM_CONTEXTMENU Notify message. This message is sent when the user right clicks over an item and then clicks "What's this?" --*/ ///////////////////////////////////////////////////////////////////////////// LRESULT CppFaxServerEvents::OnHelpRequest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { DEBUG_FUNCTION_NAME(_T("CppFaxServerEvents::OnHelpRequest")); switch (uMsg) { case WM_HELP: WinContextHelp(((LPHELPINFO)lParam)->dwContextId, m_hWnd); break; case WM_CONTEXTMENU: WinContextHelp(::GetWindowContextHelpId((HWND)wParam), m_hWnd); break; } return TRUE; } /////////////////////////////////////////////////////////////////////////////