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

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

?? tcp.c

?? udp,tcp/ip在智能家居芯片上的代碼實現.包括芯片NE64的網絡驅動源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
					
					if(soc->type & TCP_TYPE_SERVER )
						tcp_newstate(soc, TCP_STATE_LISTENING);
					else
						tcp_newstate(soc, TCP_STATE_CLOSED);
					
					soc->myflags = TCP_FLAG_RESET;
					tcp_sendcontrol(handle);
					
					/* Inform application	*/

					soc->event_listener(handle, TCP_EVENT_ABORT, soc->rem_ip, soc->remport);
				
					handle++;
		
					return;
				}	
				
				break;
			
			default:
				break;	
			
		}
		
		/* Go to next socket if there was no event	*/
		
		handle++;
		
	}
	
}



/** \brief Initialize TCP module
 *	\ingroup core_initializer
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 21.07.2002
 *	\return
 *		\li -1 - error
 *		\li >0 - number of sockets initialized
 *	\warning 
 *		\li This function <b>must</b> be invoked at startup before any
 *		other TCP functions are invoked.
 *
 *	This function initializes all sockets and corresponding tcbs to known
 *	state. Timers are also allocated for each socket and everything is
 *	brought to a predefined state.
 *
 */
INT8 tcp_init (void)
{
	UINT16 i;
	INT16 h;
	struct tcb* soc;
	
	if( NO_OF_TCPSOCKETS < 0 )
		return(-1);
	
	if( NO_OF_TCPSOCKETS == 0 )
		return(0);
	
	TCP_DEBUGOUT("Initializing TCP");
	
	for(i=0; i < NO_OF_TCPSOCKETS; i++) {
		soc = &tcp_socket[i];			/* Get Socket	*/
		h = -1;
		
		soc->state = TCP_STATE_FREE;
		soc->type = TCP_TYPE_NONE;
		soc->flags = 0;
		soc->rem_ip = 0;
		soc->remport = 0;
		soc->locport = 0;
		soc->myflags = 0;
		soc->send_mtu = TCP_DEF_MTU;
		soc->tos = 0;
		soc->tout = 0;
		soc->event_listener = 0;
		
		/* Reserve Timers	*/
		
		h = get_timer();
		
		/*
		if( h < 0 ) {
			TCP_DEBUGOUT("\n\rERROR:Error getting timer for TCP Socket!\n\r");
			return(-1);
		}
		*/
		
		init_timer(h,0);					/* No timeout	*/
		
		soc->persist_timerh = h;
		
		h = get_timer();
		
		/*
		if( h < 0 ) {
			TCP_DEBUGOUT("\n\rERROR:Error getting timer for TCP Socket!\n\r");
			return(-1);
		}
		*/
		
		init_timer(h,0);					/* No timeout	*/
		
		soc->retransmit_timerh = h;
		
		soc->retries_left = 0;		 
		
		TCP_DEBUGOUT(".");
		
	
	}
	
	TCP_DEBUGOUT("\n\rTCP Initialized\n\r");
	
	/* Return number of sockets initialized	*/
	
	return(i+1);
	

}




/*******************************************************************************/
/*******	TCP Internal functions										********/
/*******************************************************************************/


/** \brief Check and process the received TCP frame
 *	\ingroup periodic_functions
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 12.07.2002
 *	\param frame pointer to received ip_frame structure
 *	\param len length of data contained in IP datagram (in bytes)
 *	\return 
 *		\li -1 - Error (packet not OK, or not TCP,or something else)
 *		\li >0 - Packet OK
 *
 *	Invoke this function to process received TCP frames. See main_demo.c for
 *	an example on how to accomplish this.
 */
