forked from quic-go/quic-go
Merge pull request #1176 from lucas-clemente/fix-1711
don't send an ACK frame for Retry packets
This commit is contained in:
10
session.go
10
session.go
@@ -536,9 +536,13 @@ func (s *session) handlePacketImpl(p *receivedPacket) error {
|
||||
// Only do this after decrypting, so we are sure the packet is not attacker-controlled
|
||||
s.largestRcvdPacketNumber = utils.MaxPacketNumber(s.largestRcvdPacketNumber, hdr.PacketNumber)
|
||||
|
||||
isRetransmittable := ackhandler.HasRetransmittableFrames(packet.frames)
|
||||
if err = s.receivedPacketHandler.ReceivedPacket(hdr.PacketNumber, p.rcvTime, isRetransmittable); err != nil {
|
||||
return err
|
||||
// If this is a Retry packet, there's no need to send an ACK.
|
||||
// The session will be closed and recreated as soon as the crypto setup processed the HRR.
|
||||
if hdr.Type != protocol.PacketTypeRetry {
|
||||
isRetransmittable := ackhandler.HasRetransmittableFrames(packet.frames)
|
||||
if err := s.receivedPacketHandler.ReceivedPacket(hdr.PacketNumber, p.rcvTime, isRetransmittable); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return s.handleFrames(packet.frames, packet.encryptionLevel)
|
||||
|
||||
@@ -569,6 +569,17 @@ var _ = Describe("Session", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
|
||||
It("doesn't inform the ReceivedPacketHandler about Retry packets", func() {
|
||||
now := time.Now().Add(time.Hour)
|
||||
rph := mockackhandler.NewMockReceivedPacketHandler(mockCtrl)
|
||||
sess.receivedPacketHandler = rph
|
||||
// don't EXPECT any call to ReceivedPacket
|
||||
hdr.PacketNumber = 5
|
||||
hdr.Type = protocol.PacketTypeRetry
|
||||
err := sess.handlePacketImpl(&receivedPacket{header: hdr, rcvTime: now})
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
|
||||
It("closes when handling a packet fails", func(done Done) {
|
||||
streamManager.EXPECT().CloseWithError(gomock.Any())
|
||||
testErr := errors.New("unpack error")
|
||||
|
||||
Reference in New Issue
Block a user