diff --git a/internal/logutils/frame.go b/internal/logutils/frame.go index b1d3e672..6e0fd311 100644 --- a/internal/logutils/frame.go +++ b/internal/logutils/frame.go @@ -23,6 +23,10 @@ func ConvertFrame(frame wire.Frame) logging.Frame { Length: f.DataLen(), Fin: f.Fin, } + case *wire.DatagramFrame: + return &logging.DatagramFrame{ + Length: logging.ByteCount(len(f.Data)), + } default: return logging.Frame(frame) } diff --git a/internal/logutils/frame_test.go b/internal/logutils/frame_test.go index dd6b14e4..eb7a0f8e 100644 --- a/internal/logutils/frame_test.go +++ b/internal/logutils/frame_test.go @@ -34,6 +34,13 @@ var _ = Describe("CRYPTO frame", func() { Expect(sf.Fin).To(BeTrue()) }) + It("converts DATAGRAM frames", func() { + f := ConvertFrame(&wire.DatagramFrame{Data: []byte("foobar")}) + Expect(f).To(BeAssignableToTypeOf(&logging.DatagramFrame{})) + df := f.(*logging.DatagramFrame) + Expect(df.Length).To(Equal(logging.ByteCount(6))) + }) + It("converts other frames", func() { f := ConvertFrame(&wire.MaxDataFrame{MaximumData: 1234}) Expect(f).To(BeAssignableToTypeOf(&logging.MaxDataFrame{})) diff --git a/logging/frame.go b/logging/frame.go index dfb875f0..75705092 100644 --- a/logging/frame.go +++ b/logging/frame.go @@ -59,3 +59,8 @@ type StreamFrame struct { Length ByteCount Fin bool } + +// A DatagramFrame is a DATAGRAM frame. +type DatagramFrame struct { + Length ByteCount +} diff --git a/qlog/frame.go b/qlog/frame.go index 4cfb6c89..498d3982 100644 --- a/qlog/frame.go +++ b/qlog/frame.go @@ -57,6 +57,8 @@ func (f frame) MarshalJSONObject(enc *gojay.Encoder) { marshalConnectionCloseFrame(enc, frame) case *logging.HandshakeDoneFrame: marshalHandshakeDoneFrame(enc, frame) + case *logging.DatagramFrame: + marshalDatagramFrame(enc, frame) default: panic("unknown frame type") } @@ -218,3 +220,8 @@ func marshalConnectionCloseFrame(enc *gojay.Encoder, f *logging.ConnectionCloseF func marshalHandshakeDoneFrame(enc *gojay.Encoder, _ *logging.HandshakeDoneFrame) { enc.StringKey("frame_type", "handshake_done") } + +func marshalDatagramFrame(enc *gojay.Encoder, f *logging.DatagramFrame) { + enc.StringKey("frame_type", "datagram") + enc.Int64Key("length", int64(f.Length)) +} diff --git a/qlog/frame_test.go b/qlog/frame_test.go index b773e137..bab01f01 100644 --- a/qlog/frame_test.go +++ b/qlog/frame_test.go @@ -364,4 +364,14 @@ var _ = Describe("Frames", func() { }, ) }) + + It("marshals DATAGRAM frames", func() { + check( + &logging.DatagramFrame{Length: 1337}, + map[string]interface{}{ + "frame_type": "datagram", + "length": 1337, + }, + ) + }) })