|
|
/*++
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 2000000000
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_Control(pDX, IDC_MAX_BANDWIDTH_SPIN, m_MaxBandwidthSpin); DDX_Control(pDX, IDC_STATIC_MAX_NETWORK_USE, m_MaxBandwidthTxt); DDX_Control(pDX, IDC_STATIC_PSHED_REQUIRED, m_static_PSHED_Required);
DDX_Control(pDX, IDC_STATIC_CONN, m_WebServiceConnGrp); 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_Control(pDX, IDC_SPIN_MAX_CONNECTIONS, m_MaxConnectionsSpin); //}}AFX_DATA_MAP
if (pDX->m_bSaveAndValidate && m_fLimitBandwidth) { // This Needs to come before DDX_Text which will try to put text big number into small number
DDV_MinMaxBalloon(pDX, IDC_MAX_BANDWIDTH, BANDWIDTH_MIN, BANDWIDTH_MAX); } DDX_TextBalloon(pDX, IDC_MAX_BANDWIDTH, m_dwMaxBandwidthDisplay); if (IsMasterInstance() || GetSheet()->QueryMajorVersion() >= 6) { if (m_nUnlimited != 0) { // This Needs to come before DDX_Text which will try to put text big number into small number
DDV_MinMaxBalloon(pDX, IDC_EDIT_MAX_CONNECTIONS, CONNECTIONS_MIN, CONNECTIONS_MAX); } if (!pDX->m_bSaveAndValidate || !m_fUnlimitedConnections ) { DDX_Text(pDX, IDC_EDIT_MAX_CONNECTIONS, m_nVisibleMaxConnections); } } }
//
// 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_MaxBandwidthTxt.EnableWindow(fLimitOn); m_MaxBandwidth.EnableWindow(fLimitOn); m_MaxBandwidthSpin.EnableWindow(fLimitOn); ::EnableWindow(CONTROL_HWND(IDC_STATIC_KBS), fLimitOn); } if (::IsWindow(m_edit_MaxConnections.m_hWnd)) { m_edit_MaxConnections.EnableWindow(!m_fUnlimitedConnections); m_MaxConnectionsSpin.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_static_PSHED_Required.ShowWindow(SW_HIDE);
if (!IsMasterInstance() && GetSheet()->QueryMajorVersion() <= 5) { m_WebServiceConnGrp.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); } else { SETUP_SPIN(m_MaxConnectionsSpin, CONNECTIONS_MIN, CONNECTIONS_MAX, m_nMaxConnections); if (IsMasterInstance()) { CString buf; buf.LoadString(IDS_PERF_MASTER_BANDWIDTH); GetDlgItem(IDC_CHECK_LIMIT_NETWORK_USE)->SetWindowText(buf); } }
SETUP_EDIT_SPIN(m_fLimitBandwidth, m_MaxBandwidth, m_MaxBandwidthSpin, BANDWIDTH_MIN, BANDWIDTH_MAX, m_dwMaxBandwidthDisplay);
SetControlStates();
return TRUE; }
|