From cd359ec5e0a6d89c79a0e9d7653ed532a4c06e40 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 22 Apr 2018 18:05:43 +0900 Subject: [PATCH] change the type byte of the IETF ACK frame from 0x0e to 0x0d --- internal/wire/ack_frame.go | 2 +- internal/wire/ack_frame_test.go | 29 ++++++++++++++++++++++------- internal/wire/frame_parser.go | 2 +- internal/wire/frame_parser_test.go | 2 +- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/internal/wire/ack_frame.go b/internal/wire/ack_frame.go index 61fdfb700..9d3d7bb86 100644 --- a/internal/wire/ack_frame.go +++ b/internal/wire/ack_frame.go @@ -102,7 +102,7 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error largestAcked := f.AckRanges[0].Largest lowestInFirstRange := f.AckRanges[0].Smallest - b.WriteByte(0xe) + b.WriteByte(0x0d) utils.WriteVarInt(b, uint64(largestAcked)) utils.WriteVarInt(b, encodeAckDelay(f.DelayTime)) diff --git a/internal/wire/ack_frame_test.go b/internal/wire/ack_frame_test.go index 9e29c8db3..6e8204b2c 100644 --- a/internal/wire/ack_frame_test.go +++ b/internal/wire/ack_frame_test.go @@ -13,7 +13,7 @@ import ( var _ = Describe("ACK Frame (for IETF QUIC)", func() { Context("parsing", func() { It("parses an ACK frame without any ranges", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(100)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(0)...) // num blocks @@ -28,7 +28,7 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) It("parses an ACK frame that only acks a single packet", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(55)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(0)...) // num blocks @@ -43,7 +43,7 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) It("accepts an ACK frame that acks all packets from 0 to largest", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(20)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(0)...) // num blocks @@ -58,7 +58,7 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) It("rejects an ACK frame that has a first ACK block which is larger than LargestAcked", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(20)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(0)...) // num blocks @@ -69,7 +69,7 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) It("parses an ACK frame that has a single block", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(1000)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(1)...) // num blocks @@ -90,7 +90,7 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) It("parses an ACK frame that has a multiple blocks", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(100)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(2)...) // num blocks @@ -114,7 +114,7 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) It("errors on EOF", func() { - data := []byte{0xe} + data := []byte{0xd} data = append(data, encodeVarInt(1000)...) // largest acked data = append(data, encodeVarInt(0)...) // delay data = append(data, encodeVarInt(1)...) // num blocks @@ -131,6 +131,21 @@ var _ = Describe("ACK Frame (for IETF QUIC)", func() { }) Context("when writing", func() { + It("writes a simple frame", func() { + buf := &bytes.Buffer{} + f := &AckFrame{ + AckRanges: []AckRange{{Smallest: 100, Largest: 1337}}, + } + err := f.Write(buf, versionIETFFrames) + Expect(err).ToNot(HaveOccurred()) + expected := []byte{0xd} + expected = append(expected, encodeVarInt(1337)...) // largest acked + expected = append(expected, 0) // delay + expected = append(expected, encodeVarInt(0)...) // num ranges + expected = append(expected, encodeVarInt(1337-100)...) + Expect(buf.Bytes()).To(Equal(expected)) + }) + It("writes a frame that acks a single packet", func() { buf := &bytes.Buffer{} f := &AckFrame{ diff --git a/internal/wire/frame_parser.go b/internal/wire/frame_parser.go index 6911446f9..041a64d55 100644 --- a/internal/wire/frame_parser.go +++ b/internal/wire/frame_parser.go @@ -85,7 +85,7 @@ func parseIETFFrame(r *bytes.Reader, typeByte byte, v protocol.VersionNumber) (F if err != nil { err = qerr.Error(qerr.InvalidFrameData, err.Error()) } - case 0xe: + case 0xd: frame, err = parseAckFrame(r, v) if err != nil { err = qerr.Error(qerr.InvalidAckData, err.Error()) diff --git a/internal/wire/frame_parser_test.go b/internal/wire/frame_parser_test.go index c36b2e4a2..e6d9a4c02 100644 --- a/internal/wire/frame_parser_test.go +++ b/internal/wire/frame_parser_test.go @@ -305,7 +305,7 @@ var _ = Describe("Frame parsing", func() { 0x09: qerr.InvalidBlockedData, 0x0a: qerr.InvalidFrameData, 0x0c: qerr.InvalidFrameData, - 0x0e: qerr.InvalidAckData, + 0x0d: qerr.InvalidAckData, 0x10: qerr.InvalidStreamData, } { _, err := ParseNextFrame(bytes.NewReader([]byte{b}), nil, versionIETFFrames)