1245 lines
34 KiB
C++
1245 lines
34 KiB
C++
|
//-----------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1997.
|
||
|
//
|
||
|
// File: T C P D N S . C P P
|
||
|
//
|
||
|
// Contents: CTcpDnsPage, CServerDialog and CSuffixDialog implementation
|
||
|
//
|
||
|
// Notes: The DNS page and related dialogs
|
||
|
//
|
||
|
// Author: tongl 11 Nov 1997
|
||
|
//
|
||
|
//-----------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "tcpipobj.h"
|
||
|
#include "ncatlui.h"
|
||
|
#include "ncstl.h"
|
||
|
#include "tcpconst.h"
|
||
|
#include "dlgaddr.h"
|
||
|
#include "dlgdns.h"
|
||
|
|
||
|
#include "tcphelp.h"
|
||
|
#include "tcpmacro.h"
|
||
|
#include "tcputil.h"
|
||
|
#include "dnslib.h"
|
||
|
|
||
|
#define MAX_RAS_DNS_SERVER 2
|
||
|
#define MAX_HOSTNAME_LENGTH 64
|
||
|
#define MAX_DOMAINNAME_LENGTH 255
|
||
|
|
||
|
CTcpDnsPage::CTcpDnsPage(CTcpAddrPage * pTcpAddrPage,
|
||
|
ADAPTER_INFO * pAdapterDlg,
|
||
|
GLOBAL_INFO * pGlbDlg,
|
||
|
const DWORD* adwHelpIDs)
|
||
|
{
|
||
|
// Save everything passed to us
|
||
|
Assert(pTcpAddrPage != NULL);
|
||
|
m_pParentDlg = pTcpAddrPage;
|
||
|
|
||
|
Assert(pAdapterDlg != NULL);
|
||
|
m_pAdapterInfo = pAdapterDlg;
|
||
|
|
||
|
Assert(pGlbDlg != NULL);
|
||
|
m_pglb = pGlbDlg;
|
||
|
|
||
|
m_adwHelpIDs = adwHelpIDs;
|
||
|
|
||
|
// Initialize internal states
|
||
|
m_fModified = FALSE;
|
||
|
}
|
||
|
|
||
|
CTcpDnsPage::~CTcpDnsPage()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnInitDialog(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
m_fEditState = FALSE;
|
||
|
|
||
|
// Cache hwnds
|
||
|
// Server
|
||
|
m_hServers.m_hList = GetDlgItem(IDC_DNS_SERVER_LIST);
|
||
|
m_hServers.m_hAdd = GetDlgItem(IDC_DNS_SERVER_ADD);
|
||
|
m_hServers.m_hEdit = GetDlgItem(IDC_DNS_SERVER_EDIT);
|
||
|
m_hServers.m_hRemove = GetDlgItem(IDC_DNS_SERVER_REMOVE);
|
||
|
m_hServers.m_hUp = GetDlgItem(IDC_DNS_SERVER_UP);
|
||
|
m_hServers.m_hDown = GetDlgItem(IDC_DNS_SERVER_DOWN);
|
||
|
|
||
|
// Suffix
|
||
|
m_hSuffix.m_hList = GetDlgItem(IDC_DNS_SUFFIX_LIST);
|
||
|
m_hSuffix.m_hAdd = GetDlgItem(IDC_DNS_SUFFIX_ADD);
|
||
|
m_hSuffix.m_hEdit = GetDlgItem(IDC_DNS_SUFFIX_EDIT);
|
||
|
m_hSuffix.m_hRemove = GetDlgItem(IDC_DNS_SUFFIX_REMOVE);
|
||
|
m_hSuffix.m_hUp = GetDlgItem(IDC_DNS_SUFFIX_UP);
|
||
|
m_hSuffix.m_hDown = GetDlgItem(IDC_DNS_SUFFIX_DOWN);
|
||
|
|
||
|
|
||
|
// Set the up\down arrow icons
|
||
|
SendDlgItemMessage(IDC_DNS_SERVER_UP, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconUpArrow));
|
||
|
SendDlgItemMessage(IDC_DNS_SERVER_DOWN, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconDownArrow));
|
||
|
|
||
|
SendDlgItemMessage(IDC_DNS_SUFFIX_UP, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconUpArrow));
|
||
|
SendDlgItemMessage(IDC_DNS_SUFFIX_DOWN, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconDownArrow));
|
||
|
|
||
|
// Get the Service address Add and Edit button Text and remove ellipse
|
||
|
WCHAR szAddServer[16];
|
||
|
WCHAR szAddSuffix[16];
|
||
|
|
||
|
GetDlgItemText(IDC_DNS_SERVER_ADD, szAddServer, celems(szAddServer));
|
||
|
GetDlgItemText(IDC_DNS_SERVER_ADD, szAddSuffix, celems(szAddSuffix));
|
||
|
|
||
|
szAddServer[lstrlenW(szAddServer) - c_cchRemoveCharatersFromEditOrAddButton]= 0;
|
||
|
szAddSuffix[lstrlenW(szAddSuffix) - c_cchRemoveCharatersFromEditOrAddButton]= 0;
|
||
|
|
||
|
m_strAddServer = szAddServer;
|
||
|
m_strAddSuffix = szAddSuffix;
|
||
|
|
||
|
// Initialize controls on this page
|
||
|
// DNS server list box
|
||
|
int nResult= LB_ERR;
|
||
|
for(VSTR_ITER iterNameServer = m_pAdapterInfo->m_vstrDnsServerList.begin() ;
|
||
|
iterNameServer != m_pAdapterInfo->m_vstrDnsServerList.end() ;
|
||
|
++iterNameServer)
|
||
|
{
|
||
|
nResult = Tcp_ListBox_InsertString(m_hServers.m_hList, -1,
|
||
|
(*iterNameServer)->c_str());
|
||
|
}
|
||
|
|
||
|
// set slection to first item
|
||
|
if (nResult >= 0)
|
||
|
{
|
||
|
Tcp_ListBox_SetCurSel(m_hServers.m_hList, 0);
|
||
|
}
|
||
|
|
||
|
SetButtons(m_hServers, (m_pAdapterInfo->m_fIsRasFakeAdapter) ? MAX_RAS_DNS_SERVER : -1);
|
||
|
|
||
|
|
||
|
// DNS domain edit box
|
||
|
::SendMessage(GetDlgItem(IDC_DNS_DOMAIN), EM_SETLIMITTEXT, DOMAIN_LIMIT, 0);
|
||
|
::SetWindowText(GetDlgItem(IDC_DNS_DOMAIN),
|
||
|
m_pAdapterInfo->m_strDnsDomain.c_str());
|
||
|
|
||
|
// DNS dynamic registration
|
||
|
CheckDlgButton(IDC_DNS_ADDR_REG, !m_pAdapterInfo->m_fDisableDynamicUpdate);
|
||
|
CheckDlgButton(IDC_DNS_NAME_REG, m_pAdapterInfo->m_fEnableNameRegistration);
|
||
|
|
||
|
// Bug #266461 need disable IDC_DNS_NAME_REG if IDC_DNS_ADDR_REG is unchecked
|
||
|
if(m_pAdapterInfo->m_fDisableDynamicUpdate)
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_NAME_REG), FALSE);
|
||
|
|
||
|
|
||
|
// DNS domain serach methods
|
||
|
if (m_pglb->m_vstrDnsSuffixList.size() >0) //If suffix list not empty
|
||
|
{
|
||
|
CheckDlgButton(IDC_DNS_USE_SUFFIX_LIST, TRUE);
|
||
|
CheckDlgButton(IDC_DNS_SEARCH_DOMAIN, FALSE);
|
||
|
CheckDlgButton(IDC_DNS_SEARCH_PARENT_DOMAIN, FALSE);
|
||
|
|
||
|
EnableSuffixGroup(TRUE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_SEARCH_PARENT_DOMAIN), FALSE);
|
||
|
|
||
|
// DNS suffix list box
|
||
|
nResult= LB_ERR;
|
||
|
for(VSTR_CONST_ITER iterSearchList = (m_pglb->m_vstrDnsSuffixList).begin() ;
|
||
|
iterSearchList != (m_pglb->m_vstrDnsSuffixList).end() ;
|
||
|
++iterSearchList)
|
||
|
{
|
||
|
nResult = Tcp_ListBox_InsertString(m_hSuffix.m_hList, -1,
|
||
|
(*iterSearchList)->c_str());
|
||
|
}
|
||
|
|
||
|
// set slection to first item
|
||
|
if (nResult >= 0)
|
||
|
{
|
||
|
Tcp_ListBox_SetCurSel(m_hSuffix.m_hList, 0);
|
||
|
}
|
||
|
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CheckDlgButton(IDC_DNS_USE_SUFFIX_LIST, FALSE);
|
||
|
CheckDlgButton(IDC_DNS_SEARCH_DOMAIN, TRUE);
|
||
|
CheckDlgButton(IDC_DNS_SEARCH_PARENT_DOMAIN, m_pglb->m_fUseDomainNameDevolution);
|
||
|
|
||
|
EnableSuffixGroup(FALSE);
|
||
|
}
|
||
|
|
||
|
//this is a ras connection and a non-admin user, disable all the controls
|
||
|
//for globl settings
|
||
|
if (m_pAdapterInfo->m_fIsRasFakeAdapter && m_pParentDlg->m_fRasNotAdmin)
|
||
|
{
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_STATIC_GLOBAL), FALSE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_SEARCH_DOMAIN), FALSE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_SEARCH_PARENT_DOMAIN), FALSE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_USE_SUFFIX_LIST), FALSE);
|
||
|
EnableSuffixGroup(FALSE);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnContextMenu(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnHelp(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
|
||
|
Assert(lphi);
|
||
|
|
||
|
if (HELPINFO_WINDOW == lphi->iContextType)
|
||
|
{
|
||
|
ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP,
|
||
|
m_adwHelpIDs);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnApply(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
BOOL nResult = PSNRET_NOERROR;
|
||
|
|
||
|
if (!IsModified())
|
||
|
{
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, nResult);
|
||
|
return nResult;
|
||
|
}
|
||
|
|
||
|
// server list
|
||
|
FreeCollectionAndItem(m_pAdapterInfo->m_vstrDnsServerList);
|
||
|
|
||
|
WCHAR szServer[IP_LIMIT];
|
||
|
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hServers.m_hList);
|
||
|
|
||
|
for (int i = 0; i < nCount; i++)
|
||
|
{
|
||
|
#ifdef DBG
|
||
|
int len = Tcp_ListBox_GetTextLen(m_hServers.m_hList, i);
|
||
|
Assert(len != LB_ERR && len < IP_LIMIT);
|
||
|
#endif
|
||
|
|
||
|
Tcp_ListBox_GetText(m_hServers.m_hList, i, szServer);
|
||
|
m_pAdapterInfo->m_vstrDnsServerList.push_back(new tstring(szServer));
|
||
|
}
|
||
|
|
||
|
|
||
|
// DNS domain
|
||
|
// update second memory with what's in the controls
|
||
|
WCHAR szDomain[DOMAIN_LIMIT + 1];
|
||
|
::GetWindowText(GetDlgItem(IDC_DNS_DOMAIN), szDomain, celems(szDomain));
|
||
|
m_pAdapterInfo->m_strDnsDomain = szDomain;
|
||
|
|
||
|
m_pAdapterInfo->m_fDisableDynamicUpdate = !IsDlgButtonChecked(IDC_DNS_ADDR_REG);
|
||
|
m_pAdapterInfo->m_fEnableNameRegistration = IsDlgButtonChecked(IDC_DNS_NAME_REG);
|
||
|
|
||
|
|
||
|
// suffix list and radio button options
|
||
|
FreeCollectionAndItem(m_pglb->m_vstrDnsSuffixList);
|
||
|
|
||
|
WCHAR szSuffix[SUFFIX_LIMIT];
|
||
|
if (IsDlgButtonChecked(IDC_DNS_USE_SUFFIX_LIST))
|
||
|
{
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
AssertSz(nCount > 0, "Why isn't the error caught by OnKillActive?");
|
||
|
|
||
|
for (int i = 0; i < nCount; i++)
|
||
|
{
|
||
|
#ifdef DBG
|
||
|
int len = Tcp_ListBox_GetTextLen(m_hSuffix.m_hList, i);
|
||
|
Assert(len != LB_ERR && len < SUFFIX_LIMIT);
|
||
|
#endif
|
||
|
|
||
|
Tcp_ListBox_GetText(m_hSuffix.m_hList, i, szSuffix);
|
||
|
m_pglb->m_vstrDnsSuffixList.push_back(new tstring(szSuffix));
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pglb->m_fUseDomainNameDevolution =
|
||
|
IsDlgButtonChecked(IDC_DNS_SEARCH_PARENT_DOMAIN);
|
||
|
}
|
||
|
|
||
|
// pass the info back to its parent dialog
|
||
|
m_pParentDlg->m_fPropShtOk = TRUE;
|
||
|
|
||
|
if(!m_pParentDlg->m_fPropShtModified)
|
||
|
m_pParentDlg->m_fPropShtModified = IsModified();
|
||
|
|
||
|
SetModifiedTo(FALSE); // this page is no longer modified
|
||
|
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, nResult);
|
||
|
return nResult;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnCancel(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
BOOL fErr = FALSE;
|
||
|
|
||
|
if (IsDlgButtonChecked(IDC_DNS_USE_SUFFIX_LIST))
|
||
|
{
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
|
||
|
if (0 == nCount)
|
||
|
{
|
||
|
// If the list is empty
|
||
|
NcMsgBox(m_hWnd, IDS_MSFT_TCP_TEXT, IDS_INVALID_NO_SUFFIX,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
|
||
|
fErr = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
WCHAR szDomain[DOMAIN_LIMIT + 1];
|
||
|
::GetWindowText(GetDlgItem(IDC_DNS_DOMAIN), szDomain, celems(szDomain));
|
||
|
if (lstrlenW(szDomain) > 0 && lstrcmpiW(m_pAdapterInfo->m_strDnsDomain.c_str(), szDomain) != 0)
|
||
|
{
|
||
|
|
||
|
DNS_STATUS status;
|
||
|
|
||
|
status = DnsValidateName(szDomain, DnsNameDomain);
|
||
|
if (ERROR_INVALID_NAME == status ||
|
||
|
DNS_ERROR_INVALID_NAME_CHAR == status)
|
||
|
{
|
||
|
NcMsgBox(m_hWnd,
|
||
|
IDS_MSFT_TCP_TEXT,
|
||
|
IDS_INVALID_DOMAIN_NAME,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK,
|
||
|
szDomain);
|
||
|
::SetFocus(GetDlgItem(IDC_DNS_DOMAIN));
|
||
|
fErr = TRUE;
|
||
|
}
|
||
|
else if (DNS_ERROR_NON_RFC_NAME == status)
|
||
|
{
|
||
|
//the dns domain name is not RFC compaliant, should we give a warning here?
|
||
|
}
|
||
|
}
|
||
|
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, fErr);
|
||
|
return fErr;
|
||
|
}
|
||
|
|
||
|
// DNS server related controls
|
||
|
LRESULT CTcpDnsPage::OnAddServer(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_fEditState = FALSE;
|
||
|
|
||
|
CServerDialog * pDlgSrv = new CServerDialog(this, g_aHelpIDs_IDD_DNS_SERVER);
|
||
|
|
||
|
if (pDlgSrv->DoModal() == IDOK)
|
||
|
{
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hServers.m_hList);
|
||
|
int idx = Tcp_ListBox_InsertString(m_hServers.m_hList,
|
||
|
-1,
|
||
|
m_strNewIpAddress.c_str());
|
||
|
Assert(idx>=0);
|
||
|
if (idx >= 0)
|
||
|
{
|
||
|
PageModified();
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hServers.m_hList, idx);
|
||
|
SetButtons(m_hServers, (m_pAdapterInfo->m_fIsRasFakeAdapter) ? MAX_RAS_DNS_SERVER : -1);
|
||
|
|
||
|
// empty strings, this removes the saved address from RemoveIP
|
||
|
m_strNewIpAddress = L"";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// release dialog object
|
||
|
delete pDlgSrv;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnEditServer(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_fEditState = TRUE;
|
||
|
|
||
|
Assert(Tcp_ListBox_GetCount(m_hServers.m_hList));
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hServers.m_hList);
|
||
|
Assert(idx >= 0);
|
||
|
|
||
|
CServerDialog * pDlgSrv = new CServerDialog(this,
|
||
|
g_aHelpIDs_IDD_DNS_SERVER,
|
||
|
idx);
|
||
|
|
||
|
|
||
|
// save off the removed address and delete if from the listbox
|
||
|
if (idx >= 0)
|
||
|
{
|
||
|
WCHAR buf[IP_LIMIT];
|
||
|
|
||
|
Assert(Tcp_ListBox_GetTextLen(m_hServers.m_hList, idx) < celems(buf));
|
||
|
Tcp_ListBox_GetText(m_hServers.m_hList, idx, buf);
|
||
|
|
||
|
m_strNewIpAddress = buf; // used by dialog to display what to edit
|
||
|
|
||
|
if (pDlgSrv->DoModal() == IDOK)
|
||
|
{
|
||
|
// replace the item in the listview with the new information
|
||
|
Tcp_ListBox_DeleteString(m_hServers.m_hList, idx);
|
||
|
|
||
|
PageModified();
|
||
|
|
||
|
m_strMovingEntry = m_strNewIpAddress;
|
||
|
ListBoxInsertAfter(m_hServers.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hServers.m_hList, idx);
|
||
|
|
||
|
m_strNewIpAddress = buf; // restore the original removed address
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// empty strings, this removes the saved address from RemoveIP
|
||
|
m_strNewIpAddress = L"";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
delete pDlgSrv;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnRemoveServer(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hServers.m_hList);
|
||
|
|
||
|
Assert(idx >=0);
|
||
|
|
||
|
if (idx >=0)
|
||
|
{
|
||
|
WCHAR buf[IP_LIMIT];
|
||
|
|
||
|
Assert(Tcp_ListBox_GetTextLen(m_hServers.m_hList, idx) < celems(buf));
|
||
|
Tcp_ListBox_GetText(m_hServers.m_hList, idx, buf);
|
||
|
|
||
|
m_strNewIpAddress = buf;
|
||
|
Tcp_ListBox_DeleteString(m_hServers.m_hList, idx);
|
||
|
|
||
|
PageModified();
|
||
|
|
||
|
// select a new item
|
||
|
int nCount;
|
||
|
|
||
|
if ((nCount = Tcp_ListBox_GetCount(m_hServers.m_hList)) != LB_ERR)
|
||
|
{
|
||
|
// select the previous item in the list
|
||
|
if (idx)
|
||
|
--idx;
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hServers.m_hList, idx);
|
||
|
}
|
||
|
SetButtons(m_hServers, (m_pAdapterInfo->m_fIsRasFakeAdapter) ? MAX_RAS_DNS_SERVER : -1);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnServerUp(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
Assert(m_hServers.m_hList);
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hServers.m_hList);
|
||
|
|
||
|
Assert(nCount);
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hServers.m_hList);
|
||
|
|
||
|
Assert(idx != 0);
|
||
|
|
||
|
if (ListBoxRemoveAt(m_hServers.m_hList, idx, &m_strMovingEntry) == FALSE)
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
--idx;
|
||
|
PageModified();
|
||
|
ListBoxInsertAfter(m_hServers.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hServers.m_hList, idx);
|
||
|
|
||
|
SetButtons(m_hServers, (m_pAdapterInfo->m_fIsRasFakeAdapter) ? MAX_RAS_DNS_SERVER : -1);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnDnsDomain(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch (wNotifyCode)
|
||
|
{
|
||
|
case EN_CHANGE:
|
||
|
// update second memory with what's in the controls
|
||
|
WCHAR szBuf[DOMAIN_LIMIT + 1];
|
||
|
::GetWindowText(GetDlgItem(IDC_DNS_DOMAIN), szBuf, celems(szBuf));
|
||
|
if (m_pAdapterInfo->m_strDnsDomain != szBuf)
|
||
|
PageModified();
|
||
|
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnServerDown(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
Assert(m_hServers.m_hList);
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hServers.m_hList);
|
||
|
|
||
|
Assert(nCount);
|
||
|
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hServers.m_hList);
|
||
|
--nCount;
|
||
|
|
||
|
Assert(idx != nCount);
|
||
|
|
||
|
if (ListBoxRemoveAt(m_hServers.m_hList, idx, &m_strMovingEntry) == FALSE)
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
++idx;
|
||
|
PageModified();
|
||
|
|
||
|
ListBoxInsertAfter(m_hServers.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
Tcp_ListBox_SetCurSel(m_hServers.m_hList, idx);
|
||
|
|
||
|
SetButtons(m_hServers, (m_pAdapterInfo->m_fIsRasFakeAdapter) ? MAX_RAS_DNS_SERVER : -1);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// DNS domain search related controls
|
||
|
LRESULT CTcpDnsPage::OnSearchDomain(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch(wNotifyCode)
|
||
|
{
|
||
|
case BN_CLICKED:
|
||
|
case BN_DOUBLECLICKED:
|
||
|
|
||
|
if (::IsWindowEnabled(m_hSuffix.m_hList))
|
||
|
{
|
||
|
PageModified();
|
||
|
|
||
|
// Update in memory structure
|
||
|
FreeCollectionAndItem(m_pglb->m_vstrDnsSuffixList);
|
||
|
|
||
|
// delete all items from the list
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
while (nCount>0)
|
||
|
{
|
||
|
Tcp_ListBox_DeleteString(m_hSuffix.m_hList, 0);
|
||
|
nCount --;
|
||
|
}
|
||
|
EnableSuffixGroup(FALSE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_SEARCH_PARENT_DOMAIN), TRUE);
|
||
|
}
|
||
|
break;
|
||
|
} // switch
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnSearchParentDomain(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch(wNotifyCode)
|
||
|
{
|
||
|
case BN_CLICKED:
|
||
|
case BN_DOUBLECLICKED:
|
||
|
|
||
|
PageModified();
|
||
|
break;
|
||
|
} // switch
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnAddressRegister(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch(wNotifyCode)
|
||
|
{
|
||
|
case BN_CLICKED:
|
||
|
case BN_DOUBLECLICKED:
|
||
|
|
||
|
// Bug #266461 need disable and uncheck IDC_DNS_NAME_REG
|
||
|
// if IDC_DNS_ADDR_REG is unchecked
|
||
|
if(!IsDlgButtonChecked(IDC_DNS_ADDR_REG))
|
||
|
{
|
||
|
CheckDlgButton(IDC_DNS_NAME_REG, FALSE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_NAME_REG), FALSE);
|
||
|
}
|
||
|
else
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_NAME_REG), TRUE);
|
||
|
|
||
|
PageModified();
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnDomainNameRegister(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch(wNotifyCode)
|
||
|
{
|
||
|
case BN_CLICKED:
|
||
|
case BN_DOUBLECLICKED:
|
||
|
|
||
|
PageModified();
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnUseSuffix(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch(wNotifyCode)
|
||
|
{
|
||
|
case BN_CLICKED:
|
||
|
case BN_DOUBLECLICKED:
|
||
|
|
||
|
if (!::IsWindowEnabled(m_hSuffix.m_hList))
|
||
|
{
|
||
|
PageModified();
|
||
|
EnableSuffixGroup(TRUE);
|
||
|
CheckDlgButton(IDC_DNS_SEARCH_PARENT_DOMAIN, FALSE);
|
||
|
::EnableWindow(GetDlgItem(IDC_DNS_SEARCH_PARENT_DOMAIN), FALSE);
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
} // switch
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnAddSuffix(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_fEditState = FALSE;
|
||
|
|
||
|
CSuffixDialog * pDlgSuffix = new CSuffixDialog(this, g_aHelpIDs_IDD_DNS_SUFFIX);
|
||
|
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
|
||
|
if (pDlgSuffix->DoModal() == IDOK)
|
||
|
{
|
||
|
nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
int idx = Tcp_ListBox_InsertString(m_hSuffix.m_hList,
|
||
|
-1,
|
||
|
m_strNewSuffix.c_str());
|
||
|
|
||
|
PageModified();
|
||
|
|
||
|
Assert(idx >= 0);
|
||
|
|
||
|
if (idx >= 0)
|
||
|
{
|
||
|
Tcp_ListBox_SetCurSel(m_hSuffix.m_hList, idx);
|
||
|
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
m_strNewSuffix =L"";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
delete pDlgSuffix;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnEditSuffix(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_fEditState = TRUE;
|
||
|
|
||
|
Assert(Tcp_ListBox_GetCount(m_hSuffix.m_hList));
|
||
|
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hSuffix.m_hList);
|
||
|
Assert(idx >= 0);
|
||
|
|
||
|
CSuffixDialog * pDlgSuffix = new CSuffixDialog(this,
|
||
|
g_aHelpIDs_IDD_DNS_SUFFIX,
|
||
|
idx);
|
||
|
|
||
|
// save off the removed address and delete if from the listview
|
||
|
if (idx >= 0)
|
||
|
{
|
||
|
WCHAR buf[SUFFIX_LIMIT];
|
||
|
|
||
|
if (Tcp_ListBox_GetTextLen(m_hSuffix.m_hList, idx) >= celems(buf))
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
Tcp_ListBox_GetText(m_hSuffix.m_hList, idx, buf);
|
||
|
|
||
|
m_strNewSuffix = buf;
|
||
|
|
||
|
if (pDlgSuffix->DoModal() == IDOK)
|
||
|
{
|
||
|
// replace the item in the listview with the new information
|
||
|
|
||
|
Tcp_ListBox_DeleteString(m_hSuffix.m_hList, idx);
|
||
|
PageModified();
|
||
|
|
||
|
m_strMovingEntry = m_strNewSuffix;
|
||
|
ListBoxInsertAfter(m_hSuffix.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hSuffix.m_hList, idx);
|
||
|
|
||
|
m_strNewSuffix = buf; // save off old address
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// empty strings, this removes the saved address from RemoveIP
|
||
|
m_strNewSuffix = L"";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
delete pDlgSuffix;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnRemoveSuffix(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hSuffix.m_hList);
|
||
|
|
||
|
Assert(idx >=0);
|
||
|
|
||
|
if (idx >=0)
|
||
|
{
|
||
|
WCHAR buf[SUFFIX_LIMIT];
|
||
|
|
||
|
if(Tcp_ListBox_GetTextLen(m_hSuffix.m_hList, idx) >= celems(buf))
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
Tcp_ListBox_GetText(m_hSuffix.m_hList, idx, buf);
|
||
|
|
||
|
m_strNewSuffix = buf;
|
||
|
Tcp_ListBox_DeleteString(m_hSuffix.m_hList, idx);
|
||
|
PageModified();
|
||
|
|
||
|
// select a new item
|
||
|
int nCount;
|
||
|
if ((nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList)) != LB_ERR)
|
||
|
|
||
|
if(nCount != LB_ERR)
|
||
|
{
|
||
|
// select the previous item in the list
|
||
|
if (idx)
|
||
|
--idx;
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hSuffix.m_hList, idx);
|
||
|
}
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnSuffixUp(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
Assert(m_hSuffix.m_hList);
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
|
||
|
Assert(nCount);
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hSuffix.m_hList);
|
||
|
|
||
|
Assert(idx != 0);
|
||
|
|
||
|
if (ListBoxRemoveAt(m_hSuffix.m_hList, idx, &m_strMovingEntry) == FALSE)
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
--idx;
|
||
|
PageModified();
|
||
|
ListBoxInsertAfter(m_hSuffix.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(m_hSuffix.m_hList, idx);
|
||
|
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnSuffixDown(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
Assert(m_hSuffix.m_hList);
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hSuffix.m_hList);
|
||
|
|
||
|
Assert(nCount);
|
||
|
int idx = Tcp_ListBox_GetCurSel(m_hSuffix.m_hList);
|
||
|
--nCount;
|
||
|
|
||
|
Assert(idx != nCount);
|
||
|
|
||
|
if (ListBoxRemoveAt(m_hSuffix.m_hList, idx, &m_strMovingEntry) == FALSE)
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
++idx;
|
||
|
PageModified();
|
||
|
|
||
|
ListBoxInsertAfter(m_hSuffix.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
Tcp_ListBox_SetCurSel(m_hSuffix.m_hList, idx);
|
||
|
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnServerList(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch (wNotifyCode)
|
||
|
{
|
||
|
case LBN_SELCHANGE:
|
||
|
SetButtons(m_hServers, (m_pAdapterInfo->m_fIsRasFakeAdapter) ? MAX_RAS_DNS_SERVER : -1);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CTcpDnsPage::OnSuffixList(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch (wNotifyCode)
|
||
|
{
|
||
|
case LBN_SELCHANGE:
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void CTcpDnsPage::EnableSuffixGroup(BOOL fEnable)
|
||
|
{
|
||
|
::EnableWindow(m_hSuffix.m_hList, fEnable);
|
||
|
|
||
|
if (fEnable)
|
||
|
{
|
||
|
SetButtons(m_hSuffix, DNS_MAX_SEARCH_LIST_ENTRIES);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
::EnableWindow(m_hSuffix.m_hAdd, fEnable);
|
||
|
::EnableWindow(m_hSuffix.m_hEdit, fEnable);
|
||
|
::EnableWindow(m_hSuffix.m_hRemove, fEnable);
|
||
|
::EnableWindow(m_hSuffix.m_hUp, fEnable);
|
||
|
::EnableWindow(m_hSuffix.m_hDown, fEnable);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// CServerDialog
|
||
|
//
|
||
|
|
||
|
CServerDialog::CServerDialog(CTcpDnsPage * pTcpDnsPage,
|
||
|
const DWORD * adwHelpIDs,
|
||
|
int iIndex)
|
||
|
{
|
||
|
m_pParentDlg = pTcpDnsPage;
|
||
|
m_hButton = 0;
|
||
|
m_adwHelpIDs = adwHelpIDs;
|
||
|
m_iIndex = iIndex;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnInitDialog(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
// change the ok button to add if we are not editing
|
||
|
if (m_pParentDlg->m_fEditState == FALSE)
|
||
|
SetDlgItemText(IDOK, m_pParentDlg->m_strAddServer.c_str());
|
||
|
|
||
|
m_ipAddress.Create(m_hWnd, IDC_DNS_CHANGE_SERVER);
|
||
|
m_ipAddress.SetFieldRange(0, c_iIPADDR_FIELD_1_LOW, c_iIPADDR_FIELD_1_HIGH);
|
||
|
|
||
|
// if editing an ip address fill the controls with the current information
|
||
|
// if removing an ip address save it and fill the add dialog with it next time
|
||
|
HWND hList = ::GetDlgItem(m_pParentDlg->m_hWnd, IDC_DNS_SERVER_LIST);
|
||
|
RECT rect;
|
||
|
|
||
|
::GetWindowRect(hList, &rect);
|
||
|
SetWindowPos(NULL, rect.left, rect.top, 0,0,
|
||
|
SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
|
||
|
|
||
|
m_hButton = GetDlgItem(IDOK);
|
||
|
|
||
|
// add the address that was just removed
|
||
|
if (m_pParentDlg->m_strNewIpAddress.size())
|
||
|
{
|
||
|
m_ipAddress.SetAddress(m_pParentDlg->m_strNewIpAddress.c_str());
|
||
|
::EnableWindow(m_hButton, TRUE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pParentDlg->m_strNewIpAddress = L"";
|
||
|
::EnableWindow(m_hButton, FALSE);
|
||
|
}
|
||
|
|
||
|
::SetFocus(m_ipAddress);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnContextMenu(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnHelp(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
|
||
|
Assert(lphi);
|
||
|
|
||
|
if (HELPINFO_WINDOW == lphi->iContextType)
|
||
|
{
|
||
|
ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP,
|
||
|
m_adwHelpIDs);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnChange(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
if (m_ipAddress.IsBlank())
|
||
|
::EnableWindow(m_hButton, FALSE);
|
||
|
else
|
||
|
::EnableWindow(m_hButton, TRUE);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnOk(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
tstring strIp;
|
||
|
m_ipAddress.GetAddress(&strIp);
|
||
|
|
||
|
// Validate
|
||
|
if (!FIsIpInRange(strIp.c_str()))
|
||
|
{
|
||
|
// makes ip address lose focus so the control gets
|
||
|
// IPN_FIELDCHANGED notification
|
||
|
// also makes it consistent for when short-cut is used
|
||
|
::SetFocus(m_hButton);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//check whether this is a duplicate
|
||
|
int indexDup = Tcp_ListBox_FindStrExact(m_pParentDlg->m_hServers.m_hList, strIp.c_str());
|
||
|
if (indexDup != LB_ERR && indexDup != m_iIndex)
|
||
|
{
|
||
|
NcMsgBox(m_hWnd,
|
||
|
IDS_MSFT_TCP_TEXT,
|
||
|
IDS_DUP_DNS_SERVER,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK,
|
||
|
strIp.c_str());
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (m_pParentDlg->m_fEditState == FALSE)
|
||
|
{
|
||
|
// Get the current address from the control and
|
||
|
// add them to the adapter if valid
|
||
|
m_pParentDlg->m_strNewIpAddress = strIp;
|
||
|
|
||
|
EndDialog(IDOK);
|
||
|
}
|
||
|
else // see if either changed
|
||
|
{
|
||
|
if (strIp != m_pParentDlg->m_strNewIpAddress)
|
||
|
m_pParentDlg->m_strNewIpAddress = strIp; // update save addresses
|
||
|
else
|
||
|
EndDialog(IDCANCEL);
|
||
|
}
|
||
|
|
||
|
EndDialog(IDOK);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnCancel(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
EndDialog(IDCANCEL);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Purpose: Ensure the mouse cursor over the dialog is an Arrow.
|
||
|
//
|
||
|
LRESULT CServerDialog::OnSetCursor (
|
||
|
UINT uMsg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam,
|
||
|
BOOL& bHandled)
|
||
|
{
|
||
|
if (LOWORD(lParam) == HTCLIENT)
|
||
|
{
|
||
|
SetCursor(LoadCursor(NULL, IDC_ARROW));
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CServerDialog::OnIpFieldChange(int idCtrl, LPNMHDR pnmh,
|
||
|
BOOL& fHandled)
|
||
|
{
|
||
|
LPNMIPADDRESS lpnmipa = (LPNMIPADDRESS) pnmh;
|
||
|
int iLow = c_iIpLow;
|
||
|
int iHigh = c_iIpHigh;
|
||
|
|
||
|
if (0==lpnmipa->iField)
|
||
|
{
|
||
|
iLow = c_iIPADDR_FIELD_1_LOW;
|
||
|
iHigh = c_iIPADDR_FIELD_1_HIGH;
|
||
|
};
|
||
|
|
||
|
IpCheckRange(lpnmipa, m_hWnd, iLow, iHigh);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// CSuffixDialog
|
||
|
//
|
||
|
|
||
|
// iIndex - the index of the current suffix in the suffix list, default value
|
||
|
// is -1, which means new suffix
|
||
|
CSuffixDialog::CSuffixDialog(CTcpDnsPage * pTcpDnsPage,
|
||
|
const DWORD * adwHelpIDs,
|
||
|
int iIndex)
|
||
|
{
|
||
|
m_pParentDlg = pTcpDnsPage;
|
||
|
m_hButton = 0;
|
||
|
m_adwHelpIDs = adwHelpIDs;
|
||
|
m_iIndex = iIndex;
|
||
|
}
|
||
|
|
||
|
LRESULT CSuffixDialog::OnInitDialog(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
// change the ok button to add if we are not editing
|
||
|
if (m_pParentDlg->m_fEditState == FALSE)
|
||
|
SetDlgItemText(IDOK, m_pParentDlg->m_strAddSuffix.c_str());
|
||
|
|
||
|
// Set the position of the pop up dialog to be right over the listbox
|
||
|
// on parent dialog
|
||
|
HWND hList = ::GetDlgItem(m_pParentDlg->m_hWnd, IDC_DNS_SUFFIX_LIST);
|
||
|
RECT rect;
|
||
|
|
||
|
::GetWindowRect(hList, &rect);
|
||
|
SetWindowPos(NULL, rect.left, rect.top, 0,0,
|
||
|
SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
|
||
|
|
||
|
// Save handles to the "Ok" button and the edit box
|
||
|
m_hButton = GetDlgItem(IDOK);
|
||
|
m_hEdit = GetDlgItem(IDC_DNS_CHANGE_SUFFIX);
|
||
|
|
||
|
// suffixes have a 255 character limit
|
||
|
::SendMessage(m_hEdit, EM_SETLIMITTEXT, SUFFIX_LIMIT, 0);
|
||
|
|
||
|
// add the address that was just removed
|
||
|
if (m_pParentDlg->m_strNewSuffix.size())
|
||
|
{
|
||
|
::SetWindowText(m_hEdit, m_pParentDlg->m_strNewSuffix.c_str());
|
||
|
::SendMessage(m_hEdit, EM_SETSEL, 0, -1);
|
||
|
::EnableWindow(m_hButton, TRUE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pParentDlg->m_strNewSuffix = L"";
|
||
|
::EnableWindow(m_hButton, FALSE);
|
||
|
}
|
||
|
|
||
|
::SetFocus(m_hEdit);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
LRESULT CSuffixDialog::OnContextMenu(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CSuffixDialog::OnHelp(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
|
||
|
Assert(lphi);
|
||
|
|
||
|
if (HELPINFO_WINDOW == lphi->iContextType)
|
||
|
{
|
||
|
ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP,
|
||
|
m_adwHelpIDs);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CSuffixDialog::OnChange(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
WCHAR buf[2];
|
||
|
|
||
|
// Enable or disable the "Ok" button
|
||
|
// based on whether the edit box is empty
|
||
|
if (::GetWindowText(m_hEdit, buf, celems(buf)) == 0)
|
||
|
::EnableWindow(m_hButton, FALSE);
|
||
|
else
|
||
|
::EnableWindow(m_hButton, TRUE);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CSuffixDialog::OnOk(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
WCHAR szSuffix[SUFFIX_LIMIT];
|
||
|
|
||
|
// Get the current address from the control and
|
||
|
// add them to the adapter if valid
|
||
|
::GetWindowText(m_hEdit, szSuffix, SUFFIX_LIMIT);
|
||
|
|
||
|
DNS_STATUS status;
|
||
|
|
||
|
status = DnsValidateName(szSuffix, DnsNameDomain);
|
||
|
|
||
|
if (ERROR_INVALID_NAME == status ||
|
||
|
DNS_ERROR_INVALID_NAME_CHAR == status)
|
||
|
{
|
||
|
TraceTag(ttidTcpip,"Invalid Domain Suffix");
|
||
|
|
||
|
NcMsgBox(::GetActiveWindow(),
|
||
|
IDS_MSFT_TCP_TEXT,
|
||
|
IDS_INVALID_SUFFIX,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
|
||
|
|
||
|
::SetFocus(m_hEdit);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//check whether this is a duplicate
|
||
|
int indexDup = Tcp_ListBox_FindStrExact(m_pParentDlg->m_hSuffix.m_hList, szSuffix);
|
||
|
if (indexDup != LB_ERR && indexDup != m_iIndex)
|
||
|
{
|
||
|
NcMsgBox(m_hWnd,
|
||
|
IDS_MSFT_TCP_TEXT,
|
||
|
IDS_DUP_DNS_SUFFIX,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK,
|
||
|
szSuffix);
|
||
|
|
||
|
::SetFocus(m_hEdit);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (m_pParentDlg->m_fEditState == FALSE) // Add new address
|
||
|
{
|
||
|
m_pParentDlg->m_strNewSuffix = szSuffix;
|
||
|
}
|
||
|
else // see if either changed
|
||
|
{
|
||
|
if(m_pParentDlg->m_strNewSuffix != szSuffix)
|
||
|
m_pParentDlg->m_strNewSuffix = szSuffix; // update save addresses
|
||
|
else
|
||
|
EndDialog(IDCANCEL);
|
||
|
}
|
||
|
|
||
|
EndDialog(IDOK);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CSuffixDialog::OnCancel(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
EndDialog(IDCANCEL);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Purpose: Ensure the mouse cursor over the dialog is an Arrow.
|
||
|
//
|
||
|
LRESULT CSuffixDialog::OnSetCursor (
|
||
|
UINT uMsg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam,
|
||
|
BOOL& bHandled)
|
||
|
{
|
||
|
if (LOWORD(lParam) == HTCLIENT)
|
||
|
{
|
||
|
SetCursor(LoadCursor(NULL, IDC_ARROW));
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|