handle Frame.Write errors in packet packer

This commit is contained in:
Marten Seemann
2016-08-15 19:49:17 +07:00
parent f1da2239ca
commit bca012cbde
3 changed files with 11 additions and 3 deletions

View File

@@ -147,7 +147,10 @@ func (p *packetPacker) packPacket(stopWaitingFrame *frames.StopWaitingFrame, con
} }
for _, frame := range payloadFrames { for _, frame := range payloadFrames {
frame.Write(buffer, p.version) err := frame.Write(buffer, p.version)
if err != nil {
return nil, err
}
} }
if protocol.ByteCount(buffer.Len()+12) > protocol.MaxPacketSize { if protocol.ByteCount(buffer.Len()+12) > protocol.MaxPacketSize {

View File

@@ -124,6 +124,7 @@ var _ = Describe("Packet packer", func() {
}) })
It("packs a StopWaitingFrame first", func() { It("packs a StopWaitingFrame first", func() {
packer.packetNumberGenerator.next = 15
swf := &frames.StopWaitingFrame{LeastUnacked: 10} swf := &frames.StopWaitingFrame{LeastUnacked: 10}
p, err := packer.PackPacket(swf, []frames.Frame{&frames.ConnectionCloseFrame{}}, 0, true) p, err := packer.PackPacket(swf, []frames.Frame{&frames.ConnectionCloseFrame{}}, 0, true)
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())

View File

@@ -495,13 +495,13 @@ var _ = Describe("Session", func() {
Context("sending packets", func() { Context("sending packets", func() {
It("sends ack frames", func() { It("sends ack frames", func() {
packetNumber := protocol.PacketNumber(0x35EA) packetNumber := protocol.PacketNumber(0x035E)
session.receivedPacketHandler.ReceivedPacket(packetNumber, true) session.receivedPacketHandler.ReceivedPacket(packetNumber, true)
err := session.sendPacket() err := session.sendPacket()
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(conn.written).To(HaveLen(1)) Expect(conn.written).To(HaveLen(1))
// test for the beginning of an ACK frame: Entropy until LargestObserved // test for the beginning of an ACK frame: Entropy until LargestObserved
Expect(conn.written[0]).To(ContainSubstring(string([]byte{0xEA, 0x35}))) Expect(conn.written[0]).To(ContainSubstring(string([]byte{0x5E, 0x03})))
}) })
It("sends two WindowUpdate frames", func() { It("sends two WindowUpdate frames", func() {
@@ -529,6 +529,8 @@ var _ = Describe("Session", func() {
Context("retransmissions", func() { Context("retransmissions", func() {
It("sends a StreamFrame from a packet queued for retransmission", func() { It("sends a StreamFrame from a packet queued for retransmission", func() {
// for QUIC 33, a StopWaitingFrame is added, so make sure the packet number of the new package is higher than the packet number of the retransmitted packet
session.packer.lastPacketNumber = 0x1337 + 10
f := frames.StreamFrame{ f := frames.StreamFrame{
StreamID: 0x5, StreamID: 0x5,
Data: []byte("foobar1234567"), Data: []byte("foobar1234567"),
@@ -551,6 +553,8 @@ var _ = Describe("Session", func() {
}) })
It("sends a StreamFrame from a packet queued for retransmission", func() { It("sends a StreamFrame from a packet queued for retransmission", func() {
// for QUIC 33, a StopWaitingFrame is added, so make sure the packet number of the new package is higher than the packet number of the retransmitted packet
session.packer.lastPacketNumber = 0x1337 + 10
f1 := frames.StreamFrame{ f1 := frames.StreamFrame{
StreamID: 0x5, StreamID: 0x5,
Data: []byte("foobar"), Data: []byte("foobar"),