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

📄 ipheadersetupdlg.cpp

📁 基于短消息的移动通信场强信号检测管理软件,软件基于PC,用于与嵌入式信号接收板通信
💻 CPP
字号:
// IpHeaderSetupDlg.cpp : implementation file
//

#include "stdafx.h"
#include "sendpkt.h"
#include "IpHeaderSetupDlg.h"
#include "global.h"


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

/////////////////////////////////////////////////////////////////////////////
// CIpHeaderSetupDlg dialog

CIpHeaderSetupDlg::CIpHeaderSetupDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CIpHeaderSetupDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CIpHeaderSetupDlg)
	m_strOptions = _T("");
	m_strData = _T("");
	//}}AFX_DATA_INIT
	//g_IpFrame中的Version实际上为IP头的长度
	//g_IpFrame中的HeaderLen实际上为版本
	m_nHeadLen=g_IpFrame.ipHeader.Version;
	m_nVersion=g_IpFrame.ipHeader.HeaderLen;

	m_nServiceType=g_IpFrame.ipHeader.ServiceType;
		
		
	m_nIden=ntohs(g_IpFrame.ipHeader.Identification);

	   
	//由于网络字节序和数据结构的原因,Flags和FragOffset需作进一步处理
		
	m_nFlag=g_IpFrame.ipHeader.Flags;
	m_nOffset=g_IpFrame.ipHeader.FragOffset;

	m_nTtl=g_IpFrame.ipHeader.TTL;
	m_nProtocol=g_IpFrame.ipHeader.Protocol;
		
	//g_IpFrame.ipHeader.HeaderCheckSum=0;
			
	memcpy(&m_IpDestAddr,g_IpFrame.ipHeader.DestIpAddr,4);

		
	memcpy(&m_IpSrcAddr,g_IpFrame.ipHeader.SrcIpAddr,4);

	unsigned char tempStr[5000];
	
		
	if(m_nHeadLen==5)
	{
		ASSERT(ntohs(g_IpFrame.ipHeader.TotalLen)-m_nHeadLen*4<5000);
		memset(tempStr,0,sizeof(tempStr));
		memcpy(tempStr,g_IpFrame.OptionsAndData,ntohs(g_IpFrame.ipHeader.TotalLen)-m_nHeadLen*4);
		m_strOptions = _T("");
		m_strData =tempStr;
	}
	else
	{
		ASSERT(m_nHeadLen*4-20<5000);
		memset(tempStr,0,sizeof(tempStr));
		memcpy(tempStr,g_IpFrame.OptionsAndData,m_nHeadLen*4-20);
		m_strOptions=tempStr;

		ASSERT(ntohs(g_IpFrame.ipHeader.TotalLen)-m_nHeadLen*4<5000);
		memset(tempStr,0,sizeof(tempStr));
		memcpy(tempStr,&g_IpFrame.OptionsAndData[m_nHeadLen*4-20],ntohs(g_IpFrame.ipHeader.TotalLen)-m_nHeadLen*4);
		m_strData =tempStr;
	}
}


void CIpHeaderSetupDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CIpHeaderSetupDlg)
	DDX_Control(pDX, IDC_IPSRCADDR, m_CtlIPSrcAddr);
	DDX_Control(pDX, IDC_IPDESTADDR, m_CtlIPDestAddr);
	DDX_Text(pDX, IDC_VERSION, m_nVersion);
	DDV_MinMaxUInt(pDX, m_nVersion, 1, 15);
	DDX_Text(pDX, IDC_HEADERLENGTH, m_nHeadLen);
	DDV_MinMaxUInt(pDX, m_nHeadLen, 5, 15);
	DDX_Text(pDX, IDC_SERVICETYPE, m_nServiceType);
	DDX_Text(pDX, IDC_IDENTIFICATION, m_nIden);
	DDX_Text(pDX, IDC_FLAG, m_nFlag);
	DDX_Text(pDX, IDC_OFFSET, m_nOffset);
	DDX_Text(pDX, IDC_TTl, m_nTtl);
	DDX_Text(pDX, IDC_PROTOCOL, m_nProtocol);
	DDX_Text(pDX, IDC_OPTIONS, m_strOptions);
	DDV_MaxChars(pDX, m_strOptions, 40);
	DDX_Text(pDX, IDC_DATA, m_strData);
	DDV_MaxChars(pDX, m_strData, 1480);
	//}}AFX_DATA_MAP
}


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

/////////////////////////////////////////////////////////////////////////////
// CIpHeaderSetupDlg message handlers

BOOL CIpHeaderSetupDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_CtlIPSrcAddr.SetAddress(m_IpSrcAddr.nField0,m_IpSrcAddr.nField1,m_IpSrcAddr.nField2,m_IpSrcAddr.nField3);
	m_CtlIPDestAddr.SetAddress(m_IpDestAddr.nField0,m_IpDestAddr.nField1,m_IpDestAddr.nField2,m_IpDestAddr.nField3);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CIpHeaderSetupDlg::OnOK() 
{
	// TODO: Add extra validation here
	int nIpHeadLen;
	int nOptionsLen;
	char strTemp[255];


    memset(strTemp,0,sizeof(strTemp));
	GetDlgItem(IDC_HEADERLENGTH)->GetWindowText(strTemp,sizeof(strTemp));
	nIpHeadLen=atoi(strTemp)*4;

	memset(strTemp,0,sizeof(strTemp));
	nOptionsLen=GetDlgItem(IDC_OPTIONS)->GetWindowText(strTemp,sizeof(strTemp));
	
	if(nIpHeadLen-20-nOptionsLen<0)
	{
		int nLen;
		if(nOptionsLen%4!=0)
		{
			nLen=5+nOptionsLen/4+1;
		}
		else
		{
			nLen=5+nOptionsLen/4;
		}
		CString str;
		str.Format("Ip头的长度和Options的长度不符合,Ip头长度应设为%d以上",nLen);

		AfxMessageBox(str);
		return;
	}





//	m_nHeadLen*4-20-OptionsLen>=0);


	BYTE nField0,nField1,nField2,nField3;
	
	m_CtlIPDestAddr.GetAddress(nField0,nField1,nField2,nField3);
	m_IpDestAddr.nField0=nField0;
	m_IpDestAddr.nField1=nField1;
	m_IpDestAddr.nField2=nField2;
	m_IpDestAddr.nField3=nField3;


	m_CtlIPSrcAddr.GetAddress(nField0,nField1,nField2,nField3);
	m_IpSrcAddr.nField0=nField0;
	m_IpSrcAddr.nField1=nField1;
	m_IpSrcAddr.nField2=nField2;
	m_IpSrcAddr.nField3=nField3;	
	
	CDialog::OnOK();
}

⌨️ 快捷键说明

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