From 4659bf7acbad25d92edba411b14a578b8b7b120e Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 26 Apr 2016 20:35:30 +0700 Subject: [PATCH] store the payload of sent packets as a slice of Frames --- ackhandler/packet.go | 7 +++- ackhandler/sent_packet_handler_test.go | 57 ++++++++++++++------------ packet_packer.go | 8 ++-- packet_packer_test.go | 4 +- session.go | 2 +- 5 files changed, 43 insertions(+), 35 deletions(-) diff --git a/ackhandler/packet.go b/ackhandler/packet.go index a6aa00e5..47252f7e 100644 --- a/ackhandler/packet.go +++ b/ackhandler/packet.go @@ -1,11 +1,14 @@ package ackhandler -import "github.com/lucas-clemente/quic-go/protocol" +import ( + "github.com/lucas-clemente/quic-go/frames" + "github.com/lucas-clemente/quic-go/protocol" +) // A Packet is a packet type Packet struct { PacketNumber protocol.PacketNumber - Plaintext []byte + Frames []frames.Frame EntropyBit bool Entropy EntropyAccumulator diff --git a/ackhandler/sent_packet_handler_test.go b/ackhandler/sent_packet_handler_test.go index 0c92c715..8d1e8ea3 100644 --- a/ackhandler/sent_packet_handler_test.go +++ b/ackhandler/sent_packet_handler_test.go @@ -9,15 +9,20 @@ import ( var _ = Describe("SentPacketHandler", func() { var handler *sentPacketHandler + var streamFrame frames.StreamFrame BeforeEach(func() { handler = NewSentPacketHandler().(*sentPacketHandler) + streamFrame = frames.StreamFrame{ + StreamID: 5, + Data: []byte{0x13, 0x37}, + } }) Context("SentPacket", func() { It("accepts two consecutive packets", func() { entropy := EntropyAccumulator(0) - packet1 := Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: true} - packet2 := Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: true} + packet1 := Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: true} + packet2 := Packet{PacketNumber: 2, Frames: []frames.Frame{&streamFrame}, EntropyBit: true} err := handler.SentPacket(&packet1) Expect(err).ToNot(HaveOccurred()) err = handler.SentPacket(&packet2) @@ -34,8 +39,8 @@ var _ = Describe("SentPacketHandler", func() { }) It("rejects packets with the same packet number", func() { - packet1 := Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: true} - packet2 := Packet{PacketNumber: 1, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: false} + packet1 := Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: true} + packet2 := Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: false} err := handler.SentPacket(&packet1) Expect(err).ToNot(HaveOccurred()) err = handler.SentPacket(&packet2) @@ -45,8 +50,8 @@ var _ = Describe("SentPacketHandler", func() { }) It("rejects non-consecutive packets", func() { - packet1 := Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: true} - packet2 := Packet{PacketNumber: 3, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: false} + packet1 := Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: true} + packet2 := Packet{PacketNumber: 3, Frames: []frames.Frame{&streamFrame}, EntropyBit: false} err := handler.SentPacket(&packet1) Expect(err).ToNot(HaveOccurred()) err = handler.SentPacket(&packet2) @@ -58,8 +63,8 @@ var _ = Describe("SentPacketHandler", func() { }) It("correctly calculates the entropy, even if the last packet has already been ACKed", func() { - packet1 := Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: true} - packet2 := Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: true} + packet1 := Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: true} + packet2 := Packet{PacketNumber: 2, Frames: []frames.Frame{&streamFrame}, EntropyBit: true} err := handler.SentPacket(&packet1) Expect(err).ToNot(HaveOccurred()) entropy := EntropyAccumulator(0) @@ -85,12 +90,12 @@ var _ = Describe("SentPacketHandler", func() { BeforeEach(func() { entropy = EntropyAccumulator(0) packets = []*Packet{ - &Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: true}, - &Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: true}, - &Packet{PacketNumber: 3, Plaintext: []byte{0xCA, 0xFE}, EntropyBit: true}, - &Packet{PacketNumber: 4, Plaintext: []byte{0x54, 0x32}, EntropyBit: true}, - &Packet{PacketNumber: 5, Plaintext: []byte{0x12, 0x42}, EntropyBit: true}, - &Packet{PacketNumber: 6, Plaintext: []byte{0xCA, 0xFE}, EntropyBit: true}, + &Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: true}, + &Packet{PacketNumber: 2, Frames: []frames.Frame{&streamFrame}, EntropyBit: true}, + &Packet{PacketNumber: 3, Frames: []frames.Frame{&streamFrame}, EntropyBit: true}, + &Packet{PacketNumber: 4, Frames: []frames.Frame{&streamFrame}, EntropyBit: true}, + &Packet{PacketNumber: 5, Frames: []frames.Frame{&streamFrame}, EntropyBit: true}, + &Packet{PacketNumber: 6, Frames: []frames.Frame{&streamFrame}, EntropyBit: true}, } for _, packet := range packets { handler.SentPacket(packet) @@ -227,12 +232,12 @@ var _ = Describe("SentPacketHandler", func() { BeforeEach(func() { packets = []*Packet{ - &Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: false}, - &Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: false}, - &Packet{PacketNumber: 3, Plaintext: []byte{0xCA, 0xFE}, EntropyBit: false}, - &Packet{PacketNumber: 4, Plaintext: []byte{0x54, 0x32}, EntropyBit: false}, - &Packet{PacketNumber: 5, Plaintext: []byte{0x54, 0x32}, EntropyBit: false}, - &Packet{PacketNumber: 6, Plaintext: []byte{0x54, 0x32}, EntropyBit: false}, + &Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 2, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 3, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 4, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 5, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 6, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, } for _, packet := range packets { handler.SentPacket(packet) @@ -285,12 +290,12 @@ var _ = Describe("SentPacketHandler", func() { retransmissionThreshold = 1 packets = []*Packet{ - &Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: false}, - &Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: false}, - &Packet{PacketNumber: 3, Plaintext: []byte{0xCA, 0xFE}, EntropyBit: false}, - &Packet{PacketNumber: 4, Plaintext: []byte{0x54, 0x32}, EntropyBit: false}, - &Packet{PacketNumber: 5, Plaintext: []byte{0x12, 0x42}, EntropyBit: false}, - &Packet{PacketNumber: 6, Plaintext: []byte{0xCA, 0xFE}, EntropyBit: false}, + &Packet{PacketNumber: 1, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 2, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 3, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 4, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 5, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, + &Packet{PacketNumber: 6, Frames: []frames.Frame{&streamFrame}, EntropyBit: false}, } for _, packet := range packets { handler.SentPacket(packet) diff --git a/packet_packer.go b/packet_packer.go index 203e5e99..02e5d3bc 100644 --- a/packet_packer.go +++ b/packet_packer.go @@ -15,7 +15,7 @@ type packedPacket struct { number protocol.PacketNumber entropyBit bool raw []byte - payload []byte + frames []frames.Frame } type packetPacker struct { @@ -47,12 +47,12 @@ func (p *packetPacker) PackPacket() (*packedPacket, error) { 1, )) - frames, err := p.composeNextPacket() + payloadFrames, err := p.composeNextPacket() if err != nil { return nil, err } - payload, err := p.getPayload(frames, currentPacketNumber) + payload, err := p.getPayload(payloadFrames, currentPacketNumber) if err != nil { return nil, err } @@ -85,7 +85,7 @@ func (p *packetPacker) PackPacket() (*packedPacket, error) { number: currentPacketNumber, entropyBit: entropyBit, raw: raw.Bytes(), - payload: payload[1:], + frames: payloadFrames, }, nil } diff --git a/packet_packer_test.go b/packet_packer_test.go index c13ec3f3..102eba77 100644 --- a/packet_packer_test.go +++ b/packet_packer_test.go @@ -34,7 +34,7 @@ var _ = Describe("Packet packer", func() { Expect(err).ToNot(HaveOccurred()) b := &bytes.Buffer{} f.Write(b, 1, 6) - Expect(p.payload).To(Equal(b.Bytes())) + Expect(len(p.frames)).To(Equal(1)) Expect(p.raw).To(ContainSubstring(string(b.Bytes()))) }) @@ -49,7 +49,7 @@ var _ = Describe("Packet packer", func() { b := &bytes.Buffer{} f1.Write(b, 2, 6) f2.Write(b, 2, 6) - Expect(p.payload).To(Equal(b.Bytes())) + Expect(len(p.frames)).To(Equal(2)) Expect(p.raw).To(ContainSubstring(string(b.Bytes()))) }) diff --git a/session.go b/session.go index 07dd75d1..f2de22fe 100644 --- a/session.go +++ b/session.go @@ -233,7 +233,7 @@ func (s *Session) sendPacket() error { } s.sentPacketHandler.SentPacket(&ackhandler.Packet{ PacketNumber: packet.number, - Plaintext: packet.payload, + Frames: packet.frames, EntropyBit: packet.entropyBit, }) fmt.Printf("-> Sending packet %d (%d bytes)\n", packet.number, len(packet.raw))