📄 tcp.h
字号:
/******************************************************************
* tcp.h:
*
* Copyright (c) 2001 Atmel Corporation.
* All Rights Reserved.
*
* You are autorized to use, copy and distribute this software only at
* a single site (the term "site" meaning a single company location).
* This copyright notice must be included in any copy, modification
* or portion of this software merged into another program.
*
* This software is licenced solely for use with Atmel AVR micro
* controller family. The software may not be modified to execute on
* any other microcontroller architectures
*
* This software is provided "as is"; Without warranties either express
* or implied, including any warranty regarding merchantability,
* fitness for a particular purpose or noninfringement.
*
* In no event shall Atmel or its suppliers be liable for any special,
* indirect,incidential or concequential damages resulting from the
* use or inability to use this software.
*
* Revision history:
*
* January 17, 2001: Version 1.0 Created by JB
* July 13, 2001 Version 1.2 JB
* - Changed to IAR compiler V2.25
* - Renamed flash file functions to avoid conflict with
* standard file I/O names
* - Bug fixes in HTTP
* - Speed optimization in TCP
*
*
*******************************************************************/
#define TCP_MAX_SOCKETS 4
#define TCP_WIN_SIZE 1024 //Window size (Should be of size 2^n)
#define TCP_MAX_CONNECTIONS 10
#define TCP_RT_BUFFER_SIZE 600 // Retransmission buffer size
#define TCP_NUMBER_RT_BUF 5 // Number of retransmissionbuffers
#define TCP_TICKS_BEFORE_RT 15 // Number of ticks before retransmission
#define TCP_MAX_RT 9 // Number of retransmissions
#define MAX_SEGMENT_SIZE 560
/*Frame offset*/
#define TCP_SENDER_PORT 17
#define TCP_TARGET_PORT 18
#define TCP_SEQ0 19
#define TCP_SEQ1 20
#define TCP_ACK0 21
#define TCP_ACK1 22
#define TCP_FLAGS 23
#define TCP_WINDOW 24
#define TCP_CHECKSUM 25
#define TCP_URGENT 26
#define TCP_DATA 27
#define FALSE 0
#define false 0
#define TRUE 1
#define true 1
/* The TCP states */
#define TCP_STATE_LISTEN 0
#define TCP_STATE_SYN_RCVD 1
#define TCP_STATE_SYN_SENT 2
#define TCP_STATE_ESTABLISHED 3
#define TCP_STATE_FIN_WAIT1 4
#define TCP_STATE_FIN_WAIT2 5
#define TCP_STATE_CLOSING 6
#define TCP_STATE_CLOSE_WAIT 7
#define TCP_STATE_LAST_ACK 8
#define TCP_STATE_CLOSED 9
#define TCP_STATE_TIME_WAIT 10
/* TCP flags */
#define TCP_FIN 0x01
#define TCP_SYN 0x02
#define TCP_RST 0x04
#define TCP_PSH 0x08
#define TCP_ACK 0x10
#define TCP_URG 0x20
typedef enum {UNLOCKED, HALF_OPEN, OPEN, HALF_CLOSED, CLOSED}SOCKETSTATES;
/* Retransmission buffer */
typedef struct _RT
{
unsigned int nextTICK;
unsigned char RTOs;
unsigned int size;
unsigned char socketNr;
unsigned long SEQ;
unsigned int hisIP0, hisIP1;
unsigned int buffer[TCP_RT_BUFFER_SIZE];
}
RT;
typedef struct _SOCKET
{
unsigned char socketNr;
unsigned int hisIP0;
unsigned int hisIP1;
unsigned int hisPort;
unsigned int myPort;
SOCKETSTATES state;
struct _SOCKET *next;
struct _SOCKET *previous;
}SOCKET;
/* Transmission Control Block */
typedef struct
{
unsigned int MSS; //Maximum segment size
unsigned int segHdrLEN;//Header length
unsigned long sndUNA; //send unacknowledged
unsigned long sndNXT; //send next
unsigned int sndWND; //send window
unsigned long sndWL1; //segment sequence number used for last window update
unsigned long sndWL2; //seqment acknowledgenr. used for last window update
unsigned long ISS; //Initial Send sequence number
unsigned long rcvNXT; //receive next
unsigned int rcvWND; //receive window
unsigned long IRS; //initial receive sequence number
unsigned long segSEQ; //segment sequence number
unsigned long segACK; //segment acknowledgment number
unsigned int segLEN; //segment length
unsigned int segWND; //segment window
unsigned char segCTL;
unsigned char CTL; //Flags to be sent
unsigned char outBuffer[TCP_WIN_SIZE];//output buffer
unsigned char inBuffer[TCP_WIN_SIZE]; //input buffer
unsigned int readIn; //application's pointer to inbuffer
unsigned int readOut; //tcp's pointer to outbuffer
unsigned int TMPreadIn;
unsigned int writeIn; //tcp's pointer to inbuffer
unsigned int writeOut; //application's pointer to outbuffer
unsigned char state; //the connection's state
unsigned char open;
}
TCB;
/* List of ports listened to */
typedef struct _LISTEN
{
unsigned long ip;
unsigned int portNr;
}
LISTEN;
/*TCP-User interface.*/
SOCKET *TCPfindSockets(unsigned int port);
char TCPpopen (unsigned int port, unsigned long ip); // passive open port. Starts listen to that port.
// passive open port. Starts listen to that port.
SOCKET *TCPaopen (unsigned int port, unsigned int ip0, unsigned int ip1, unsigned int MYport);
char TCPlistenPort(unsigned int port, unsigned long ip); // check to see if someone listens to a port.
void TCPstop(unsigned int port, unsigned long ip); // stops listen to port.
int TCPget(SOCKET *socket, int maxSize, char *buffer);
int TCPread(SOCKET *socket, int maxSize, char *buffer, char reset);//read bytes from window
int TCPreadln(SOCKET *socket, int maxSize, char *buffer, char reset);//read bytes from window
int TCPsend(SOCKET *socket, int size, char *buffer); // send bytes to TCP.
int TCPsend_P(SOCKET *socket, int size, char flash *buffer); // send bytes from program space to TCP.
int TCPbufferSpace(SOCKET *socket);
void TCPclose(SOCKET *socket); // Close a connection. Waits untill all data is sent.
void TCPabort(SOCKET *socket); // Send a reset to connection and delete TCB.
int TCPsize(SOCKET *socket); // Returns size of data in window
void TCPbufferFlush(SOCKET *socket); //Flush all data in TCP buffer
/*Lower level interface.*/
void TCPinit( void ); // Must be run before TCP can be enabled.
void receiveTCP(int length, unsigned int ip0, unsigned int ip1);// Called by ip when a packet arrives.
void checkTCP( void ); // Must be run frequently to check if there is something to be sent.
/*Used internally in TCP*/
void TCPfin_wait1 ( unsigned char socketNr );
void TCPfin_wait2 ( unsigned char socketNr );
void TCPclose_wait ( unsigned char socketNr);
void TCPlast_ack (unsigned char socketNr);
unsigned char acceptable(unsigned char socketNr);
void extractData (unsigned char socketNr);
void TCPlisten(unsigned char socketNr);
void TCPsyn_sent(unsigned char socketNr);
void deleteSocket(unsigned char socketNr);
void prepareFrame (unsigned char socketNr);
unsigned char checkProtocol(unsigned int ip0, unsigned int ip1, unsigned int hisPort, unsigned int myPort);
unsigned int putData(unsigned char socketNr);
void TCPsyn_rcvd(unsigned char socketNr);
void TCPestablished (unsigned char socketNr);
unsigned char putBuffer(unsigned int *pointer, unsigned int length, unsigned char sNr);
void deleteBuffer(unsigned char sNr);
void updateBuffer(void);
void updateRT (unsigned char sNr);
unsigned int writtenIn(unsigned char socketNr);
unsigned char freeRT ( void );
unsigned char TCPfindTCB( void );
void updateWindow(unsigned char socketNr);
void copySendFrame(RT *pRTframes);
void setWinSize(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -