]> git.sesse.net Git - greproxy/blobdiff - reorderer.h
Make Reorderer handle multi-timeouts.
[greproxy] / reorderer.h
index 393e327f7dbe86053fb374fd9601720c3a9e8195..622083e0563da0f968161e98654f144cc2666fd1 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <assert.h>
 #include <stdint.h>
+#include <sys/time.h>
 
 #include <algorithm>
 #include <map>
@@ -16,23 +17,25 @@ struct GREPacket {
        int seq;
        uint16_t proto;
        std::string data;
+       timeval ts;
 
        bool operator> (const GREPacket &other) const {
                return seq > other.seq;
        }
 };
 
-class Reorderer : public Protocol {
+class Reorderer : public Sender {
 public:
-       Reorderer(Protocol* sender);
+       Reorderer(Sender* sender);
        void send_packet(uint16_t proto, const std::string& data, int seq);
-       virtual int fd() const { assert(false); }
+       void possibly_adjust_tv(timeval *tv);
 
 private:
        void check_ts_discontinuity(uint16_t proto, const std::string &data, bool silence);
 
-       Protocol* sender;
+       Sender* sender;
        int last_seq;
+       timeval last_sent_packet;
 
        std::priority_queue<GREPacket, std::vector<GREPacket>, std::greater<GREPacket>> packet_buffer;
        std::map<int, int> ccs;