670 lines
12 KiB
C++
670 lines
12 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1998 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
|
||
|
defws.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Default Web Site Dialog
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Ronald Meijer (ronaldm)
|
||
|
|
||
|
Project:
|
||
|
|
||
|
Internet Services Manager
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Include Files
|
||
|
//
|
||
|
#include "stdafx.h"
|
||
|
#include "w3scfg.h"
|
||
|
#include "defws.h"
|
||
|
#include "dirbrows.h"
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Directory Size Units
|
||
|
//
|
||
|
#define DS_UNITS MEGABYTE
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Default Web Site Property Page
|
||
|
//
|
||
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CDefWebSitePage, CInetPropertyPage)
|
||
|
|
||
|
|
||
|
|
||
|
CDefWebSitePage::CDefWebSitePage(
|
||
|
IN CInetPropertySheet * pSheet
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Constructor for WWW Default Web Site page
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
CInetPropertySheet * pSheet : Sheet object
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
N/A
|
||
|
|
||
|
|
||
|
--*/
|
||
|
: CInetPropertyPage(CDefWebSitePage::IDD, pSheet),
|
||
|
m_ppropCompression(NULL),
|
||
|
m_fFilterPathFound(FALSE),
|
||
|
m_fCompressionDirectoryChanged(FALSE)
|
||
|
{
|
||
|
#if 0 // Keep Class Wizard happy
|
||
|
|
||
|
//{{AFX_DATA_INIT(CDefWebSitePage)
|
||
|
m_fEnableDynamic = FALSE;
|
||
|
m_fEnableStatic = FALSE;
|
||
|
m_strDirectory = _T("");
|
||
|
m_nUnlimited = -1;
|
||
|
m_ilSize = 0L;
|
||
|
//}}AFX_DATA_INIT
|
||
|
|
||
|
#endif // 0
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
CDefWebSitePage::~CDefWebSitePage()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Destructor
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
N/A
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
N/A
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::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(CDefWebSitePage)
|
||
|
DDX_Control(pDX, IDC_EDIT_COMPRESS_DIRECTORY, m_edit_Directory);
|
||
|
DDX_Control(pDX, IDC_BUTTON_BROWSE, m_button_Browse);
|
||
|
DDX_Control(pDX, IDC_STATIC_COMPRESS_MB, m_static_MB);
|
||
|
DDX_Control(pDX, IDC_EDIT_COMPRESS_DIRECTORY_SIZE, m_edit_DirectorySize);
|
||
|
DDX_Check(pDX, IDC_CHECK_DYNAMIC_COMPRESSION, m_fEnableDynamic);
|
||
|
DDX_Check(pDX, IDC_CHECK_STATIC_COMPRESSION, m_fEnableStatic);
|
||
|
DDX_Radio(pDX, IDC_RADIO_COMPRESS_UNLIMITED, m_nUnlimited);
|
||
|
//}}AFX_DATA_MAP
|
||
|
|
||
|
if (HasCompression())
|
||
|
{
|
||
|
if (!pDX->m_bSaveAndValidate || m_fEnableStatic)
|
||
|
{
|
||
|
DDX_Text(pDX, IDC_EDIT_COMPRESS_DIRECTORY, m_strDirectory);
|
||
|
DDV_MaxChars(pDX, m_strDirectory, _MAX_PATH);
|
||
|
}
|
||
|
|
||
|
if (pDX->m_bSaveAndValidate && m_fEnableStatic)
|
||
|
{
|
||
|
if (!IsFullyQualifiedPath(m_strDirectory))
|
||
|
{
|
||
|
::AfxMessageBox(IDS_ERR_INVALID_PATH);
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Perform some additional smart checking on the compression
|
||
|
// directory if the current machine is local, and the
|
||
|
// directory has changed
|
||
|
//
|
||
|
if (IsLocal() && m_fCompressionDirectoryChanged)
|
||
|
{
|
||
|
//
|
||
|
// Should exist on the local machine.
|
||
|
//
|
||
|
DWORD dwAttr = GetFileAttributes(m_strDirectory);
|
||
|
if (dwAttr == 0xffffffff
|
||
|
|| (dwAttr & FILE_ATTRIBUTE_DIRECTORY) == 0
|
||
|
|| IsNetworkPath(m_strDirectory)
|
||
|
)
|
||
|
{
|
||
|
::AfxMessageBox(IDS_ERR_COMPRESS_DIRECTORY);
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Now check to make sure the volume is of the correct
|
||
|
// type.
|
||
|
//
|
||
|
DWORD dwFileSystemFlags;
|
||
|
|
||
|
if (::GetVolumeInformationSystemFlags(
|
||
|
m_strDirectory,
|
||
|
&dwFileSystemFlags
|
||
|
))
|
||
|
{
|
||
|
if (!(dwFileSystemFlags & FS_PERSISTENT_ACLS))
|
||
|
{
|
||
|
//
|
||
|
// No ACLS
|
||
|
//
|
||
|
if (!NoYesMessageBox(IDS_NO_ACL_WARNING))
|
||
|
{
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (dwFileSystemFlags & FS_VOL_IS_COMPRESSED
|
||
|
|| dwAttr & FILE_ATTRIBUTE_COMPRESSED)
|
||
|
{
|
||
|
//
|
||
|
// Compression cache directory is itself compressed
|
||
|
//
|
||
|
if (!NoYesMessageBox(IDS_COMPRESS_WARNING))
|
||
|
{
|
||
|
pDX->Fail();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!pDX->m_bSaveAndValidate || (m_fEnableLimiting && m_fEnableStatic))
|
||
|
{
|
||
|
DDX_Text(pDX, IDC_EDIT_COMPRESS_DIRECTORY_SIZE, m_ilSize);
|
||
|
DDV_MinMaxLong(pDX, m_ilSize, 1, 1024L);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Message Map
|
||
|
//
|
||
|
BEGIN_MESSAGE_MAP(CDefWebSitePage, CInetPropertyPage)
|
||
|
//{{AFX_MSG_MAP(CDefWebSitePage)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
|
||
|
ON_BN_CLICKED(IDC_RADIO_COMPRESS_LIMITED, OnRadioLimited)
|
||
|
ON_BN_CLICKED(IDC_RADIO_COMPRESS_UNLIMITED, OnRadioUnlimited)
|
||
|
ON_BN_CLICKED(IDC_CHECK_DYNAMIC_COMPRESSION, OnCheckDynamicCompression)
|
||
|
ON_BN_CLICKED(IDC_CHECK_STATIC_COMPRESSION, OnCheckStaticCompression)
|
||
|
ON_EN_CHANGE(IDC_EDIT_COMPRESS_DIRECTORY, OnChangeEditCompressDirectory)
|
||
|
ON_WM_DESTROY()
|
||
|
//}}AFX_MSG_MAP
|
||
|
|
||
|
ON_EN_CHANGE(IDC_EDIT_COMPRESS_DIRECTORY, OnItemChanged)
|
||
|
ON_EN_CHANGE(IDC_EDIT_COMPRESS_DIRECTORY_SIZE, OnItemChanged)
|
||
|
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::SetControlStates()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Enable/disable control states depending on the state of
|
||
|
the dialog.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
GetDlgItem(IDC_STATIC_COMPRESS_DIRECTORY)->EnableWindow(m_fEnableStatic);
|
||
|
m_edit_Directory.EnableWindow(m_fEnableStatic);
|
||
|
m_edit_DirectorySize.EnableWindow(m_fEnableStatic && m_fEnableLimiting);
|
||
|
m_static_MB.EnableWindow(m_fEnableStatic&& m_fEnableLimiting);
|
||
|
GetDlgItem(IDC_RADIO_COMPRESS_LIMITED)->EnableWindow(m_fEnableStatic);
|
||
|
GetDlgItem(IDC_RADIO_COMPRESS_UNLIMITED)->EnableWindow(m_fEnableStatic);
|
||
|
GetDlgItem(IDC_STATIC_MAX_COMPRESS_SIZE)->EnableWindow(m_fEnableStatic);
|
||
|
|
||
|
//
|
||
|
// Browse on the local machine only
|
||
|
//
|
||
|
m_button_Browse.EnableWindow(IsLocal() && m_fEnableStatic);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/* virtual */
|
||
|
HRESULT
|
||
|
CDefWebSitePage::FetchLoadedValues()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Move configuration data from sheet to dialog controls
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
HRESULT
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CError err;
|
||
|
|
||
|
ASSERT(m_ppropCompression == NULL);
|
||
|
|
||
|
m_ppropCompression = new CIISCompressionProps(GetServerName());
|
||
|
|
||
|
if (m_ppropCompression)
|
||
|
{
|
||
|
err = m_ppropCompression->LoadData();
|
||
|
m_fFilterPathFound = err.Succeeded();
|
||
|
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
m_fEnableDynamic = m_ppropCompression->m_fEnableDynamicCompression;
|
||
|
m_fEnableStatic = m_ppropCompression->m_fEnableStaticCompression;
|
||
|
m_fEnableLimiting = m_ppropCompression->m_fLimitDirectorySize;
|
||
|
m_strDirectory = m_ppropCompression->m_strDirectory;
|
||
|
m_nUnlimited = m_fEnableLimiting ? RADIO_LIMITED : RADIO_UNLIMITED;
|
||
|
|
||
|
if (m_ppropCompression->m_dwDirectorySize == 0xffffffff)
|
||
|
{
|
||
|
m_ilSize = DEF_MAX_COMPDIR_SIZE / DS_UNITS;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_ilSize = m_ppropCompression->m_dwDirectorySize / DS_UNITS;
|
||
|
}
|
||
|
}
|
||
|
else if (err.Win32Error() == ERROR_PATH_NOT_FOUND)
|
||
|
{
|
||
|
//
|
||
|
// Fail quietly
|
||
|
//
|
||
|
TRACEEOLID("No compression filters installed");
|
||
|
err.Reset();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
err = ERROR_NOT_ENOUGH_MEMORY;
|
||
|
}
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
CDefWebSitePage::SaveInfo()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Save the information on this property page
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
Error return code
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
ASSERT(IsDirty());
|
||
|
|
||
|
TRACEEOLID("Saving W3 default web site page now...");
|
||
|
|
||
|
CError err;
|
||
|
|
||
|
BeginWaitCursor();
|
||
|
|
||
|
//
|
||
|
// Write Compression parms as well.
|
||
|
//
|
||
|
if (err.Succeeded() && HasCompression())
|
||
|
{
|
||
|
ASSERT(m_ppropCompression);
|
||
|
DWORD dwSize = m_ilSize * DS_UNITS;
|
||
|
|
||
|
m_ppropCompression->m_fEnableDynamicCompression = m_fEnableDynamic;
|
||
|
m_ppropCompression->m_fEnableStaticCompression = m_fEnableStatic;
|
||
|
m_ppropCompression->m_fLimitDirectorySize = m_fEnableLimiting;
|
||
|
m_ppropCompression->m_strDirectory = m_strDirectory;
|
||
|
m_ppropCompression->m_dwDirectorySize = dwSize;
|
||
|
err = m_ppropCompression->WriteDirtyProps();
|
||
|
}
|
||
|
EndWaitCursor();
|
||
|
|
||
|
if (err.Succeeded())
|
||
|
{
|
||
|
m_fCompressionDirectoryChanged = FALSE;
|
||
|
}
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Message Handlers
|
||
|
//
|
||
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
CDefWebSitePage::OnInitDialog()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
WM_INITDIALOG handler. Initialize the dialog.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE if focus is to be set automatically, FALSE if the focus
|
||
|
is already set.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CInetPropertyPage::OnInitDialog();
|
||
|
|
||
|
//
|
||
|
// Check to make sure compression is supported
|
||
|
//
|
||
|
for (UINT n = IDC_COMPRESS_FLAGS_FIRST; n <= IDC_COMPRESS_FLAGS_LAST; ++n)
|
||
|
{
|
||
|
GetDlgItem(n)->EnableWindow(HasCompression());
|
||
|
}
|
||
|
|
||
|
SetControlStates();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnItemChanged()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Handle change in control data
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
SetModified(TRUE);
|
||
|
SetControlStates();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnButtonBrowse()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
"Browse" button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
ASSERT(IsLocal());
|
||
|
CString str;
|
||
|
m_edit_Directory.GetWindowText(str);
|
||
|
|
||
|
CDirBrowseDlg dlgBrowse(this, str);
|
||
|
if (dlgBrowse.DoModal() == IDOK)
|
||
|
{
|
||
|
m_edit_Directory.SetWindowText(dlgBrowse.GetFullPath(str));
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnChangeEditCompressDirectory()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Handle change in compression directory edit box.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
m_fCompressionDirectoryChanged = TRUE;
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnRadioLimited()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
'Limited' radio button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
if (!m_fEnableLimiting)
|
||
|
{
|
||
|
m_nUnlimited = RADIO_LIMITED;
|
||
|
m_fEnableLimiting = TRUE;
|
||
|
OnItemChanged();
|
||
|
|
||
|
m_edit_DirectorySize.SetSel(0, -1);
|
||
|
m_edit_DirectorySize.SetFocus();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnRadioUnlimited()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
'Unlimited' radio button handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
if (m_fEnableLimiting)
|
||
|
{
|
||
|
m_nUnlimited = RADIO_UNLIMITED;
|
||
|
m_fEnableLimiting = FALSE;
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnCheckDynamicCompression()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
"Enable Dynamic Compression' checkbox handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
m_fEnableDynamic = !m_fEnableDynamic;
|
||
|
OnItemChanged();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnCheckStaticCompression()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
"Enable Dynamic Compression' checkbox handler
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
m_fEnableStatic = !m_fEnableStatic;
|
||
|
OnItemChanged();
|
||
|
if (m_fEnableStatic)
|
||
|
{
|
||
|
m_edit_Directory.SetSel(0, -1);
|
||
|
m_edit_Directory.SetFocus();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
CDefWebSitePage::OnDestroy()
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
WM_DESTROY handler. Clean up internal data
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CInetPropertyPage::OnDestroy();
|
||
|
|
||
|
SAFE_DELETE(m_ppropCompression);
|
||
|
}
|