INT16 process_tcp_in (struct ip_frame* frame, UINT16 len)
{
	struct tcb* soc;
	UINT16 hlen;
	UINT8 olen;
	UINT16 dlen;
	UINT16 i;
	INT8 sochandle;	
	INT16 temp;
	
	/* Is this TCP?	*/
	
	TCP_DEBUGOUT("Processing TCP...\n\r");
	
	if( frame->protocol != IP_TCP ) {
		TCP_DEBUGOUT("ERROR: The protocol is not TCP\n\r");
		return(-1);
	}
	
	/* Calculate checksum for received packet	*/

	
	NETWORK_RECEIVE_INITIALIZE(frame->buf_index);
	
	if( tcp_check_cs (frame, len) == 1) {
		TCP_DEBUGOUT("TCP Checksum OK\n\r");
	} else {
		TCP_DEBUGOUT("ERROR:TCP Checksum failed\r\n");
		return(-1);
	} 

	/* Get the header	*/
	
	/* Get the header	*/
	
	NETWORK_RECEIVE_INITIALIZE(frame->buf_index);
	

	received_tcp_packet.sport = RECEIVE_NETWORK_W();

	
	received_tcp_packet.dport = RECEIVE_NETWORK_W();
	
	received_tcp_packet.seqno = (((UINT32)RECEIVE_NETWORK_B()) << 24);
	received_tcp_packet.seqno |= (((UINT32)RECEIVE_NETWORK_B()) << 16);
	received_tcp_packet.seqno |= (((UINT32)RECEIVE_NETWORK_B()) << 8);
	received_tcp_packet.seqno |= RECEIVE_NETWORK_B();
	
	received_tcp_packet.ackno = (((UINT32)RECEIVE_NETWORK_B()) << 24);
	received_tcp_packet.ackno |= (((UINT32)RECEIVE_NETWORK_B()) << 16);
	received_tcp_packet.ackno |= (((UINT32)RECEIVE_NETWORK_B()) << 8);
	received_tcp_packet.ackno |= RECEIVE_NETWORK_B();

	received_tcp_packet.hlen_flags = RECEIVE_NETWORK_W();
	received_tcp_packet.window = RECEIVE_NETWORK_W();
	
	received_tcp_packet.checksum = RECEIVE_NETWORK_W();
	
	received_tcp_packet.urgent = RECEIVE_NETWORK_W();
	
	/* Little check for options	*/
	
	hlen = received_tcp_packet.hlen_flags & 0xF000;
	hlen >>= 10;
	
	if( hlen < MIN_TCP_HLEN ) {
		TCP_DEBUGOUT("ERROR: Received TCP Header too short\r\n");
		return(-1);
	}
	
	if(hlen == MIN_TCP_HLEN)
		TCP_DEBUGOUT("TCP does not contain options\r\n");
	
	olen = hlen - MIN_TCP_HLEN;
	
	if( olen > MAX_TCP_OPTLEN ) {
		TCP_DEBUGOUT("ERROR: Received TCP header contains too long option field\r\n");
		return(-1);
	}
	
	/* Calculate data length	*/
	
	if( hlen > len ) {
		TCP_DEBUGOUT("ERROR: TCP header longer than packet\r\n");
		return(-1);
	}
	
	dlen = len - hlen - olen;
	
	/* Get options (if any)	*/
	
	for(i=0; i<olen;i++)
		received_tcp_packet.opt[i] = RECEIVE_NETWORK_B();
		
	/* Try to find rigth socket to process with		*/
	
	sochandle = tcp_mapsocket(frame, &received_tcp_packet);
	
	if(sochandle < 0) {
		TCP_DEBUGOUT("ERROR: Processing TCP packet failed\r\n");
		tcp_sendreset(&received_tcp_packet, frame->sip);
		return(-1);
	}
	
	received_tcp_packet.buf_index = frame->buf_index + hlen;
	NETWORK_RECEIVE_INITIALIZE(received_tcp_packet.buf_index);
	
	
	
	/* Get socket reference	*/
	
	soc = &tcp_socket[sochandle];
	
	/* Process the packet on TCP State Machine		*/
	
	switch(soc->state) {
		case TCP_STATE_CONNECTED:
		
			TCP_DEBUGOUT("CONNECTED State\r\n");
			
			/* Check for RESET	*/
			
			if(received_tcp_packet.hlen_flags & TCP_FLAG_RESET)	{
				TCP_DEBUGOUT("ERROR:Reset received\r\n");

				/* Inform application	*/

				soc->event_listener(sochandle, TCP_EVENT_ABORT, soc->rem_ip, soc->remport);				
				
				if(soc->type & TCP_TYPE_SERVER)
					tcp_newstate(soc, TCP_STATE_LISTENING);
				else
					tcp_newstate(soc, TCP_STATE_CLOSED);
					
				return(-1);
			}
			
			/* Check for SYN (If the peer didn't get our SYN+ACK or ACK)	*/
			
			if( received_tcp_packet.hlen_flags & TCP_FLAG_SYN )	{
				/* Is it the SYN+ACK we have already ACKed but maybe ACK lost?	*/
				
				if( received_tcp_packet.hlen_flags & TCP_FLAG_ACK )	{
					/* It's SYN+ACK but how about sequence	*/
					
					if( (received_tcp_packet.seqno + 1) == soc->receive_next ) {
					
						if( received_tcp_packet.ackno == soc->send_next ) {
						
							TCP_DEBUGOUT("Received SYN+ACK again\r\n");
							
							/* ACK the SYN	*/
							soc->myflags = TCP_FLAG_ACK;
							tcp_sendcontrol(sochandle);
							return(0);
						}
						
					}
				
				 /* It is maybe SYN again so it haven't get our SYN + ACK	*/
				 /* Let our retransmission handle it						*/
				 
				 return(0);
				
				
				}
			
			}
			
			/* Do we have unacked data?		*/
			
			if( soc->send_unacked != soc->send_next ) {
			
				/* Yep, is the ACK valid?	*/
				
				if( (received_tcp_packet.hlen_flags & TCP_FLAG_ACK) == 0) {
				
					TCP_DEBUGOUT("Packet without ACK and unacked data. Packet not processed\r\n");
					return(0);
				}
				
				if( received_tcp_packet.ackno == soc->send_next ) {
				
					/* We don't have unacked data now	*/
				
					soc->send_unacked = soc->send_next;
				
					/* Inform application	*/
				
					soc->event_listener(sochandle, TCP_EVENT_ACK, soc->rem_ip, soc->remport);
				
				}

			
			}
			
			/* Is the sequence OK	*/
			
			if(soc->receive_next != received_tcp_packet.seqno)
			{
				/* Out of range, inform what we except	*/
			
				DEBUGOUT("Too big sequence number received\r\n");
				
				soc->myflags = TCP_FLAG_ACK;
				tcp_sendcontrol(sochandle);
				return(0);
			}
			
			/* Generate data event to application	*/
				
#ifdef IPv6
			soc->event_listener(sochandle, TCP_EVENT_DATA, (IPv6Addr *)&dlen, 0);
#else
			soc->event_listener(sochandle, TCP_EVENT_DATA, dlen, 0);
#endif
			soc->receive_next += dlen;			
					
			/* Is the FIN flag set?	*/
			
			if( received_tcp_packet.hlen_flags & TCP_FLAG_FIN )	{
				TCP_DEBUGOUT("Other end want's to close\r\n");
				
				/* Inform application if we don't have unacked data	*/
				
				if( soc->send_unacked == soc->send_next) {
				
					soc->event_listener(sochandle, TCP_EVENT_CLOSE, soc->rem_ip, soc->remport);
				
					/* ACK FIN and set our own FIN	*/
				
					soc->receive_next++;
					soc->send_next++;
					soc->myflags = TCP_FLAG_ACK | TCP_FLAG_FIN;
				
					tcp_newstate(soc, TCP_STATE_LAST_ACK);
					tcp_sendcontrol(sochandle);
				
					return(0);
				}
			}
			
			/* ACK the data if there was it	*/
			
			if(dlen) {
				soc->myflags = TCP_FLAG_ACK;
				tcp_sendcontrol(sochandle);
			}
			
			tcp_newstate(soc, TCP_STATE_CONNECTED);			
			

			return(0);
			
		
			break;
	
		case TCP_STATE_FREE:
			
			/* Reset connection	*/
			tcp_sendreset(&received_tcp_packet, frame->sip);
			return(-1);
		
			break;
		
		case TCP_STATE_CLOSED:
			
			/* Reset connection	*/
			tcp_sendreset(&received_tcp_packet, frame->sip);
			return(-1);		
		
			break;
		
		case TCP_STATE_LISTENING:
		
			TCP_DEBUGOUT("LISTENING State...\r\n");
		
			/* Check Flags	*/
			
			if(received_tcp_packet.hlen_flags & TCP_FLAG_RESET) {
				TCP_DEBUGOUT("ERROR:Reset received\r\n");
				tcp_newstate(soc, TCP_STATE_LISTENING);
				return(-1);
			}
			
			if(received_tcp_packet.hlen_flags & TCP_FLAG_ACK) {
				TCP_DEBUGOUT("ERROR:Ack received\r\n");
				tcp_newstate(soc, TCP_STATE_LISTENING);
				/* Reset connection	*/
				tcp_sendreset(&received_tcp_packet, frame->sip);
				return(-1);	
			}
			
			if((received_tcp_packet.hlen_flags & TCP_FLAG_SYN) == 0) {
				TCP_DEBUGOUT("ERROR:No SYN set on packet\r\n");
				tcp_newstate(soc, TCP_STATE_LISTENING);
				/* Reset connection	*/
				tcp_sendreset(&received_tcp_packet, frame->sip);
				return(-1);
			}
			
			/* OK, SYN received	*/
			
			/* Inform application and see if accepted	*/
			
			temp = (INT16)soc->event_listener(sochandle, TCP_EVENT_CONREQ, soc->rem_ip, soc->remport);
			
			if( temp == -1)	{
				TCP_DEBUGOUT("Application disregarded connection request\r\n");
				tcp_sendreset(&received_tcp_packet, frame->sip);
				return(-1);
			}
			
			if( temp == -2 ) {
				TCP_DEBUGOUT("Application wants to think about accepting conreq\r\n");
				return(1);
			}
			
			/* The connection request was accepted	*/
			
			TCP_DEBUGOUT("Next state SYN_RECEIVED\r\n");
			if(soc->flags & TCP_INTFLAGS_CLOSEPENDING)
				soc->flags ^= TCP_INTFLAGS_CLOSEPENDING;
			tcp_newstate(soc, TCP_STATE_SYN_RECEIVED);
			soc->receive_next = received_tcp_packet.seqno + 1;	/* Ack SYN		*/
			soc->send_unacked = tcp_initseq();
			
			soc->myflags = TCP_FLAG_SYN | TCP_FLAG_ACK;
			tcp_sendcontrol(sochandle);
			soc->send_next = soc->send_unacked + 1;
			
			return(1);
			
			break;
			
		case TCP_STATE_SYN_RECEIVED:
		
			TCP_DEBUGOUT("SYN_RECEIVED State...\r\n");
			
			/* Check Flags	*/
			
			if(received_tcp_packet.hlen_flags & TCP_FLAG_RESET)	{
				TCP_DEBUGOUT("ERROR:Reset received\r\n");
				
				/* Inform application	*/
				
				soc->event_listener(sochandle, TCP_EVENT_ABORT, soc->rem_ip, soc->remport);
				
				if(soc->type & TCP_TYPE_SERVER)
					tcp_newstate(soc, TCP_STATE_LISTENING);
				else
					tcp_newstate(soc, TCP_STATE_CLOSED);
					
				return(-1);
			}
			
			/* Is it SYN+ACK (if we are the because of simultaneous open)	*/
			
			if( (received_tcp_packet.hlen_flags & TCP_FLAG_SYN) &&
				(received_tcp_packet.hlen_flags & TCP_FLAG_ACK)	) {			
				
				if( received_tcp_packet.ackno != soc->send_next ) {
					TCP_DEBUGOUT("SYN+ACK received but wrong Ack\n\r");
					return(-1);
				}
				
				TCP_DEBUGOUT("SYN+ACK received, this side established\n\r");
				
				/* Get peer's seq number	*/
				
				soc->receive_next =  received_tcp_packet.seqno;
				soc->receive_next++;							/* ACK SYN	*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线一区二区三区| 欧美精品一卡二卡| 琪琪久久久久日韩精品| 亚洲激情六月丁香| 成人欧美一区二区三区小说| 国产日韩精品视频一区| 国产色91在线| 国产区在线观看成人精品| 日韩一区二区精品在线观看| 日韩一区二区三区视频| 精品视频全国免费看| 欧美三级日韩三级国产三级| 欧美久久一二三四区| 日韩天堂在线观看| 久久久影视传媒| 日本一区二区三区dvd视频在线| 国产亚洲成aⅴ人片在线观看| 中文字幕 久热精品 视频在线| 国产精品盗摄一区二区三区| 亚洲柠檬福利资源导航| 亚洲综合免费观看高清完整版在线 | 99re成人在线| 91福利视频久久久久| 欧美乱熟臀69xxxxxx| 日韩三级视频中文字幕| 久久久亚洲午夜电影| 中文字幕一区三区| 亚洲伊人伊色伊影伊综合网| 日韩电影免费一区| 色偷偷久久人人79超碰人人澡| 91碰在线视频| 91精品免费在线| 日本一区免费视频| 午夜伊人狠狠久久| 国产成人在线视频免费播放| 在线精品视频一区二区| 欧美一区二区三区视频在线观看 | 国产尤物一区二区在线| 成人av免费网站| 欧美日韩不卡在线| 国产午夜精品久久| 午夜一区二区三区在线观看| 国产精品69毛片高清亚洲| 在线看国产一区二区| 久久美女高清视频| 亚洲国产成人va在线观看天堂| 国产在线精品国自产拍免费| 色综合久久久久| 国产三级精品视频| 琪琪久久久久日韩精品| 色综合久久九月婷婷色综合| 精品成人佐山爱一区二区| 亚洲精品国产无套在线观| 裸体一区二区三区| 欧美午夜精品一区| 日韩美女久久久| 国产成人免费视频精品含羞草妖精 | 国产农村妇女毛片精品久久麻豆| 亚洲一级二级三级| 94-欧美-setu| 亚洲国产精品av| 国产一区二区不卡老阿姨| 在线观看成人小视频| 国产精品初高中害羞小美女文| 美女视频黄免费的久久| 欧美日韩夫妻久久| 亚洲午夜久久久| 色噜噜久久综合| 亚洲男人电影天堂| 一本到一区二区三区| 国产精品视频免费看| 国产高清精品在线| 国产无一区二区| 国产一区 二区| 国产午夜精品久久久久久免费视 | 欧美日韩中文字幕一区| 最新国产成人在线观看| 成人av中文字幕| 国产精品美女久久久久av爽李琼 | 日本欧美大码aⅴ在线播放| 欧美在线短视频| 亚洲国产美女搞黄色| 91浏览器入口在线观看| 最新高清无码专区| 日本道精品一区二区三区| 亚洲激情综合网| 欧美日韩午夜精品| 麻豆视频观看网址久久| 精品国产乱码久久久久久老虎| 美女视频黄频大全不卡视频在线播放| 欧美一区二区在线免费播放| 久久精品av麻豆的观看方式| 亚洲精品一线二线三线无人区| 麻豆91小视频| 欧美国产精品v| 色妹子一区二区| 日韩和欧美一区二区三区| 日韩一区二区精品葵司在线 | 成人久久18免费网站麻豆| 国产精品妹子av| 91无套直看片红桃| 亚洲高清在线视频| 精品国产乱码久久久久久夜甘婷婷 | 日韩欧美一卡二卡| 成人性生交大片免费看中文 | 狠狠色丁香婷婷综合久久片| 久久亚洲综合色一区二区三区| 国产成人精品一区二区三区网站观看| 专区另类欧美日韩| 7777精品伊人久久久大香线蕉经典版下载| 欧美性极品少妇| 美日韩一区二区| 成人免费在线视频| 欧美日韩免费在线视频| 精东粉嫩av免费一区二区三区| 国产精品久久久久久久久果冻传媒| 色诱亚洲精品久久久久久| 日本不卡一区二区三区| 国产区在线观看成人精品| 欧美在线综合视频| 国产麻豆精品在线观看| 亚洲国产一区二区a毛片| 精品福利二区三区| 欧美日韩午夜影院| 成人黄色在线视频| 久久99精品久久只有精品| 亚洲黄色免费电影| 国产女人18毛片水真多成人如厕 | 国产精品123区| 免费成人在线播放| 蜜桃免费网站一区二区三区| 亚洲国产高清在线| 日韩美一区二区三区| 色婷婷综合五月| 成人99免费视频| 国产精品一区二区在线观看不卡| 亚洲蜜臀av乱码久久精品| 国产日韩欧美麻豆| 久久久亚洲国产美女国产盗摄| 9191久久久久久久久久久| 色综合一个色综合| 日本一区二区电影| 久久亚洲二区三区| 日韩精品专区在线影院重磅| 色先锋资源久久综合| 成人午夜视频在线观看| 久久66热偷产精品| 久久99精品国产麻豆不卡| 日本美女一区二区| 日韩影院在线观看| 日韩制服丝袜av| 日韩和欧美一区二区| 亚洲成av人片一区二区三区 | 欧美午夜精品一区二区蜜桃| 色综合久久综合| 91行情网站电视在线观看高清版| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲三级电影网站| 亚洲欧洲av在线| 综合久久综合久久| 亚洲欧美偷拍三级| 亚洲一区二三区| 亚洲va韩国va欧美va| 亚洲国产aⅴ天堂久久| 午夜电影一区二区三区| 天天操天天色综合| 日本强好片久久久久久aaa| 另类调教123区 | 亚洲柠檬福利资源导航| 一区二区三区不卡视频| 一个色综合av| 午夜精品视频在线观看| 免费观看在线色综合| 国内精品久久久久影院色| 国产不卡高清在线观看视频| 不卡一区二区中文字幕| 日本二三区不卡| 日韩一级在线观看| 中文字幕欧美日本乱码一线二线| 亚洲天堂成人在线观看| 亚洲va中文字幕| 韩国v欧美v亚洲v日本v| 成人精品高清在线| 欧美三区在线观看| 亚洲少妇屁股交4| 一区二区三区精品| 日本一不卡视频| 成人av集中营| 欧美一区二区三区人| 久久精品网站免费观看| 一区二区三区在线观看网站| 人人精品人人爱| 不卡av电影在线播放| 欧美二区三区的天堂| 国产日韩成人精品| 亚洲国产精品欧美一二99| 国产精品一区一区| 欧美三级视频在线观看| 久久蜜桃香蕉精品一区二区三区| 亚洲宅男天堂在线观看无病毒|