forked from quic-go/quic-go
compute handshake timeout based on the time of the last handshake packet
This commit is contained in:
@@ -32,6 +32,7 @@ const (
|
|||||||
type sentPacketHandler struct {
|
type sentPacketHandler struct {
|
||||||
lastSentPacketNumber protocol.PacketNumber
|
lastSentPacketNumber protocol.PacketNumber
|
||||||
lastSentRetransmittablePacketTime time.Time
|
lastSentRetransmittablePacketTime time.Time
|
||||||
|
lastSentHandshakePacketTime time.Time
|
||||||
|
|
||||||
nextPacketSendTime time.Time
|
nextPacketSendTime time.Time
|
||||||
skippedPackets []protocol.PacketNumber
|
skippedPackets []protocol.PacketNumber
|
||||||
@@ -155,6 +156,9 @@ func (h *sentPacketHandler) sentPacketImpl(packet *Packet) bool /* isRetransmitt
|
|||||||
isRetransmittable := len(packet.Frames) != 0
|
isRetransmittable := len(packet.Frames) != 0
|
||||||
|
|
||||||
if isRetransmittable {
|
if isRetransmittable {
|
||||||
|
if packet.EncryptionLevel < protocol.EncryptionForwardSecure {
|
||||||
|
h.lastSentHandshakePacketTime = packet.SendTime
|
||||||
|
}
|
||||||
h.lastSentRetransmittablePacketTime = packet.SendTime
|
h.lastSentRetransmittablePacketTime = packet.SendTime
|
||||||
packet.includedInBytesInFlight = true
|
packet.includedInBytesInFlight = true
|
||||||
h.bytesInFlight += packet.Length
|
h.bytesInFlight += packet.Length
|
||||||
@@ -274,7 +278,7 @@ func (h *sentPacketHandler) updateLossDetectionAlarm() {
|
|||||||
|
|
||||||
// TODO(#497): TLP
|
// TODO(#497): TLP
|
||||||
if !h.handshakeComplete {
|
if !h.handshakeComplete {
|
||||||
h.alarm = h.lastSentRetransmittablePacketTime.Add(h.computeHandshakeTimeout())
|
h.alarm = h.lastSentHandshakePacketTime.Add(h.computeHandshakeTimeout())
|
||||||
} else if !h.lossTime.IsZero() {
|
} else if !h.lossTime.IsZero() {
|
||||||
// Early retransmit timer or time loss detection.
|
// Early retransmit timer or time loss detection.
|
||||||
h.alarm = h.lossTime
|
h.alarm = h.lossTime
|
||||||
|
|||||||
@@ -129,6 +129,13 @@ var _ = Describe("SentPacketHandler", func() {
|
|||||||
Expect(handler.lastSentRetransmittablePacketTime).To(Equal(sendTime))
|
Expect(handler.lastSentRetransmittablePacketTime).To(Equal(sendTime))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("stores the sent time of handshake packets", func() {
|
||||||
|
sendTime := time.Now().Add(-time.Minute)
|
||||||
|
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 1, SendTime: sendTime, EncryptionLevel: protocol.EncryptionUnencrypted}))
|
||||||
|
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 2, SendTime: sendTime.Add(time.Hour), EncryptionLevel: protocol.EncryptionForwardSecure}))
|
||||||
|
Expect(handler.lastSentHandshakePacketTime).To(Equal(sendTime))
|
||||||
|
})
|
||||||
|
|
||||||
It("does not store non-retransmittable packets", func() {
|
It("does not store non-retransmittable packets", func() {
|
||||||
handler.SentPacket(nonRetransmittablePacket(&Packet{PacketNumber: 1}))
|
handler.SentPacket(nonRetransmittablePacket(&Packet{PacketNumber: 1}))
|
||||||
Expect(handler.packetHistory.Len()).To(BeZero())
|
Expect(handler.packetHistory.Len()).To(BeZero())
|
||||||
@@ -851,6 +858,7 @@ var _ = Describe("SentPacketHandler", func() {
|
|||||||
handler.SentPacket(handshakePacket(&Packet{PacketNumber: 2, SendTime: sendTime}))
|
handler.SentPacket(handshakePacket(&Packet{PacketNumber: 2, SendTime: sendTime}))
|
||||||
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 3, SendTime: sendTime}))
|
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 3, SendTime: sendTime}))
|
||||||
handler.SentPacket(handshakePacket(&Packet{PacketNumber: 4, SendTime: lastHandshakePacketSendTime}))
|
handler.SentPacket(handshakePacket(&Packet{PacketNumber: 4, SendTime: lastHandshakePacketSendTime}))
|
||||||
|
handler.SentPacket(retransmittablePacket(&Packet{PacketNumber: 5, SendTime: now}))
|
||||||
|
|
||||||
err := handler.ReceivedAck(createAck([]wire.AckRange{{First: 1, Last: 1}}), 1, protocol.EncryptionForwardSecure, now)
|
err := handler.ReceivedAck(createAck([]wire.AckRange{{First: 1, Last: 1}}), 1, protocol.EncryptionForwardSecure, now)
|
||||||
// RTT is now 1 minute
|
// RTT is now 1 minute
|
||||||
|
|||||||
Reference in New Issue
Block a user