windows-nt/Source/XPSP1/NT/inetsrv/iis/admin/snapin/perform.cpp
2020-09-26 16:20:57 +08:00

456 lines
9.5 KiB
C++

/*++
Copyright (c) 1994-2000 Microsoft Corporation
Module Name :
perform.cpp
Abstract:
WWW Performance Property Page
Author:
Ronald Meijer (ronaldm)
Sergei Antonov (sergeia)
Project:
Internet Services Manager
Revision History:
11/29/2000 sergeia Changed for IIS6. Removed excessive commenting
--*/
//
// Include Files
//
#include "stdafx.h"
#include "resource.h"
#include "common.h"
#include "inetmgrapp.h"
#include "inetprop.h"
#include "shts.h"
#include "w3sht.h"
#include "supdlgs.h"
#include "perform.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
#define CONNECTIONS_MIN 0
#define CONNECTIONS_MAX 2000000
#define LIMITED_CONNECTIONS_MIN (10)
#define LIMITED_CONNECTIONS_MAX (40)
//#define MAX_MAX_CONNECTIONS (1999999999L)
#define INITIAL_MAX_CONNECTIONS ( 1000L)
//#define UNLIMITED_CONNECTIONS (2000000000L)
IMPLEMENT_DYNCREATE(CW3PerfPage, CInetPropertyPage)
/* static */
void
CW3PerfPage::ParseMaxNetworkUse(
DWORD& dwMaxBandwidth,
DWORD& dwMaxBandwidthDisplay,
BOOL& fLimitBandwidth
)
{
//
// Special case: If dwMaxBandwidth is 0(an invalid value), the
// value likely could not be inherited from the root (the user
// is an operator and can't see the properties there). Adjust
// the value to a possibly misleading value.
//
if (dwMaxBandwidth == 0L)
{
TRACEEOLID("Adjusting invalid bandwidth throttling value -- "
"are you an operator?");
dwMaxBandwidth = INFINITE_BANDWIDTH;
}
fLimitBandwidth = (dwMaxBandwidth != INFINITE_BANDWIDTH);
dwMaxBandwidthDisplay = fLimitBandwidth ?
(dwMaxBandwidth / KILOBYTE) : (DEF_BANDWIDTH / KILOBYTE);
}
CW3PerfPage::CW3PerfPage(
IN CInetPropertySheet * pSheet
)
: CInetPropertyPage(CW3PerfPage::IDD, pSheet)
{
#ifdef _DEBUG
afxMemDF |= checkAlwaysMemDF;
#endif // _DEBUG
m_nUnlimited = RADIO_LIMITED;
m_nMaxConnections = 50;
m_nVisibleMaxConnections = 50;
}
CW3PerfPage::~CW3PerfPage()
{
}
void
CW3PerfPage::DoDataExchange(
IN CDataExchange * pDX
)
/*++
Routine Description:
Initialise/Store control data
Arguments:
CDataExchange * pDX - DDX/DDV control structure
Return Value:
None
--*/
{
CInetPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CW3PerfPage)
DDX_Check(pDX, IDC_CHECK_LIMIT_NETWORK_USE, m_fLimitBandwidth);
DDX_Control(pDX, IDC_CHECK_LIMIT_NETWORK_USE, m_LimitBandwidth);
DDX_Control(pDX, IDC_MAX_BANDWIDTH, m_MaxBandwidth);
DDX_Text(pDX, IDC_MAX_BANDWIDTH, m_dwMaxBandwidthDisplay);
DDX_Control(pDX, IDC_MAX_BANDWIDTH_SPIN, m_MaxBandwidthSpin);
DDX_Control(pDX, IDC_STATIC_MAX_NETWORK_USE, m_MaxBandwidthTxt);
DDX_Check(pDX, IDC_UNINSTALL_PSHED, m_fUninstallPSHED);
DDX_Control(pDX, IDC_UNINSTALL_PSHED, m_UninstallPSHED);
DDX_Control(pDX, IDC_STATIC_PSHED_REQUIRED, m_static_PSHED_Required);
DDX_Control(pDX, IDC_STATIC_CONN, m_WebServiceConnGrp);
DDX_Control(pDX, IDC_STATIC_CONN_TXT, m_WebServiceConnTxt);
DDX_Control(pDX, IDC_RADIO_UNLIMITED, m_radio_Unlimited);
DDX_Control(pDX, IDC_RADIO_LIMITED, m_radio_Limited);
DDX_Radio(pDX, IDC_RADIO_UNLIMITED, m_nUnlimited);
DDX_Control(pDX, IDC_EDIT_MAX_CONNECTIONS, m_edit_MaxConnections);
DDX_Text(pDX, IDC_EDIT_MAX_CONNECTIONS, m_nMaxConnections);
DDX_Control(pDX, IDC_SPIN_MAX_CONNECTIONS, m_MaxConnectionsSpin);
DDX_Control(pDX, IDC_STATIC_CONNECTIONS, m_ConnectionsTxt);
//}}AFX_DATA_MAP
if (!pDX->m_bSaveAndValidate || m_fLimitBandwidth)
{
DDX_Text(pDX, IDC_MAX_BANDWIDTH, m_dwMaxBandwidthDisplay);
DDV_MinMaxLong(pDX, m_dwMaxBandwidthDisplay,
BANDWIDTH_MIN, BANDWIDTH_MAX);
}
if (IsMasterInstance())
{
if (!pDX->m_bSaveAndValidate || !m_fUnlimitedConnections )
{
DDX_Text(pDX, IDC_EDIT_MAX_CONNECTIONS, m_nVisibleMaxConnections);
}
DDV_MinMaxDWord(pDX, m_nVisibleMaxConnections, 0, UNLIMITED_CONNECTIONS);
}
}
//
// Message Map
//
BEGIN_MESSAGE_MAP(CW3PerfPage, CInetPropertyPage)
//{{AFX_MSG_MAP(CW3PerfPage)
ON_BN_CLICKED(IDC_CHECK_LIMIT_NETWORK_USE, OnCheckLimitNetworkUse)
ON_BN_CLICKED(IDC_RADIO_LIMITED, OnRadioLimited)
ON_BN_CLICKED(IDC_RADIO_UNLIMITED, OnRadioUnlimited)
//}}AFX_MSG_MAP
ON_EN_CHANGE(IDC_EDIT_MAX_CONNECTIONS, OnItemChanged)
ON_EN_CHANGE(IDC_MAX_BANDWIDTH, OnItemChanged)
END_MESSAGE_MAP()
BOOL
CW3PerfPage::SetControlStates()
/*++
Routine Description:
Set control states depending on contents of the dialog
Arguments:
None
Return Value:
TRUE if the 'limit network use' is on.
--*/
{
BOOL fLimitOn = FALSE;
if (::IsWindow(m_LimitBandwidth.m_hWnd))
{
fLimitOn = m_LimitBandwidth.GetCheck() > 0
&& HasBwThrottling()
&& HasAdminAccess();
m_static_PSHED_Required.ShowWindow(fLimitOn &&
fLimitOn != m_fLimitBandwidthInitial ? SW_SHOW : SW_HIDE);
m_UninstallPSHED.ShowWindow(!fLimitOn &&
fLimitOn != m_fLimitBandwidthInitial ? SW_SHOW : SW_HIDE);
m_MaxBandwidthTxt.EnableWindow(fLimitOn);
m_MaxBandwidth.EnableWindow(fLimitOn);
m_MaxBandwidthSpin.EnableWindow(fLimitOn);
}
if (::IsWindow(m_edit_MaxConnections.m_hWnd))
{
m_edit_MaxConnections.EnableWindow(!m_fUnlimitedConnections);
m_MaxConnectionsSpin.EnableWindow(!m_fUnlimitedConnections);
m_ConnectionsTxt.EnableWindow(!m_fUnlimitedConnections);
}
return fLimitOn;
}
/* virtual */
HRESULT
CW3PerfPage::FetchLoadedValues()
/*++
Routine Description:
Move configuration data from sheet to dialog controls
Arguments:
None
Return Value:
HRESULT
--*/
{
CError err;
BEGIN_META_INST_READ(CW3Sheet)
FETCH_INST_DATA_FROM_SHEET(m_nMaxConnections);
FETCH_INST_DATA_FROM_SHEET(m_dwMaxBandwidth);
ParseMaxNetworkUse(
m_dwMaxBandwidth,
m_dwMaxBandwidthDisplay,
m_fLimitBandwidth
);
m_fUnlimitedConnections =
((ULONG)(LONG)m_nMaxConnections >= UNLIMITED_CONNECTIONS);
//
// Set the visible max connections edit field, which
// may start out with a default value
//
m_nVisibleMaxConnections = m_fUnlimitedConnections
? INITIAL_MAX_CONNECTIONS : m_nMaxConnections;
//
// Set radio value
//
m_nUnlimited = m_fUnlimitedConnections ? RADIO_UNLIMITED : RADIO_LIMITED;
END_META_INST_READ(err)
m_fLimitBandwidthInitial = m_fLimitBandwidth;
return err;
}
/* virtual */
HRESULT
CW3PerfPage::SaveInfo()
/*++
Routine Description:
Save the information on this property page
Arguments:
None
Return Value:
Error return code
--*/
{
ASSERT(IsDirty());
TRACEEOLID("Saving W3 performance page now...");
CError err;
BuildMaxNetworkUse(
m_dwMaxBandwidth,
m_dwMaxBandwidthDisplay,
m_fLimitBandwidth
);
m_nMaxConnections = m_fUnlimitedConnections
? UNLIMITED_CONNECTIONS
: m_nVisibleMaxConnections;
BeginWaitCursor();
BEGIN_META_INST_WRITE(CW3Sheet)
STORE_INST_DATA_ON_SHEET(m_dwMaxBandwidth);
STORE_INST_DATA_ON_SHEET(m_nMaxConnections);
END_META_INST_WRITE(err)
EndWaitCursor();
m_fLimitBandwidthInitial = m_fLimitBandwidth;
return err;
}
//
// Message Handlers
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
BOOL
CW3PerfPage::OnSetActive()
{
return CInetPropertyPage::OnSetActive();
}
void
CW3PerfPage::OnItemChanged()
{
SetControlStates();
SetModified(TRUE);
}
void
CW3PerfPage::OnRadioLimited()
/*++
Routine Description:
'limited' radio button handler
Arguments:
None
Return Value:
None
--*/
{
m_fUnlimitedConnections = FALSE;
SetControlStates();
m_edit_MaxConnections.SetSel(0,-1);
m_edit_MaxConnections.SetFocus();
OnItemChanged();
}
void
CW3PerfPage::OnRadioUnlimited()
/*++
Routine Description:
'unlimited' radio button handler
Arguments:
None
Return Value:
None
--*/
{
m_fUnlimitedConnections = TRUE;
OnItemChanged();
}
void
CW3PerfPage::OnCheckLimitNetworkUse()
/*++
Routine Description:
The "limit network use" checkbox has been clicked
Enable/disable the "max bandwidth" controls.
Arguments:
None
Return Value:
None
--*/
{
if (SetControlStates())
{
m_MaxBandwidth.SetSel(0, -1);
m_MaxBandwidth.SetFocus();
}
OnItemChanged();
}
BOOL
CW3PerfPage::OnInitDialog()
{
UDACCEL toAcc[3] = {{1, 1}, {3, 5}, {6, 10}};
CInetPropertyPage::OnInitDialog();
m_LimitBandwidth.EnableWindow(
HasBwThrottling() && HasAdminAccess());
m_UninstallPSHED.ShowWindow(SW_HIDE);
m_static_PSHED_Required.ShowWindow(SW_HIDE);
if (!IsMasterInstance())
{
m_WebServiceConnGrp.ShowWindow(SW_HIDE);
m_WebServiceConnTxt.ShowWindow(SW_HIDE);
m_radio_Unlimited.ShowWindow(SW_HIDE);
m_radio_Limited.ShowWindow(SW_HIDE);
m_edit_MaxConnections.ShowWindow(SW_HIDE);
m_MaxConnectionsSpin.ShowWindow(SW_HIDE);
m_ConnectionsTxt.ShowWindow(SW_HIDE);
}
else
{
SETUP_SPIN(m_MaxConnectionsSpin,
CONNECTIONS_MIN, CONNECTIONS_MAX, m_nMaxConnections);
}
SETUP_EDIT_SPIN(m_fLimitBandwidth, m_MaxBandwidth, m_MaxBandwidthSpin,
BANDWIDTH_MIN, BANDWIDTH_MAX, m_dwMaxBandwidthDisplay);
SetControlStates();
return TRUE;
}