⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kerruledlg.cpp

📁 Windows网络与通信程序设计/王艳平, 张越编著
💻 CPP
字号:
// KerRuleDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PhoenixFW.h"
#include "KerRuleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CKerRuleDlg dialog

PassthruFilter CKerRuleDlg::m_RuleItem;


CKerRuleDlg::CKerRuleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CKerRuleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CKerRuleDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CKerRuleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CKerRuleDlg)
	DDX_Control(pDX, IDC_SOURCE_PORT, m_SourcePort);
	DDX_Control(pDX, IDC_SOURCE_MASK, m_SourceMask);
	DDX_Control(pDX, IDC_SOURCE_IP, m_SourceIP);
	DDX_Control(pDX, IDC_RULE_PROTOCOL, m_RuleProtocol);
	DDX_Control(pDX, IDC_RULE_ACTION, m_RuleAction);
	DDX_Control(pDX, IDC_DEST_PORT, m_DestPort);
	DDX_Control(pDX, IDC_DEST_MASK, m_DestMask);
	DDX_Control(pDX, IDC_DEST_IP, m_DestIP);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CKerRuleDlg, CDialog)
	//{{AFX_MSG_MAP(CKerRuleDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKerRuleDlg message handlers


BOOL CKerRuleDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	// 初始化实施动作组合框资源
	m_RuleAction.SetItemData(m_RuleAction.AddString(L"放行"), 0);
	m_RuleAction.SetItemData(m_RuleAction.AddString(L"拒绝"), 1);
	m_RuleAction.SetCurSel(0);

	// 初始化协议组合框资源
	m_RuleProtocol.SetItemData(m_RuleProtocol.AddString(L"全部"), 0);
	m_RuleProtocol.SetItemData(m_RuleProtocol.AddString(L"TCP"), IPPROTO_TCP);
	m_RuleProtocol.SetItemData(m_RuleProtocol.AddString(L"UDP"), IPPROTO_UDP);
	m_RuleProtocol.SetItemData(m_RuleProtocol.AddString(L"ICMP"), IPPROTO_ICMP);
	m_RuleProtocol.SetCurSel(0);

	// 设置实施动作组合框
	m_RuleAction.SetCurSel(m_RuleItem.bDrop);

	// 设置协议组合框
	for(int i=0; i<m_RuleProtocol.GetCount(); i++)
	{
		if(m_RuleProtocol.GetItemData(i) == m_RuleItem.protocol)
		{
			m_RuleProtocol.SetCurSel(i);
			break;
		}
	}

	// 设置源IP地址,和IP掩位码
	m_SourceIP.SetAddress(m_RuleItem.sourceIP);
	m_SourceMask.SetAddress(m_RuleItem.sourceMask);

	// 设置目的IP地址,和IP掩位码
	m_DestIP.SetAddress(m_RuleItem.destinationIP);
	m_DestMask.SetAddress(m_RuleItem.destinationMask);

	// 设置源端口号
	CString tmpStr;
	tmpStr.Format(L"%u", m_RuleItem.sourcePort);
	m_SourcePort.SetWindowText(tmpStr);

	// 设置目的端口号
	tmpStr.Format(L"%u", m_RuleItem.destinationPort);
	m_DestPort.SetWindowText(tmpStr);

	m_SourcePort.SetLimitText(5);
	m_DestPort.SetLimitText(5);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CKerRuleDlg::OnOK() 
{
	PassthruFilter tmpRule = { 0 };
	CString strSourcePort, strDestPort;

	
	// 获取源端口号
	m_SourcePort.GetWindowText(strSourcePort);
	int nPort = _ttoi(strSourcePort);
	if(nPort > 65535 || nPort < 0)
	{
		AfxMessageBox(L"源端口号无效,有效范围为 0 - 65535,请重新输入。");
		m_SourcePort.SetFocus();
		return ;
	}
	tmpRule.sourcePort = nPort;

	// 获取目的端口号
	m_DestPort.GetWindowText(strDestPort);
	nPort = _ttoi(strDestPort);
	if(nPort > 65535 || nPort < 0)
	{
		AfxMessageBox(L"目的端口号无效,有效范围为 0 - 65535,请重新输入。");
		m_DestPort.SetFocus();
		return ;
	}
	tmpRule.destinationPort = nPort;

	// 采取的动作
	tmpRule.bDrop = (BOOLEAN)m_RuleAction.GetItemData(m_RuleAction.GetCurSel());
	// 协议
	tmpRule.protocol = (USHORT)m_RuleProtocol.GetItemData(m_RuleProtocol.GetCurSel());
	// 源IP和掩位码。注意,CIPAddressCtrl类是以主机字节顺序返回IP地址的
	m_SourceIP.GetAddress(tmpRule.sourceIP);
	m_SourceMask.GetAddress(tmpRule.sourceMask);

	// 目的IP和掩位码
	m_DestIP.GetAddress(tmpRule.destinationIP);
	m_DestMask.GetAddress(tmpRule.destinationMask);

	m_RuleItem = tmpRule;
	CDialog::OnOK();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -