Skip to content

Commit

Permalink
Merge pull request #1876 from lucas-clemente/fix-pto
Browse files Browse the repository at this point in the history
fix dequeuing of probe packets
  • Loading branch information
marten-seemann committed Apr 16, 2019
2 parents ffcbbb5 + 37083e4 commit 24fed6d
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
2 changes: 2 additions & 0 deletions internal/ackhandler/sent_packet_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,8 @@ func (h *sentPacketHandler) onPacketAcked(p *Packet, rcvTime time.Time) error {
}
h.rtoCount = 0
h.tlpCount = 0
h.numRTOs = 0
h.allowTLP = false
h.handshakeCount = 0
return h.packetHistory.Remove(p.PacketNumber)
}
Expand Down
24 changes: 24 additions & 0 deletions internal/ackhandler/sent_packet_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -927,6 +927,30 @@ var _ = Describe("SentPacketHandler", func() {
Expect(handler.SendMode()).ToNot(Equal(SendRTO))
})

It("resets the send mode when it receives an acknowledgement after queueing probe packets", func() {
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 1, SendTime: time.Now().Add(-time.Hour)}))
handler.rttStats.UpdateRTT(time.Second, 0, time.Now())
handler.OnAlarm() // TLP
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 2})) // send the first TLP
handler.OnAlarm() // TLP
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 3})) // send the second TLP
handler.OnAlarm()
Expect(handler.SendMode()).To(Equal(SendRTO))
ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 1, Largest: 1}}}
Expect(handler.ReceivedAck(ack, 1, protocol.EncryptionForwardSecure, time.Now())).To(Succeed())
Expect(handler.SendMode()).To(Equal(SendAny))
})

It("resets the send mode when it receives an acknowledgement after queueing probe packets", func() {
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 1, SendTime: time.Now().Add(-time.Hour)}))
handler.rttStats.UpdateRTT(time.Second, 0, time.Now())
handler.OnAlarm()
Expect(handler.SendMode()).To(Equal(SendTLP))
ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 1, Largest: 1}}}
Expect(handler.ReceivedAck(ack, 1, protocol.EncryptionForwardSecure, time.Now())).To(Succeed())
Expect(handler.SendMode()).To(Equal(SendAny))
})

It("gets packets sent before the probe packet for retransmission", func() {
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 1, SendTime: time.Now().Add(-time.Hour)}))
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 2, SendTime: time.Now().Add(-time.Hour)}))
Expand Down

0 comments on commit 24fed6d

Please sign in to comment.