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

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

?? tcp.c

?? 在freescale 的ne64上開發的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
#include "debug.h"
#include "datatypes.h"
#include "timers.h"
#include "ethernet.h"

#include "ip.h"

#include "tcp_ip.h"
#include "system.h"


#ifdef TCP_WANTED
/**	\brief Used for storing field information about the received TCP packet
 *	
 *	Various fields from the TCP packet are stored in this variable. These
 *	values are then used to perform the necessary actions as defined 
 *	by the TCP specification: correctnes of the received TCP packet is
 *	checked by analyzing these fields, appropriate socket data is adjusted
 *	and/or control packet is sent based on it. See tcp_frame definition 
 * 	for struct information.
 */
struct tcp_frame received_tcp_packet;

/** \brief TCP table holding connection parameters for every TCP socket 
 *
 *	TCP table is an array of tcp_socket structures holding all of the 
 * necessary information about the state, timers, timeouts and sequence
 *	and port numbers of the TCP sockets opened. Number of TCP sockets
 *	that can be opened at any given time is defined by the #NO_OF_TCPSOCKETS
 *	and may be changed in order to change the amount of used RAM memory.
 *	See tcb definition for more information about the structure itself.
 *
 *	\note As seen in the code, an array size is actually bigger for one
 *	than the #NO_OF_TCPSOCKETS defines. The last entry is used for sending
 *	control packets as answers to incoming TCP packets that do not map 
 *	to any existing TCP sockets.
 */
struct tcb tcp_socket[NO_OF_TCPSOCKETS + 1]; 

UINT8 tcp_tempbuf[MIN_TCP_HLEN + 1]; /**< Temporary buffer used for sending TCP control packets */


/***********************************************************************/
/*******	TCP API functions									********/
/***********************************************************************/

/** \brief Allocate a free socket in TCP socket pool
 *  \ingroup tcp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 21.07.2002
 *	\param soctype type of socket wanted. Can take one of the following
 *		values:
 *		\li #TCP_TYPE_NONE
 *		\li #TCP_TYPE_SERVER
 *		\li #TCP_TYPE_CLIENT
 *		\li #TCP_TYPE_CLIENT_SERVER
 *	\param tos type of service for socket. For now only #TCP_TOS_NORMAL.
 *	\param tout Timeout of socket in seconds. Defines after how many seconds
 *		of inactivity (application not sending and/or receiving any data
 *		over TCP connection) will the TCP socket automatically be closed.
 *	\param listener pointer to callback function that will be invoked by
 *		the TCP/IP stack to inform socket application of certain events. See
 *		tcpc_demo_eventlistener() and tcps_demo_eventlistener() for more
 *		information on events and possible actions.
 *	\return 
 *		\li -1 - Error getting requested socket
 *		\li >=0 - Handle to reserved socket
 *
 *	Invoke this function to try to obtain a free socket from TCP socket pool.
 *	Function returns a handle to the free socket that is later used for 
 *	accessing the allocated socket (opening, connecting, sending data,
 *	closing, aborting, etc.).
 */

#if (NO_OF_TCPSOCKETS < 1 )
#error Number of tcp sockets must be greater than 0
#endif //  modify #define NO_OF_TCPSOCKETS	x in tcp_ip.h


INT8 tcp_getsocket (UINT8 soctype, UINT8 tos, UINT16 tout, INT32 (*listener)(INT8, UINT8, UINT32, UINT32) )
{
	INT8 i;
	struct tcb* soc;
	
	if( (soctype != TCP_TYPE_SERVER) &&
		(soctype != TCP_TYPE_CLIENT) &&
		(soctype != TCP_TYPE_CLIENT_SERVER) &&
		(soctype != TCP_TYPE_NONE)				) {
//		//TCP_DEBUGOUT("Invalid socket type requested\r\n");
		return(-1);
	}
	
	if(listener == 0) {
//		//TCP_DEBUGOUT("ERROR:Event listener function not specified\r\n");
		return(-1);
	}
	
//	//TCP_DEBUGOUT("Searching for free TCP socket...\r\n");
	
	for(i=0; i < NO_OF_TCPSOCKETS; i++)	{
		soc = &tcp_socket[i];			/* Get Socket	*/
	
		if(soc->state == TCP_STATE_FREE) {
			/* We found it	*/
			
//			//TCP_DEBUGOUT("Free socket found\r\n");
			
			soc->state = TCP_STATE_RESERVED;
			soc->type = soctype;
			soc->tos = tos;
			soc->event_listener = listener;
			soc->rem_ip = 0;
			soc->remport = 0;
			soc->locport = 0;
			soc->flags = 0;
			soc->tout = tout*TIMERTIC;
			
			return(i);
		}
	
	}
	
	/* We are there so no socket found	*/
	
//	//TCP_DEBUGOUT("No socket found\r\n");
	return(-1);

}

/** \brief Release a TCP socket
 *  \ingroup tcp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 21.07.2002
 *	\param sochandle handle to socket to be released
 *	\return 
 *		\li -1 - Error releasing the socket (Wrong socket handle or socket
 *		not in proper state to be released)
 *		\li >=0 - handle of the released socket (can not be used any more
 *		untill allocated again with tcp_getsocket()).
 *
 *	Once the application does not need the TCP socket any more it can invoke
 *	this function in order to release it. This is usefull if there is a very
 *	limited number of sockets (in order to save some memory) shared among
 *	several applications.
 */
INT8 tcp_releasesocket (INT8 sochandle)
{
	struct tcb* soc;
	
	if( sochandle > NO_OF_TCPSOCKETS ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	if( sochandle < 0 ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	soc = &tcp_socket[sochandle];		/* Get referense	*/
	
	if( (soc->state != TCP_STATE_FREE) &&
		(soc->state != TCP_STATE_RESERVED) &&
		(soc->state != TCP_STATE_CLOSED)		) {
//		//TCP_DEBUGOUT("Socket is not on valid state to be released\r\n");
		return(-1);
	}
	
	/* We are there so all OK	*/
	
	soc->state = TCP_STATE_FREE;
	soc->type = TCP_TYPE_NONE;
	soc->tos = 0;
	soc->event_listener = 0;
	soc->rem_ip = 0;
	soc->remport = 0;
	soc->locport = 0;
	soc->flags = 0;
	
	return(sochandle);

}

/** \brief Put TCP socket to listen on a given port
 *  \ingroup tcp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 21.07.2002
 *	\param sochandle handle to socket to be placed to listen state
 *	\param port TCP port number on which it should listen
 *	\return
 *		\li -1 - Error
 *		\li >=0 - OK (Socket put to listening state. Handle to 
 *		socket returned)
 *
 *	This function will attempt to put socket to listening state. This
 *	is only possible if socket was defined as either #TCP_TYPE_SERVER or
 *	#TCP_TYPE_CLIENT_SERVER. If basic correctness checks pass, socket is 
 *	put to listening mode and corresponding tcb entry is initialized.
 *
 */
INT8 tcp_listen (INT8 sochandle, UINT16 port)
{
	struct tcb* soc;

	if( sochandle > NO_OF_TCPSOCKETS ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	if( sochandle < 0 ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	soc = &tcp_socket[sochandle];		/* Get referense	*/
		
	if( (soc->type & TCP_TYPE_SERVER) == 0 ) {
//		//TCP_DEBUGOUT("Socket has no server properties\r\n");
		return(-1);
	}
	
	if( soc->event_listener == 0) {
//		//TCP_DEBUGOUT("ERROR:No event listener function specified\r\n");
		return(-1);
	}
	
	
	if( (soc->state != TCP_STATE_RESERVED) &&
		(soc->state != TCP_STATE_LISTENING)	&&
		(soc->state != TCP_STATE_CLOSED) &&		
		(soc->state != TCP_STATE_TIMED_WAIT)		) {
//		//TCP_DEBUGOUT("Not possible to listen, socket on connected state\r\n");
		return(-1);
	
	}
	
			
	/* Init socket		*/
				
	soc->state = TCP_STATE_LISTENING;
	/*soc->type = TCP_TYPE_SERVER;*/
	soc->flags = 0;
	soc->rem_ip = 0;
	soc->remport = 0;
	soc->locport = port;
	soc->send_unacked = 0;
	soc->myflags = 0;
	soc->send_next = 0xFFFFFFFF;
	soc->send_mtu = TCP_DEF_MTU;
	soc->receive_next = 0;
	soc->retries_left = 0;
			
//	//TCP_DEBUGOUT("TCP listening socket created\r\n");
			
	return(sochandle);

}


/** \brief Initialize connection establishment towards remote IP&port
 *  \ingroup tcp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 21.07.2002
 *	\param sochandle handle to socket to be used for connection establishment
 *	\param ip remote IP address to connect to 
 *	\param rport remote port number to connect to
 *	\param myport local port to use for connection. This value can be
 *		specified directly or, if a value of 0 is given, TCP module will
 *		determine local TCP port automatically.
 *	\return 
 *		\li -1 - Error
 *		\li >=0 - OK (Connection establishment procedure started. Socket handle
 *			returned.)
 *
 *	Invoke this function to start connection establishment procedure towards
 *	remote host over some socket. This is only possible if socket was
 *	defined as either #TCP_TYPE_CLIENT or #TCP_TYPE_CLIENT_SERVER. Function 
 *	will make some basic checks and if everything is OK, corresponding tcb
 *	socket entry will be initialized and connection procedure started.
 */
INT8 tcp_connect (INT8 sochandle, UINT32 ip, UINT16 rport, UINT16 myport )
{
	struct tcb* soc;
	
//	//TCP_DEBUGOUT("FUNCTION: tcp_connect\r\n");

	if( sochandle > NO_OF_TCPSOCKETS ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	if( sochandle < 0 ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	/* Is the local port defined	*/
	
	if( myport == 0 )
		myport = tcp_getfreeport();
	
	if( myport == 0 )
		return(-1);
	
	soc = &tcp_socket[sochandle];		/* Get referense	*/
	
	/* Do we have client properties?	*/
	
	if( (soc->type & TCP_TYPE_CLIENT) == 0 ) {
//		//TCP_DEBUGOUT("Socket has no client properties\r\n");
		return(-1);
	}
	
	if( soc->event_listener == 0) {
//		//TCP_DEBUGOUT("ERROR:No event listener function specified\r\n");
		return(-1);
	}
	
	/* Are we on LISTENING, RESERVED or CLOSED state	*/
	
	if( (soc->state != TCP_STATE_RESERVED) &&
		(soc->state != TCP_STATE_LISTENING) &&
		(soc->state != TCP_STATE_CLOSED)		) {
//		//TCP_DEBUGOUT("Socket on unvalid state to initialize CONNECT\r\n");
		return(-1);
	}
	
	/* Then just set parameters and send SYN	*/
	
	soc->rem_ip = ip;
	soc->remport = rport;
	soc->locport = myport;
	soc->flags = 0;
	soc->send_mtu = TCP_DEF_MTU;
	
	/* get initial sequence number	*/
	
	soc->send_unacked = tcp_initseq(); 
	soc->send_next = soc->send_unacked + 1;
	soc->myflags = TCP_FLAG_SYN;
	tcp_sendcontrol(sochandle);
	tcp_newstate(soc, TCP_STATE_SYN_SENT);
	
	return(sochandle);
}



/** \brief Send user data over TCP using given TCP socket
 *  \ingroup tcp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 25.07.2002
 *	\param sockethandle handle to TCP socket to be used for sending data
 *	\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
 *		\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 TCP header (of #MIN_TCP_HLEN
 *		size). 
 *
 *	Invoke this function to initiate data sending over TCP connection
 *	established over a TCP socket. Since data is not buffered (in order
 *	to reduce RAM memory consumption) new data can not be sent until
 *	data that was previously sent is acknowledged. So, application knows when
 *	it can send new data either by:
 *		\li waiting for TCP_EVENT_ACK in event_listener function
 *		\li invoking tcp_check_send() function to check if it is possible
 *			to send data
 *
 */
INT16 tcp_send (INT8 sockethandle, UINT8* buf, UINT16 blen, UINT16 dlen)
{
	struct tcb* soc;
	
//	//TCP_DEBUGOUT("Entering to send TCP data packet\r\n");
	
	kick_WD();
	
	if( sockethandle < 0 ) {
//		//TCP_DEBUGOUT("ERROR:Socket Handle not valid (<0)\r\n");
		return(-1);
	}
	
	if( sockethandle > NO_OF_TCPSOCKETS ) {
//		//TCP_DEBUGOUT("ERROR:Socket Handle not valid (>NO_OF_TCPSOCKETS)\r\n");
		return(-1);
	}
	
	soc = &tcp_socket[sockethandle];				/* Get socket	*/
	
	if(soc->state != TCP_STATE_CONNECTED) {
//		//TCP_DEBUGOUT("TCP is not connected!!\r\n");
		return(-1);
	}
	
	if(soc->send_unacked != soc->send_next) {
//		//TCP_DEBUGOUT("TCP contains unacked data, cannot send more\r\n");
		return(-1);
	}
	
	if( dlen > blen )
		dlen = blen;
	
	if(dlen + MIN_TCP_HLEN > soc->send_mtu) {
		if(soc->send_mtu > MIN_TCP_HLEN)
			dlen = soc->send_mtu - MIN_TCP_HLEN;
		else
			return(-1);
	}
	
	soc->send_next += dlen;
	
	soc->myflags = TCP_FLAG_ACK | TCP_FLAG_PUSH;
	(void)process_tcp_out(sockethandle, buf - MIN_TCP_HLEN, blen + MIN_TCP_HLEN + 1, dlen);
	
	return(dlen);
}


/** \brief Initiate TCP connection closing procedure
 *  \ingroup tcp_app_api
 * 	\author 
 *		\li Jari Lahti (jari.lahti@violasystems.com)
 *	\date 21.07.2002
 *	\param sochandle handle to socket on which TCP connection is to be closed
 *	\return 
 *		\li -2 - there is unacked data on this socket. Try again later.
 *		\li -1 - Error
 *		\li >=0 - OK (connection closing procedure started. Handle to socket
 *			returned)
 *
 *	Invoke this function to start connetion closing procedure over a given
 *	socket. Note that connection is not immediately closed. It may take some
 *	time for that to happen. Event_listener function will be invoked with 
 *	appropriate event when that really happens.
 */
INT8 tcp_close (INT8 sochandle)
{
	struct tcb* soc;
	
//	//TCP_DEBUGOUT("FUNCTION: tcp_close\r\n");

	if( sochandle > NO_OF_TCPSOCKETS ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	if( sochandle < 0 ) {
//		//TCP_DEBUGOUT("Socket handle non-valid\r\n");
		return(-1);
	}
	
	soc = &tcp_socket[sochandle];		/* Get referense	*/	
	
	switch(soc->state) {
		case TCP_STATE_LISTENING:
			tcp_newstate(soc, TCP_STATE_CLOSED);
			break;
		
		case TCP_STATE_SYN_RECEIVED:
			soc->myflags = TCP_FLAG_ACK | TCP_FLAG_FIN;
			soc->send_unacked++;
			soc->send_next++;
			tcp_sendcontrol(sochandle);
			tcp_newstate(soc, TCP_STATE_FINW1);
			break;
		
		case TCP_STATE_SYN_SENT:
		
			tcp_newstate(soc, TCP_STATE_CLOSED);
		
			break;
		
		case TCP_STATE_FINW1:
		case TCP_STATE_FINW2:
		case TCP_STATE_CLOSING:
		case TCP_STATE_TIMED_WAIT:
		case TCP_STATE_LAST_ACK:
		
			/* We are closing already	*/
			
			break;
		
		case TCP_STATE_CONNECTED:
		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍偷拍亚洲欧美日韩| 美女免费视频一区| 福利一区福利二区| 国产原创一区二区三区| 蜜桃久久久久久| 国产成人精品免费网站| 成人动漫视频在线| 欧美伦理影视网| 欧美激情资源网| 亚洲免费看黄网站| 韩国av一区二区三区四区| 欧美日本一道本在线视频| 欧美精品一区二区三区蜜桃视频 | 国产日韩精品久久久| 国产成人无遮挡在线视频| 日韩小视频在线观看专区| 免费高清在线视频一区·| 日韩成人午夜精品| 国产精品久线观看视频| 色先锋久久av资源部| 日韩一区欧美一区| 国产精品影音先锋| 亚洲一区二区影院| 美国三级日本三级久久99| 欧美日韩一级二级| 国产精品色婷婷久久58| 午夜精品免费在线| 日韩午夜在线观看| 日韩一卡二卡三卡| 亚洲综合清纯丝袜自拍| 91国产福利在线| 欧美激情艳妇裸体舞| 一区二区三区在线不卡| 9人人澡人人爽人人精品| www欧美成人18+| 精品一区二区日韩| 日韩精品一区二区三区四区 | 亚洲狠狠爱一区二区三区| 国产精品中文字幕日韩精品| 91精品免费观看| 国产精品每日更新在线播放网址| 毛片一区二区三区| 欧美日韩免费电影| 色婷婷精品久久二区二区蜜臂av| 777午夜精品免费视频| 亚洲欧美色综合| 精品视频在线看| 亚洲精品福利视频网站| 五月激情综合色| 91视频www| 国产1区2区3区精品美女| 三级成人在线视频| 亚洲夂夂婷婷色拍ww47| 国产欧美视频一区二区| 久久夜色精品一区| 欧美激情自拍偷拍| 美女精品自拍一二三四| 久久伊99综合婷婷久久伊| 国产精品美女久久久久久久久 | 人人狠狠综合久久亚洲| 色就色 综合激情| 中文字幕中文字幕一区二区| 国产伦精品一区二区三区免费| 久久综合九色综合欧美98| 亚洲国产日韩av| 欧美电影影音先锋| 国产盗摄女厕一区二区三区| 久久久久久久久久久久久久久99 | 国产一区在线精品| 精品捆绑美女sm三区| 日本伊人午夜精品| 日本中文一区二区三区| 最新日韩av在线| 丁香婷婷综合激情五月色| 亚洲视频一二三区| 99久久国产综合精品麻豆| 亚洲日本va午夜在线电影| 欧美日韩在线直播| 久久99精品视频| 国产精品色噜噜| 日韩欧美一级二级三级久久久| 国产一区二区三区| 久久久精品人体av艺术| 欧美日韩精品一区二区| 免费观看成人av| 亚洲欧美激情小说另类| 韩国女主播一区二区三区| 色屁屁一区二区| 欧美激情一区二区三区蜜桃视频| 亚洲在线中文字幕| 欧美无乱码久久久免费午夜一区| 久久久综合激的五月天| 艳妇臀荡乳欲伦亚洲一区| 另类欧美日韩国产在线| 久久久av毛片精品| www.成人在线| 一个色在线综合| 久久久精品tv| 欧美专区在线观看一区| 亚洲一区二区三区四区在线| 中文字幕在线不卡一区二区三区| 在线观看一区二区视频| 免费成人在线观看| 一区二区三区高清不卡| 久久久久高清精品| 欧美精品日韩一区| 一本一道久久a久久精品| 国内一区二区视频| voyeur盗摄精品| 成人污污视频在线观看| 亚洲男女一区二区三区| 精品免费视频.| 欧美一区二区三区免费在线看| 国产精品伊人色| 久久成人18免费观看| 久久99久久精品| 亚洲精品国产一区二区三区四区在线| 亚洲精品一区二区三区福利 | 最新国产精品久久精品| 91精品国产综合久久婷婷香蕉| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲图片欧美视频| 中文字幕视频一区| 精品久久久久久亚洲综合网| 欧美日韩一区精品| 成人久久视频在线观看| 日本不卡中文字幕| 亚洲综合偷拍欧美一区色| 精品国产自在久精品国产| 欧美日韩国产影片| 一本大道久久a久久精品综合| 成人黄色综合网站| 成人一道本在线| 懂色中文一区二区在线播放| 国产综合色产在线精品| 国产成a人亚洲| 毛片av中文字幕一区二区| 亚洲不卡一区二区三区| 亚洲自拍另类综合| 成人欧美一区二区三区在线播放| 国产精品无圣光一区二区| 中文字幕欧美国产| 亚洲国产成人在线| 亚洲女厕所小便bbb| 中文欧美字幕免费| 精品精品国产高清a毛片牛牛| 欧美日韩国产精品成人| 欧美三级日韩三级| 欧美羞羞免费网站| 欧美日韩精品一区二区在线播放| 狠狠狠色丁香婷婷综合久久五月| 经典一区二区三区| 国产91精品欧美| 成人深夜福利app| 一区在线观看免费| 欧美日韩在线播放一区| 一本到高清视频免费精品| av午夜精品一区二区三区| 成人性生交大片免费看中文网站| 成人精品视频网站| 成人av在线一区二区三区| 99精品视频在线免费观看| 成人h动漫精品一区二| 91在线观看成人| 欧美精品三级日韩久久| 日韩亚洲欧美在线| 久久精品视频在线看| 国产精品私人自拍| 1区2区3区精品视频| 依依成人精品视频| 亚洲图片另类小说| 香蕉成人啪国产精品视频综合网| 精品午夜久久福利影院| 日韩欧美自拍偷拍| av在线播放一区二区三区| 色美美综合视频| 欧美电影影音先锋| 久久精品无码一区二区三区| 国产乱子伦视频一区二区三区 | 久久久高清一区二区三区| 国产成人精品www牛牛影视| 国产伦精一区二区三区| 国产毛片一区二区| 成人福利视频网站| 日韩美女在线视频| 偷拍亚洲欧洲综合| 午夜精品久久久久久久99水蜜桃 | gogo大胆日本视频一区| 国产91精品一区二区麻豆网站| 在线成人av网站| 精品国产91久久久久久久妲己| 国产精品网站一区| 国产精品一区三区| 欧美午夜精品一区| 国产拍揄自揄精品视频麻豆| 亚洲男人的天堂av| 国产一区二区三区四区在线观看| 欧美视频在线一区二区三区 | 久久久精品天堂| 欧美aaa在线|