#ifndef _NET_TCP_H #define _NET_TCP_H #include #define TCP_FLAG_FIN 0x01 #define TCP_FLAG_SYN 0x02 #define TCP_FLAG_RST 0x04 #define TCP_FLAG_PSH 0x08 #define TCP_FLAG_ACK 0x10 #define TCP_FLAG_URG 0x20 #define TCP_STATE_CLOSED 0 #define TCP_STATE_LISTEN 1 #define TCP_STATE_SYN_SENT 2 #define TCP_STATE_SYN_RCVD 3 #define TCP_STATE_ESTABLISHED 4 #define TCP_STATE_FIN_WAIT1 5 #define TCP_STATE_FIN_WAIT2 6 #define TCP_STATE_CLOSE_WAIT 7 #define TCP_STATE_CLOSING 8 #define TCP_STATE_LAST_ACK 9 #define TCP_STATE_TIME_WAIT 10 typedef struct { uint16_t src_port; uint16_t dst_port; uint32_t seq_num; uint32_t ack_num; uint8_t data_offset_reserved; uint8_t flags; uint16_t window_size; uint16_t checksum; uint16_t urgent_pointer; } __attribute__((packed)) tcp_header_t; typedef struct tcp_conn { uint32_t local_ip; uint32_t remote_ip; uint16_t local_port; uint16_t remote_port; uint8_t state; uint32_t seq_num; uint32_t ack_num; bool in_use; } tcp_conn_t; void tcp_init(void); void tcp_receive(const uint8_t* packet, uint16_t length, uint32_t src_ip); void tcp_send_packet(uint32_t dst_ip, uint16_t src_port, uint16_t dst_port, uint32_t seq, uint32_t ack, uint8_t flags, const void* payload, uint16_t payload_len); size_t tcp_get_connections_count(void); const tcp_conn_t* tcp_get_connection(size_t index); #endif // _NET_TCP_H