402 lines
9.7 KiB
C++
402 lines
9.7 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 2002 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
Servpp.h
|
|
Server properties implementation file
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "mmfltrpp.h"
|
|
#include "mmauthpp.h"
|
|
#include "spdutil.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CMmFilterProperties holder
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
CMmFilterProperties::CMmFilterProperties
|
|
(
|
|
ITFSNode * pNode,
|
|
IComponentData * pComponentData,
|
|
ITFSComponentData * pTFSCompData,
|
|
CMmFilterInfo * 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);
|
|
AddPageToList((CPropertyPageBase*) &m_pageAuth);
|
|
|
|
Assert(pTFSCompData != NULL);
|
|
m_spTFSCompData.Set(pTFSCompData);
|
|
|
|
m_spSpdInfo.Set(pSpdInfo);
|
|
|
|
m_FltrInfo = *pFilterInfo;
|
|
|
|
//$REVIEW there is very remote possibility that this routin will fail:
|
|
m_spSpdInfo->GetMmAuthMethodsInfoByGuid(m_FltrInfo.m_guidAuthID, &m_AuthMethods);
|
|
m_pageAuth.InitData(&m_AuthMethods);
|
|
|
|
m_bTheme = TRUE;
|
|
}
|
|
|
|
CMmFilterProperties::~CMmFilterProperties()
|
|
{
|
|
RemovePageFromList((CPropertyPageBase*) &m_pageGeneral, FALSE);
|
|
RemovePageFromList((CPropertyPageBase*) &m_pageAuth, FALSE);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMmFilterGenProp property page
|
|
|
|
IMPLEMENT_DYNCREATE(CMmFilterGenProp, CPropertyPageBase)
|
|
|
|
CMmFilterGenProp::CMmFilterGenProp() : CPropertyPageBase(CMmFilterGenProp::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CMmFilterGenProp)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CMmFilterGenProp::~CMmFilterGenProp()
|
|
{
|
|
}
|
|
|
|
void CMmFilterGenProp::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPageBase::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CMmFilterGenProp)
|
|
DDX_Control(pDX, IDC_MM_LIST_SPECIFIC, m_listSpecificFilters);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CMmFilterGenProp, CPropertyPageBase)
|
|
//{{AFX_MSG_MAP(CMmFilterGenProp)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMmFilterGenProp message handlers
|
|
|
|
BOOL CMmFilterGenProp::OnInitDialog()
|
|
{
|
|
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 CMmFilterGenProp::PopulateFilterInfo()
|
|
{
|
|
CString st;
|
|
CString stMask;
|
|
|
|
CMmFilterProperties * pFltrProp;
|
|
CMmFilterInfo * pFltrInfo;
|
|
|
|
pFltrProp = (CMmFilterProperties *) GetHolder();
|
|
Assert(pFltrProp);
|
|
|
|
pFltrProp->GetFilterInfo(&pFltrInfo);
|
|
|
|
int iIdAddr = IDC_MM_FLTR_SRC_ADDR;
|
|
BOOL fUseEditForAddr = FALSE;
|
|
BOOL fHideMask = FALSE;
|
|
BOOL fDnsAddr = FALSE;
|
|
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, &fDnsAddr);
|
|
if (fDnsAddr)
|
|
{
|
|
fUseEditForAddr = TRUE;
|
|
fHideMask = TRUE;
|
|
}
|
|
else
|
|
{
|
|
stMask = c_szSingleAddressMask;
|
|
IpToString(pFltrInfo->m_SrcAddr.uIpAddr, &st);
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case IP_ADDR_DNS_SERVER:
|
|
case IP_ADDR_WINS_SERVER:
|
|
case IP_ADDR_DHCP_SERVER:
|
|
case IP_ADDR_DEFAULT_GATEWAY:
|
|
AddressToString(pFltrInfo->m_SrcAddr, &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, &stMask);
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (fHideMask)
|
|
{
|
|
GetDlgItem(IDC_MM_FLTR_SRC_MASK)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_MM_STATIC_SRC_MASK)->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_MM_FLTR_SRC_MASK)->SetWindowText(stMask);
|
|
}
|
|
|
|
if (fUseEditForAddr)
|
|
{
|
|
iIdAddr = IDC_MM_FLTR_SRC_ADDR_EDIT;
|
|
GetDlgItem(IDC_MM_FLTR_SRC_ADDR)->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
iIdAddr = IDC_MM_FLTR_SRC_ADDR;
|
|
GetDlgItem(IDC_MM_FLTR_SRC_ADDR_EDIT)->ShowWindow(SW_HIDE);
|
|
}
|
|
|
|
GetDlgItem(iIdAddr)->SetWindowText(st);
|
|
|
|
//now populate the destination info
|
|
iIdAddr = IDC_MM_FLTR_DEST_ADDR;
|
|
fUseEditForAddr = FALSE;
|
|
fHideMask = FALSE;
|
|
fDnsAddr = FALSE;
|
|
st = _T("");
|
|
stMask= _T("");
|
|
|
|
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, &fDnsAddr);
|
|
if (fDnsAddr)
|
|
{
|
|
fUseEditForAddr = TRUE;
|
|
fHideMask = TRUE;
|
|
}
|
|
else
|
|
{
|
|
stMask = c_szSingleAddressMask;
|
|
IpToString(pFltrInfo->m_DesAddr.uIpAddr, &st);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IP_ADDR_DNS_SERVER:
|
|
case IP_ADDR_WINS_SERVER:
|
|
case IP_ADDR_DHCP_SERVER:
|
|
case IP_ADDR_DEFAULT_GATEWAY:
|
|
AddressToString(pFltrInfo->m_DesAddr, &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_MM_FLTR_DEST_MASK)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_MM_STATIC_DEST_MASK)->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_MM_FLTR_DEST_MASK)->SetWindowText(stMask);
|
|
}
|
|
|
|
if (fUseEditForAddr)
|
|
{
|
|
iIdAddr = IDC_MM_FLTR_DEST_ADDR_EDIT;
|
|
GetDlgItem(IDC_MM_FLTR_DEST_ADDR)->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
iIdAddr = IDC_MM_FLTR_DEST_ADDR;
|
|
GetDlgItem(IDC_MM_FLTR_DEST_ADDR_EDIT)->ShowWindow(SW_HIDE);
|
|
}
|
|
|
|
GetDlgItem(iIdAddr)->SetWindowText(st);
|
|
//we are done with the destination address now
|
|
|
|
InterfaceTypeToString(pFltrInfo->m_InterfaceType, &st);
|
|
GetDlgItem(IDC_MM_FLTR_IF_TYPE)->SetWindowText(st);
|
|
|
|
BoolToString(pFltrInfo->m_bCreateMirror, &st);
|
|
GetDlgItem(IDC_MM_FLTR_MIRROR)->SetWindowText(st);
|
|
|
|
SPISpdInfo spSpdInfo;
|
|
pFltrProp->GetSpdInfo(&spSpdInfo);
|
|
|
|
DWORD dwNumPol,dwIndex;
|
|
st = pFltrInfo->m_stPolicyName;
|
|
dwNumPol = spSpdInfo->GetMmPolicyCount();
|
|
for(dwIndex=0; dwIndex<dwNumPol; dwIndex++)
|
|
{
|
|
CMmPolicyInfo MmPol;
|
|
if(ERROR_SUCCESS == spSpdInfo->GetMmPolicyInfo(dwIndex, &MmPol))
|
|
{
|
|
if(IsEqualGUID(MmPol.m_guidID, pFltrInfo->m_guidPolicyID) &&
|
|
(MmPol.m_dwFlags & IPSEC_MM_POLICY_DEFAULT_POLICY) )
|
|
{
|
|
AfxFormatString1(st, IDS_POL_DEFAULT, (LPCTSTR) pFltrInfo->m_stPolicyName);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
GetDlgItem(IDC_MM_FLTR_POLICY)->SetWindowText(st);
|
|
}
|
|
|
|
void CMmFilterGenProp::LoadSpecificFilters()
|
|
{
|
|
CMmFilterProperties * pFltrProp;
|
|
CMmFilterInfo * pFltrInfo;
|
|
CMmFilterInfoArray arraySpFilters;
|
|
|
|
int nWidth;
|
|
int nRows;
|
|
CString st;
|
|
|
|
|
|
pFltrProp = (CMmFilterProperties *) GetHolder();
|
|
|
|
SPISpdInfo spSpdInfo;
|
|
pFltrProp->GetSpdInfo(&spSpdInfo);
|
|
|
|
pFltrProp->GetFilterInfo(&pFltrInfo);
|
|
spSpdInfo->EnumMmSpecificFilters(
|
|
&pFltrInfo->m_guidFltr,
|
|
&arraySpFilters
|
|
);
|
|
|
|
|
|
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_FILTER_PP_COL_WEIGHT);
|
|
nWidth = m_listSpecificFilters.GetStringWidth((LPCTSTR)st) + 20;
|
|
m_listSpecificFilters.InsertColumn(3, 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);
|
|
|
|
st.Format(_T("%d"), arraySpFilters[i]->m_dwWeight);
|
|
m_listSpecificFilters.SetItemText(nRows, 3, st);
|
|
|
|
m_listSpecificFilters.SetItemData(nRows, i);
|
|
}
|
|
nRows++;
|
|
}
|
|
|
|
::FreeItemsAndEmptyArray(arraySpFilters);
|
|
|
|
if ( nRows > 0 )
|
|
{
|
|
//select the first item
|
|
m_listSpecificFilters.SetFocus();
|
|
m_listSpecificFilters.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
|
|
}
|
|
|
|
BOOL CMmFilterGenProp::OnApply()
|
|
{
|
|
if (!IsDirty())
|
|
return TRUE;
|
|
|
|
UpdateData();
|
|
|
|
//TODO
|
|
//Do nothing at this time
|
|
|
|
//CPropertyPageBase::OnApply();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CMmFilterGenProp::OnPropertyChange(BOOL bScope, LONG_PTR *ChangeMask)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|