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

📄 tcp.h

📁 ATmega103、ATmega128做的开发板web server源码
💻 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 + -