📄 rcf_tcp.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 + -