NACK packets below the LowestAcked in new SentPacketHandler

fixes #204
This commit is contained in:
Marten Seemann
2016-07-07 23:20:22 +08:00
parent 3794ea2b83
commit d25976c083
2 changed files with 24 additions and 2 deletions

View File

@@ -168,6 +168,17 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrameNew, withPacket
var ackedPackets congestion.PacketVector
var lostPackets congestion.PacketVector
// NACK packets below the LowestAcked
for i := h.LargestInOrderAcked; i < ackFrame.LowestAcked; i++ {
p, err := h.nackPacket(i)
if err != nil {
return err
}
if p != nil {
lostPackets = append(lostPackets, congestion.PacketInfo{Number: p.PacketNumber, Length: p.Length})
}
}
ackRangeIndex := 0
for i := ackFrame.LowestAcked; i <= ackFrame.LargestAcked; i++ {
if ackFrame.HasMissingRanges() {

View File

@@ -247,7 +247,6 @@ var _ = Describe("SentPacketHandler", func() {
Expect(err).ToNot(HaveOccurred())
Expect(handler.LargestInOrderAcked).To(Equal(protocol.PacketNumber(0)))
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1)))
Expect(handler.packetHistory[1].MissingReports).To(BeZero())
for i := 2; i <= 8; i++ {
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(i)))
}
@@ -270,7 +269,6 @@ var _ = Describe("SentPacketHandler", func() {
Expect(err).ToNot(HaveOccurred())
Expect(handler.LargestInOrderAcked).To(Equal(protocol.PacketNumber(0)))
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1)))
Expect(handler.packetHistory[1].MissingReports).To(BeZero())
for i := 2; i <= 3; i++ {
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(i)))
}
@@ -285,6 +283,19 @@ var _ = Describe("SentPacketHandler", func() {
Expect(handler.packetHistory[10].MissingReports).To(BeZero())
})
It("NACKs packets below the LowestAcked", func() {
ack := frames.AckFrameNew{
LargestAcked: 8,
LowestAcked: 3,
}
err := handler.ReceivedAck(&ack, 1)
Expect(err).ToNot(HaveOccurred())
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1)))
Expect(handler.packetHistory[1].MissingReports).To(Equal(uint8(1)))
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
Expect(handler.packetHistory[2].MissingReports).To(Equal(uint8(1)))
})
It("handles an ACK with multiple missing packet ranges", func() {
ack := frames.AckFrameNew{
LargestAcked: 9,