Leaked source code of windows server 2003
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

/////////////////////////////////////////////////////////////////////////////
// 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;
}
/////////////////////////////////////////////////////////////////////////////