]> git.meshlink.io Git - utcp/blobdiff - utcp_priv.h
Fix memory and resource leaks.
[utcp] / utcp_priv.h
index 5a72ce9a1fd58a0ffecd9872a102d8cc899123d9..184e3386bf00e8c3a3addabd1c39bd9086f5d40a 100644 (file)
@@ -30,6 +30,9 @@
 #define FIN 4
 #define RST 8
 
+#define DEFAULT_SNDBUFSIZE 4096
+#define DEFAULT_MAXSNDBUFSIZE 131072
+
 struct hdr {
        uint16_t src; // Source port
        uint16_t dst; // Destination port
@@ -54,7 +57,7 @@ enum state {
        TIME_WAIT
 };
 
-static const char *strstate[] = {
+static const char *strstate[] __attribute__((unused)) = {
        [CLOSED] = "CLOSED",
        [LISTEN] = "LISTEN",
        [SYN_SENT] = "SYN_SENT",
@@ -71,19 +74,27 @@ static const char *strstate[] = {
 struct utcp_connection {
        void *priv;
        struct utcp *utcp;
+
        bool reapable;
 
+       // Callbacks
+
+       utcp_recv_t recv;
+
+       // TCP State
+
        uint16_t src;
        uint16_t dst;
        enum state state;
 
-       // The following two structures form the TCB
-
        struct {
                uint32_t una;
                uint32_t nxt;
                uint32_t wnd;
                uint32_t iss;
+
+               uint32_t last;
+               uint32_t cwnd;
        } snd;
 
        struct {
@@ -92,25 +103,47 @@ struct utcp_connection {
                uint32_t irs;
        } rcv;
 
-       utcp_recv_t recv;
+       int dupack;
+
+       // Timers
 
        struct timeval conn_timeout;
        struct timeval rtrx_timeout;
 
+       // Send buffer
+
        char *sndbuf;
+       uint32_t sndbufused;
        uint32_t sndbufsize;
+       uint32_t maxsndbufsize;
+
+       // Per-socket options
+
+       bool nodelay;
+       bool keepalive;
+
+       // Congestion avoidance state
+
+       struct timeval tlast;
+       uint64_t bandwidth;
 };
 
 struct utcp {
        void *priv;
 
+       // Callbacks
+
        utcp_accept_t accept;
        utcp_pre_accept_t pre_accept;
        utcp_send_t send;
 
+       // Global socket options
+
        uint16_t mtu;
        int timeout;
 
+       // Connection management
+
        struct utcp_connection **connections;
        int nconnections;
        int nallocated;