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

📄 globalfunc.cpp

📁 基于短消息的移动通信场强信号检测管理软件,软件基于PC,用于与嵌入式信号接收板通信
💻 CPP
字号:
#include "stdafx.h"
#include "global.h"
#include "IpHeaderSetupDlg.h"

BOOL MACStringToMAC(LPTSTR lpMac,unsigned char* strMac)
{
	unsigned char* tempMac=(unsigned char*)lpMac;

	//检查MAC地址字符串的合法性
	while(*tempMac!='\0')
	{
		if(!((*tempMac>='0'&&*tempMac<='9')||(*tempMac>='A'&&*tempMac<='F')))
		{
			ASSERT(FALSE);
			return FALSE;
		}
		tempMac++;
	}

	tempMac=(unsigned char*)lpMac;
	for(int i=0;i<6;i++)
	{
		char SemiByte[2];
		for(int j=0;j<2;j++)
		{
			SemiByte[j]=tempMac[2*i+j];
			if(SemiByte[j]>='0'&&SemiByte[j]<='9')
				SemiByte[j]-='0';
			else if(SemiByte[j]>='A'&&SemiByte[j]<='F')
				SemiByte[j]=SemiByte[j]-'A'+10;
			else
				ASSERT(FALSE);
		}		
		strMac[i]=(SemiByte[0]<<4)+SemiByte[1];
	}
	return TRUE;		
}

UINT ThreadFuncOfLoopSend(LPVOID pParam)
{
	while(g_bRunning)
	{
		g_Adapter.SetNumWrites(1);
		g_Adapter.SendPacket(TRUE);	
	}

	g_Adapter.SetCurFillPos(0);
	g_Adapter.FreePacket();

	return 0;
}

void FillIpHeader(CIpHeaderSetupDlg* pDlg)
{
	//填充IP头
		
		//由于Version和HeaderLen各占四位,刚好一个字节,在数据结构Version在低地址,HeaderLen占高地址
	    //包的顺序要求Version在前,HeaderLen在后,所以交换
		g_IpFrame.ipHeader.Version=pDlg->m_nHeadLen;
		g_IpFrame.ipHeader.HeaderLen=pDlg->m_nVersion;

		g_IpFrame.ipHeader.ServiceType=pDlg->m_nServiceType;
		
		short int totalLen;

		totalLen=pDlg->m_nHeadLen*4+pDlg->m_strData.GetLength();

		g_IpFrame.ipHeader.TotalLen=htons(totalLen);

		g_IpFrame.ipHeader.Identification=htons(pDlg->m_nIden);

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

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

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


		
		//处理数据
		int OptionsLen=0;
		int PaddingLen=0;
		int dataLen=0;

		OptionsLen=pDlg->m_strOptions.GetLength();
		if(OptionsLen!=0)
		{
			ASSERT(OptionsLen<sizeof(g_IpFrame.OptionsAndData));
			memcpy(g_IpFrame.OptionsAndData,(unsigned char*)(pDlg->m_strOptions.GetBuffer(OptionsLen)),OptionsLen);
			pDlg->m_strOptions.ReleaseBuffer();
		}

		if(OptionsLen%4!=0)
		{

			ASSERT(pDlg->m_nHeadLen*4-20-OptionsLen>=0);
			PaddingLen=pDlg->m_nHeadLen*4-20-OptionsLen;
			ASSERT(PaddingLen<sizeof(g_IpFrame.OptionsAndData)-OptionsLen);
			memset(&g_IpFrame.OptionsAndData[OptionsLen],'P',PaddingLen);			
		}
		
		dataLen=pDlg->m_strData.GetLength();
		if(dataLen!=0)
		{
			ASSERT(dataLen<sizeof(g_IpFrame.OptionsAndData)-OptionsLen-PaddingLen);
			memcpy(&g_IpFrame.OptionsAndData[OptionsLen+PaddingLen],(unsigned char*)(pDlg->m_strData.GetBuffer(dataLen)),dataLen);
			pDlg->m_strData.ReleaseBuffer();
		}
}

⌨️ 快捷键说明

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