亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? udp.c

?? 在S3C2440上運行的"電子日歷“(支持平年,閏年,星期自動調整). 開發環境是RVDS2.2
?? C
字號:
/**---------------------版權 (c)----------------------------------------------------------***
***                     作者:顏章健                                                      ***
***                     郵件:jenkinyan@163.com                                           ***
***                                                                                       ***
***---------------------File Info---------------------------------------------------------***
*** 創 建 人:          顏章健                                                            ***
*** 創建日期:          2008-03-22                                                        ***
*** 創建版本:                                                                            ***
*** 文件描述:          UDP(User Data Protocol) 用戶數據協議                              ***
***---------------------------------------------------------------------------------------***
*** 修 訂 人:          顏章健                                                            ***
*** 修訂日期:          2008-04-14                                                        ***
*** 修訂版本:                                                                            ***
*** 修訂描述:          增加UDP校驗及支持大數據包分片                                     ***
***---------------------------------------------------------------------------------------**/
#include "config.h"


// UDP 接口鏈表第一個接口
static	UDP_SOCKET	*UdpFirstSocket;
/********************************************************************************************
*** 函數名稱:	UdpCheckSum		
*** 函數描述:	UDP校驗值計算		
*** 入    口:	
*** 出    口:	
********************************************************************************************/
static	uint16	UdpCheckSum(NET_PKT *Packet)
{
	__packed	uint16	*_ptr;
	uint16	i,len;
	uint32	sum = 0;
	
	_ptr = (__packed uint16 *)Packet->Data;
	while(Packet != NULL)
	{
		_ptr = (__packed uint16 *)Packet->Data;
		len = Packet->Length >> 1;
		for(i=0; i<len; i++)
		{
			sum += *_ptr++;
		}			
		if(Packet->Next == NULL)	
		{
			break;
		}
		
		Packet = Packet->Next;
	}	
	if(Packet->Length & 0x0001)
	{
		sum += ((*_ptr)&0xff);
	}
	
	sum = (sum & 0xffff) + ((sum>>16)&0xffff);
	if(sum&0xffff0000)	sum++;
	
	return	(uint16)(sum & 0xffff);
}

/********************************************************************************************
*** 函數名稱:	UdpSocketSend		
*** 函數描述:	運輸層發送 UDP 數據包		
*** 入    口:	This	:Socket接口
***				Data	:用戶數據緩沖區指針
***				Length	:用戶數據長度		
*** 出    口:	無		
********************************************************************************************/
void	UdpSocketSend(UDP_SOCKET *This,uint8 *Data,uint16 Length)
{
	NET_PKT	UdpHead,UdpData;
	uint8	i,head[20];
	uint16	value16;
	// 填充偽頭部內容 TcpHead[] 的前12字節
	for(i=0; i<4; i++)
	{
		head[i]   = LinkLayer.Config.Ip[i];	// 本地地址
		head[i+4] = This->DestAddr[i];		// 目的地址
	}
	head[ 8] = 0;			head[ 9] = 17;
	while(Length)
	{
		if(Length > 1472)
		{
			value16 = 1472;
			Length -= 1472;
		}
		else
		{
			value16 = Length;
			Length = 0;
		}
		UdpData.Data   = Data;
		UdpData.Length = value16;
		UdpData.Next   = NULL;
				
		value16 += 8;
		head[10] = (value16 >> 8);	head[11] = (uint8)value16;	
		
		value16  = This->LocalPort;
		head[12] = (value16 >> 8);	head[13] = (uint8)value16;
		
		value16  = This->DestPort;
		head[14] = (value16 >> 8);	head[15] = (uint8)value16;		
		head[16] = head[10];		head[17] = head[11];				
		head[18] = 0x00;			head[19] = 0x00;
		
		UdpHead.Data   = head;
		UdpHead.Length = 20;
		UdpHead.Next   = &UdpData;
		value16  = ~UdpCheckSum(&UdpHead);		
		head[18] = (uint8)value16;	head[19] = (value16 >> 8);		
		
		UdpHead.Data   = head + 12;
		UdpHead.Length = 8;
		UdpHead.Next   = &UdpData;		
		
		NetLayer.SendPacket(IPF_UDP,This->DestAddr,&UdpHead);
	}
}

/********************************************************************************************
*** 函數名稱:	UdpSocketCreate		
*** 函數描述:	創建UDP接口		
*** 入    口:  DstAddr	:目的地址
***				DstPort	:目的端口
***				SrcPort	:本地端口
***				Hook	:數據處理鉤子函數				
*** 出    口:	
********************************************************************************************/
//UDP_SOCKET 	*UdpSocketCreate
uint8 	UdpSocketCreate
	(	UDP_SOCKET	*Socket,
		uint8 	*DstAddr,		uint16 	DstPort,
		uint16 	SrcPort,		void 	(*Hook)(UDP_SOCKET *This)
	)
{
	uint8 i;
	UDP_SOCKET	*sock;//,*Socket;
	
	/*
	if((Socket = (UDP_SOCKET *)malloc(sizeof(UDP_SOCKET))) == NULL)
	{
		return	NULL;
	}
	
	// 入口參數過濾
	if(DstPort == 0)
	{
		free(Socket);
		return	NULL;
	}*/
	
	// 設置Socket屬性
	for(i=0; i<4; i++)	Socket->DestAddr[i] = *DstAddr++;
	Socket->This = Socket;
	Socket->LocalPort = SrcPort;
	Socket->DestPort  = DstPort;
	Socket->Rxd  = NULL;
	Socket->Rxl  = 0;
	//Socket->Send = UdpSendPacket;
	Socket->Hook = Hook;

	sock = UdpFirstSocket;
	while(sock != NULL)
	{
		if(sock->LocalPort == SrcPort)	
		{	/*		
			free(Socket);
			return	NULL;
			*/
			return		UDP_ERR_PORT_INUSED;
		}
		sock = sock->Next;
	}
	
	
	// Socket插入鏈表
	Socket->Next = UdpFirstSocket;
	UdpFirstSocket = Socket;
	
	//return	Socket;
	return		UDP_ERR_NONE;
}

/********************************************************************************************
*** 函數名稱:	UdpSocketDelete		
*** 函數描述:	刪除已經創建的UDP接口		
*** 入    口:	Socket	:要刪除的接口		
*** 出    口:	錯誤信息		
********************************************************************************************/
uint8	UdpSocketDelete(UDP_SOCKET	*Socket)
{
	UDP_SOCKET	*sock,*next;

	if(Socket != NULL)
	{
		//free(Socket);
	}
	else
	{
		return	UDP_ERR_USER;
	}
	if(UdpFirstSocket == NULL)		
	{
		return	UDP_ERR_USER;
	}
	if(Socket == UdpFirstSocket)
	{
		UdpFirstSocket = UdpFirstSocket->Next;
		return	UDP_ERR_NONE;
	}
	if(UdpFirstSocket->Next == NULL)
	{
		return	UDP_ERR_USER;
	}
	
	sock = UdpFirstSocket;
	next = sock->Next;	
	while(next != NULL)
	{
		if(next == Socket)
		{
			sock->Next = next->Next;			
			return	UDP_ERR_NONE;
		}
		next = next->Next;
		sock = sock->Next;		
	}	
	
	return	UDP_ERR_USER;
}

/********************************************************************************************
*** 函數名稱:	UdpReceiveTask		
*** 函數描述:	UDP 協議接收處理:查找用戶創建的接口,將數據從該接口輸出給用戶Hook處理	
*** 入    口:	無		
*** 出    口:	無		
********************************************************************************************/
void	UdpReceiveTask(void)
{
	UDP_SOCKET	*sock;
	uint8		*UdpData;
	uint16		UdpDataLength;
	uint16		DestPort;
	uint16		SourcePort;
//	uint8		SourceIp[4];
		
	
	UdpDataLength = *NetLayer.Rxd;	
	UdpDataLength = (UdpDataLength & 0x000f) << 2;	
	UdpData = NetLayer.Rxd + UdpDataLength;
	
//	SourceIp[0] = NetLayer.Rxd[12];
//	SourceIp[1] = NetLayer.Rxd[13];
//	SourceIp[2] = NetLayer.Rxd[14];
//	SourceIp[3] = NetLayer.Rxd[15];
	
	SourcePort   = UdpData[0];
	SourcePort <<= 8;
	SourcePort  |= UdpData[1];	
	
	DestPort   = UdpData[2];
	DestPort <<= 8;
	DestPort  |= UdpData[3];
	
	UdpDataLength   = UdpData[4];
	UdpDataLength <<= 8;
	UdpDataLength  |= UdpData[5];
	
	UdpDataLength  -= 8;
	UdpData += 8;

	sock = UdpFirstSocket;
	while(sock != NULL)
	{
		if(	(DestPort == sock->LocalPort) 					// IP包目的端口與Socket的源端口匹配
			//&& (SourcePort == sock->DestPort)				// IP包的源端口與Socket目的端口匹配
			//&& (InetMemCmp(SourceIp,sock->DestAddr,4))	// IP包的源地址與Socket目的地址匹配
			)
		{
			sock->Rxd = UdpData;
			sock->Rxl = UdpDataLength;
			if(sock->Hook != NULL)
			{
				sock->Hook(sock->This);
				// 把最近活躍的端口排列到鏈表最前面
				if(sock != UdpFirstSocket)
				{
					UdpSocketDelete(sock);
					sock->Next = UdpFirstSocket;
					UdpFirstSocket = sock;
				}
			}
			sock->Rxd = NULL;
			sock->Rxl = 0;
			break;
		}
		sock = sock->Next;
	}
}

/********************************************************************************************
*** 函數名稱:	UdpInit		
*** 函數描述:	UDP 協議初始化		
*** 入    口:	無		
*** 出    口:	無		
********************************************************************************************/
void	UdpInit(void)
{
	UdpFirstSocket  = NULL;
}

