#ifndef G4U_RETRANSMIT_H #define G4U_RETRANSMIT_H #include #include struct ack_map_node { unsigned char dst_addr[6]; unsigned char* packet; int packet_size; int retries_left; struct ack_map_node* next; }; struct ack_map { struct ack_map_node* top; }; struct retransmitter { pthread_t thread_id; int sock; int device_index; struct ack_map messages; bool quit; }; struct retransmitter* start_retransmit_thread(int sock, int device_index); void send_until_acked(struct retransmitter* retransmitter, const unsigned char dst_addr[6], const unsigned char* packet, int packet_size); void handle_ack(struct retransmitter* retransmitter); void free_retransmitter(struct retransmitter* retransmitter); #endif /* G4U_RETRANSMIT_H */