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

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

?? tcp.c

?? 在freescale 的ne64上開發的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
				
				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;
	
//	//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((UINT8)(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((UINT8)(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;
	
	/* 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	*/

				(void)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	*/
				
					(void)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	*/
				
			(void)soc->event_listener(sochandle, TCP_EVENT_DATA, dlen, 0);
			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) {
				
					(void)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	*/
				
				(void)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	*/
				
				/* We have no unacked data	*/
				
				soc->send_unacked = soc->send_next;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲午夜精品久久久久久| 99综合电影在线视频| 国产精品美女视频| 日韩精品一区二区三区在线观看| 91色porny蝌蚪| 99精品黄色片免费大全| 国产成人精品亚洲日本在线桃色 | 制服丝袜在线91| 91麻豆国产福利精品| 91天堂素人约啪| 99久久婷婷国产综合精品电影 | 成人理论电影网| 99国产精品久久久久| 91尤物视频在线观看| 91精彩视频在线| 欧美日韩中文一区| 欧美色图第一页| 欧美一区二区三级| 国产亚洲综合性久久久影院| 一区免费观看视频| 亚洲一区二区五区| 日韩高清在线电影| 另类的小说在线视频另类成人小视频在线 | 国产一区二区三区在线观看免费视频| 欧美aaaaa成人免费观看视频| 国产制服丝袜一区| 91香蕉视频mp4| 欧美日韩mp4| 久久精品视频一区二区| 国产精品卡一卡二卡三| 夜夜精品浪潮av一区二区三区| 日韩va亚洲va欧美va久久| 国产成人精品一区二区三区四区 | 国产精品你懂的| 亚洲欧美视频在线观看视频| 一区二区三区av电影| 麻豆91在线观看| eeuss鲁一区二区三区| 欧美绝品在线观看成人午夜影视| 日韩一区二区免费高清| 国产精品久久毛片av大全日韩| 亚洲三级免费电影| 日韩中文字幕区一区有砖一区| 久久精品免费在线观看| 五月婷婷综合网| 成人av网站免费观看| 欧美一级视频精品观看| 亚洲激情第一区| 国产美女av一区二区三区| 欧美日韩一区二区三区四区五区 | 欧美本精品男人aⅴ天堂| 欧美自拍偷拍一区| 欧美精品一区在线观看| 亚洲成人av资源| 91在线免费播放| 欧美成人精品高清在线播放| 亚洲综合久久久| www.66久久| 久久综合九色综合97婷婷| 石原莉奈在线亚洲三区| 色婷婷av一区二区| 国产精品不卡一区二区三区| 日本午夜精品一区二区三区电影 | 久久99热这里只有精品| 色综合久久久网| 欧美videos中文字幕| 亚洲一区二区美女| 在线免费观看日韩欧美| 亚洲视频在线观看三级| 麻豆91在线看| 91麻豆精品国产91久久久更新时间 | 精品国产亚洲一区二区三区在线观看| 亚洲欧美乱综合| a美女胸又www黄视频久久| 久久久久一区二区三区四区| 久久精品国产第一区二区三区 | 国产综合久久久久影院| 欧美放荡的少妇| 午夜精品久久久久久久久久久| 日本精品一区二区三区四区的功能| 中文一区一区三区高中清不卡| 国产精品一色哟哟哟| 精品国内片67194| 国产一区二区三区观看| 国产婷婷一区二区| 波多野结衣精品在线| 一区二区日韩av| 欧美日韩一区二区三区四区| 免费av网站大全久久| 久久午夜羞羞影院免费观看| 99国产精品久久久久久久久久 | 亚洲专区一二三| 午夜精品久久久久久久久久久 | 国产欧美日韩视频在线观看| 日韩午夜激情电影| 成人av午夜电影| 国产精品久99| 最好看的中文字幕久久| 日本系列欧美系列| 欧美日韩激情一区二区三区| 久久久精品免费观看| 日本高清无吗v一区| 国产精品区一区二区三区| 精品一区二区三区影院在线午夜| 亚洲高清在线精品| 色婷婷精品大在线视频| 夜夜亚洲天天久久| 粉嫩av一区二区三区| 亚洲久本草在线中文字幕| 久久99久久精品| 国产成人在线视频免费播放| 91精品国产一区二区人妖| 欧美国产日本视频| 青青草原综合久久大伊人精品优势| 成人性生交大片免费看视频在线 | 国产精品久久久久久久久久久免费看| 亚洲精品日韩一| 色噜噜狠狠色综合中国| 国产欧美日韩激情| 激情综合色播激情啊| 欧美一卡二卡在线观看| 亚洲成a人片在线不卡一二三区| 国产精品99久| 欧美日韩在线免费视频| 久久精品免费观看| 国产性做久久久久久| 成人丝袜视频网| 成人免费在线观看入口| 欧美在线高清视频| 亚洲成av人在线观看| 热久久一区二区| 午夜伦欧美伦电影理论片| 精品91自产拍在线观看一区| 岛国精品在线播放| 同产精品九九九| 亚洲综合自拍偷拍| 自拍视频在线观看一区二区| 欧美性感一区二区三区| 国产a区久久久| 蜜臀国产一区二区三区在线播放| 中文字幕在线观看不卡| 成人久久18免费网站麻豆 | 国产成人鲁色资源国产91色综| 亚洲欧美综合网| 美女视频黄免费的久久| 不卡电影免费在线播放一区| 国产亚洲精品福利| 99综合电影在线视频| 欧美国产日韩a欧美在线观看 | 日韩美一区二区三区| 欧美日韩国产首页| 欧美网站大全在线观看| 在线视频你懂得一区| 91啪亚洲精品| 国产中文字幕精品| 色菇凉天天综合网| 91麻豆免费视频| 91色乱码一区二区三区| 91香蕉视频mp4| 色噜噜狠狠成人中文综合| 日本精品一区二区三区高清| 色噜噜久久综合| 91精品国产福利| 日韩免费电影一区| 国产亚洲短视频| 最新久久zyz资源站| 亚洲免费观看高清完整| 亚洲一二三级电影| 日韩国产精品大片| 国产一区二区剧情av在线| 国产很黄免费观看久久| 成人在线视频一区| 色拍拍在线精品视频8848| 欧美亚洲国产一区二区三区| 欧美一区二区成人6969| 精品国产免费视频| 国产精品少妇自拍| 亚洲成人动漫在线免费观看| 精品亚洲aⅴ乱码一区二区三区| 国产主播一区二区三区| 色激情天天射综合网| 4hu四虎永久在线影院成人| 久久综合久久99| 亚洲国产精品v| 亚洲精品国产精品乱码不99 | 另类人妖一区二区av| 国产精品91一区二区| 日本黄色一区二区| 欧美成人性战久久| 亚洲视频图片小说| 久久精品国产在热久久| 99久久伊人久久99| 欧美一区二区日韩| 国产精品久久久久久久久果冻传媒| 亚洲影院在线观看| 极品少妇xxxx精品少妇| 日本精品一区二区三区高清 | 综合久久久久久久| 日韩av在线播放中文字幕| 成人av影院在线|