⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rcf_tcp.h

📁 arm7 flash down
💻 H
字号:
#ifdef TCP_GLOBALS
#define TCP_EXT
#else
#define TCP_EXT extern 
#endif 

#define LINK_IDLE_TIMEOUT	900000 //5 HOURS IDLE WILL EVENT CLOSE

/*tcp state define */
#define 	TCP_STATE_CLOSED        0
#define 	TCP_STATE_LISTEN        1
#define 	TCP_STATE_SYN_RCVD      2
#define 	TCP_STATE_SYN_SENT      3
#define 	TCP_STATE_ESTABLISHED   4
#define 	TCP_STATE_FIN_WAIT1     5
#define 	TCP_STATE_FIN_WAIT2     6
#define 	TCP_STATE_CLOSING       7
#define 	TCP_STATE_CLOSE_WAIT    8
#define 	TCP_STATE_LAST_ACK      9
#define 	TCP_STATE_TIME_WAIT     10
//tcp连接的标志位
#define 	TCP_FIN 0x01
#define 	TCP_SYN 0x02
#define 	TCP_RST 0x04
#define 	TCP_PSH 0x08
#define 	TCP_ACK 0x10
#define 	TCP_URG 0x20
/********************************************************************
**Send Sequence Space

                   1         2          3          4      
              ----------|----------|----------|---------- 
                     SND.UNA    SND.NXT    SND.UNA        
                                          +SND.WND        

        1 - old sequence numbers which have been acknowledged  
        2 - sequence numbers of unacknowledged data            
        3 - sequence numbers allowed for new data transmission 
        4 - future sequence numbers which are not yet allowed  

                          Send Sequence Space
*********************************************************************/
struct	SenSeqVar 	/* Send Sequence Variables */
{
	uint32	UNA; 	/* send unacknowledged */
	uint32	NXT; 	/* send next */
	uint16	WND; 	/* send window */ //initial by listen
	uint16	UP;  	/* send urgent pointer */ //initial by socket
	uint32	WL1; 	/* segment sequence number used for last window update */
	uint32	WL2; 	/* segment acknowledgment number used for last window update */
};
/*******************************************************************
Receive Sequence Space

                       1          2          3      
                   ----------|----------|---------- 
                          RCV.NXT    RCV.NXT        
                                    +RCV.WND        

        1 - old sequence numbers which have been acknowledged  
        2 - sequence numbers allowed for new reception         
        3 - future sequence numbers which are not yet allowed  

                         Receive Sequence Space
*******************************************************************/
struct	RcvSeqVar	/* Receive Sequence Variables */
{
	uint32	NXT; 	/* receive next */
	uint16	WND; 	/* receive window */ //initial by socket
	uint16	UP;  	/* receive urgent pointer */
};

struct TCP_TrCrlBlk 			/* Transmission Control Block */		
{
	struct	SenSeqVar	SND; 	/* Send Sequence Variables */
	uint32				ISS; 	/* initial send sequence number */
	struct	RcvSeqVar	RCV;	/* Receive Sequence Variables */
	uint32				IRS; 	/* initial receive sequence number */
	
	uint16   			My_Port; 		 		//本机端口//initial by socket
	uint16  			De_Port;		 		//对方端口
	uint8  				De_Ip[4];	 			//对方ip
	uint8				My_Ip[4];						//initial by socket
	
	uint8 				TcpPseudoHead8[12];	/* tcp pseudo header*/
	uint8 				TcpHead8[28];		/* tcp header */
	
	uint32				IDLE_TIME_COUTER;
	
	uint8				R_WIN[MY_TCP_WIN];	/* WINDOW */
	uint16				R_WinWrPtr;
	uint16				R_WinRdPtr;
	
	uint16				TCB_STA; 	/* TCB status */ 
									/* bit0~1: have been retransmission times */
									/* bit2: retransmission failuer */
									/* bit3: retransmission enable */
									/* bit4: connect signal enable */
									/* bit5: send accapeble signal enable */
									/* bit6: disconnect signal enable */
									/* bit7: Active 0 /Passive 1 link *///initial by socket
									/* bit8: recive data signal enable */
									/* bit9: retransmission flag */
									/* bit15: TCB enable */
	uint8				CON_STA; 	/* CONNECTION status *///initial by socket
	uint8				RT_TTL;  	/* segment retransmission TTL *///initial by socket
	
	uint16				ERR;		/* RETURN THE ERROR REASON INITIAL 0*/
	
									
	OS_EVENT  		*AppSemSend;
	OS_EVENT  		*AppSemRcv;
	OS_EVENT  		*AppSemCon;
	OS_EVENT  		*AppSemDisc;
};

struct	CurSgmVar	/* Current Segment Variables */
{
	uint32	SEQ; 	/* segment sequence number */
	uint32	ACK; 	/* segment acknowledgment number */
	uint16	LEN;  	/* segment length */
	uint16	WND; 	/* segment window */
	uint16	UP; 	/* segment urgent pointer */
	uint16	PRC; 	/* segment precedence value */
	uint16  SO_PORT;
	uint16  DE_PORT;
};

struct  tcp_data {  
	            uint16 	SourcePort;//f  	   	/*源端口*//
	            uint16 	DestPort;    //f	   	/*目的端口*/
	            uint32 	SeqNum;  //0-3 f	   		/*顺序号*/
	            uint32 	AckNum;  //0-3 f	   		/*确认号*/
	            uint8 	offset;     	   	/*数据偏移量*/
	            uint8 	control;    	   	/*连接控制*/
	            uint16 	window; //f     	   	/*流控*/
	            uint16 	Crc;     //f    	   	/*校验和 ,包括伪头部,TCP头部,数据*/
	            uint16 	urg;               	/*紧急指针*/
	            uint8 	tcpdata[MAX_TCP_DATA];     	/*TCP数据*/
	           };
struct   tcp_pehead{  
		uint8	rev; 
		uint8	NextProtocal;
               	uint16 	TotalLen;          /*校验和,包括伪头部,udp头部,数据*/
             	uint8 	SourceIp[4];  	   /*源端口*/
               	uint8 	DestId[4];     	   /*目的端口*/
			   };
typedef struct  {
				struct tcp_pehead 	TcpPHead;
				struct tcp_data		Tcp;			
		}tcp_send;
typedef struct {
	uint8 				TcpPseudoHead8[12];	/* tcp pseudo header*/
	uint8 				TcpHead8[28];		/* tcp header */
	}tcp_ts;
TCP_EXT struct TCP_TrCrlBlk TCP_TCB[MAX_TCP_LINKS];
TCP_EXT uint16 CheckSumTcp(uint8 * TcpHeadPtr, uint8 * SendDatBuf, uint16 length);
TCP_EXT void TCP_HEAD_HANDLE1(uint8 *temptr, uint8 num, uint32 SEND_SEQ, uint32 SEND_ACK, uint16 SEND_FLAG);
TCP_EXT void TCP_HEAD_HANDLE(uint8 num, uint32 SEND_SEQ, uint32 SEND_ACK, uint16 SEND_FLAG);
TCP_EXT void TCP_HEAD_HANDLE2(uint8 num, uint32 SEND_SEQ, uint32 SEND_ACK, uint16 SEND_FLAG);
TCP_EXT void TCP_HEAD_HANDLE3(uint8 *temptr, uint8 num, uint32 SEND_SEQ, uint16 len);
TCP_EXT uint8 Process_Tcp(Rec_Ptr * Tcp_Rec);
TCP_EXT void TCP_Initial(void);
TCP_EXT void TCB_Delete(uint8 i);
TCP_EXT void TimeWaitTimeOut(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -