Loading debian/changelog +9 −0 Original line number Diff line number Diff line libnetplus (20260504+6) unstable; urgency=medium * QUIC: add per-stream recv_frame_count diagnostic — tracks how many STREAM frames the server actually processes for each stream. Logged in the FIN-gap diagnostic line and as "[QUIC-DIAG] stream N HEAD frame" when offset-0 data arrives. This distinguishes "data never reached processStreamFrame" from "data was processed but lost in reassembly". libnetplus (20260504+5) unstable; urgency=medium * QUIC: fix critical data-loss bug in loss-detection retransmit — if Loading src/quic.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -3392,6 +3392,17 @@ void quic::processStreamFrame(const uint8_t* data, size_t len, size_t& offset) { if (stream_len > 0) { uint64_t end_offset = stream_offset + stream_len; // Diagnostic: track frame arrival for server-side large streams if (_is_server && stream_len > 0) { stream.recv_frame_count++; if (stream_offset == 0) { std::cerr << "[QUIC-DIAG] stream " << stream_id << " HEAD frame: len=" << stream_len << " frame_count=" << stream.recv_frame_count << "\n"; } } // Grow buffer if needed if (end_offset > stream.recv_buffer.size()) { stream.recv_buffer.resize(end_offset, 0); Loading Loading @@ -3492,6 +3503,7 @@ void quic::processStreamFrame(const uint8_t* data, size_t len, size_t& offset) { << " contig=" << stream.recv_contiguous << " ranges=" << range_count << " gap=" << first_gap_start << "-" << first_gap_end << " frames=" << stream.recv_frame_count << "\n"; } Loading src/socket.h +1 −0 Original line number Diff line number Diff line Loading @@ -578,6 +578,7 @@ namespace netplus { bool recv_complete = false; // all data up to FIN received bool send_fin = false; bool reset = false; uint64_t recv_frame_count = 0; // diagnostic: STREAM frames received // Track received byte ranges for gap detection std::set<std::pair<uint64_t,uint64_t>> recv_ranges; }; Loading Loading
debian/changelog +9 −0 Original line number Diff line number Diff line libnetplus (20260504+6) unstable; urgency=medium * QUIC: add per-stream recv_frame_count diagnostic — tracks how many STREAM frames the server actually processes for each stream. Logged in the FIN-gap diagnostic line and as "[QUIC-DIAG] stream N HEAD frame" when offset-0 data arrives. This distinguishes "data never reached processStreamFrame" from "data was processed but lost in reassembly". libnetplus (20260504+5) unstable; urgency=medium * QUIC: fix critical data-loss bug in loss-detection retransmit — if Loading
src/quic.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -3392,6 +3392,17 @@ void quic::processStreamFrame(const uint8_t* data, size_t len, size_t& offset) { if (stream_len > 0) { uint64_t end_offset = stream_offset + stream_len; // Diagnostic: track frame arrival for server-side large streams if (_is_server && stream_len > 0) { stream.recv_frame_count++; if (stream_offset == 0) { std::cerr << "[QUIC-DIAG] stream " << stream_id << " HEAD frame: len=" << stream_len << " frame_count=" << stream.recv_frame_count << "\n"; } } // Grow buffer if needed if (end_offset > stream.recv_buffer.size()) { stream.recv_buffer.resize(end_offset, 0); Loading Loading @@ -3492,6 +3503,7 @@ void quic::processStreamFrame(const uint8_t* data, size_t len, size_t& offset) { << " contig=" << stream.recv_contiguous << " ranges=" << range_count << " gap=" << first_gap_start << "-" << first_gap_end << " frames=" << stream.recv_frame_count << "\n"; } Loading
src/socket.h +1 −0 Original line number Diff line number Diff line Loading @@ -578,6 +578,7 @@ namespace netplus { bool recv_complete = false; // all data up to FIN received bool send_fin = false; bool reset = false; uint64_t recv_frame_count = 0; // diagnostic: STREAM frames received // Track received byte ranges for gap detection std::set<std::pair<uint64_t,uint64_t>> recv_ranges; }; Loading