net/tcp.h

gehe zur Dokumentation dieser Datei
00001 
00002 //***************************************************************************
00003 // *            tcp.h
00004 // *
00005 // *  Sat Jun  3 23:01:49 2006
00006 // *  Copyright  2006  User
00007 // *  Email
00008 //****************************************************************************/
00009 #ifndef __TCP_H__
00010         #define __TCP_H__
00011 
00012         #include <avr/pgmspace.h>
00013 
00014         extern unsigned int TXErrorCounter;
00015         extern unsigned int RXErrorCounter;
00016         
00017         void tcp_init( void );
00018 
00019         void tcp( unsigned int packet_lenght, unsigned char *buffer);
00020         void TCPTimeOutHandler( void );
00021 
00022         unsigned int Getfreesocket(void);
00023         unsigned int GetSocket( unsigned char * buffer);
00024         unsigned int RegisterSocket( unsigned char *buffer);
00025         
00026         unsigned int CopyTCPdata2socketbuffer( unsigned int Socket, unsigned int Datalenght , unsigned char *buffer);
00027         void MakeTCPheader( unsigned int Socket, unsigned char TCP_flags, unsigned int Datalenght, unsigned int Windowsize, unsigned char *buffer );
00028         
00029         unsigned int RegisterTCPPort( unsigned int Port );
00030         void UnRegisterTCPPort( unsigned int Port );
00031         unsigned int CheckPortInList( unsigned int Port );
00032         unsigned int CheckPortRequest( unsigned int Port );
00033         unsigned int CheckSocketState( unsigned int Socket );
00034         void CloseTCPSocket( unsigned int Socket);
00035         unsigned int Connect2IP( unsigned long IP, unsigned int Port );
00036         
00037         unsigned int GetSocketData( unsigned int Socket , unsigned int bufferlen, unsigned char * buffer);
00038         unsigned int GetSocketNextLine( unsigned int Socket , unsigned int bufferlen, unsigned char * buffer);
00039         unsigned PutSocketData( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer );
00040         void SendData( unsigned int Socket, unsigned int Datalenght, unsigned char * Sendbuffer );
00041         unsigned PutSocketData_P( unsigned int Socket, unsigned int Datalenght, const prog_char * Sendbuffer );
00042         void SendData_P ( unsigned int Socket, unsigned int Datalenght, const prog_char * Sendbuffer );
00043         
00044         // Struktur für den Pseudoheader, dieser wird bei der Berechnung der TCP-Checksumme benötigt und wird vor dem TCP-header gesetzt.
00045         // Jetzt wird zur berechnung der Checksumme im TCP-header die Checksumme auf 0 gesetzt.
00046         // Danach wird die Checksumme für den Pseudoheader, TCP-header und dem Nutzdatensgment ( TCP_Segment ) berechnet.
00047         // wenn die Checksumme errechnet ist kann wird diese in die TCP-header geschrieben.
00048         // wenn alles okay kann der empfängr auf dem selben weg rückwerts die checksumme kontrollieren und bekommt als ergenis 0 zurück, weil
00049         // das ergebnis der Checkumme ja auch im TCP_header mit drinne steht.
00050         
00051         #define IP_PSEUDOHEADER_LENGHT 12
00052         
00053         struct IP_Pseudoheader {
00054                         volatile unsigned long IP_SourceIP;                     // Quell IP
00055                         volatile unsigned long IP_DestinationIP;                // Ziel IP
00056                         volatile unsigned char IP_ZERO;                         // muss 0 sein
00057                         volatile unsigned char IP_Protokoll;                    // bei TCP immer 6
00058                         volatile unsigned int IP_TCP_lenght;                    // länge des Nutzdaten Segmentes ( TCP_Segment )
00059         };
00060         
00061         #define MAX_LISTEN_PORTS 4                                      // Anzahl der Port auf den gelauscht wird
00062         #define TCP_Port_not_use 0
00063         
00064         struct TCP_PORT {                                                       // Struktur für Ports
00065                         volatile unsigned int TCP_Port;
00066         };
00067         
00068         // Struktur für den Connection SOocket. Hier werden die Sockets für die TCP-Verbindungen angelegt und den wichtige Werte gespeichert.
00069         // damit kann man jede verbindung genau nachverfolgen und auch halten.
00070         
00071         #define MAX_TCP_CONNECTIONS                     2       // maximale gleichzeitige verbindungen
00072         #define MAX_TCP_RETRANSMISSIONS         5
00073         #define MAX_RECIVEBUFFER_LENGHT         64
00074         #define CLOSETIMEOUT                            200                     // angabe in 1/100 sec
00075         #define RETRANSMISSIONTIMEOUT           500                     // angabe in 1/100 sec
00076                                                                                                                 // der timeout für retransmission
00077         #define CONNECTTIMEOUT                          500                             // angabe in 1/100 sec
00078         #define TimeOutCounter                          20                              // angabe in 1 sec
00079                                                                                                                 // timeout für das socket wie lange keine daten mehr ausgetauscht wurden
00080         
00081         struct TCP_SOCKET {
00082                         volatile unsigned char ConnectionState;                         // 1 Byte
00083                         volatile unsigned char SendState;                                       // 1 Byte
00084                         volatile unsigned int SourcePort;                                       // 2 byte
00085                         volatile unsigned int DestinationPort;                          // 2 Byte
00086                         volatile unsigned long SourceIP;                                        // 4 Byte       
00087                         volatile unsigned long SequenceNumber;                          // 4 Byte
00088                         volatile unsigned long AcknowledgeNumber;                       // 4 Byte
00089                         volatile unsigned int Windowsize;                                       // 2 Byte
00090                         volatile unsigned int SendetBytes;                                      // 2 Byte
00091                         volatile unsigned int Timeoutcounter;                           // 2 Byte
00092                         volatile unsigned char MACadress[6];                            // 6 Byte
00093                         volatile unsigned int Bufferlenght;                                     // 2 Byte = 32 Byte + Bufferlenght
00094                         volatile unsigned char Recivebuffer[ MAX_RECIVEBUFFER_LENGHT ];
00095         };
00096         
00097         // definitionen für die ConnectionState
00098         
00099         #define SOCKET_NOT_USE          0x00                    // SOCKET ist Frei      
00100         #define SOCKET_SYNINIT          0x01                    // SOCKET SYN init
00101         #define SOCKET_WAIT2SYNACK      0x04                    // SOCKET hat SYN & ACK gesendet und wartet auf ACK
00102         #define SOCKET_SYNACK_OK        0x05                    // SOCKET hat SYN+ACK nachen einen SYN empfangen ( fuer berbindungsaufbau )
00103         #define SOCKET_READY2USE        0x0F                    // SYN erfolgreich und Socket bereit zur übernahme durch den Anwender
00104         #define SOCKET_READY            0x10                    // Socket ist Bereit zur Benutzung
00105         #define SOCKET_WAIT2FINACK      0x81                    // SOCKET wartet auch das FIN + ACK nach einem FIN + ACK
00106         #define SOCKET_WAIT2FIN         0x82                    // SOCKET wartet auch das ACK nach einem FIN + ACK
00107         #define SOCKET_RESET            0x83                    // SOCKET empfängt RST ( Reset )
00108         #define SOCKET_CLOSE            0xff                    // SOCKET geschlossen
00109 
00110     #define NO_SOCKET_USED              0xffff           // Rueckgabewert
00111         
00112         // definitionen für die SendState
00113         
00114         #define SOCKET_READY2SEND       0x00                    // Socket bereit zum senden
00115         #define SOCKET_DATASENDED       0x80                    // Socket hat Daten gesendet aber Window ist nicht voll und wartet auf ACK für Daten
00116         #define SOCKET_BUSY                     0xff                    // Socket hat Daten gesendet und warten auf ACK für Daten
00117         
00118         // der TCP-header :-)
00119         
00120         #define TCP_HEADER_LENGHT       24
00121         #define MAX_TCP_Datalenght      128
00122         
00123         struct TCP_header {
00124                         volatile unsigned int TCP_SourcePort;
00125                         volatile unsigned int TCP_DestinationPort;
00126                         volatile unsigned long TCP_SequenceNumber;
00127                         volatile unsigned long TCP_AcknowledgeNumber;
00128                         volatile unsigned char TCP_DataOffset;
00129                         volatile unsigned char TCP_ControllFlags;
00130                         volatile unsigned int TCP_Window;
00131                         volatile unsigned int TCP_Checksum;
00132                         volatile unsigned int TCP_UrgentPointer;
00133                         volatile unsigned char TCP_Options[4];
00134         };
00135                         
00136         // die einzelnen Controllflags des TCP-headers
00137         
00138         #define  TCP_NON_FLAG                   0x00            // kein Flag gesetzt
00139         #define  TCP_FIN_FLAG                   0x01            // Verbindung beenden gesenden/empfangen
00140         #define  TCP_SYN_FLAG                   0x02            // Verbindung aufbauen gesenden/empfangen
00141         #define  TCP_RST_FLAG                   0x04            // Reset gesenden/empfangen
00142         #define  TCP_PSH_FLAG                   0x08            // Push gesendet/empfangen
00143         #define  TCP_ACK_FLAG                   0x10        // Acknowledge gesendet/empfangen
00144         #define  TCP_URG_FLAG                   0X20            // Urgentflag für dringlichkeit gesetzt
00145         
00146 #endif
00147 

Erzeugt am Fri Sep 8 10:59:06 2006 für MikroEthernetBoard von  doxygen 1.4.6