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

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

?? tcp.c

?? 用于以太網開發
?? 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色porny蝌蚪| 欧美精品一区二区三区很污很色的| 亚洲激情成人在线| 国产91丝袜在线播放九色| 日韩一级视频免费观看在线| 亚洲视频在线一区观看| 国产精品一区在线| 精品盗摄一区二区三区| 日韩国产成人精品| 欧美日韩国产高清一区二区三区| 18欧美乱大交hd1984| 成人手机在线视频| 久久久久久久久久久久电影| 美女www一区二区| 欧美精品一二三| 亚洲国产视频一区二区| 91老师片黄在线观看| 国产精品福利一区二区| 成人av动漫网站| 日韩一区二区精品| 日韩中文字幕av电影| 欧美精品在线观看一区二区| 亚洲成人黄色影院| 6080yy午夜一二三区久久| 亚洲成人黄色小说| 51精品国自产在线| 蜜臀av一区二区| 日韩久久久精品| 国产在线观看免费一区| 26uuu精品一区二区在线观看| 国内久久精品视频| 国产日本欧美一区二区| 99久久婷婷国产综合精品| ㊣最新国产の精品bt伙计久久| 99久久99久久精品免费看蜜桃| 亚洲三级在线观看| 欧美亚一区二区| 丝袜亚洲精品中文字幕一区| 91精品国产综合久久婷婷香蕉| 蜜臀a∨国产成人精品| 日韩你懂的在线播放| 麻豆91精品视频| 久久婷婷一区二区三区| 97久久人人超碰| 亚洲愉拍自拍另类高清精品| 69成人精品免费视频| 国产在线播放一区| 国产精品视频一二三| 色婷婷国产精品综合在线观看| 亚洲成av人片| 欧美高清在线一区二区| 日本乱码高清不卡字幕| 免费成人在线网站| 国产精品麻豆欧美日韩ww| 欧美亚洲动漫精品| 国产伦精品一区二区三区在线观看| 国产精品美女视频| 欧美精品在线一区二区| 国产久卡久卡久卡久卡视频精品| 中文字幕一区二区日韩精品绯色| 欧美日韩一区二区三区免费看| 美女免费视频一区二区| 中文字幕欧美一区| 51精品秘密在线观看| 成人免费视频一区| 人人超碰91尤物精品国产| 日本一区二区电影| 欧美精品色一区二区三区| 成人精品高清在线| 久久精品999| 一区二区免费看| 久久久久久影视| 欧美精品黑人性xxxx| 99在线视频精品| 蜜桃传媒麻豆第一区在线观看| 亚洲视频1区2区| 久久看人人爽人人| 91精品国产全国免费观看| 97精品国产97久久久久久久久久久久 | 久久国产精品露脸对白| 亚洲精品国产一区二区精华液| 久久久综合网站| 欧美一区二区三区不卡| 色婷婷国产精品久久包臀| 国产成人久久精品77777最新版本| 日韩激情中文字幕| 一区二区久久久久| 国产精品视频第一区| 久久久午夜精品| 精品久久久久一区| 欧美一区二区在线视频| 欧美亚一区二区| 91啪亚洲精品| 99久久精品国产导航| 国产suv精品一区二区6| 麻豆精品在线观看| 久久精品国产99| 韩国成人在线视频| 琪琪久久久久日韩精品| 日韩电影免费在线观看网站| 亚洲综合视频在线观看| 亚洲欧美色一区| 亚洲蜜臀av乱码久久精品| 中文字幕在线观看不卡| 国产精品久久久久久久久免费相片| 国产亚洲欧美日韩在线一区| 精品国产一二三区| 日韩精品中午字幕| 日韩午夜精品视频| 日韩精品一区在线观看| 精品少妇一区二区三区视频免付费| 欧美一级二级三级乱码| 欧美不卡一区二区三区| 久久亚洲私人国产精品va媚药| 精品国产一区二区三区久久久蜜月| 日韩三级在线观看| 精品国产1区二区| 亚洲国产激情av| 国产精品久久久久婷婷| 亚洲欧洲精品一区二区三区 | 激情综合一区二区三区| 狠狠色狠狠色合久久伊人| 国产精品99久久久久久似苏梦涵| 成人午夜av电影| 色香蕉久久蜜桃| 欧美嫩在线观看| 亚洲精品一区在线观看| 国产精品毛片a∨一区二区三区| 国产精品久久久久久福利一牛影视 | 亚洲精品国产成人久久av盗摄| 亚洲一区二区三区四区五区黄 | av亚洲精华国产精华精| 色综合色综合色综合色综合色综合| 色综合 综合色| 欧美丝袜第三区| 精品成人私密视频| 亚洲桃色在线一区| 丝袜美腿成人在线| 成人午夜免费视频| 欧美私模裸体表演在线观看| 日韩免费在线观看| 亚洲欧美日韩国产综合在线| 日韩综合在线视频| 大桥未久av一区二区三区中文| 91美女在线观看| 精品区一区二区| 亚洲精品日日夜夜| 久草在线在线精品观看| 色悠悠亚洲一区二区| 日韩一区二区三区视频| 中文字幕亚洲区| 久久99国内精品| 99re这里只有精品6| 欧美大胆人体bbbb| 亚洲一本大道在线| 懂色av一区二区夜夜嗨| 欧美一区午夜精品| 亚洲黄色免费电影| 国产成人鲁色资源国产91色综| 欧美日韩成人综合在线一区二区| 久久精品免视看| 免费观看91视频大全| 在线一区二区三区做爰视频网站| 欧美videos中文字幕| 亚洲曰韩产成在线| 成人av中文字幕| 久久综合网色—综合色88| 丝袜诱惑制服诱惑色一区在线观看 | 精品污污网站免费看| 国产日产精品1区| 免费在线观看一区二区三区| 在线观看av一区| 国产精品福利影院| 国产成人一区在线| 欧美大胆一级视频| 日韩成人dvd| 欧美日韩亚洲另类| 一二三四社区欧美黄| 99视频一区二区| 国产免费成人在线视频| 韩国一区二区视频| 精品国产a毛片| 国内精品久久久久影院色| 日韩欧美在线网站| 日韩成人一区二区三区在线观看| 欧美日韩黄色一区二区| 亚洲自拍与偷拍| 在线视频你懂得一区二区三区| 欧美激情一区在线观看| 国产 欧美在线| 国产精品不卡视频| 成人国产精品免费网站| 成人免费在线视频| 91国产视频在线观看|