A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.

Dependents:   oldheating gps motorhome heating

tcp/tcb.h

Committer:
andrewboyson
Date:
2019-04-10
Revision:
140:9000ea70b220
Parent:
131:774f7f367031
Child:
144:6bd5c54efc7d

File content as of revision 140:9000ea70b220:

#ifndef TCB_H
#define TCB_H

#include <stdint.h>
#include <stdbool.h>

#define TCB_EMPTY          0
#define TCB_SYN_RECEIVED   1
#define TCB_ESTABLISHED    2
#define TCB_CLOSE_FIN_WAIT 3

struct tcb
{
    int      state;
    uint32_t timeSendsBeingAcked; //Used for RTO
    int      countSendsNotAcked;  //Used for RTO
    uint32_t timeLastRcvd;        //Used for detect idle links
    int      ipType;
    int      remArIndex;          //Unique per remote ip when taken with the ipType
    int      locIpScope;          //Unique per local ip
    uint16_t remPort;
    uint16_t locPort;
    uint32_t remMss;
    uint32_t window;
    
    uint32_t remIsn;
    uint32_t bytesRcvdFromRem;
    uint32_t bytesAckdToRem;
    bool     rcvdFin;
    
    uint32_t locIsn;
    uint32_t bytesSentToRem;
    uint32_t bytesAckdByRem;
    bool     sentFin;
    
    /*
    Communicates between application (HTTP) and TCP.
    Application usually works out what to do from the first packet and so it stores that in todo to remember what it is doing for subsequent packets.
    Once all packets have been received the application sets postCompleted to indicate that TCP should start sending data.
    Once all packets have been sent the application returns a data size less than MSS.
    Note that TCP needs to keep todo in case data has to be resent after the application thinks it has finished.
    */
     int32_t  todo;
     bool     postComplete;
     uint32_t delayUntil;
};

extern uint32_t    TcbGetIsn(void);
extern struct tcb* TcbGetExisting(int ipType, int remArIndex, int locIpScope, uint16_t remPort, uint16_t locPort);
extern struct tcb* TcbGetEmpty(void);
extern struct tcb* TcbGetNext(struct tcb* pTcb);
extern void        TcbInit(void);

#endif