]> git.sesse.net Git - greproxy/blobdiff - reorderer.h
Merge branch 'master' of /srv/git.sesse.net/www/greproxy
[greproxy] / reorderer.h
index f58a9327673ac1850c67b8e5f4b91ae5d72eb1f4..d7f585c50c7066c92e58a28dabde9e53dbe34692 100644 (file)
@@ -14,7 +14,7 @@
 #include "protocol.h"
 
 struct GREPacket {
-       int seq;
+       uint32_t seq;
        uint16_t proto;
        std::string data;
        timeval ts;
@@ -27,16 +27,24 @@ struct GREPacket {
 class Reorderer : public Sender {
 public:
        Reorderer(Sender* sender);
-       void send_packet(uint16_t proto, const std::string& data, int seq);
+       void send_packet(uint16_t proto, const std::string& data, uint32_t seq);
+       void possibly_adjust_tv(timeval *tv);
+
+       int get_reorders() const { return num_reorders; }
+       int get_lost_packets() const { return num_lost_packets; }
+       int get_ts_discontinuities() const { return num_ts_discontinuities; }
 
 private:
        void check_ts_discontinuity(uint16_t proto, const std::string &data, bool silence);
 
        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;
+
+       int num_reorders = 0, num_lost_packets = 0, num_ts_discontinuities = 0;
 };
 
 #endif  // !defined(_REORDERER_H)