#pragma once #include "../packet/packet.h" #include "addr.h" #include typedef enum { UDP, TCP } BindingType; typedef struct { BindingType type; union { UdpSocket udp; TcpSocket tcp; } sock; } Binding; void create_binding(BindingType type, uint16_t port, Binding* binding); void free_binding(Binding* binding); typedef struct { BindingType type; union { struct { UdpSocket udp; SocketAddr clientaddr; } udp; TcpStream tcp; } sock; } Connection; bool accept_connection(Binding* binding, Connection* connection); bool read_connection(Connection* connection, Packet* packet); bool write_connection(Connection* connection, Packet* packet); void free_connection(Connection* connection); bool create_request(BindingType type, SocketAddr* addr, Connection* request); bool request_packet(Connection* request, Packet* in, Packet* out); void free_request(Connection* connection);