From 1d358a031fda29a3831f5adac3ae65a2a9ddeebb Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 3 Jul 2016 23:32:08 +0800 Subject: [PATCH] ignore packets smaller than LeastUnacked of a StopWaiting ref #196 --- session.go | 4 ++++ session_test.go | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/session.go b/session.go index b47eeb922..535fe7b49 100644 --- a/session.go +++ b/session.go @@ -244,6 +244,10 @@ func (s *Session) handlePacketImpl(remoteAddr interface{}, hdr *publicHeader, da if err == ackhandlerlegacy.ErrDuplicatePacket { return nil } + // ignore packets with packet numbers smaller than the LeastUnacked of a StopWaiting + if err == ackhandlerlegacy.ErrPacketSmallerThanLastStopWaiting { + return nil + } if err != nil { return err diff --git a/session_test.go b/session_test.go index 5a96944cd..65b6b1e5f 100644 --- a/session_test.go +++ b/session_test.go @@ -434,6 +434,14 @@ var _ = Describe("Session", func() { err = session.handlePacketImpl(nil, hdr, nil) Expect(err).ToNot(HaveOccurred()) }) + + It("ignores packets smaller than the highest LeastUnacked of a StopWaiting", func() { + err := session.receivedPacketHandler.ReceivedStopWaiting(&frames.StopWaitingFrame{LeastUnacked: 10}) + Expect(err).ToNot(HaveOccurred()) + hdr.PacketNumber = 5 + err = session.handlePacketImpl(nil, hdr, nil) + Expect(err).ToNot(HaveOccurred()) + }) }) Context("sending packets", func() {