///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1996-1997 Microsoft Corporation // // Module Name: // Iis.cpp // // Abstract: // Implementation of the CIISVirtualRootParamsPage class. // // Author: // Pete Benoit (v-pbenoi) October 16, 1996 // David Potter (davidp) October 17, 1996 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include #include "IISClEx3.h" #include "Iis.h" #include "ExtObj.h" #include "DDxDDv.h" #include "HelpData.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CIISVirtualRootParamsPage property page ///////////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNCREATE(CIISVirtualRootParamsPage, CBasePropertyPage) ///////////////////////////////////////////////////////////////////////////// // Message Maps BEGIN_MESSAGE_MAP(CIISVirtualRootParamsPage, CBasePropertyPage) //{{AFX_MSG_MAP(CIISVirtualRootParamsPage) ON_BN_CLICKED(IDC_PP_IIS_FTP, OnChangeServiceType) ON_BN_CLICKED(IDC_PP_IIS_GOPHER, OnChangeServiceType) ON_BN_CLICKED(IDC_PP_IIS_WWW, OnChangeServiceType) #ifdef _ACCOUNT_AND_PASSWORD ON_EN_CHANGE(IDC_PP_IIS_DIRECTORY, OnChangeDirectory) #endif // _ACCOUNT_AND_PASSWORD ON_EN_CHANGE(IDC_PP_IIS_ALIAS, OnChangeRequiredField) //}}AFX_MSG_MAP // TODO: Modify the following lines to represent the data displayed on this page. #ifdef _ACCOUNT_AND_PASSWORD ON_EN_CHANGE(IDC_PP_IIS_ACCOUNTNAME, CBasePropertyPage::OnChangeCtrl) ON_EN_CHANGE(IDC_PP_IIS_PASSWORD, CBasePropertyPage::OnChangeCtrl) #endif /// _ACCOUNT_AND_PASSWORD ON_BN_CLICKED(IDC_PP_IIS_READ_ACCESS, CBasePropertyPage::OnChangeCtrl) ON_BN_CLICKED(IDC_PP_IIS_WRITE_ACCESS, CBasePropertyPage::OnChangeCtrl) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::CIISVirtualRootParamsPage // // Routine Description: // Default constructor. // // Arguments: // None. // // Return Value: // None. // //-- ///////////////////////////////////////////////////////////////////////////// CIISVirtualRootParamsPage::CIISVirtualRootParamsPage(void) : CBasePropertyPage(g_aHelpIDs_IDD_PP_IIS_PARAMETERS, g_aHelpIDs_IDD_WIZ_IIS_PARAMETERS) { // TODO: Modify the following lines to represent the data displayed on this page. //{{AFX_DATA_INIT(CIISVirtualRootParamsPage) m_strDirectory = _T(""); m_strAlias = _T(""); m_bRead = FALSE; m_bWrite = FALSE; m_nServerType = -1; #ifdef _ACCOUNT_AND_PASSWORD m_strAccountName = _T(""); m_strPassword = _T(""); #endif // _ACCOUNT_AND_PASSWORD //}}AFX_DATA_INIT // Setup the property array. { m_rgProps[epropServiceName].Set(REGPARAM_IIS_SERVICE_NAME, m_strServiceName, m_strPrevServiceName); m_rgProps[epropDirectory].Set(REGPARAM_IIS_DIRECTORY, m_strDirectory, m_strPrevDirectory); m_rgProps[epropAlias].Set(REGPARAM_IIS_ALIAS, m_strAlias, m_strPrevAlias); #ifdef _ACCOUNT_AND_PASSWORD m_rgProps[epropAccoutName].Set(REGPARAM_IIS_ACCOUNTNAME, m_strAccountName, m_strPrevAccountName); m_rgProps[epropPassword].Set(REGPARAM_IIS_PASSWORD, m_strPassword, m_strPrevPassword); #endif // _ACCOUNT_AND_PASSWORD m_rgProps[epropAccessMask].Set(REGPARAM_IIS_ACCESSMASK, m_dwAccessMask, m_dwPrevAccessMask); } // Setup the property array m_iddPropertyPage = IDD_PP_IIS_PARAMETERS; m_iddWizardPage = IDD_WIZ_IIS_PARAMETERS; } //*** CIISVirtualRootParamsPage::CIISVirtualRootParamsPage() ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::DoDataExchange // // Routine Description: // Do data exchange between the dialog and the class. // // Arguments: // pDX [IN OUT] Data exchange object // // Return Value: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CIISVirtualRootParamsPage::DoDataExchange(CDataExchange * pDX) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (!pDX->m_bSaveAndValidate) { // Set the service type. if (m_strServiceName.CompareNoCase(IIS_SVC_NAME_FTP) == 0) m_nServerType = 0; else if (m_strServiceName.CompareNoCase(IIS_SVC_NAME_GOPHER) == 0) m_nServerType = 1; else if (m_strServiceName.CompareNoCase(IIS_SVC_NAME_WWW) == 0) m_nServerType = 2; else m_nServerType = -1; // Set the access variables. if (m_dwAccessMask & VROOT_MASK_READ) m_bRead = TRUE; else m_bRead = FALSE; if (m_dwAccessMask & (VROOT_MASK_WRITE | VROOT_MASK_EXECUTE)) m_bWrite = TRUE; else m_bWrite = FALSE; } // if: setting data to dialog // TODO: Modify the following lines to represent the data displayed on this page. //{{AFX_DATA_MAP(CIISVirtualRootParamsPage) DDX_Control(pDX, IDC_PP_IIS_WRITE_ACCESS, m_ckbWrite); DDX_Control(pDX, IDC_PP_IIS_READ_ACCESS, m_ckbRead); DDX_Control(pDX, IDC_PP_IIS_ACCESS_GROUP, m_groupAccess); #ifdef _ACCOUNT_AND_PASSWORD DDX_Control(pDX, IDC_PP_IIS_PASSWORD, m_editPassword); DDX_Control(pDX, IDC_PP_IIS_PASSWORD_LABEL, m_staticPassword); DDX_Control(pDX, IDC_PP_IIS_ACCOUNTNAME, m_editAccountName); DDX_Control(pDX, IDC_PP_IIS_ACCOUNTNAME_LABEL, m_staticAccountName); DDX_Control(pDX, IDC_PP_IIS_ACCT_INFO_GROUP, m_groupAccountInfo); #endif // _ACCOUNT_AND_PASSWORD DDX_Control(pDX, IDC_PP_IIS_ALIAS, m_editAlias); DDX_Control(pDX, IDC_PP_IIS_DIRECTORY, m_editDirectory); DDX_Control(pDX, IDC_PP_IIS_WWW, m_rbWWW); DDX_Control(pDX, IDC_PP_IIS_GOPHER, m_rbGOPHER); DDX_Control(pDX, IDC_PP_IIS_FTP, m_rbFTP); DDX_Radio(pDX, IDC_PP_IIS_FTP, m_nServerType); DDX_Text(pDX, IDC_PP_IIS_DIRECTORY, m_strDirectory); DDX_Text(pDX, IDC_PP_IIS_ALIAS, m_strAlias); #ifdef _ACCOUNT_AND_PASSWORD DDX_Text(pDX, IDC_PP_IIS_ACCOUNTNAME, m_strAccountName); DDX_Text(pDX, IDC_PP_IIS_PASSWORD, m_strPassword); #endif // _ACCOUNT_AND_PASSWORD DDX_Check(pDX, IDC_PP_IIS_READ_ACCESS, m_bRead); DDX_Check(pDX, IDC_PP_IIS_WRITE_ACCESS, m_bWrite); //}}AFX_DATA_MAP if (pDX->m_bSaveAndValidate) { if (!BBackPressed()) { DDV_MaxChars(pDX, m_strDirectory, MAX_PATH); DDV_MaxChars(pDX, m_strAlias, MAX_PATH); DDV_RequiredText(pDX, IDC_PP_IIS_DIRECTORY, IDC_PP_IIS_DIRECTORY_LABEL, m_strDirectory); DDV_RequiredText(pDX, IDC_PP_IIS_ALIAS, IDC_PP_IIS_ALIAS_LABEL, m_strAlias); } // if: Back button not pressed // Save the type. if (m_nServerType == 0) m_strServiceName = IIS_SVC_NAME_FTP; else if (m_nServerType == 1) m_strServiceName = IIS_SVC_NAME_GOPHER; else if (m_nServerType == 2) m_strServiceName = IIS_SVC_NAME_WWW; else { CString strMsg; strMsg.LoadString(IDS_INVALID_IIS_SERVICE_TYPE); AfxMessageBox(strMsg, MB_OK | MB_ICONSTOP); strMsg.Empty(); pDX->PrepareCtrl(IDC_PP_IIS_FTP); // do this just to set the control for Fail(). pDX->Fail(); } // else: no service type set // Save the access mask values. m_dwAccessMask = 0; if (m_bRead) m_dwAccessMask |= VROOT_MASK_READ; if (m_bWrite) { if (m_nServerType == 2) // WWW m_dwAccessMask |= VROOT_MASK_EXECUTE; else if (m_nServerType == 0) // FTP m_dwAccessMask |= VROOT_MASK_WRITE; } // if: Write/Execute button pressed // If the alias isn't prefixed with a slash, supply it. if (m_strAlias[0] != _T('/')) { CString strTempAlias; try { strTempAlias = _T('/') + m_strAlias; m_strAlias = strTempAlias; } // try catch (CException * pe) { pe->ReportError(); pe->Delete(); strTempAlias.Empty(); pDX->PrepareCtrl(IDC_PP_IIS_ALIAS); // do this just to set the control for Fail(). pDX->Fail(); } // catch: CException } // if: alias not prefixed with slash } // if: saving data from dialog CBasePropertyPage::DoDataExchange(pDX); } //*** CIISVirtualRootParamsPage::DoDataExchange() ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::OnInitDialog // // Routine Description: // Handler for the WM_INITDIALOG message. // // Arguments: // None. // // Return Value: // TRUE We need the focus to be set for us. // FALSE We already set the focus to the proper control. // //-- ///////////////////////////////////////////////////////////////////////////// BOOL CIISVirtualRootParamsPage::OnInitDialog(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (BWizard()) { try { m_strServiceName = IIS_SVC_NAME_WWW; m_dwAccessMask = VROOT_MASK_READ; } // try catch (CMemoryException * pme) { pme->ReportError(); pme->Delete(); } // catch: CMemoryException } // if: creating a new resource CBasePropertyPage::OnInitDialog(); // Set limits on the edit controls. m_editDirectory.SetLimitText(MAX_PATH); m_editAlias.SetLimitText(MAX_PATH); #ifdef _ACCOUNT_AND_PASSWORD m_staticPassword.EnableWindow(FALSE); m_editPassword.EnableWindow(FALSE); #endif // _ACCOUNT_AND_PASSWORD OnChangeServiceType(); #ifdef _ACCOUNT_AND_PASSWORD OnChangeDirectory(); #endif // _ACCOUNT_AND_PASSWORD return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } //*** CIISVirtualRootParamsPage::OnInitDialog() ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::OnSetActive // // Routine Description: // Handler for the PSN_SETACTIVE message. // // Arguments: // None. // // Return Value: // TRUE Page successfully initialized. // FALSE Page not initialized. // //-- ///////////////////////////////////////////////////////////////////////////// BOOL CIISVirtualRootParamsPage::OnSetActive(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // Enable/disable the Next/Finish button. if (BWizard()) { if ((m_editDirectory.GetWindowTextLength() == 0) || (m_editAlias.GetWindowTextLength() == 0)) EnableNext(FALSE); else EnableNext(TRUE); } // if: in the wizard return CBasePropertyPage::OnSetActive(); } //*** CIISVirtualRootParamsPage::OnSetActive() ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::OnChangeServiceType // // Routine Description: // Handler for the BN_CLICKED message on one of the service type radio // buttons. // // Arguments: // None. // // Return Value: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CIISVirtualRootParamsPage::OnChangeServiceType(void) { int nCmdShowAccess; IDS idsWriteLabel = 0; AFX_MANAGE_STATE(AfxGetStaticModuleState()); OnChangeCtrl(); if (m_rbFTP.GetCheck() == BST_CHECKED) { nCmdShowAccess = SW_SHOW; idsWriteLabel = IDS_WRITE; } // if: FTP service else if (m_rbGOPHER.GetCheck() == BST_CHECKED) { nCmdShowAccess = SW_HIDE; } // else if: GOPHER service else if (m_rbWWW.GetCheck() == BST_CHECKED) { nCmdShowAccess = SW_SHOW; idsWriteLabel = IDS_EXECUTE; } // else if: WWW service else { nCmdShowAccess = SW_HIDE; } // else: unknown service // Set the access checkbox labels. if (idsWriteLabel != 0) { CString strWriteLabel; AFX_MANAGE_STATE(AfxGetStaticModuleState()); strWriteLabel.LoadString(idsWriteLabel); m_ckbWrite.SetWindowText(strWriteLabel); } // if: write label needs to be set // Hide the Access group if this is for a GOPHER Virtual Root. m_groupAccess.ShowWindow(nCmdShowAccess); m_ckbRead.ShowWindow(nCmdShowAccess); m_ckbWrite.ShowWindow(nCmdShowAccess); } //*** CIISVirtualRootParamsPage::OnChangeServiceType() ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::OnChangeDirectory // // Routine Description: // Handler for the EN_CHANGE message on the Directory edit control. // // Arguments: // None. // // Return Value: // None. // //-- ///////////////////////////////////////////////////////////////////////////// #ifdef _ACCOUNT_AND_PASSWORD void CIISVirtualRootParamsPage::OnChangeDirectory(void) { BOOL bEnable = FALSE; CString strDirectory; AFX_MANAGE_STATE(AfxGetStaticModuleState()); OnChangeCtrl(); // If the edit control begins with a \\name\, enable the account info // group. Otherwise disable it. m_editDirectory.GetWindowText(strDirectory); if ((strDirectory.GetLength() >= 4) && (strDirectory[0] == _T('\\')) && (strDirectory[1] == _T('\\')) && (strDirectory[2] != _T('\\'))) { CString strRight; strRight = strDirectory.Right(strDirectory.GetLength() - 3); if (strRight.Find(_T('\\')) >= 0) bEnable = TRUE; } // if: directory begins with a double backslash + non-backslash // Enable or disable the account info group. m_groupAccountInfo.EnableWindow(bEnable); m_staticAccountName.EnableWindow(bEnable); m_editAccountName.EnableWindow(bEnable); // m_staticPassword.EnableWindow(bEnable); // m_editPassword.EnableWindow(bEnable); if (BWizard()) { if ((m_strDirectory.GetLength() == 0) || (m_editAlias.GetWindowTextLength() == 0)) EnableNext(FALSE); else EnableNext(TRUE); } // if: in a wizard } //*** CIISVirtualRootParamsPage::OnChangeDirectory() #endif // _ACCOUNT_AND_PASSWORD ///////////////////////////////////////////////////////////////////////////// //++ // // CIISVirtualRootParamsPage::OnChangeRequiredField // // Routine Description: // Handler for the EN_CHANGE message on the Share name or Path edit // controls. // // Arguments: // None. // // Return Value: // None. // //-- ///////////////////////////////////////////////////////////////////////////// void CIISVirtualRootParamsPage::OnChangeRequiredField(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); OnChangeCtrl(); if (BWizard()) { if ((m_editDirectory.GetWindowTextLength() == 0) || (m_editAlias.GetWindowTextLength() == 0)) EnableNext(FALSE); else EnableNext(TRUE); } // if: in a wizard } //*** CIISVirtualRootParamsPage::OnChangeRequiredField()