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

📄 firewallappview.cpp

📁 应用编码与计算机密码学program 《应用编码与计算机密码学》程序 防火墙算法
💻 CPP
字号:
// FirewallAppView.cpp : implementation of the CFirewallAppView class
//

#include "stdafx.h"
#include "FirewallApp.h"
#include <winsock.h>

#include "FirewallAppDoc.h"
#include "FirewallAppView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFirewallAppView

IMPLEMENT_DYNCREATE(CFirewallAppView, CFormView)

BEGIN_MESSAGE_MAP(CFirewallAppView, CFormView)
	//{{AFX_MSG_MAP(CFirewallAppView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFirewallAppView construction/destruction

CFirewallAppView::CFirewallAppView()
	: CFormView(CFirewallAppView::IDD)
{
	//{{AFX_DATA_INIT(CFirewallAppView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CFirewallAppView::~CFirewallAppView()
{
}

void CFirewallAppView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFirewallAppView)
	DDX_Control(pDX, IDC_LIST1, m_rules);
	//}}AFX_DATA_MAP
}

BOOL CFirewallAppView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CFirewallAppView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	RECT rc;
	m_rules.GetClientRect(&rc);
	
	/*初始化规则列表的栏目名*/
	int width=rc.right-rc.left-110;
	m_rules.InsertColumn(0, "源IP",LVCFMT_LEFT , width/6, 0);
	m_rules.InsertColumn(1, "源子网",LVCFMT_LEFT , width/6, 1);
	m_rules.InsertColumn(2, "源端口",LVCFMT_LEFT ,width/6, 2);
	m_rules.InsertColumn(3, "目的IP",LVCFMT_LEFT , width/6, 3);
	m_rules.InsertColumn(4, "目的子网",LVCFMT_LEFT , width/6, 4);
	m_rules.InsertColumn(5, "目的端口",LVCFMT_LEFT , width/6, 5);
	m_rules.InsertColumn(6, "协议",LVCFMT_LEFT ,60, 6);
	m_rules.InsertColumn(7, "操作",LVCFMT_LEFT , 50, 7);

	m_rules.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);


}

/////////////////////////////////////////////////////////////////////////////
// CFirewallAppView printing

BOOL CFirewallAppView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CFirewallAppView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CFirewallAppView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CFirewallAppView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CFirewallAppView diagnostics

#ifdef _DEBUG
void CFirewallAppView::AssertValid() const
{
	CFormView::AssertValid();
}

void CFirewallAppView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CFirewallAppDoc* CFirewallAppView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFirewallAppDoc)));
	return (CFirewallAppDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CFirewallAppView message handlers

void CFirewallAppView::UpdateList()
{
	CFirewallAppDoc *doc = GetDocument();

	m_rules.DeleteAllItems();//清空列表

	unsigned int i;
	for(i=0;i<doc->nRules;i++)
	{
		AddRuleToList(doc->rules[i]);//将规则逐条加入列表
	}
}

void CFirewallAppView::AddRuleToList(RuleInfo rule)
{
	char port[6];
	LVITEM it;
	int pos;
	in_addr ip;
	
	/*规则中的数据包源IP地址*/
	it.mask		= LVIF_TEXT;
	it.iItem	= m_rules.GetItemCount();
	it.iSubItem	= 0;
	ip.S_un.S_addr = rule.sourceIp;
	it.pszText	= (rule.sourceIp == ALL_IP) ? "全部" : inet_ntoa(ip);
	pos			= m_rules.InsertItem(&it);

	/*规则中的数据包源子网掩码*/
	it.iItem	= pos;
	it.iSubItem	= 1;
	ip.S_un.S_addr = rule.sourceMask;
	it.pszText	= inet_ntoa(ip);
	m_rules.SetItem(&it);

	/*规则中的数据包源端口*/
	it.iItem	= pos;
	it.iSubItem	= 2;
	it.pszText	= (rule.sourcePort == FILTER_TCPUDP_PORT_ANY) ? "全部" : itoa(rule.sourcePort, port, 10);
	m_rules.SetItem(&it);
	
	/*规则中的数据包目标IP地址*/
	it.iItem	= pos;
	it.iSubItem	= 3;
	ip.S_un.S_addr = rule.destinationIp;
	it.pszText	= (rule.destinationIp == ALL_IP) ? "全部" : inet_ntoa(ip);
	m_rules.SetItem(&it);

	/*规则中的数据包目标子网掩码*/
	it.iItem	= pos;
	it.iSubItem	= 4;
	ip.S_un.S_addr = rule.destinationMask;
	it.pszText	= inet_ntoa(ip);
	m_rules.SetItem(&it);

	/*规则中的数据包目标端口*/
	it.iItem	= pos;
	it.iSubItem = 5;
	it.pszText	= (rule.destinationPort == FILTER_TCPUDP_PORT_ANY) ? "全部" : itoa(rule.destinationPort, port, 10);
	m_rules.SetItem(&it);


	it.iItem	= pos;
	it.iSubItem	= 6;

	/*规则中的数据包的封装协议*/
	if(rule.protocol == FILTER_PROTO_ICMP)
		it.pszText = "ICMP";
	else if(rule.protocol == FILTER_PROTO_TCP)
		it.pszText = "TCP";
	else if(rule.protocol == FILTER_PROTO_UDP)
		it.pszText = "UDP";
	else
		it.pszText = "全部";

	m_rules.SetItem(&it);

	/*规则中的数据包的操作*/
	it.iItem	= pos;
	it.iSubItem	= 7;
	it.pszText = rule.action == PF_ACTION_DROP ? "丢弃" : "放行";
	m_rules.SetItem(&it);
}

⌨️ 快捷键说明

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