about summary refs log tree commit diff stats
path: root/src/retransmit.h
blob: 0d2a90be114c6c1cfe0b9ae94dce31b7b92697ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef G4U_RETRANSMIT_H
#define G4U_RETRANSMIT_H

#include <pthread.h>
#include <stdbool.h>

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 */