#ifndef UDPSENDQUEUE_H
#define UDPSENDQUEUE_H
#include "common.h"
class Connection;
class UdpSendQueue {
public:
struct Entry {
Entry *prev, *next;
Time resendTime;
unsigned int index;
unsigned short size;
unsigned char data[PACKET_SIZE];
};
public:
Connection &connection;
private:
Time nextSendTime;
Time nextPartialSendTime;
bool finalEntryAdded;
unsigned int nextIndex;
Entry *freeFirst;
Entry *busyFirst, *busyLast;
Entry entries[PACKETS_COUNT];
Entry* allocEntry();
void moveToEnd(Entry *e);
void freeEntry(Entry *e);
public:
explicit UdpSendQueue(Connection &connection);
~UdpSendQueue();
void confirm(unsigned int index, const unsigned char *bits, unsigned int bitsCount);
bool sendUdpSingle();
int sendUdp();
bool canSentToUdp() const;
void whenWriteToUdp(Time &t) const;
};
#endif