You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
205 lines
6.7 KiB
205 lines
6.7 KiB
#include "precomp.h"
|
|
#pragma hdrstop
|
|
#include "private.h"
|
|
#include "PortsPage.h"
|
|
#include "PortsCtrl.h"
|
|
#include "portsctrl.tmh"
|
|
|
|
using namespace std;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPortsCtrl dialog
|
|
|
|
CPortsCtrl::CPortsCtrl(ENGINEHANDLE ehClusterOrInterfaceId,
|
|
NLB_EXTENDED_CLUSTER_CONFIGURATION * pNlbCfg,
|
|
bool fIsClusterLevel,
|
|
CWnd * pParent /*=NULL*/)
|
|
:CDialog(CPortsCtrl::IDD, pParent),
|
|
m_ehClusterOrInterfaceId( ehClusterOrInterfaceId ),
|
|
m_isClusterLevel( fIsClusterLevel ),
|
|
m_pNlbCfg( pNlbCfg ),
|
|
m_sort_column( 0 ),
|
|
m_sort_ascending( true)
|
|
{
|
|
|
|
}
|
|
|
|
void CPortsCtrl::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST_PORT_RULE, m_portList);
|
|
DDX_Control(pDX, IDC_BUTTON_ENABLE, m_Enable);
|
|
DDX_Control(pDX, IDC_BUTTON_DISABLE, m_Disable);
|
|
DDX_Control(pDX, IDC_BUTTON_DRAIN, m_Drain);
|
|
DDX_Control(pDX, IDOK, m_Close);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CPortsCtrl, CDialog)
|
|
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_PORT_RULE, OnColumnClick)
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_PORT_RULE, OnSelchanged )
|
|
ON_BN_CLICKED(IDC_BUTTON_ENABLE, OnEnable)
|
|
ON_BN_CLICKED(IDC_BUTTON_DISABLE, OnDisable)
|
|
ON_BN_CLICKED(IDC_BUTTON_DRAIN, OnDrain)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPortsCtrl message handlers
|
|
|
|
BOOL CPortsCtrl::OnInitDialog()
|
|
{
|
|
TRACE_INFO(L"-> %!FUNC!");
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
// Add column headers & form port rule list
|
|
PortListUtils::LoadFromNlbCfg(m_pNlbCfg, REF m_portList, m_isClusterLevel, FALSE);
|
|
|
|
// If the number of port rules is zero, then, gray out the enable, disable & drain buttons
|
|
if (m_portList.GetItemCount() == 0)
|
|
{
|
|
m_Enable.EnableWindow(FALSE);
|
|
m_Disable.EnableWindow(FALSE);
|
|
m_Drain.EnableWindow(FALSE);
|
|
}
|
|
else // there is one or more port rules
|
|
{
|
|
// selection the first item in list.
|
|
m_portList.SetItemState( 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );
|
|
}
|
|
|
|
TRACE_INFO(L"<- %!FUNC! returns TRUE");
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
}
|
|
|
|
|
|
void CPortsCtrl::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
PortListUtils::OnColumnClick((LPNMLISTVIEW) pNMHDR,
|
|
REF m_portList,
|
|
m_isClusterLevel,
|
|
REF m_sort_ascending,
|
|
REF m_sort_column);
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CPortsCtrl::OnSelchanged(NMHDR* pNMHDR, LRESULT * pResult)
|
|
{
|
|
TRACE_INFO(L"-> %!FUNC!");
|
|
// If no port rule is selected, then gray out the enable, disable and drain buttons.
|
|
if (m_portList.GetFirstSelectedItemPosition() == NULL)
|
|
{
|
|
m_Enable.EnableWindow(FALSE);
|
|
m_Disable.EnableWindow(FALSE);
|
|
m_Drain.EnableWindow(FALSE);
|
|
}
|
|
else // a port rule is selected, check if the enable, disable, drain buttons are grayed out. If they are, enable them
|
|
{
|
|
if (m_Enable.IsWindowEnabled() == FALSE)
|
|
{
|
|
m_Enable.EnableWindow(TRUE);
|
|
m_Disable.EnableWindow(TRUE);
|
|
m_Drain.EnableWindow(TRUE);
|
|
}
|
|
}
|
|
/*
|
|
LPNMLISTVIEW lv = (LPNMLISTVIEW)pNMHDR;
|
|
TRACE_INFO(L"%!FUNC! iItem : %d", lv->iItem);
|
|
TRACE_INFO(L"%!FUNC! iSubItem : %d", lv->iSubItem);
|
|
TRACE_INFO(L"%!FUNC! uNewState : %u", lv->uNewState);
|
|
TRACE_INFO(L"%!FUNC! uOldState : %u", lv->uOldState);
|
|
TRACE_INFO(L"%!FUNC! uChanged : %u", lv->uChanged);
|
|
*/
|
|
|
|
*pResult = 0;
|
|
TRACE_INFO(L"<- %!FUNC!");
|
|
return;
|
|
}
|
|
|
|
void CPortsCtrl::OnEnable()
|
|
{
|
|
CWaitCursor wait;
|
|
|
|
SetDlgItemText(IDC_OPER_STATUS_TEXT, GETRESOURCEIDSTRING(IDS_INFO_ENABLING_PORTS));
|
|
mfn_DoPortControlOperation(WLBS_PORT_ENABLE);
|
|
SetDlgItemText(IDC_OPER_STATUS_TEXT, GETRESOURCEIDSTRING(IDS_INFO_DONE));
|
|
|
|
return;
|
|
}
|
|
|
|
void CPortsCtrl::OnDisable()
|
|
{
|
|
CWaitCursor wait;
|
|
|
|
SetDlgItemText(IDC_OPER_STATUS_TEXT, GETRESOURCEIDSTRING(IDS_INFO_DISABLING_PORTS));
|
|
mfn_DoPortControlOperation(WLBS_PORT_DISABLE);
|
|
SetDlgItemText(IDC_OPER_STATUS_TEXT, GETRESOURCEIDSTRING(IDS_INFO_DONE));
|
|
return;
|
|
}
|
|
|
|
void CPortsCtrl::OnDrain()
|
|
{
|
|
CWaitCursor wait;
|
|
|
|
SetDlgItemText(IDC_OPER_STATUS_TEXT, GETRESOURCEIDSTRING(IDS_INFO_DRAINING_PORTS));
|
|
mfn_DoPortControlOperation(WLBS_PORT_DRAIN);
|
|
SetDlgItemText(IDC_OPER_STATUS_TEXT, GETRESOURCEIDSTRING(IDS_INFO_DONE));
|
|
return;
|
|
}
|
|
|
|
NLBERROR CPortsCtrl::mfn_DoPortControlOperation(WLBS_OPERATION_CODES Opcode)
|
|
{
|
|
CString szVipArray[WLBS_MAX_RULES], szTemp;
|
|
DWORD pdwStartPortArray[WLBS_MAX_RULES];
|
|
DWORD dwNumOfPortRules;
|
|
|
|
POSITION pos = m_portList.GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
{
|
|
return NLBERR_INTERNAL_ERROR;
|
|
}
|
|
|
|
// Loop thru the selected port rules and get the VIP & Start Port
|
|
dwNumOfPortRules = 0;
|
|
do
|
|
{
|
|
int index = m_portList.GetNextSelectedItem(REF pos);
|
|
|
|
// Get VIP, Note : 0 is the column index for VIP
|
|
szVipArray[dwNumOfPortRules] = m_portList.GetItemText( index, 0 );
|
|
|
|
// Check for "All Vip" and replace "All" with "255.255.255.255"
|
|
if (!lstrcmpi(szVipArray[dwNumOfPortRules], GETRESOURCEIDSTRING(IDS_REPORT_VIP_ALL)))
|
|
{
|
|
szVipArray[dwNumOfPortRules] = CVY_DEF_ALL_VIP;
|
|
}
|
|
|
|
// Get Start Port, Note : 1 is the column index for Start Port
|
|
szTemp = m_portList.GetItemText( index, 1);
|
|
pdwStartPortArray[dwNumOfPortRules] = _wtol(szTemp);
|
|
|
|
++dwNumOfPortRules;
|
|
}
|
|
while (pos);
|
|
|
|
if (m_isClusterLevel)
|
|
{
|
|
return gEngine.ControlClusterOnCluster(m_ehClusterOrInterfaceId,
|
|
Opcode,
|
|
szVipArray,
|
|
pdwStartPortArray,
|
|
dwNumOfPortRules);
|
|
}
|
|
else
|
|
{
|
|
return gEngine.ControlClusterOnInterface(m_ehClusterOrInterfaceId,
|
|
Opcode,
|
|
szVipArray,
|
|
pdwStartPortArray,
|
|
dwNumOfPortRules,
|
|
TRUE
|
|
);
|
|
}
|
|
|
|
return NLBERR_INTERNAL_ERROR;
|
|
}
|
|
|