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.
487 lines
12 KiB
487 lines
12 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
// 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<CppFaxServerEvents>(pNode, NULL)
|
|
|
|
{
|
|
m_pParentNode = static_cast <CFaxServerNode *> (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 <Shift>-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;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|