}
func (h *appDataReceivedPacketTracker) hasNewMissingPackets() bool {
+ if h.lastAck == nil {
+ return false
+ }
if h.largestObserved < reorderingThreshold {
return false
}
}
func (h *appDataReceivedPacketTracker) shouldQueueACK(pn protocol.PacketNumber, ecn protocol.ECN, wasMissing bool) bool {
- // always acknowledge the first packet
- if h.lastAck == nil {
- h.logger.Debugf("\tQueueing ACK because the first packet should be acknowledged.")
- return true
- }
-
// Send an ACK if this packet was reported missing in an ACK sent before.
// Ack decimation with reordering relies on the timer to send an ACK, but if
// missing packets we reported in the previous ACK, send an ACK immediately.
func TestAppDataReceivedPacketTrackerAckEverySecondPacket(t *testing.T) {
tr := newAppDataReceivedPacketTracker(utils.DefaultLogger)
- // the first packet is always acknowledged
- require.NoError(t, tr.ReceivedPacket(0, protocol.ECNNon, monotime.Now(), true))
- require.NotNil(t, tr.GetAckFrame(monotime.Now(), true))
+ require.Nil(t, tr.GetAckFrame(monotime.Now(), true))
+
for p := protocol.PacketNumber(1); p <= 20; p++ {
require.NoError(t, tr.ReceivedPacket(p, protocol.ECNNon, monotime.Now(), true))
switch p % 2 {
func TestAppDataReceivedPacketTrackerAlarmTimeout(t *testing.T) {
tr := newAppDataReceivedPacketTracker(utils.DefaultLogger)
- // the first packet is always acknowledged
- require.NoError(t, tr.ReceivedPacket(0, protocol.ECNNon, monotime.Now(), true))
- require.NotNil(t, tr.GetAckFrame(monotime.Now(), true))
-
now := monotime.Now()
require.NoError(t, tr.ReceivedPacket(1, protocol.ECNNon, now, false))
require.Nil(t, tr.GetAckFrame(monotime.Now(), true))
func TestAppDataReceivedPacketTrackerQueuesECNCE(t *testing.T) {
tr := newAppDataReceivedPacketTracker(utils.DefaultLogger)
- // the first packet is always acknowledged
- require.NoError(t, tr.ReceivedPacket(0, protocol.ECNNon, monotime.Now(), true))
- require.NotNil(t, tr.GetAckFrame(monotime.Now(), true))
-
require.NoError(t, tr.ReceivedPacket(1, protocol.ECNCE, monotime.Now(), true))
ack := tr.GetAckFrame(monotime.Now(), true)
require.NotNil(t, ack)
tr := newAppDataReceivedPacketTracker(utils.DefaultLogger)
now := monotime.Now()
- // the first packet is always acknowledged
require.NoError(t, tr.ReceivedPacket(0, protocol.ECNNon, now, true))
- require.NotNil(t, tr.GetAckFrame(now, true))
+ require.Nil(t, tr.GetAckFrame(now, true))
require.NoError(t, tr.ReceivedPacket(5, protocol.ECNNon, now, true))
ack := tr.GetAckFrame(now, true) // ACK: 0 and 5, missing: 1, 2, 3, 4