/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 -99 **/ /**********************************************************************/ /* ipadddlg.cpp Comment goes here FILE HISTORY: */ #include "stdafx.h" #include "winssnap.h" #include "IPAddDlg.h" #include "getipadd.h" #include "getnetbi.h" #include // for CGetComputer #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // Get replication trigger partner BOOL CGetTriggerPartner::OnInitDialog() { CIPAddressDlg::OnInitDialog(); CString strText; strText.LoadString(IDS_SELECT_TRIGGER_PARTNER_TITLE); // Set the title of the dialog SetWindowText(strText); // set the description text strText.LoadString(IDS_SELECT_TRIGGER_PARTNER); m_staticDescription.SetWindowText(strText); return TRUE; } // add WINS server dialog BOOL CNewWinsServer::DoExtraValidation() { // check to see if the server is in the list BOOL fIsIpInList = m_pRootHandler->IsIPInList(m_spRootNode, m_dwServerIp); BOOL fIsNameInList = m_pRootHandler->IsServerInList(m_spRootNode, m_strServerName); if (fIsIpInList && fIsNameInList) { CThemeContextActivator themeActivator; m_editServerName.SetFocus(); m_editServerName.SetSel(0, -1); AfxMessageBox(IDS_ERR_WINS_EXISTS, MB_OK); return FALSE; } return TRUE; } // add Persona Non Grata dialog BOOL CNewPersonaNonGrata::DoExtraValidation() { CThemeContextActivator themeActivator; // check if the server already exists if (m_pRepPropDlg->IsDuplicate(m_strServerName)) { m_editServerName.SetFocus(); m_editServerName.SetSel(0,-1); AfxMessageBox(IDS_ERR_WINS_EXISTS, MB_OK|MB_ICONINFORMATION); return FALSE; } // check the same server is being added if (m_pRepPropDlg->IsCurrentServer(m_strServerName)) { m_editServerName.SetFocus(); m_editServerName.SetSel(0,-1); AfxMessageBox(IDS_LOCALSERVER, MB_OK | MB_ICONINFORMATION); return FALSE; } return TRUE; } // add new replication partner dialog BOOL CNewReplicationPartner::OnInitDialog() { CIPAddressDlg::OnInitDialog(); CString strText; strText.LoadString(IDS_NEW_REPLICATION_PARTNER_TITLE); // Set the title of the dialog SetWindowText(strText); strText.LoadString(IDS_NEW_REPLICATION_PARTNER_DESC); m_staticDescription.SetWindowText(strText); return TRUE; } BOOL CNewReplicationPartner::DoExtraValidation() { // check if the same servers is being added as a rep partner SPITFSNode spServerNode; m_spRepPartNode->GetParent(&spServerNode); CWinsServerHandler *pServer = GETHANDLER(CWinsServerHandler, spServerNode); CThemeContextActivator themeActivator; CString strThisServerName = pServer->m_strServerAddress; DWORD dwThisServerIP = pServer->m_dwIPAdd; if ( (m_dwServerIp == dwThisServerIP) && (m_strServerName.CompareNoCase(strThisServerName) == 0)) { //The server is already present as replication partner AfxMessageBox(IDS_REP_PARTNER_LOCAL, MB_OK); m_editServerName.SetFocus(); m_editServerName.SetSel(0,-1); return FALSE; } CIpNamePair ip; ip.SetIpAddress(m_dwServerIp); ip.SetNetBIOSName(m_strServerName); // check if the server already exists in the // list of replication folderss if ( m_pRepPartHandler->IsInList(ip, TRUE) != -1) { //The server is already present as replication partner AfxMessageBox(IDS_REP_PARTNER_EXISTS, MB_OK); m_editServerName.SetFocus(); m_editServerName.SetSel(0,-1); return FALSE; } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CIPAddressDlg dialog CIPAddressDlg::CIPAddressDlg(CWnd* pParent /*=NULL*/) : CBaseDialog(CIPAddressDlg::IDD, pParent), m_fNameRequired(TRUE) { //{{AFX_DATA_INIT(CIPAddressDlg) m_strNameOrIp = _T(""); //}}AFX_DATA_INIT } void CIPAddressDlg::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIPAddressDlg) DDX_Control(pDX, IDC_STATIC_WINS_SERVER_DESC, m_staticDescription); DDX_Control(pDX, IDC_EDIT_SERVER_NAME, m_editServerName); DDX_Control(pDX, IDOK, m_buttonOK); DDX_Text(pDX, IDC_EDIT_SERVER_NAME, m_strNameOrIp); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CIPAddressDlg, CBaseDialog) //{{AFX_MSG_MAP(CIPAddressDlg) ON_EN_CHANGE(IDC_EDIT_SERVER_NAME, OnChangeEditServerName) ON_BN_CLICKED(IDC_BUTTON_BROWSE_COMPUTERS, OnButtonBrowseComputers) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CIPAddressDlg message handlers void CIPAddressDlg::OnOK() { UpdateData(); m_strNameOrIp.TrimLeft(); m_strNameOrIp.TrimRight(); if(m_strNameOrIp.IsEmpty()) return; // resolve the IP address, if not valid, return if (!ValidateIPAddress()) { // set back the focus to the IP address control m_editServerName.SetFocus(); m_editServerName.SetSel(0,-1); return; } CBaseDialog::OnOK(); } BOOL CIPAddressDlg::ValidateIPAddress() { CString strAddress; BOOL fIp = FALSE; DWORD err = ERROR_SUCCESS; BOOL bCheck = FALSE; DWORD dwAddress; CString strServerName; CThemeContextActivator themeActivator; strAddress = m_strNameOrIp; if (IsValidAddress(strAddress, &fIp, TRUE, TRUE)) { // if not an IP adress, check if FQDN has been entered, if so // pass the letters before the first period if(!fIp) { int nPos = strAddress.Find(_T(".")); if(nPos != -1) { CString strNetBIOSName = strAddress.Left(nPos); strAddress = strNetBIOSName; } } CWinsServerObj ws(NULL,"", TRUE, TRUE); strAddress.MakeUpper(); // machine name specified if (fIp) ws = CWinsServerObj(CIpAddress(strAddress), "", TRUE, TRUE); // IP address specified else { ws = CWinsServerObj(CIpAddress(), strAddress, TRUE, TRUE); } BEGIN_WAIT_CURSOR err = ::VerifyWinsServer(strAddress, strServerName, dwAddress); END_WAIT_CURSOR if (err != ERROR_SUCCESS) { // The server isn't running wins. Ask user for name/ip. if (fIp && m_fNameRequired) { CGetNetBIOSNameDlg dlgGetNB(&ws); if (dlgGetNB.DoModal() == IDCANCEL) { return FALSE; } } else if (!fIp) { CGetIpAddressDlg dlgGetIP(&ws); if (dlgGetIP.DoModal() == IDCANCEL) { return FALSE; } } m_dwServerIp = (LONG) ws.QueryIpAddress(); m_strServerName = ws.GetNetBIOSName(); m_strServerName.MakeUpper(); } else { m_dwServerIp = dwAddress; m_strServerName = strServerName; } ::MakeIPAddress(m_dwServerIp, m_strServerIp); return DoExtraValidation(); } else { AfxMessageBox(IDS_SERVER_NO_EXIST, MB_OK); // set focus to the IP address comntrol m_editServerName.SetFocus(); m_editServerName.SetSel(0,-1); return FALSE; } return bCheck; } BOOL CIPAddressDlg::OnInitDialog() { CBaseDialog::OnInitDialog(); // limit the length of the edit ctrl m_editServerName.SetLimitText(MAX_PATH); // set the focus to the IP address control m_editServerName.SetFocus(); return TRUE; } void CIPAddressDlg::OnChangeEditServerName() { // set the ok button state here if(m_editServerName.GetWindowTextLength() == 0) m_buttonOK.EnableWindow(FALSE); else m_buttonOK.EnableWindow(TRUE); } void CIPAddressDlg::OnButtonBrowseComputers() { CGetComputer dlgGetComputer; if (!dlgGetComputer.GetComputer(::FindMMCMainWindow())) return; m_editServerName.SetWindowText(dlgGetComputer.m_strComputerName); }