windows-nt/Source/XPSP1/NT/net/mmc/ipsecmon/fltrpp.cpp
2020-09-26 16:20:57 +08:00

390 lines
9 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
Servpp.h
Server properties implementation file
FILE HISTORY:
*/
#include "stdafx.h"
#include "fltrpp.h"
#include "spdutil.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//
// CFilterProperties holder
//
/////////////////////////////////////////////////////////////////////////////
CFilterProperties::CFilterProperties
(
ITFSNode * pNode,
IComponentData * pComponentData,
ITFSComponentData * pTFSCompData,
CFilterInfo * pFilterInfo,
ISpdInfo * pSpdInfo,
LPCTSTR pszSheetName
) : CPropertyPageHolderBase(pNode, pComponentData, pszSheetName)
{
//ASSERT(pFolderNode == GetContainerNode());
m_bAutoDeletePages = FALSE; // we have the pages as embedded members
AddPageToList((CPropertyPageBase*) &m_pageGeneral);
Assert(pTFSCompData != NULL);
m_spTFSCompData.Set(pTFSCompData);
m_spSpdInfo.Set(pSpdInfo);
m_FltrInfo = *pFilterInfo;
}
CFilterProperties::~CFilterProperties()
{
RemovePageFromList((CPropertyPageBase*) &m_pageGeneral, FALSE);
}
/////////////////////////////////////////////////////////////////////////////
// CFilterGenProp property page
IMPLEMENT_DYNCREATE(CFilterGenProp, CPropertyPageBase)
CFilterGenProp::CFilterGenProp() : CPropertyPageBase(CFilterGenProp::IDD)
{
//{{AFX_DATA_INIT(CFilterGenProp)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CFilterGenProp::~CFilterGenProp()
{
}
void CFilterGenProp::DoDataExchange(CDataExchange* pDX)
{
CPropertyPageBase::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFilterGenProp)
DDX_Control(pDX, IDC_LIST_SPECIFIC, m_listSpecificFilters);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFilterGenProp, CPropertyPageBase)
//{{AFX_MSG_MAP(CFilterGenProp)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilterGenProp message handlers
BOOL CFilterGenProp::OnInitDialog()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPropertyPageBase::OnInitDialog();
PopulateFilterInfo();
LoadSpecificFilters();
SetDirty(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFilterGenProp::PopulateFilterInfo()
{
CString st;
CString stMask;
CFilterProperties * pFltrProp;
CFilterInfo * pFltrInfo;
pFltrProp = (CFilterProperties *) GetHolder();
Assert(pFltrProp);
pFltrProp->GetFilterInfo(&pFltrInfo);
BOOL fSrcIsName = FALSE;
BOOL fHideMask = FALSE;
BOOL fUseEditForAddr = FALSE;
int iIDSrcAddr = IDC_FLTR_SRC_ADDR;
switch (pFltrInfo->m_SrcAddr.AddrType)
{
case IP_ADDR_UNIQUE:
if (IP_ADDRESS_ME == pFltrInfo->m_SrcAddr.uIpAddr)
{
st.LoadString(IDS_ADDR_ME);
fHideMask = TRUE;
}
else
{
AddressToString(pFltrInfo->m_SrcAddr, &st, &fSrcIsName);
if (fSrcIsName)
{
fUseEditForAddr = TRUE;
fHideMask = TRUE;
}
else
{
stMask = c_szSingleAddressMask;
IpToString(pFltrInfo->m_SrcAddr.uIpAddr, &st);
}
}
break;
case IP_ADDR_SUBNET:
if (SUBNET_ADDRESS_ANY == pFltrInfo->m_SrcAddr.uSubNetMask)
{
st.LoadString(IDS_ADDR_ANY);
fHideMask = TRUE;
}
else
{
IpToString(pFltrInfo->m_SrcAddr.uIpAddr, &st);
IpToString(pFltrInfo->m_SrcAddr.uSubNetMask, &st);
}
break;
}
//Populate the SRC info to the controls now
if (fHideMask)
{
GetDlgItem(IDC_FLTR_SRC_MASK)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_SRC_MASK)->ShowWindow(SW_HIDE);
}
else
{
GetDlgItem(IDC_FLTR_SRC_MASK)->SetWindowText(stMask);
}
if (fUseEditForAddr)
{
iIDSrcAddr = IDC_FLTR_SRC_ADDR_EDIT;
GetDlgItem(IDC_FLTR_SRC_ADDR)->ShowWindow(SW_HIDE);
}
else
{
iIDSrcAddr = IDC_FLTR_SRC_ADDR;
GetDlgItem(IDC_FLTR_SRC_ADDR_EDIT)->ShowWindow(SW_HIDE);
}
GetDlgItem(iIDSrcAddr)->SetWindowText(st);
//Start handling the destination now
BOOL fDestDns = FALSE;
int iIDDestAddr = IDC_FLTR_DEST_ADDR;
fUseEditForAddr = FALSE;
fHideMask = FALSE;
st.Empty();
stMask.Empty();
switch (pFltrInfo->m_DesAddr.AddrType)
{
case IP_ADDR_UNIQUE:
if (IP_ADDRESS_ME == pFltrInfo->m_DesAddr.uIpAddr)
{
st.LoadString(IDS_ADDR_ME);
fHideMask = TRUE;
}
else
{
AddressToString(pFltrInfo->m_DesAddr, &st, &fDestDns);
if (fDestDns)
{
fHideMask = TRUE;
fUseEditForAddr = TRUE;
}
else
{
stMask = c_szSingleAddressMask;
IpToString(pFltrInfo->m_DesAddr.uIpAddr, &st);
}
}
break;
case IP_ADDR_SUBNET:
if (SUBNET_ADDRESS_ANY == pFltrInfo->m_DesAddr.uSubNetMask)
{
st.LoadString(IDS_ADDR_ANY);
fHideMask = TRUE;
}
else
{
IpToString(pFltrInfo->m_DesAddr.uIpAddr, &st);
IpToString(pFltrInfo->m_DesAddr.uSubNetMask, &stMask);
}
break;
}
if (fHideMask)
{
GetDlgItem(IDC_FLTR_DEST_MASK)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DEST_MASK)->ShowWindow(SW_HIDE);
}
else
{
GetDlgItem(IDC_FLTR_DEST_MASK)->SetWindowText(stMask);
}
if (fUseEditForAddr)
{
GetDlgItem(IDC_FLTR_DEST_ADDR)->ShowWindow(SW_HIDE);
iIDDestAddr = IDC_FLTR_DEST_ADDR_EDIT;
}
else
{
GetDlgItem(IDC_FLTR_DEST_ADDR_EDIT)->ShowWindow(SW_HIDE);
iIDDestAddr = IDC_FLTR_DEST_ADDR;
}
GetDlgItem(iIDDestAddr)->SetWindowText(st);
//We are done with the destination now
PortToString(pFltrInfo->m_SrcPort, &st);
GetDlgItem(IDC_FLTR_SRC_PORT)->SetWindowText(st);
PortToString(pFltrInfo->m_DesPort, &st);
GetDlgItem(IDC_FLTR_DEST_PORT)->SetWindowText(st);
FilterFlagToString(pFltrInfo->m_InboundFilterFlag, &st);
GetDlgItem(IDC_FLTR_IN_FLAG)->SetWindowText(st);
FilterFlagToString(pFltrInfo->m_OutboundFilterFlag, &st);
GetDlgItem(IDC_FLTR_OUT_FLAG)->SetWindowText(st);
ProtocolToString(pFltrInfo->m_Protocol, &st);
GetDlgItem(IDC_FLTR_PROTOCOL)->SetWindowText(st);
InterfaceTypeToString(pFltrInfo->m_InterfaceType, &st);
GetDlgItem(IDC_FLTR_IF_TYPE)->SetWindowText(st);
BoolToString(pFltrInfo->m_bCreateMirror, &st);
GetDlgItem(IDC_FLTR_MIRROR)->SetWindowText(st);
st = pFltrInfo->m_stPolicyName;
GetDlgItem(IDC_FLTR_POLICY)->SetWindowText(st);
}
void CFilterGenProp::LoadSpecificFilters()
{
CFilterProperties * pFltrProp;
CFilterInfo * pFltrInfo;
CFilterInfoArray arraySpFilters;
int nWidth;
int nRows;
CString st;
pFltrProp = (CFilterProperties *) GetHolder();
SPISpdInfo spSpdInfo;
pFltrProp->GetSpdInfo(&spSpdInfo);
pFltrProp->GetFilterInfo(&pFltrInfo);
spSpdInfo->EnumSpecificFilters(
&pFltrInfo->m_guidFltr,
&arraySpFilters,
pFltrInfo->m_FilterType
);
nWidth = m_listSpecificFilters.GetStringWidth(_T("555.555.555.555 - "));
st.LoadString(IDS_FILTER_PP_COL_SRC);
m_listSpecificFilters.InsertColumn(0, st, LVCFMT_LEFT, nWidth);
nWidth = m_listSpecificFilters.GetStringWidth(_T("555.555.555.555 - "));
st.LoadString(IDS_FILTER_PP_COL_DEST);
m_listSpecificFilters.InsertColumn(1, st, LVCFMT_LEFT, nWidth);
st.LoadString(IDS_FLTR_DIR_OUT);
nWidth = m_listSpecificFilters.GetStringWidth((LPCTSTR)st) + 20;
st.LoadString(IDS_FILTER_PP_COL_DIRECTION);
m_listSpecificFilters.InsertColumn(2, st, LVCFMT_LEFT, nWidth);
st.LoadString(IDS_NEG_SEC);
nWidth = m_listSpecificFilters.GetStringWidth(st) + 20;
st.LoadString(IDS_FILTER_PP_COL_FLAG);
m_listSpecificFilters.InsertColumn(3, st, LVCFMT_LEFT, nWidth);
st.LoadString(IDS_FILTER_PP_COL_WEIGHT);
nWidth = m_listSpecificFilters.GetStringWidth((LPCTSTR)st) + 20;
m_listSpecificFilters.InsertColumn(4, st, LVCFMT_LEFT, nWidth);
nRows = 0;
for (int i = 0; i < arraySpFilters.GetSize(); i++)
{
nRows = m_listSpecificFilters.InsertItem(nRows, _T(""));
if (-1 != nRows)
{
AddressToString(arraySpFilters[i]->m_SrcAddr, &st);
m_listSpecificFilters.SetItemText(nRows, 0, st);
AddressToString(arraySpFilters[i]->m_DesAddr, &st);
m_listSpecificFilters.SetItemText(nRows, 1, st);
DirectionToString(arraySpFilters[i]->m_dwDirection, &st);
m_listSpecificFilters.SetItemText(nRows, 2, st);
FilterFlagToString((FILTER_DIRECTION_INBOUND == arraySpFilters[i]->m_dwDirection) ?
arraySpFilters[i]->m_InboundFilterFlag :
arraySpFilters[i]->m_OutboundFilterFlag,
&st
);
m_listSpecificFilters.SetItemText(nRows, 3, st);
st.Format(_T("%d"), arraySpFilters[i]->m_dwWeight);
m_listSpecificFilters.SetItemText(nRows, 4, st);
m_listSpecificFilters.SetItemData(nRows, i);
}
nRows++;
}
::FreeItemsAndEmptyArray(arraySpFilters);
}
BOOL CFilterGenProp::OnApply()
{
if (!IsDirty())
return TRUE;
UpdateData();
//TODO
//Do nothing at this time
//CPropertyPageBase::OnApply();
return TRUE;
}
BOOL CFilterGenProp::OnPropertyChange(BOOL bScope, LONG_PTR *ChangeMask)
{
return FALSE;
}