diff --git a/session.go b/session.go index a1386fff8..db10e667c 100644 --- a/session.go +++ b/session.go @@ -17,6 +17,10 @@ import ( "github.com/lucas-clemente/quic-go/utils" ) +type unpacker interface { + Unpack(publicHeaderBinary []byte, hdr *publicHeader, r *bytes.Reader) (*unpackedPacket, error) +} + type receivedPacket struct { remoteAddr interface{} publicHeader *publicHeader @@ -60,7 +64,7 @@ type Session struct { // TODO: remove flowController flowcontrol.FlowController // connection level flow controller - unpacker *packetUnpacker + unpacker unpacker packer *packetPacker cryptoSetup *handshake.CryptoSetup diff --git a/session_test.go b/session_test.go index 169f4a9e1..523305ae9 100644 --- a/session_test.go +++ b/session_test.go @@ -34,6 +34,15 @@ func (m *mockConnection) write(p []byte) error { func (*mockConnection) setCurrentRemoteAddr(addr interface{}) {} func (*mockConnection) IP() net.IP { return nil } +type mockUnpacker struct{} + +func (m *mockUnpacker) Unpack(publicHeaderBinary []byte, hdr *publicHeader, r *bytes.Reader) (*unpackedPacket, error) { + return &unpackedPacket{ + entropyBit: false, + frames: nil, + }, nil +} + var _ = Describe("Session", func() { var ( session *Session @@ -392,6 +401,33 @@ var _ = Describe("Session", func() { }) }) + Context("receiving packets", func() { + var hdr *publicHeader + + BeforeEach(func() { + session.unpacker = &mockUnpacker{} + hdr = &publicHeader{PacketNumberLen: protocol.PacketNumberLen6} + }) + + It("sets the lastRcvdPacketNumber", func() { + hdr.PacketNumber = 5 + err := session.handlePacketImpl(nil, hdr, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(session.lastRcvdPacketNumber).To(Equal(protocol.PacketNumber(5))) + }) + + It("sets the lastRcvdPacketNumber, for an out-of-order packet", func() { + hdr.PacketNumber = 5 + err := session.handlePacketImpl(nil, hdr, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(session.lastRcvdPacketNumber).To(Equal(protocol.PacketNumber(5))) + hdr.PacketNumber = 3 + err = session.handlePacketImpl(nil, hdr, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(session.lastRcvdPacketNumber).To(Equal(protocol.PacketNumber(3))) + }) + }) + Context("sending packets", func() { It("sends ack frames", func() { packetNumber := protocol.PacketNumber(0x0135)