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

📄 tcp.h.svn-base

📁 数字广播系统的开发源码
💻 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 + -