/********************************************************************************************
*** 					文件結束														  ***	
********************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本在线a| 日本一区二区三区在线不卡| 91香蕉视频在线| 欧美日韩国产系列| 色婷婷久久久久swag精品| caoporn国产一区二区| 99免费精品视频| 91伊人久久大香线蕉| 91麻豆国产精品久久| 色94色欧美sute亚洲线路一久| 成人av在线播放网站| 成人av在线一区二区三区| 99精品欧美一区二区三区综合在线| 成人av在线一区二区| 在线观看免费成人| 欧美一卡二卡在线| 久久婷婷一区二区三区| 国产精品毛片无遮挡高清| 亚洲欧洲综合另类在线| 亚洲成av人片在线| 激情国产一区二区 | 欧美片在线播放| 欧美久久久久久久久久| 欧美videos大乳护士334| 欧美国产丝袜视频| 亚洲v中文字幕| 国产福利一区在线观看| 欧洲在线/亚洲| 久久嫩草精品久久久精品| 综合分类小说区另类春色亚洲小说欧美 | 樱花草国产18久久久久| 日本欧美久久久久免费播放网| 韩国三级电影一区二区| 91国产福利在线| wwwwxxxxx欧美| 一区二区三区四区在线| 老司机精品视频一区二区三区| 成人性生交大片| 日韩一区二区在线观看视频播放| 欧美激情一区在线观看| 奇米在线7777在线精品| av成人免费在线观看| 日韩视频一区二区三区| 亚洲最大色网站| 国产馆精品极品| 欧美一区二区在线视频| 日韩毛片在线免费观看| 国产综合色视频| 制服.丝袜.亚洲.中文.综合 | 欧美在线观看你懂的| 久久男人中文字幕资源站| 亚洲已满18点击进入久久| 国产在线播精品第三| 欧美视频在线一区| 欧美激情一区二区三区不卡| 久久精品噜噜噜成人88aⅴ| 91精品91久久久中77777| 中文字幕欧美激情一区| 精品一区二区三区在线观看国产| 欧美猛男男办公室激情| 亚洲在线视频网站| 一本大道久久a久久精品综合| 亚洲国产精品成人综合 | 国产精品人人做人人爽人人添| 久久不见久久见免费视频7| 欧美日韩一区中文字幕| 亚洲国产视频直播| 色欧美乱欧美15图片| 18欧美乱大交hd1984| 国产999精品久久久久久绿帽| 亚洲精品在线三区| 国产呦萝稀缺另类资源| 久久综合九色综合欧美亚洲| 麻豆精品蜜桃视频网站| 欧美一级日韩一级| 久久91精品久久久久久秒播| 日韩午夜电影av| 美女视频黄免费的久久| 日韩精品一区二区三区视频 | 欧美国产精品久久| 国产成人午夜片在线观看高清观看| 精品精品国产高清a毛片牛牛| 久久国产成人午夜av影院| 精品国产乱码久久久久久牛牛| 久久成人精品无人区| 久久―日本道色综合久久| 国产高清成人在线| 亚洲三级视频在线观看| 欧美无乱码久久久免费午夜一区 | 一本久久a久久精品亚洲| 一区二区三区欧美| 欧美一区在线视频| 国产呦萝稀缺另类资源| 日本一区二区高清| 色88888久久久久久影院按摩| 亚洲香蕉伊在人在线观| 欧美一二三在线| 波多野结衣一区二区三区 | 美女网站色91| 国产三级久久久| 欧美性猛交xxxx乱大交退制版| 日本成人在线看| 国产精品国产三级国产aⅴ原创 | 午夜激情久久久| 久久亚洲精精品中文字幕早川悠里| 粉嫩av一区二区三区在线播放 | 欧美理论电影在线| 国产成人超碰人人澡人人澡| 亚洲色图在线视频| 日韩一区二区中文字幕| av电影天堂一区二区在线观看| 日韩成人精品在线| 国产精品久久久久久亚洲伦| 欧美精品自拍偷拍动漫精品| 国产激情一区二区三区| 性做久久久久久免费观看欧美| 日本一区二区三区视频视频| 欧美精品久久久久久久久老牛影院| 国产成人在线网站| 亚洲地区一二三色| 亚洲欧洲性图库| 久久中文字幕电影| 欧美精品在欧美一区二区少妇| 成人av资源在线观看| 九一九一国产精品| 午夜精品久久久| 亚洲欧美一区二区三区国产精品| 精品电影一区二区| 欧美日韩高清影院| 色狠狠综合天天综合综合| 国产伦精品一区二区三区免费迷 | 国产精品一区二区在线观看不卡| 亚洲一区二区成人在线观看| 亚洲国产精品av| 久久亚洲欧美国产精品乐播 | 成人aa视频在线观看| 久久www免费人成看片高清| 五月婷婷综合网| 亚洲国产精品久久久久婷婷884| 国产精品高潮久久久久无| 久久久99免费| 久久亚洲综合色| 精品国产凹凸成av人网站| 91 com成人网| 欧美一级夜夜爽| 日韩视频免费观看高清完整版在线观看| 色欧美88888久久久久久影院| aaa国产一区| 99久久久国产精品免费蜜臀| 高清不卡一区二区| 国产69精品一区二区亚洲孕妇| 国产精品中文有码| 成人一级黄色片| 91香蕉视频污| 色婷婷香蕉在线一区二区| 日本黄色一区二区| 欧洲视频一区二区| 欧美美女直播网站| 欧美一区二区三区免费观看视频| 91精品国产福利| 精品国产凹凸成av人导航| 国产亚洲一区二区三区四区| 日本一区二区在线不卡| 亚洲图片你懂的| 亚洲福利一区二区| 久久国产人妖系列| 国产91色综合久久免费分享| caoporn国产精品| 欧美色手机在线观看| 日韩一区二区视频在线观看| xf在线a精品一区二区视频网站| 久久久久9999亚洲精品| 综合色天天鬼久久鬼色| 亚洲一区免费视频| 蜜桃视频一区二区三区| 国产成人免费视频一区| 日本道精品一区二区三区| 欧美精品在线观看一区二区| 久久久综合精品| 亚洲国产日日夜夜| 加勒比av一区二区| 972aa.com艺术欧美| 欧美一区二区精品在线| 国产精品久久看| 午夜精品久久久久| 成人av免费在线| 91精品国产综合久久精品麻豆 | 欧美一卡二卡在线| 中文字幕av在线一区二区三区| 亚洲午夜久久久久中文字幕久| 激情五月激情综合网| 色婷婷精品大视频在线蜜桃视频| 欧美一区二区三区免费在线看| 成人欧美一区二区三区小说| 天堂一区二区在线| caoporn国产精品| 精品福利二区三区| 亚洲一区二区三区四区五区中文 | 亚洲美女屁股眼交3| 经典三级在线一区|