📄 tcp.h
字号:
/************************************************************************
*
* FILE NAME VERSION
*
* TCP.H 1.0
*
* COMPONENT
*
* TCP - Transmission Control Protocol
*
* DESCRIPTION
*
* Holds the defines for the TCP protocol.
*
* DATA STRUCTURES
*
* TCPLAYER
* _TCP_Window
* _TCP_Port
*
* DEPENDENCIES
*
*
*************************************************************************/
#ifndef TCP_H
#define TCP_H
#include "C:\wql\tcpipsocket\target.h"
typedef struct tcph
{
UINT16 tcp_src; /* TCP Source port number */
UINT16 tcp_dest; /* TCP destination port number */
UINT32 tcp_seq; /* TCP sequence number */
UINT32 tcp_ack; /* TCP Acknowledgment number */
// UINT8 tcp_hlen; /* length of TCP header in 4 byte words */
UINT16 flags; /* the length (header) and flag fields */
UINT16 tcp_window; /* advertised window, byte-swapped */
UINT16 tcp_check; /* TCP checksum of whole packet */
UINT16 tcp_urgent; /* urgent pointer, when flag is set */
} TCPLAYER;
//*****************************************************
// 这是当TCP包丢失引起的数据的重传时采用的,目的是存放本次传送的数据分成的个个TCP包。
typedef struct
{
TCPLAYER TCP_HEAD;
UINT32 expect_ack; //本包期望的确认号
UINT8 R_ACK_NUM;
UINT8 Repeat; //重传的次数,如果超过设定的次数,则说明对方已经失去联络,要对其复位
UINT8 Timer; //超时时间,当本包数据超过这个时间还没有收到对方的确认时,要重新传送
UINT8 *START_PTR; //在SOCKET输出缓冲中的起始位置
UINT16 LENGTH; //本包的长度
UINT8 State; //表示本包是否已经收到确认,0是已经收到了,1是没有收到
}TCP_WAIT_ACK_TYPE;
/* Define return codes for internal use by TCP. */
#define TCP_NO_ACK -255
#define TCP_INVALID_ACK -254
/*
* Options for use with [gs]etsockopt at the TCP level.
*/
#define TCP_NODELAY 1
//***********************************************
#define HTTP_PORT 80
#define SMTP_PORT 25
#define FTP_PORT 21
#define FTP_DPORT 20
#define Eth2COM_PORT 14002
#define TELNET_PORT 9999
#define SMTP_LOCAL_PORT 8888
//************************************************
#define max_socket_in_len 0x0ff //定义最大的SOCKET接收缓冲
#define max_mm 0xff //max_socket_in_len-1
#define max_tcp_wait_num 10 //等待ACK的包的数量
typedef struct
{
UINT8 ipaddr[4];
UINT16 port;
UINT32 his_sequence;
UINT32 my_sequence; //他始终保存本方发送的最新的序号
UINT32 old_sequence;
UINT32 his_ack; //他始终保存来自对方的最新的确认号
UINT8 timer; //当只传送了命令包时用来判断命令是否收到,如SYN发出后多长时间还没收到,则要重发
UINT8 repeat; //重传的次数
UINT8 S_R_ACK_NUM; //整个SOCKET中每次传输的多个TCP包中有一个收到确认多于3次,则此标志置3
UINT8 inactivity;
UINT8 state;
UINT8 inbuf[max_socket_in_len+1];
UINT16 inbuf_head;
UINT16 inbuf_tail;
TCP_WAIT_ACK_TYPE tcp_wait_ack[max_tcp_wait_num]; //这里设定最多30个等待的TCP包
UINT8 wait_ack_num; //等待应答的总数
UINT8 *outbuf;
UINT16 outbuf_len;
UINT16 offset; //传送完的部分指针
UINT16 his_window;
UINT16 local_port;
UINT16 local_window;
UINT16 flags; //00表示不需要传送任何东西,如果有PUSH说明有数据要传,其他为TCP的FLAG标志
} CONNECTION;
// TCP flag bits
#define FLG_FIN 0x0001
#define FLG_SYN 0x0002
#define FLG_RST 0x0004
#define FLG_PSH 0x0008
#define FLG_ACK 0x0010
#define FLG_URG 0x0020
// for socket window is 00
#define FLG_WIN_ZERO 0x0040
// TCP server states
#define STATE_CLOSED 0
#define STATE_LISTEN 1
#define STATE_SYN_RCVD 2
#define STATE_ESTABLISHED 3
#define STATE_CLOSE_WAIT 4
#define STATE_LAST_ACK 5
#define STATE_FIN_WAIT_1 6
#define STATE_FIN_WAIT_2 7
#define STATE_CLOSING 8
#define STATE_TIME_WAIT 9
#define STATE_ACT_SYNED 10
#define STATE_ACT_SYN_SENT 11
// Miscellaneous
#define MAX_SOCKET_NUM 8 //最大的SOCKET数量
//#define FTP_CONNECTION 6
#define NO_CONNECTION MAX_SOCKET_NUM+1 // 1---4 is the connected port
#define TCP_TIMEOUT 4 // = 2 seconds
#define INACTIVITY_TIME 30 // = 15 seconds
//****************************************
extern CONNECTION xdata conxn[MAX_SOCKET_NUM];
//****************************************
/* TCP function prototypes. */
void TCP_Interpret(UINT8 *inbuf, struct pseudotcp *tcp_chk);
void tcp_send(UINT16 flags, UINT16 hdr_len,UINT8 nr);
UINT16 TCP_data_send(UINT8 * outbuf, UINT16 len, UINT8 nr);
void tcp_send_1_packet(UINT8 *buf, UINT16 len, UINT8 nr);
UINT8 find_leisure_connection();
void init_tcp(void);
void tcp_retransmit(void);
void tcp_inactivity(void);
void create_ftp_connect(unsigned char *server_ip,unsigned int server_port);
UINT8 CHECK_RSEND(CONNECTION *CN);
void TCP_TICK();
void tcp_timer_scan();
void Init_cn( CONNECTION * CN);
#endif /* TCP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -