forked from quic-go/quic-go
increase missingReports counter for NACKed packets
This commit is contained in:
@@ -150,7 +150,7 @@ func (h *outgoingPacketAckHandler) ReceivedAck(ackFrame *frames.AckFrame) error
|
|||||||
delete(h.packetHistory, i)
|
delete(h.packetHistory, i)
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete packets with a packet number higher than highestInOrderAckedPacketNumber that have already been ACKed
|
// increase MissingReports counter of NACKed packets
|
||||||
// this is the case if the PacketNumber is *not* contained in any of the NACK ranges
|
// this is the case if the PacketNumber is *not* contained in any of the NACK ranges
|
||||||
if ackFrame.HasNACK() {
|
if ackFrame.HasNACK() {
|
||||||
nackRangeIndex := len(ackFrame.NackRanges) - 1
|
nackRangeIndex := len(ackFrame.NackRanges) - 1
|
||||||
@@ -163,11 +163,16 @@ func (h *outgoingPacketAckHandler) ReceivedAck(ackFrame *frames.AckFrame) error
|
|||||||
nackRange = ackFrame.NackRanges[nackRangeIndex]
|
nackRange = ackFrame.NackRanges[nackRangeIndex]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// PacketNumber i is not contained in a NACK range
|
// PacketNumber i is not contained in a NACK range, increase it's missingReports counter
|
||||||
if i >= nackRange.FirstPacketNumber && i <= nackRange.LastPacketNumber {
|
if i >= nackRange.FirstPacketNumber && i <= nackRange.LastPacketNumber {
|
||||||
continue
|
packet, ok := h.packetHistory[i]
|
||||||
|
if !ok {
|
||||||
|
return errMapAccess
|
||||||
|
}
|
||||||
|
packet.MissingReports++
|
||||||
|
// ToDo: do something as when packet.MissionReports > threshold
|
||||||
}
|
}
|
||||||
delete(h.packetHistory, i)
|
// ToDo: delete packet from history, since it already has been ACKed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -177,7 +177,8 @@ var _ = Describe("AckHandler", func() {
|
|||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
|
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
|
||||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(3)))
|
Expect(handler.packetHistory[2].MissingReports).To(Equal(uint8(1)))
|
||||||
|
// Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(3)))
|
||||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(4)))
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(4)))
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -196,7 +197,9 @@ var _ = Describe("AckHandler", func() {
|
|||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
|
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
|
||||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
||||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(3)))
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(3)))
|
||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(4)))
|
Expect(handler.packetHistory[2].MissingReports).To(Equal(uint8(1)))
|
||||||
|
Expect(handler.packetHistory[3].MissingReports).To(Equal(uint8(1)))
|
||||||
|
// Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(4)))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("handles an ACK with multiple NACK ranges", func() {
|
It("handles an ACK with multiple NACK ranges", func() {
|
||||||
@@ -217,9 +220,11 @@ var _ = Describe("AckHandler", func() {
|
|||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
|
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
|
||||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(3)))
|
Expect(handler.packetHistory[2].MissingReports).To(Equal(uint8(1)))
|
||||||
|
// Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(3)))
|
||||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(4)))
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(4)))
|
||||||
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(5)))
|
Expect(handler.packetHistory[4].MissingReports).To(Equal(uint8(1)))
|
||||||
|
// Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(5)))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("rejects an ACK with a NACK that has incorrect entropy", func() {
|
It("rejects an ACK with a NACK that has incorrect entropy", func() {
|
||||||
@@ -258,6 +263,33 @@ var _ = Describe("AckHandler", func() {
|
|||||||
err = handler.ReceivedAck(&ack)
|
err = handler.ReceivedAck(&ack)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("increments the missingReports counter every time a NACK for a packet is received", func() {
|
||||||
|
nackRange1 := frames.NackRange{FirstPacketNumber: 4, LastPacketNumber: 4}
|
||||||
|
nackRange2 := frames.NackRange{FirstPacketNumber: 2, LastPacketNumber: 2}
|
||||||
|
entropy := EntropyAccumulator(0)
|
||||||
|
entropy.Add(1, packets[0].EntropyBit)
|
||||||
|
entropy.Add(3, packets[2].EntropyBit)
|
||||||
|
ack1 := frames.AckFrame{
|
||||||
|
LargestObserved: 3,
|
||||||
|
Entropy: byte(entropy),
|
||||||
|
NackRanges: []frames.NackRange{nackRange2},
|
||||||
|
}
|
||||||
|
err := handler.ReceivedAck(&ack1)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
entropy.Add(5, packets[4].EntropyBit)
|
||||||
|
ack2 := frames.AckFrame{
|
||||||
|
LargestObserved: 5,
|
||||||
|
Entropy: byte(entropy),
|
||||||
|
NackRanges: []frames.NackRange{nackRange1, nackRange2},
|
||||||
|
}
|
||||||
|
err = handler.ReceivedAck(&ack2)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
||||||
|
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(4)))
|
||||||
|
Expect(handler.packetHistory[2].MissingReports).To(Equal(uint8(2)))
|
||||||
|
Expect(handler.packetHistory[4].MissingReports).To(Equal(uint8(1)))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user