/**********************************************************************/ /** 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; dwIndexGetMmPolicyInfo(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; }