#include "ClusterConnectPage.h" #include "LeftView.h" #include "CommonUtils.h" #include "CommonNLB.h" #include "MWmiError.h" #include "IpSubnetMaskControl.h" #include "MIPAddress.h" #include "ResourceString.h" BEGIN_MESSAGE_MAP( ClusterConnectPage, CPropertyPage ) ON_WM_CONTEXTMENU() ON_WM_HELPINFO() END_MESSAGE_MAP() ClusterConnectPage::ClusterConnectPage( ClusterData* clusterData, CWnd* parent ) : CPropertyPage( IDD ), DataSinkI(), m_clusterData( clusterData ), myParent( parent ), dataStore(L" ") {} void ClusterConnectPage::DoDataExchange( CDataExchange* pDX ) { CPropertyPage::DoDataExchange( pDX ); DDX_Control( pDX, IDC_CLUSTER_IP, clusterIP); DDX_Control( pDX, IDC_CLUSTER_MEMBER, clusterMemberName ); DDX_Control( pDX, IDC_CLUSTER_CONNECTION_STATUS, connectionStatus ); } void ClusterConnectPage::OnOK() { CPropertyPage::OnOK(); } BOOL ClusterConnectPage::OnKillActive() { // clear the old status if any. dataStore = L" "; // get cluster ip. // _bstr_t clusterIPAddress = CommonUtils::getCIPAddressCtrlString( clusterIP ); // validate this ip. bool isIPValid = MIPAddress::checkIfValid( clusterIPAddress ); if( isIPValid == false ) { // invalid ip. dataSink( GETRESOURCEIDSTRING( IDS_WARNING_IP_INVALID ) + clusterIPAddress ); CPropertyPage::OnCancel(); return 0; } // get member of this cluster // _bstr_t clusterMember = CommonUtils::getCIPAddressCtrlString( clusterMemberName ); // validate this ip. isIPValid = MIPAddress::checkIfValid( clusterMember ); if( isIPValid == false ) { // invalid ip. dataSink( GETRESOURCEIDSTRING( IDS_WARNING_IP_INVALID ) + clusterMember ); CPropertyPage::OnCancel(); return 0; } // the member ip should not be the cluster ip. if( clusterMember == clusterIPAddress ) { // cluster ip and member are same. // This is not allowed. // invalid ip. dataSink( GETRESOURCEIDSTRING( IDS_WARNING_CL_CONN_SAME ) ); CPropertyPage::OnCancel(); return 0; } // check if this cluster already exists in view, but ensure that pointer is valid. if( myParent != 0 ) { bool isClusterDuplicate = ( (LeftView * )myParent)->doesClusterExistInView( clusterIPAddress ); if( isClusterDuplicate == true ) { dataSink( clusterIPAddress + L":" + GETRESOURCEIDSTRING (IDS_CLUSTER_ALREADY ) ); CPropertyPage::OnCancel(); return 0; } } try { CommonNLB::connectToClusterDirect( clusterIPAddress, clusterMember, m_clusterData, this ); } catch( _com_error e ) { _bstr_t errText; GetErrorCodeText( e.Error(), errText ); dataSink( errText ); CPropertyPage::OnCancel(); return 0; } return CPropertyPage::OnKillActive(); } BOOL ClusterConnectPage::OnInitDialog() { /* Limit the zeroth field of the dedicated IP address between 1 and 223. */ CPropertyPage::OnInitDialog(); // fill in cluster ip but only if not null. // if( m_clusterData->cp.cIP != _bstr_t( L"0.0.0.0" ) ) { CommonUtils::fillCIPAddressCtrlString( clusterIP, m_clusterData->cp.cIP ); // fill in machine ip list. // connect to each host. map<_bstr_t, HostData >::iterator top; for( top = m_clusterData->hosts.begin(); top != m_clusterData->hosts.end(); ++top ) { // just use the first hosts connection ip. CommonUtils::fillCIPAddressCtrlString( clusterMemberName, (*top).second.connectionIP ); break; } } return TRUE; } void ClusterConnectPage::dataSink( _bstr_t data ) { dataStore += data; dataStore += L"\r\n"; connectionStatus.SetWindowText( dataStore ); UpdateWindow(); } BOOL ClusterConnectPage::OnHelpInfo (HELPINFO* helpInfo ) { if( helpInfo->iContextType == HELPINFO_WINDOW ) { ::WinHelp( static_cast ( helpInfo->hItemHandle ), CVY_CTXT_HELP_FILE, HELP_WM_HELP, (ULONG_PTR ) g_aHelpIDs_IDD_CLUSTER_CONNECT_PAGE ); } return TRUE; } void ClusterConnectPage::OnContextMenu( CWnd* pWnd, CPoint point ) { ::WinHelp( m_hWnd, CVY_CTXT_HELP_FILE, HELP_CONTEXTMENU, (ULONG_PTR ) g_aHelpIDs_IDD_CLUSTER_CONNECT_PAGE ); }