📄 tcp.h.svn-base
字号:
/*
*/
/* tcp */
#define TCP_SEQ_COMPARE(seq1,seq2) (unsigned long)(seq1 - seq2) /* the compare will be less than 0, so set it as singed */
#define TCP_HEAD_LEN(pTCPHead) (((pTCPHead->TCPHeadLen & 0xf0)>>4)*4)
#define TCP_DEFAULT_PORT 1001
#define TCP_CONNECTION_MAX_NUM 10
#define TCP_QUEUE_MAX_NUM 100
#define TCP_HEAD_MIN_LEN 20
#define TCP_RETRAN_MAX_TIME 6
#define TCP_RETRAN_TIME_OUT 20
#define TCP_DELAY_ACK_TIME_OUT 1
#define TCP_LASTACK_TIME_OUT 40
#define ALL_HEAD_SIZE (TCP_HEAD_MIN_LEN + IP_HEAD_MIN_LEN + NETIF_HEAD_MAX_LEN)
/* tcp flag */
#define TCP_URG 0x20
#define TCP_ACK 0x10
#define TCP_PSH 0x08
#define TCP_RST 0x04
#define TCP_SYN 0x02
#define TCP_FIN 0x01
/* tcp state */
#define TCP_STATE_CLOSED 0
#define TCP_STATE_LASTACK 1
#define TCP_STATE_TIMEWAIT 2
#define TCP_STATE_LISTEN 3
#define TCP_STATE_SYNRECVD 4
#define TCP_STATE_SYNSENT 5
#define TCP_STATE_ESTABLISHED 6
#define TCP_STATE_CLOSEWAIT 7
#define TCP_STATE_FINWAIT1 8
#define TCP_STATE_CLOSING 9
#define TCP_STATE_FINWAIT2 10
/* tcp header */
struct STCPHead
{
unsigned int PortScr; /* 16 bits */
unsigned int PortDest;
unsigned short Seq;
unsigned short AckSeq;
unsigned char TCPHeadLen; /* 8 bits, use high 4 bits */
unsigned char flag; /* reserve 2 bits, urg, ack, psh, rst, syn, fin */
unsigned int WndSize; /* 16 bits */
unsigned int CheckSum; /* 16 bits */
unsigned int UrgentPoint; /* 16 bits */
};
/* tcb (transmit control block). used to keep tcp state
information */
typedef struct STCB
{
struct STCB xdata *pNext; /* Next Node */
unsigned char TCPState;
/* conection idetifies */
unsigned int PortScr;
unsigned int PortDest;
IP_ADDR IPScr;
IP_ADDR IPDest;
unsigned short SeqMine;
unsigned short SeqHis; /* the sequence want to receive from
also is AckSeq in out going packet */
unsigned int WndMine;
unsigned int WndHis;
/* queues */
struct SPacketQueue xdata *QUnacked; /* unacked packet queue */
struct SPacketQueue xdata *QUnSend; /* packet need to be send */
struct SPacketQueue xdata *QExceedSeq; /* receive packet whoes
seq exceed the SeqHis */
unsigned int RetranTimer; /* if it hit 0, indicate the
first unit in QUnacked is time
out */
unsigned char RetranTimes; /* retransmit time of a same
packet, if it exceed a sreshold
. the connection go to colse */
unsigned char bNeedAck; /* we need send ack to him */
unsigned int DelayAckTimer; /* if bNeedAck == TRUE, we delaye
for DELAY_ACK_TIME_OUT to send ack
*/
unsigned int LastAckTimer; /* when in TCP_STATE_LASTACK a timer
is started. when it out, transfer to
TCP_CLOSED state */
/* call back functions */
void (code * accept)(struct STCB xdata *pNewTCB) reentrant;
void (code * recv)(void xdata * buf,unsigned int size) reentrant;
void (code * close)(struct STCB xdata * pSocket) reentrant; /* when a opened connection closed */
}socket;
/* tcp queue */
struct SPacketQueue
{
struct SPacketQueue xdata *pNext;
struct SPacketQueue xdata *pPre;
unsigned short Seq; /* sequence of this packet */
struct SMemHead xdata *MemHead; /* packet store in MemHead' playload */
};
struct STCB xdata *TCPGetTCB() reentrant;
void TCPInsertTCB(struct STCB xdata *pTCB) reentrant;
void TCPAbort(struct STCB xdata *pTCB) reentrant;
struct SPacketQueue xdata * TCPGetQ() reentrant;
unsigned char TCPInsertQ(struct SPacketQueue xdata * xdata *ppQ,struct SMemHead xdata *MemHead,
unsigned short Seq) reentrant;
struct SPacketQueue xdata * TCPOutQ(struct SPacketQueue xdata * xdata *ppQ) reentrant;
void TCPInit() reentrant;
unsigned int TCPCheckSum(struct SIPHead xdata * pIPHead,unsigned int TCPSize) reentrant;
void TCPTimer() reentrant;
void TCPRelease(struct STCB xdata *pTCB) reentrant;
unsigned char TCPSendSeg(struct STCB xdata *pTCB,struct SMemHead xdata *MemHead,unsigned char TCPFlag) reentrant;
unsigned char TCPSendSegJudgeWnd(struct STCB xdata *pTCB,struct SMemHead xdata *MemHead) reentrant;
unsigned char TCPSendUnsendQ(struct STCB xdata *pTCB) reentrant;
void TCPRecvSeg(struct STCB xdata *pTCB,struct SMemHead xdata *MemHead) reentrant;
void TCPInput(struct SMemHead xdata *MemHead) reentrant;
unsigned char TCPSendEx(struct STCB xdata * pTCB,struct SMemHead xdata *MemHead) reentrant;
unsigned char TCPSend(struct STCB xdata * pTCB,void xdata *buf,unsigned int DataSize) reentrant;
unsigned char TCPConnect(struct STCB xdata * pTCB, unsigned short DestIP, unsigned int DestPort,
void (code * recv)(void xdata * buf,unsigned int size) reentrant,
void (code * close)(struct STCB xdata * pSocket) reentrant) reentrant;
void TCPClose(struct STCB xdata *pTCB) reentrant;
unsigned char TCPListen(struct STCB xdata *pTCB,unsigned int ScrPort,void (code * accept)(struct STCB xdata *pNewTCB) reentrant) reentrant;
struct STCB xdata * TCPSocket(IP_ADDR ScrIP) reentrant;
struct SMemHead xdata *TCPAllocate(unsigned int size) reentrant;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -