75 lines
2.0 KiB
C
75 lines
2.0 KiB
C
#ifndef ETHERLIB_TCP_WINDOW_H
|
|
#define ETHERLIB_TCP_WINDOW_H
|
|
|
|
#include <stdint.h>
|
|
#include <etherlib_options.h>
|
|
|
|
//#include "../../../memory_pool.h"
|
|
|
|
/**
|
|
* TCP Window
|
|
*/
|
|
typedef struct {
|
|
uint32_t nextWritten; ///< Sequence number of next written octet (Sequence number of next unacknowledged octet)
|
|
uint32_t firstUnACK; ///< Sequence number of last acknowledged octet + 1
|
|
uint32_t firstByteOffset; ///< Sequence number offset of the array's first byte
|
|
uint32_t size; ///< Size of the storage area
|
|
uint8_t data[]; ///< Window data storage
|
|
} TcpWindow;
|
|
|
|
/**
|
|
* Create new TCP Window object.
|
|
* @param size
|
|
* @return pointer to newly created TCP Window OR NULL on failure
|
|
*/
|
|
TcpWindow * tcpw_create(uint32_t size);
|
|
|
|
/**
|
|
* Destruct TCP Window object.
|
|
* @param tcpw pointer to previously allocated TCP Window object
|
|
*/
|
|
void tcpw_destroy(TcpWindow * tcpw);
|
|
|
|
/**
|
|
* Set sequence number offset
|
|
* @param tcpw
|
|
* @param offset
|
|
*/
|
|
void tcpw_set_seqnum_offset(TcpWindow * tcpw, uint32_t offset);
|
|
|
|
/**
|
|
* Get maximum allocable TCP window size. (Cannot store bigger incoming contiguous data blocks.)
|
|
* @param tcpw pointer to TCP Window object
|
|
* @return maximum size of TCP segment window
|
|
*/
|
|
uint32_t tcpw_get_max_window_size(TcpWindow * tcpw);
|
|
|
|
/**
|
|
* TODO: rename function
|
|
* Get used area size of this window.
|
|
* @param tcpw pointer to TCP Window object
|
|
* @return used area size in bytes
|
|
*
|
|
*/
|
|
uint32_t tcpw_get_occupied_size(TcpWindow * tcpw);
|
|
|
|
/** TODO: rename function
|
|
* Store TCP segment
|
|
* @param tcpw pointer to TCP Window object
|
|
* @param data data to store
|
|
* @param size data size in bytes
|
|
* @param seqNum sequence number of first octet of the block
|
|
* @return number of stored bytes
|
|
*/
|
|
uint32_t tcpw_store(TcpWindow * tcpw, const uint8_t * data, uint32_t size, uint32_t seqNum);
|
|
|
|
/**
|
|
* Acknowledge segment.
|
|
* @param tcpw pointer to TCP Window structure
|
|
* @param ackNum acknowledgement number
|
|
* @return acknowledge success
|
|
*/
|
|
bool tcpw_acknowledge(TcpWindow * tcpw, uint32_t ackNum);
|
|
|
|
#endif //ETHERLIB_TCP_WINDOW_H
|