]> git.sesse.net Git - greproxy/blobdiff - rsencoder.cpp
Merge branch 'master' of /srv/git.sesse.net/www/greproxy
[greproxy] / rsencoder.cpp
index 719d548bde48dcaa073181c761137e59a60993b4..e4e9481f8b35c61715a3d2ba1966eaa8c414fa83 100644 (file)
@@ -21,7 +21,7 @@ RSEncoder::RSEncoder(Sender *sender)
 {
 }
 
-void RSEncoder::send_packet(uint16_t proto, const std::string &data, int incoming_seq)
+void RSEncoder::send_packet(uint16_t proto, const std::string &data, uint32_t incoming_seq)
 {
        if (!packet_history.empty() &&
            incoming_seq <= packet_history.back().seq) {
@@ -34,7 +34,17 @@ void RSEncoder::send_packet(uint16_t proto, const std::string &data, int incomin
                // Received an unfinished group.
                packet_history.clear();
        }
-       sender->send_packet(proto, data, incoming_seq);
+       bool debug_drop_packet = false;  // For testing only.
+       if (incoming_seq % RS_PAYLOAD_SIZE == 3) {
+               //debug_drop_packet = true;
+       }
+       if (debug_drop_packet) {
+               const unsigned char *ptr = reinterpret_cast<const unsigned char *>(data.data());
+               printf("DEBUG: Dropping packet seq=%u proto=0x%04x len=%d data=%02x %02x %02x %02x %02x %02x %02x %02x ...\n",
+                       incoming_seq, proto, data.size(), ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7]);
+       } else {
+               sender->send_packet(proto, data, incoming_seq);
+       }
        packet_history.emplace_back(GREPacket{incoming_seq, proto, data});
        if (packet_history.size() == RS_PAYLOAD_SIZE) {
                finish_group();
@@ -74,7 +84,7 @@ void RSEncoder::finish_group()
                        }
 
                        const char *sdata = reinterpret_cast<const char *>(data);
-                       int start_seq = packet_history[0].seq - 1;
+                       uint32_t start_seq = packet_history[0].seq - 1;
                        sender->send_packet(0xffff, string(sdata, size), start_seq - (packet_num - RS_PAYLOAD_SIZE));
                });