forked from quic-go/quic-go
handle Frame.Write errors in packet packer
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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"),
|
||||||
|
|||||||
Reference in New Issue
Block a user