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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? udp.c

?? udp,tcp/ip在智能家居芯片上的代碼實(shí)現(xiàn).包括芯片NE64的網(wǎng)絡(luò)驅(qū)動(dòng)源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
 *  \ingroup udp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 26.07.2002
 *	\param sochandle handle to UDP socket to use
 *	\param remip remote IP address to which data should be sent
 *	\param remport remote port number to which data should be sent
 *	\param buf pointer to data buffer (start of user data)
 *	\param blen buffer length in bytes (without space reserved at the 
 *		beginning of buffer for headers)
 *	\param dlen length of user data to be sent (in bytes)
 *	\return 
 *		\li -1 - Error (general error, e.g. parameters)
 *		\li -2 - ARP or lower layer not ready, try again later
 *		\li -3 - Socket closed or invalid local port
 *		\li >0 - OK (number represents number of bytes actually sent)
 *
 *	\warning
 *		\li <i>buf</i> parameter is a pointer to data to be sent in 
 *		user buffer. But note that there <b>MUST</b> be sufficient
 *		free buffer space before that data for UDP header (of #UDP_HLEN
 *		size). 
 *
 *	Use this function to send data over an already opened UDP socket. 
 */
#ifdef IPv6
INT16 udp_send (INT8 sochandle, IPv6Addr * remip, UINT16 remport, UINT8* buf, UINT16 blen, UINT16 dlen)
#else
INT16 udp_send (INT8 sochandle, UINT32 remip, UINT16 remport, UINT8* buf, UINT16 blen, UINT16 dlen)
#endif
{
	struct ucb* soc;
	UINT8* user_buf_start;
	UINT16 cs;
	UINT8 cs_cnt;
	INT16 i;
	
	if( NO_OF_UDPSOCKETS < 0 )
		return(-1);
	
	if( NO_OF_UDPSOCKETS == 0 )
		return(-1);
	
	if( sochandle > NO_OF_UDPSOCKETS ) {
		UDP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	if( sochandle < 0 ) {
		UDP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	if(remip == 0) {
		UDP_DEBUGOUT("Remote IP 0 not allowed\r\n");
		return(-1);
	}
	
	if(remport == 0) {
		UDP_DEBUGOUT("Remote port 0 not allowed\r\n");
		return(-1);
	}
	
	if( dlen > blen )
		dlen = blen;
	
	if( (dlen + UDP_HLEN) > UDP_SEND_MTU)
		dlen = UDP_SEND_MTU - UDP_HLEN;
	
	soc = &udp_socket[sochandle];		/* Get referense	*/

	if(soc->state != UDP_STATE_OPENED ) {
		UDP_DEBUGOUT("UDP Socket Closed\r\n");
		return(-3);
	}
	
	if(soc->locport == 0) {
		UDP_DEBUGOUT("ERROR:Socket local port is zero\r\n");
		return(-1);
	}

	user_buf_start = buf;
	
	buf -= UDP_HLEN;
	
	/* Put header	*/
	
	*buf++ = (UINT8)(soc->locport >> 8);
	*buf++ = (UINT8)soc->locport;
	*buf++ = (UINT8)(remport >> 8);
	*buf++ = (UINT8)remport;
	*buf++ = (UINT8)((dlen + UDP_HLEN) >> 8);
	*buf++ = (UINT8)(dlen + UDP_HLEN);
	*buf++ = 0;
	*buf = 0;
	
	buf = user_buf_start;
	buf -= UDP_HLEN;
	
	/* Calculate checksum if needed	*/
	
	cs = 0;
	
	if( soc->opts & UDP_OPT_SEND_CS) {
		cs = 0;
		cs_cnt = 0;
	
		/* Do it firstly to IP pseudo header	*/
#ifdef IPv6
#else
		cs = ip_checksum(cs, (UINT8)(localmachine.localip >> 24), cs_cnt++);	
		cs = ip_checksum(cs, (UINT8)(localmachine.localip >> 16), cs_cnt++);
		cs = ip_checksum(cs, (UINT8)(localmachine.localip >> 8), cs_cnt++);
		cs = ip_checksum(cs, (UINT8)localmachine.localip, cs_cnt++);
	
		cs = ip_checksum(cs, (UINT8)(remip >> 24), cs_cnt++);	
		cs = ip_checksum(cs, (UINT8)(remip >> 16), cs_cnt++);
		cs = ip_checksum(cs, (UINT8)(remip >> 8), cs_cnt++);
		cs = ip_checksum(cs, (UINT8)remip, cs_cnt++);	
	
		cs = ip_checksum(cs, 0, cs_cnt++);
	
		cs = ip_checksum(cs, (UINT8)IP_UDP, cs_cnt++);
		
		cs = ip_checksum(cs, (UINT8)((dlen + UDP_HLEN) >> 8), cs_cnt++);
		cs = ip_checksum(cs, (UINT8)(dlen + UDP_HLEN), cs_cnt++);	
	
		/* Go to UDP header + data	*/
	
		buf = user_buf_start;
		buf -= UDP_HLEN;
	
		cs = ip_checksum_buf(cs, buf, dlen + UDP_HLEN);
			
		cs = ~ cs;
#endif		
	
		if(cs == 0)
			cs = 0xFFFF;
		/* Save checksum in correct place	*/
		buf = user_buf_start;
		buf -= UDP_HLEN;
		buf += 6;
		*buf++ = (UINT8)(cs >> 8);
		*buf = (UINT8)cs;	
		
		buf = user_buf_start;
		buf -= UDP_HLEN;
			
	}
	
	/* Send it to IP	*/
	
	UDP_DEBUGOUT("Sending UDP...\r\n");
	
	i = process_ip_out(remip, IP_UDP, soc->tos, 100, buf, dlen + UDP_HLEN);
	
	/* Errors?	*/
	
	if( i < 0 )
		return(i);
	
	UDP_DEBUGOUT("UDP packet sent\r\n");
	
	return(i - UDP_HLEN);


}



/** \brief Process received UDP frame
 *	\ingroup periodic_functions
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 15.07.2002
 *	\param frame pointer to received IP frame structure
 *	\param len length of data in bytes
 *	\return
 *		\li -1 - Error (packet not UDP, header errror or no socket for it)
 *		\li >0 - Packet OK
 *
 *	Invoke this function to process received UDP frames. See main_demo.c for
 *	an example on how to accomplish this.
 */
INT16 process_udp_in(struct ip_frame* frame, UINT16 len)
{
	struct ucb* soc;
	UINT16 checksum;
	UINT16 i;
	INT8 sochandle;
		
	/* Is this UDP?	*/
	
	UDP_DEBUGOUT("Processing UDP...\n\r");
	
	if( frame->protocol != IP_UDP ) {
		UDP_DEBUGOUT("ERROR: The protocol is not UDP\n\r");
		return(-1);
	}
	
	/* Start processing the message	*/
	
	NETWORK_RECEIVE_INITIALIZE(frame->buf_index);

	received_udp_packet.sport    = RECEIVE_NETWORK_W();
	received_udp_packet.dport    = RECEIVE_NETWORK_W();		
	received_udp_packet.tlen     = RECEIVE_NETWORK_W();	
	received_udp_packet.checksum = RECEIVE_NETWORK_W();
	
/* Commented out by R42485
	received_udp_packet.sport = ((UINT16)RECEIVE_NETWORK_B()) << 8;
	received_udp_packet.sport |= RECEIVE_NETWORK_B();
	
	received_udp_packet.dport = ((UINT16)RECEIVE_NETWORK_B()) << 8;
	received_udp_packet.dport |= RECEIVE_NETWORK_B();	
	
	received_udp_packet.tlen = ((UINT16)RECEIVE_NETWORK_B()) << 8;
	received_udp_packet.tlen |= RECEIVE_NETWORK_B();
	
	received_udp_packet.checksum = ((UINT16)RECEIVE_NETWORK_B()) << 8;
	received_udp_packet.checksum |= RECEIVE_NETWORK_B();
*/	

	if(received_udp_packet.tlen < UDP_HLEN ) {
		UDP_DEBUGOUT("UDP frame too short\n\r");
		return(-1);
	}
	
	
	/* Map UDP socket	*/
	
	sochandle = -1;
	
	for( i=0; i < NO_OF_UDPSOCKETS; i++) {
		soc = &udp_socket[i];				/* Get referense	*/

		if(soc->state != UDP_STATE_OPENED )
			continue;
		
		if(soc->locport != received_udp_packet.dport)
			continue;
		
		/* Socket found	*/
		
		sochandle = (signed char)i;
		
		break;
	}
	
	if( sochandle < 0 ) {
		UDP_DEBUGOUT("No socket found for received UDP Packet\r\n");
		
		/* TODO: Send ICMP	*/
		
		return(-1);
	}
	
	/* Calculate checksum for received packet	*/
	
	if(soc->opts & UDP_OPT_CHECK_CS) {
		if(received_udp_packet.checksum != 0) {
			checksum = 0;
			i = 0;
			
			/* Do it firstly to IP pseudo header	*/
#if defined(IPv6)
#else
			checksum = ip_checksum(checksum, (UINT8)(frame->dip >> 24), (UINT8)i++);	
			checksum = ip_checksum(checksum, (UINT8)(frame->dip >> 16), (UINT8)i++);
			checksum = ip_checksum(checksum, (UINT8)(frame->dip >> 8), (UINT8)i++);
			checksum = ip_checksum(checksum, (UINT8)frame->dip, (UINT8)i++);
	
			checksum = ip_checksum(checksum, (UINT8)(frame->sip >> 24), (UINT8)i++);	
			checksum = ip_checksum(checksum, (UINT8)(frame->sip >> 16), (UINT8)i++);
			checksum = ip_checksum(checksum, (UINT8)(frame->sip >> 8), (UINT8)i++);
			checksum = ip_checksum(checksum, (UINT8)frame->sip, (UINT8)i++);	
	
			checksum = ip_checksum(checksum, 0, (UINT8)i++);
	
			checksum = ip_checksum(checksum, (UINT8)IP_UDP, (UINT8)i++);
		
			checksum = ip_checksum(checksum, (UINT8)(len >> 8), (UINT8)i++);
			checksum = ip_checksum(checksum, (UINT8)len, (UINT8)i++);	
#endif
	
			NETWORK_RECEIVE_INITIALIZE(frame->buf_index);
	
			for(i=0; i < len; i++)
				checksum = ip_checksum(checksum, RECEIVE_NETWORK_B(), (UINT8)i);
	
			checksum = ~ checksum;
	
			if(checksum != IP_GOOD_CS) {
				UDP_DEBUGOUT("ERROR: UDP Checksum failed!\n\r");
				return (-1);
			}
		
		}
	
		UDP_DEBUGOUT("UDP Checksum OK\n\r");
	
	}
	
	
	received_udp_packet.buf_index = frame->buf_index + UDP_HLEN;
	NETWORK_RECEIVE_INITIALIZE(received_udp_packet.buf_index);
	
	/* Generate data event	*/
	
#if defined(IPv6)
#else
	soc->event_listener(sochandle, UDP_EVENT_DATA, frame->sip, received_udp_packet.sport, received_udp_packet.buf_index, received_udp_packet.tlen - UDP_HLEN);
#endif
	
	return(1);

}

/** \brief Returns next free (not used) local port number
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 19.10.2002
 *	\return 
 *		\li 0 - no free ports!
 *		\li >0 - free local TCP port number
 *
 *	Function attempts to find new local port number that can be used to 
 *	establish a connection. 
 */
UINT16 udp_getfreeport (void){
	struct ucb* soc;
	static UINT16 lastport = 1;
	UINT16 start;
	UINT16 i;
	

	/* Try with every port to every socket untill free found	*/
		
	for( start = lastport++; start != lastport; lastport++)	{
		if(lastport == UDP_PORTS_END)
			lastport = 1;
			
		for(i = 0; i < NO_OF_UDPSOCKETS; i++) {
			soc = &udp_socket[i];					/* Get socket	*/
			
			if( (soc->state > UDP_STATE_CLOSED) && (soc->locport == lastport) )			{
				/* Blaah, this socket has reserved the port, go to next one	*/
				break; 
			}
			
		}	
			
		/* Did we found it?	*/
			
		if( i == NO_OF_UDPSOCKETS)
			break; 
			
	}
		
	if(lastport == start) {
		DEBUGOUT("Out of UDP ports!!\n\r");
		return(0);
	}
		
	return(lastport);
		
}

?? 快捷鍵說(shuō)明

搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久午夜羞羞影院免费观看| 亚洲色大成网站www久久九九| 91免费国产在线| 国产很黄免费观看久久| 美女一区二区视频| 免费成人深夜小野草| 日韩影院免费视频| 日韩精品电影在线观看| 日韩高清不卡一区二区| 日本不卡视频在线| 麻豆成人av在线| 精品一区二区三区欧美| 国内精品久久久久影院色| 国产伦精品一区二区三区免费| 国产麻豆日韩欧美久久| 成人黄页毛片网站| 色哟哟国产精品免费观看| 91精品1区2区| 欧美顶级少妇做爰| 欧美zozo另类异族| 亚洲国产成人午夜在线一区 | 亚洲男女毛片无遮挡| 亚洲欧洲精品天堂一级| 亚洲精品欧美激情| 日精品一区二区| 久久99精品国产91久久来源| 国产精品小仙女| 91成人在线免费观看| 欧美女孩性生活视频| 久久亚洲影视婷婷| 亚洲日本免费电影| 日韩av在线发布| 国产一区二区电影| 91麻豆免费视频| 制服丝袜中文字幕亚洲| 久久精品在这里| 一区二区三区四区中文字幕| 午夜激情一区二区三区| 国产精品123区| 色狠狠av一区二区三区| 日韩一区二区精品葵司在线| 国产精品丝袜一区| 日韩高清在线一区| 成人免费视频播放| 欧美精选一区二区| 欧美极品xxx| 午夜欧美一区二区三区在线播放| 激情久久五月天| 91免费在线视频观看| 欧美电影免费观看完整版| 亚洲日本在线a| 卡一卡二国产精品| 色狠狠色噜噜噜综合网| 久久久久久9999| 亚洲综合色自拍一区| 国产黄色成人av| 欧美日韩国产综合久久| 国产精品久久久久久久久免费樱桃| 亚洲图片欧美色图| 粉嫩嫩av羞羞动漫久久久| 欧美日韩在线播放| 麻豆91精品视频| 99久久久精品免费观看国产蜜| 欧美日韩国产免费一区二区| 欧美激情综合五月色丁香 | 成人天堂资源www在线| 欧美三级一区二区| 国产精品成人一区二区艾草| 久国产精品韩国三级视频| 色综合咪咪久久| 国产午夜亚洲精品理论片色戒| 亚洲国产精品一区二区久久| 成人一区二区三区在线观看| 欧美一区二区视频免费观看| 亚洲免费大片在线观看| 国产91精品精华液一区二区三区 | 6080日韩午夜伦伦午夜伦| 国产精品成人一区二区三区夜夜夜 | 欧美国产成人在线| 捆绑调教一区二区三区| 69堂成人精品免费视频| 亚洲综合清纯丝袜自拍| caoporen国产精品视频| 国产欧美日韩三级| 国产一区二区三区免费播放| 日韩一级在线观看| 亚洲国产精品尤物yw在线观看| 99久久99久久精品免费看蜜桃| 久久久久高清精品| 国产乱人伦偷精品视频不卡 | 免费成人在线观看视频| 欧美日韩久久久一区| 亚洲综合在线免费观看| 99re成人精品视频| 国产精品二三区| 成人黄色综合网站| 国产精品―色哟哟| eeuss影院一区二区三区| 中文字幕日本不卡| 本田岬高潮一区二区三区| 中文字幕欧美日韩一区| 国产999精品久久久久久| 久久精品欧美一区二区三区不卡| 久久激情综合网| 精品久久久久久无| 精久久久久久久久久久| 久久综合色天天久久综合图片| 另类小说色综合网站| 精品国产污污免费网站入口| 激情综合色播激情啊| 久久久不卡网国产精品二区| 黄网站免费久久| 国产日韩欧美制服另类| 不卡大黄网站免费看| 亚洲欧洲精品一区二区三区不卡| 99国产精品一区| 亚洲精选在线视频| 欧美日韩另类国产亚洲欧美一级| 天堂久久一区二区三区| 欧美电影免费观看高清完整版在 | 国内久久婷婷综合| 日本一区二区免费在线观看视频 | 亚洲精品日日夜夜| 欧美日韩一区精品| 蜜桃视频第一区免费观看| 欧美一区二区三区四区高清| 国产在线精品免费av| 中文在线一区二区| 色偷偷久久人人79超碰人人澡 | 99re这里都是精品| 亚洲已满18点击进入久久| 91超碰这里只有精品国产| 久久av资源站| 最好看的中文字幕久久| 欧美区视频在线观看| 久草这里只有精品视频| 国产精品高清亚洲| 欧美区视频在线观看| 国产成人av影院| 亚洲精品乱码久久久久久 | 亚洲视频免费在线观看| 欧美精品粉嫩高潮一区二区| 国产一区在线观看麻豆| 亚洲免费毛片网站| 欧美大片在线观看一区二区| 99久久精品国产毛片| 日本欧美肥老太交大片| 国产精品亲子伦对白| 欧美片网站yy| www.性欧美| 九九在线精品视频| 亚洲在线免费播放| 国产亚洲一区二区三区在线观看 | 欧美日韩视频在线一区二区| 久久草av在线| 亚洲免费观看高清完整版在线 | 久久精品亚洲麻豆av一区二区| 色偷偷成人一区二区三区91| 蜜芽一区二区三区| 亚洲精品老司机| 久久久精品人体av艺术| 精品视频123区在线观看| 国产精品亚洲第一| 男男gaygay亚洲| 亚洲人吸女人奶水| 久久久久久9999| 日韩视频免费直播| 日本道在线观看一区二区| 国产精品影音先锋| 日日骚欧美日韩| 亚洲免费大片在线观看| 国产欧美一区二区精品忘忧草 | 亚洲激情一二三区| 久久久精品国产免大香伊| 欧美片网站yy| 在线观看免费亚洲| 99精品视频一区二区| 精品亚洲成a人| 三级不卡在线观看| 亚洲一区二区三区四区五区中文| 国产欧美日韩一区二区三区在线观看 | 欧美日韩精品三区| 色噜噜狠狠成人网p站| 成人福利在线看| 国产精品一区在线| 久久国产夜色精品鲁鲁99| 香蕉加勒比综合久久| 一区二区欧美视频| 亚洲三级电影网站| 亚洲欧洲精品成人久久奇米网| 欧美激情资源网| 国产婷婷色一区二区三区| 26uuu亚洲综合色欧美| 日韩三级高清在线| 日韩三级免费观看| 欧美电影免费提供在线观看| 日韩一区二区三区视频在线| 91精品国产综合久久久久久| 精品视频一区二区三区免费| 在线观看www91|