// Copyright (c) 2001 Microsoft Corporation // // File: DomainPage.cpp // // Synopsis: Defines the DNS forwarder page used in the // Express path for the CYS Wizard // // History: 05/17/2001 JeffJon Created #include "pch.h" #include "resource.h" #include "InstallationUnitProvider.h" #include "DnsForwarderPage.h" static PCWSTR FORWARDER_PAGE_HELP = L"cys.chm::/typical_setup.htm#typicaldnsforwarder"; DNSForwarderPage::DNSForwarderPage() : CYSWizardPage( IDD_DNS_FORWARDER_PAGE, IDS_DNS_FORWARDER_TITLE, IDS_DNS_FORWARDER_SUBTITLE, FORWARDER_PAGE_HELP) { LOG_CTOR(DNSForwarderPage); } DNSForwarderPage::~DNSForwarderPage() { LOG_DTOR(DNSForwarderPage); } void DNSForwarderPage::OnInit() { LOG_FUNCTION(DNSForwarderPage::OnInit); CYSWizardPage::OnInit(); Win::SetDlgItemText( hwnd, IDC_TOO_LONG_STATIC, IDS_FORWARDER_STATIC_TEXT); // Set the Yes radio by default Win::Button_SetCheck( Win::GetDlgItem(hwnd, IDC_YES_RADIO), BST_CHECKED); Win::Button_SetCheck( Win::GetDlgItem(hwnd, IDC_NO_RADIO), BST_UNCHECKED); } void DNSForwarderPage::SetWizardButtons() { // LOG_FUNCTION(DNSForwarderPage::SetWizardButtons); // NTRAID#NTBUG9-461109-2001/08/28-sburns Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_NEXT | PSWIZB_BACK); // NTRAID#NTBUG9-503691-2001/12/06-JeffJon // The Next button should only be enabled if the user // chose the No radio button or they have entered // an IP and chose the Yes radio button bool yesChecked = Win::Button_GetCheck( Win::GetDlgItem(hwnd, IDC_YES_RADIO)); if (yesChecked) { // Get the IP address from the control DWORD forwarder = 0; LRESULT forwarderResult = Win::SendMessage( Win::GetDlgItem(hwnd, IDC_FORWARDER_IPADDRESS), IPM_GETADDRESS, 0, (LPARAM)&forwarder); if (!forwarderResult || forwarder == 0) { // User hasn't entered an IP address so disable the Next button Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_BACK); } } } bool DNSForwarderPage::OnSetActive() { LOG_FUNCTION(DNSForwarderPage::OnSetActive); SetWizardButtons(); return true; } bool DNSForwarderPage::OnNotify( HWND /*windowFrom*/, UINT_PTR controlIDFrom, UINT code, LPARAM /*lParam*/) { // LOG_FUNCTION(DNSForwarderPage::OnCommand); bool result = false; if (controlIDFrom == IDC_FORWARDER_IPADDRESS && code == IPN_FIELDCHANGED) { SetWizardButtons(); } return result; } bool DNSForwarderPage::OnCommand( HWND /* windowFrom */ , unsigned controlIDFrom, unsigned code) { // LOG_FUNCTION(DNSForwarderPage::OnCommand); switch (controlIDFrom) { case IDC_YES_RADIO: if (code == BN_CLICKED) { Win::EnableWindow( Win::GetDlgItem(hwnd, IDC_FORWARDER_IPADDRESS), true); SetWizardButtons(); } break; case IDC_NO_RADIO: if (code == BN_CLICKED) { Win::EnableWindow( Win::GetDlgItem(hwnd, IDC_FORWARDER_IPADDRESS), false); SetWizardButtons(); } break; default: { // do nothing break; } } return false; } int DNSForwarderPage::Validate() { LOG_FUNCTION(DNSForwarderPage::Validate); int nextPage = IDD_MILESTONE_PAGE; if (Win::Button_GetCheck( Win::GetDlgItem(hwnd, IDC_YES_RADIO))) { // Get the IP address from the control LOG(L"User chose to forward queries"); DWORD forwarder = 0; LRESULT forwarderResult = Win::SendMessage( Win::GetDlgItem(hwnd, IDC_FORWARDER_IPADDRESS), IPM_GETADDRESS, 0, (LPARAM)&forwarder); if (!forwarderResult || forwarder == 0) { LOG(L"User didn't enter IP address so we will gripe at them"); String message = String::load(IDS_FORWARDER_IPADDRESS_REQUIRED); popup.Gripe(hwnd, IDC_FORWARDER_IPADDRESS, message); nextPage = -1; } else { DWORD networkOrderForwarder = ConvertIPAddressOrder(forwarder); LOG(String::format( L"Setting new forwarder: 0x%1!x!", networkOrderForwarder)); InstallationUnitProvider::GetInstance().GetDNSInstallationUnit().SetForwarder( networkOrderForwarder); } } else { // Set an empty value so that we know it was set manually but they chose // not to forward LOG(L"User chose not to forward queries"); InstallationUnitProvider::GetInstance().GetDNSInstallationUnit().SetForwarder(0); } return nextPage; }