/* flaneth - flash and ethernet - dartboard mod
* version 0.1 date 2008-11-09
* Copyright (C) 2007-2008 Stefan Schuermans <stefan@schuermans.info>
* Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html
* a BlinkenArea project - http://www.blinkenarea.org/
*/
#ifndef INC_tcp
#define INC_tcp
#include "ethernet.h"
#include "ip.h"
// header of a TCP packet
struct TcpHeader
{
unsigned int SrcPort;
unsigned int DestPort;
unsigned long SeqNo;
unsigned long AckNo;
unsigned int Ofs_Flags;
unsigned int WndSz;
unsigned int Chk;
unsigned int UrgentPtr;
};
// a TCP packet
struct TcpPacket
{
struct EthernetHeader EthHdr;
struct IpHeader IpHdr;
struct TcpHeader TcpHdr;
};
// TCP notify functions
struct TcpNotify
{
// called when connection is established
void (*Connect)( unsigned char ConnNo );
// called when connection is closed / reset
// (after this, the connection number may not be used any more)
void (*Close)( unsigned char ConnNo );
// called when sending data is possible
// (return length of available data, 0xFFFF to close connection)
unsigned short (*Send)( unsigned char ConnNo, unsigned long Pos, unsigned char * pBuffer, unsigned short MaxLen );
// called when data was sent and ACKed
void (*Sent)( unsigned char ConnNo, unsigned long Pos );
// called when data was received, must return new window size (not smaller than curWnd)
unsigned short (*Received)( unsigned char ConnNo, unsigned long Pos, unsigned char * pBuffer, unsigned short Len, unsigned short curWnd );
};