|
|
//============================================================================
// Copyright(c) 1996, Microsoft Corporation
//
// File: ipadd.cpp
//
// History:
// 08/30/96 Ram Cherala Created
//
// Implementation of IP Filter Add/Edit dialog code
//============================================================================
#include "stdafx.h"
#include "rtrfiltr.h"
#include "ipfltr.h"
#include "ipadd.h"
extern "C" { #include <winsock.h>
#include <fltdefs.h>
#include <iprtinfo.h>
} #include "ipaddr.h"
#include "rtradmin.hm"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
static enum { PROTOCOL_TCP = 0, PROTOCOL_TCP_ESTABLISHED, PROTOCOL_UDP, PROTOCOL_ICMP, PROTOCOL_ANY, PROTOCOL_OTHER, };
static UINT g_aPROTOCOLS[][2] = { {IDS_PROTOCOL_TCP, PROTOCOL_TCP}, {IDS_PROTOCOL_TCP_ESTABLISHED, PROTOCOL_TCP_ESTABLISHED}, {IDS_PROTOCOL_UDP, PROTOCOL_UDP}, {IDS_PROTOCOL_ICMP, PROTOCOL_ICMP}, {IDS_PROTOCOL_ANY, PROTOCOL_ANY}, {IDS_PROTOCOL_OTHER, PROTOCOL_OTHER}, };
#define IDS_ICMP_ECHO 1
#define IDS_ICMP_REDIRECT 2
#if 0
// TODO sample ICMP types - need to update with actual list
static UINT g_aICMPTYPE[][2] = { {1, IDS_ICMP_ECHO}, {2, IDS_ICMP_REDIRECT} }; #endif
HRESULT MultiEnableWindow(HWND hWndParent, BOOL fEnable, UINT first, ...) { UINT nCtrlId = first; HWND hWndCtrl; va_list marker;
va_start(marker, first);
while (nCtrlId != 0) { hWndCtrl = ::GetDlgItem(hWndParent, nCtrlId); Assert(hWndCtrl); if (hWndCtrl) ::EnableWindow(hWndCtrl, fEnable);
// get the next item
nCtrlId = va_arg(marker, UINT); }
va_end(marker);
return hrOK; }
/////////////////////////////////////////////////////////////////////////////
// CIpFltrAddEdit dialog
CIpFltrAddEdit::CIpFltrAddEdit(CWnd* pParent, FilterListEntry ** ppFilterEntry, DWORD dwFilterType) : CBaseDialog(CIpFltrAddEdit::IDD, pParent), m_ppFilterEntry( ppFilterEntry ), m_dwFilterType ( dwFilterType ) { //{{AFX_DATA_INIT(CIpFltrAddEdit)
m_sProtocol = _T(""); m_sSrcPort = _T(""); m_sDstPort = _T(""); //}}AFX_DATA_INIT
// SetHelpMap(m_dwHelpMap);
}
void CIpFltrAddEdit::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIpFltrAddEdit)
DDX_Control(pDX, IDC_AEIP_ST_DEST_PORT, m_stDstPort); DDX_Control(pDX, IDC_AEIP_ST_SRC_PORT, m_stSrcPort); DDX_Control(pDX, IDC_AEIP_CB_SRC_PORT, m_cbSrcPort); DDX_Control(pDX, IDC_AEIP_CB_DEST_PORT, m_cbDstPort); DDX_Control(pDX, IDC_AEIP_CB_PROTOCOL, m_cbProtocol); DDX_CBString(pDX, IDC_AEIP_CB_PROTOCOL, m_sProtocol); DDV_MaxChars(pDX, m_sProtocol, 32); DDX_CBString(pDX, IDC_AEIP_CB_SRC_PORT, m_sSrcPort); DDV_MaxChars(pDX, m_sSrcPort, 16); DDX_CBString(pDX, IDC_AEIP_CB_DEST_PORT, m_sDstPort); DDV_MaxChars(pDX, m_sDstPort, 16); DDX_Check(pDX, IDC_AEIP_CB_SOURCE, m_bSrc); DDX_Check(pDX, IDC_AEIP_CB_DEST, m_bDst); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIpFltrAddEdit, CBaseDialog) //{{AFX_MSG_MAP(CIpFltrAddEdit)
ON_CBN_SELCHANGE(IDC_AEIP_CB_PROTOCOL, OnSelchangeProtocol) ON_BN_CLICKED(IDC_AEIP_CB_SOURCE, OnCbSourceClicked) ON_BN_CLICKED(IDC_AEIP_CB_DEST, OnCbDestClicked) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
DWORD CIpFltrAddEdit::m_dwHelpMap[] = { // IDC_AEIP_ST_SOURCE, HIDC_AEIP_ST_SOURCE,
// IDC_AEIP_CB_SOURCE, HIDC_AEIP_CB_SOURCE,
// IDC_AEIP_ST_SOURCE_ADDRESS, HIDC_AEIP_ST_SOURCE_ADDRESS,
// IDC_AEIP_EB_SOURCE_ADDRESS, HIDC_AEIP_EB_SOURCE_ADDRESS,
// IDC_AEIP_ST_SOURCE_MASK, HIDC_AEIP_ST_SOURCE_MASK,
// IDC_AEIP_EB_SOURCE_MASK, HIDC_AEIP_EB_SOURCE_MASK,
// IDC_AEIP_ST_DEST, HIDC_AEIP_ST_DEST,
// IDC_AEIP_CB_DEST, HIDC_AEIP_CB_DEST,
// IDC_AEIP_ST_DEST_ADDRESS, HIDC_AEIP_ST_DEST_ADDRESS,
// IDC_AEIP_EB_DEST_ADDRESS, HIDC_AEIP_EB_DEST_ADDRESS,
// IDC_AEIP_ST_DEST_MASK, HIDC_AEIP_ST_DEST_MASK,
// IDC_AEIP_EB_DEST_MASK, HIDC_AEIP_EB_DEST_MASK,
// IDC_AEIP_ST_PROTOCOL, HIDC_AEIP_ST_PROTOCOL,
// IDC_AEIP_CB_PROTOCOL, HIDC_AEIP_CB_PROTOCOL,
// IDC_AEIP_ST_SRC_PORT, HIDC_AEIP_ST_SRC_PORT,
// IDC_AEIP_CB_SRC_PORT, HIDC_AEIP_CB_SRC_PORT,
// IDC_AEIP_ST_DEST_PORT, HIDC_AEIP_ST_DEST_PORT,
// IDC_AEIP_CB_DEST_PORT, HIDC_AEIP_CB_DEST_PORT,
0,0, };
/////////////////////////////////////////////////////////////////////////////
// CIpFltrAddEdit message handlers
//-----------------------------------------------------------------------------
// Function: CIpFltrAddEdit::OnSelchangeProtocol
//
// Handles 'CBN_SELCHANGE' notification from Protocols combo box
//------------------------------------------------------------------------------
void CIpFltrAddEdit::OnSelchangeProtocol() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CWnd * hWnd; CString cStr;
// if tcp or udp, then enable src/dest port
// if icmp, rename strings and enable type/code
// if Other enable src port
// if Any disable everything
switch(QueryCurrentProtocol()) { case PROTOCOL_TCP: case PROTOCOL_TCP_ESTABLISHED: case PROTOCOL_UDP: VERIFY(cStr.LoadString(IDS_SRC_PORT)); m_stSrcPort.SetWindowText(cStr); VERIFY(cStr.LoadString(IDS_DST_PORT)); m_stDstPort.SetWindowText(cStr); m_cbSrcPort.ShowWindow(SW_SHOW); m_cbDstPort.ShowWindow(SW_SHOW); m_stSrcPort.ShowWindow(SW_SHOW); m_stDstPort.ShowWindow(SW_SHOW); break;
case PROTOCOL_ICMP: VERIFY(cStr.LoadString(IDS_ICMP_TYPE)); m_stSrcPort.SetWindowText(cStr); VERIFY(cStr.LoadString(IDS_ICMP_CODE)); m_stDstPort.SetWindowText(cStr); m_cbSrcPort.ShowWindow(SW_SHOW); m_cbDstPort.ShowWindow(SW_SHOW); m_stSrcPort.ShowWindow(SW_SHOW); m_stDstPort.ShowWindow(SW_SHOW); break;
case PROTOCOL_ANY: m_cbSrcPort.ShowWindow(SW_HIDE); m_cbDstPort.ShowWindow(SW_HIDE); VERIFY(hWnd = GetDlgItem(IDC_AEIP_ST_SRC_PORT)); hWnd->ShowWindow(SW_HIDE); VERIFY(hWnd = GetDlgItem(IDC_AEIP_ST_DEST_PORT)); hWnd->ShowWindow(SW_HIDE); break;
case PROTOCOL_OTHER: VERIFY(cStr.LoadString(IDS_OTHER_PROTOCOL)); m_stSrcPort.SetWindowText(cStr); m_cbSrcPort.ShowWindow(SW_SHOW); m_stSrcPort.ShowWindow(SW_SHOW); m_cbDstPort.ShowWindow(SW_HIDE); VERIFY(hWnd = GetDlgItem(IDC_AEIP_ST_DEST_PORT)); hWnd->ShowWindow(SW_HIDE); break; } }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::OnInitDialog
//
// Handles 'WM_INITDIALOG' notification from the dialog
//------------------------------------------------------------------------------
BOOL CIpFltrAddEdit::OnInitDialog() { AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString st; CBaseDialog::OnInitDialog();
// determine if a new filter is being added or if an
// existing filter is being modified.
m_bEdit = ( *m_ppFilterEntry != NULL );
st.LoadString(m_bEdit ? IDS_IP_EDIT_FILTER : IDS_IP_ADD_FILTER); SetWindowText(st);
// create the IP controls
m_ipSrcAddress.Create(m_hWnd, IDC_AEIP_EB_SOURCE_ADDRESS); m_ipSrcMask.Create(m_hWnd, IDC_AEIP_EB_SOURCE_MASK); IpAddr_ForceContiguous((HWND) m_ipSrcMask); m_ipDstAddress.Create(m_hWnd, IDC_AEIP_EB_DEST_ADDRESS); m_ipDstMask.Create(m_hWnd, IDC_AEIP_EB_DEST_MASK); IpAddr_ForceContiguous((HWND) m_ipDstMask);
// disable IP controls by default
CheckDlgButton(IDC_AEIP_CB_SOURCE, FALSE); OnCbSourceClicked(); CheckDlgButton(IDC_AEIP_CB_DEST, FALSE); OnCbDestClicked();
CString sProtocol;
// fill up the protocol combo box with list of protocols
UINT count = sizeof(g_aPROTOCOLS)/sizeof(g_aPROTOCOLS[0]); for ( UINT i = 0; i < count; i++ ) { sProtocol.LoadString(g_aPROTOCOLS[i][0]); UINT item = m_cbProtocol.AddString(sProtocol); m_cbProtocol.SetItemData(item, g_aPROTOCOLS[i][1]); if( g_aPROTOCOLS[i][1] == PROTOCOL_ANY ) { m_cbProtocol.SetCurSel(item); } }
// Fill in the controls if the user is editing a filter
if(m_bEdit) { FilterListEntry * pfle = *m_ppFilterEntry;
if( pfle->dwSrcAddr == 0 && pfle->dwSrcMask == 0 ) { m_bSrc = FALSE; CheckDlgButton( IDC_AEIP_CB_SOURCE, 0); } else { m_bSrc = TRUE; CheckDlgButton( IDC_AEIP_CB_SOURCE, 1); m_ipSrcAddress.SetAddress(INET_NTOA(pfle->dwSrcAddr)); m_ipSrcMask.SetAddress(INET_NTOA(pfle->dwSrcMask)); GetDlgItem(IDC_AEIP_EB_SOURCE_ADDRESS)->EnableWindow(TRUE); GetDlgItem(IDC_AEIP_EB_SOURCE_MASK)->EnableWindow(TRUE); }
if( pfle->dwDstAddr == 0 && pfle->dwDstMask == 0 ) { m_bDst = FALSE; CheckDlgButton( IDC_AEIP_CB_DEST, 0); } else { m_bDst = TRUE; CheckDlgButton( IDC_AEIP_CB_DEST, 1); m_ipDstAddress.SetAddress(INET_NTOA(pfle->dwDstAddr)); m_ipDstMask.SetAddress(INET_NTOA(pfle->dwDstMask)); GetDlgItem(IDC_AEIP_EB_DEST_ADDRESS)->EnableWindow(TRUE); GetDlgItem(IDC_AEIP_EB_DEST_MASK)->EnableWindow(TRUE); }
if ( pfle->dwProtocol == FILTER_PROTO_ANY ) { SetProtocolSelection(IDS_PROTOCOL_ANY); } else if ( pfle->dwProtocol == FILTER_PROTO_ICMP ) { SetProtocolSelection(IDS_PROTOCOL_ICMP); m_cbSrcPort.SetWindowText(GetIcmpTypeString( pfle->wSrcPort)); m_cbDstPort.SetWindowText(GetIcmpCodeString( pfle->wDstPort)); } else if ( pfle->dwProtocol == FILTER_PROTO_TCP ) { if(pfle->fLateBound & TCP_ESTABLISHED_FLAG) { SetProtocolSelection(IDS_PROTOCOL_TCP_ESTABLISHED); } else { SetProtocolSelection(IDS_PROTOCOL_TCP); }
m_cbSrcPort.SetWindowText(GetPortString( pfle->dwProtocol, pfle->wSrcPort)); m_cbDstPort.SetWindowText(GetPortString( pfle->dwProtocol, pfle->wDstPort)); } else if ( pfle->dwProtocol == FILTER_PROTO_UDP ) { SetProtocolSelection(IDS_PROTOCOL_UDP); m_cbSrcPort.SetWindowText(GetPortString( pfle->dwProtocol, pfle->wSrcPort)); m_cbDstPort.SetWindowText(GetPortString( pfle->dwProtocol, pfle->wDstPort));
} else { WCHAR buffer[16+1];
SetProtocolSelection(IDS_PROTOCOL_OTHER); m_cbSrcPort.SetWindowText(_itow(pfle->dwProtocol, buffer, 10) ); } }
// enable/disable controls based on filter type
if (m_dwFilterType == FILTER_PERUSER_OUT) { MultiEnableWindow(GetSafeHwnd(), FALSE, IDC_AEIP_CB_SOURCE, IDC_AEIP_ST_SOURCE_ADDRESS, IDC_AEIP_EB_SOURCE_ADDRESS, IDC_AEIP_ST_SOURCE_MASK, IDC_AEIP_EB_SOURCE_MASK, 0); } else if (m_dwFilterType == FILTER_PERUSER_IN) { MultiEnableWindow(GetSafeHwnd(), FALSE, IDC_AEIP_CB_DEST, IDC_AEIP_ST_DEST_ADDRESS, IDC_AEIP_EB_DEST_ADDRESS, IDC_AEIP_ST_DEST_MASK, IDC_AEIP_EB_DEST_MASK, 0); }
// enable disable controls depending on selection
OnSelchangeProtocol();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::SetProtocolSelection
//
// Select the proper Protocol in the protocol
//------------------------------------------------------------------------------
void CIpFltrAddEdit::SetProtocolSelection( UINT idProto ) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString cStr;
if(!cStr.LoadString(idProto)) { AfxMessageBox(_T("Error loading resource")); } m_cbProtocol.GetItemData(m_cbProtocol.GetCurSel());
UINT item = m_cbProtocol.FindStringExact(-1, cStr);
if(item != CB_ERR) m_cbProtocol.SetCurSel(item); else m_cbProtocol.SetCurSel(0); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetIcmpTypeString
//
// returns a CString representing ICMP type (if known) or a string version
// of the Type number.
//------------------------------------------------------------------------------
CString CIpFltrAddEdit::GetIcmpTypeString( WORD dwPort ) { WCHAR buffer[16];
CString s = _T("");
// look through our list of ICMP types and if we know the type, load
// the corresponding string, else convert the port number to string
// and return the string.
#if 0
UINT count = sizeof(g_aICMPTYPE)/sizeof(g_aICMPTYPE[0]); for(UINT i = 0; i < count; i++) { if(g_aICMPTYPE[i][0] == dwPort) { VERIFY(s.LoadString(g_aICMPTYPE[i][1])); return (s); } } #endif
return (CString((LPWSTR)_itow(dwPort, buffer, 10))); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetIcmpCodeString
//
// returns a CString representing ICMP code (if known) or a string version
// of the Code number.
//------------------------------------------------------------------------------
CString CIpFltrAddEdit::GetIcmpCodeString( WORD dwPort ) { WCHAR buffer[16];
return (CString((LPWSTR)_itow(dwPort, buffer, 10))); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetPortString
//
// returns a CString representing port type (eg., FTP, ECHO) (if known) or a string
// version of the port number
//------------------------------------------------------------------------------
CString CIpFltrAddEdit::GetPortString( DWORD dwProtocol, WORD dwPort ) { WCHAR buffer[16];
return (CString((LPWSTR)_itow(dwPort, buffer, 10))); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetPortNumber
//
// converts the port string name to port number and returns it
//------------------------------------------------------------------------------
WORD CIpFltrAddEdit::GetPortNumber( DWORD dwProtocol, CString& cStr) { return ((WORD)(_wtoi((const wchar_t *)cStr.GetBuffer(10)))); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetIcmpType
//
// returns a number version of the ICMP type string
//------------------------------------------------------------------------------
WORD CIpFltrAddEdit::GetIcmpType( CString& cStr) { return ((WORD)(_wtoi((const wchar_t *)cStr.GetBuffer(10)))); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetIcmpCode
//
// returns a number version of the ICMP code string
//------------------------------------------------------------------------------
WORD CIpFltrAddEdit::GetIcmpCode( CString& cStr) { return ((WORD)(_wtoi((const wchar_t *)cStr.GetBuffer(10)))); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::OnOK
//
// handles 'BN_CLICKED' notification from "OK" button
//------------------------------------------------------------------------------
void CIpFltrAddEdit::OnOK() {
FilterListEntry * pfle = new FilterListEntry;
if ( !pfle ) { AfxMessageBox( IDS_ERROR_NO_MEMORY ); return; }
ZeroMemory( pfle, sizeof(FilterListEntry) );
//
// Error breakout loop.
//
do { CString sAddr;
//
// if source network filter is specified, verify and
// save data.
//
if ( m_bSrc = IsDlgButtonChecked(IDC_AEIP_CB_SOURCE) ) { if(m_ipSrcAddress.GetAddress(sAddr) != 4) { AfxMessageBox(IDS_ENTER_SRC_ADDRESS); ::SetFocus((HWND)m_ipSrcAddress); break; } pfle->dwSrcAddr = INET_ADDR(sAddr); if( m_ipSrcMask.GetAddress(sAddr) != 4) { AfxMessageBox(IDS_ENTER_SRC_MASK); ::SetFocus((HWND)m_ipSrcMask); break; } pfle->dwSrcMask = INET_ADDR(sAddr); if ((pfle->dwSrcAddr & pfle->dwSrcMask) != pfle->dwSrcAddr) { AfxMessageBox(IDS_INVALID_SRC_MASK); ::SetFocus((HWND)m_ipSrcMask); break; } } else { pfle->dwSrcAddr = 0; pfle->dwSrcMask = 0; }
//
// if destination network filter is specified,
// verify and save data.
//
if ( m_bDst = IsDlgButtonChecked(IDC_AEIP_CB_DEST) ) { if(m_ipDstAddress.GetAddress(sAddr) != 4) { AfxMessageBox(IDS_ENTER_DST_ADDRESS); ::SetFocus((HWND)m_ipDstAddress); break; } pfle->dwDstAddr = INET_ADDR(sAddr);
if(m_ipDstMask.GetAddress(sAddr) != 4) { AfxMessageBox(IDS_ENTER_DST_MASK); ::SetFocus((HWND)m_ipDstMask); break; } pfle->dwDstMask = INET_ADDR(sAddr); if ((pfle->dwDstAddr & pfle->dwDstMask) != pfle->dwDstAddr) { AfxMessageBox(IDS_INVALID_DST_MASK); ::SetFocus((HWND)m_ipDstMask); break; } } else { pfle->dwDstAddr = 0; pfle->dwDstMask = 0; }
//
// verify and save protocol specific data
//
CString cStr = _T(""); CString cStr2 = _T("");
int index;
switch(QueryCurrentProtocol()) { case PROTOCOL_TCP: pfle->dwProtocol = FILTER_PROTO_TCP; m_cbSrcPort.GetWindowText(cStr); pfle->wSrcPort = GetPortNumber(PROTOCOL_TCP, cStr); m_cbDstPort.GetWindowText(cStr); pfle->wDstPort = GetPortNumber(PROTOCOL_TCP, cStr); break;
case PROTOCOL_TCP_ESTABLISHED: pfle->dwProtocol = FILTER_PROTO_TCP; pfle->fLateBound |= TCP_ESTABLISHED_FLAG; m_cbSrcPort.GetWindowText(cStr); pfle->wSrcPort = GetPortNumber(PROTOCOL_TCP_ESTABLISHED, cStr); m_cbDstPort.GetWindowText(cStr); pfle->wDstPort = GetPortNumber(PROTOCOL_TCP_ESTABLISHED, cStr); break;
case PROTOCOL_UDP: pfle->dwProtocol = FILTER_PROTO_UDP; m_cbSrcPort.GetWindowText(cStr); pfle->wSrcPort = GetPortNumber(PROTOCOL_UDP, cStr); m_cbDstPort.GetWindowText(cStr); pfle->wDstPort = GetPortNumber(PROTOCOL_UDP, cStr); break;
case PROTOCOL_ICMP: pfle->dwProtocol = FILTER_PROTO_ICMP; m_cbSrcPort.GetWindowText(cStr); m_cbDstPort.GetWindowText(cStr2);
// Windows NT bugs: 83110
// Default is 0xFF if none of the fields have data
if (cStr.IsEmpty() && cStr2.IsEmpty()) { pfle->wSrcPort = FILTER_ICMP_TYPE_ANY; pfle->wDstPort = FILTER_ICMP_CODE_ANY; } else { pfle->wSrcPort = GetIcmpType(cStr); pfle->wDstPort = GetIcmpCode(cStr2); } break;
case PROTOCOL_ANY: pfle->dwProtocol = FILTER_PROTO_ANY; pfle->wSrcPort = pfle->wDstPort = 0; break;
case PROTOCOL_OTHER: m_cbSrcPort.GetWindowText(cStr); pfle->dwProtocol = FILTER_PROTO(_wtoi((const wchar_t*)cStr.GetBuffer(16+1))); if(pfle->dwProtocol == 0) { AfxMessageBox(IDS_ENTER_OTHER_PROTOCOL); ::SetFocus((HWND)m_cbSrcPort); delete pfle; return; } pfle->wSrcPort = pfle->wDstPort = 0; break;
default: AfxMessageBox( IDS_ERROR_SETTING_BLOCK ); delete pfle; return; } //
// if this is a new filter, add it to m_ppFilterEntry
//
if (!*m_ppFilterEntry) { *m_ppFilterEntry = pfle; }
else { FilterListEntry *pfleDst = *m_ppFilterEntry;
pfleDst-> dwSrcAddr = pfle-> dwSrcAddr; pfleDst-> dwSrcMask = pfle-> dwSrcMask; pfleDst-> dwDstAddr = pfle-> dwDstAddr; pfleDst-> dwDstMask = pfle-> dwDstMask; pfleDst-> dwProtocol = pfle-> dwProtocol; pfleDst-> wSrcPort = pfle-> wSrcPort; pfleDst-> wDstPort = pfle-> wDstPort; pfleDst-> fLateBound = pfle-> fLateBound; delete pfle; } // end the dialog
CBaseDialog::OnOK();
return; }while(FALSE);
//
// error condition
//
delete pfle; return; }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::OnCancel
//
// handles 'BN_CLICKED' notification from the Cancel button
//------------------------------------------------------------------------------
void CIpFltrAddEdit::OnCancel() { CBaseDialog::OnCancel(); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetIcmpTypeString
//
// Handles BN_CLICKED notification from "Source network" checkbox
//------------------------------------------------------------------------------
void CIpFltrAddEdit::OnCbSourceClicked() { m_bSrc = IsDlgButtonChecked(IDC_AEIP_CB_SOURCE); GetDlgItem(IDC_AEIP_EB_SOURCE_ADDRESS)->EnableWindow( m_bSrc ); GetDlgItem(IDC_AEIP_EB_SOURCE_MASK)->EnableWindow( m_bSrc ); }
//------------------------------------------------------------------------------
// Function: CIpFltrAddEdit::GetIcmpTypeString
//
// Handles BN_CLICKED notification from "Destination network" checkbox
//------------------------------------------------------------------------------
void CIpFltrAddEdit::OnCbDestClicked() { m_bDst = IsDlgButtonChecked(IDC_AEIP_CB_DEST); GetDlgItem(IDC_AEIP_EB_DEST_ADDRESS)->EnableWindow( m_bDst ); GetDlgItem(IDC_AEIP_EB_DEST_MASK)->EnableWindow( m_bDst ); }
|