From 391a41914234f2b6f7d44aee91c2807bba3d4f4c Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 21 Jan 2020 13:50:01 +0700 Subject: [PATCH] add the packet_received event --- qlog/event.go | 22 ++++++++++++++++++++++ qlog/qlog.go | 16 ++++++++++++++++ qlog/qlog_test.go | 29 +++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/qlog/event.go b/qlog/event.go index 2d7a5447..3f481e7d 100644 --- a/qlog/event.go +++ b/qlog/event.go @@ -61,3 +61,25 @@ func (e eventPacketSent) MarshalJSONObject(enc *gojay.Encoder) { enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced) enc.StringKeyOmitEmpty("trigger", e.Trigger) } + +type eventPacketReceived struct { + PacketType packetType + Header packetHeader + Frames frames + IsCoalesced bool + Trigger string +} + +var _ eventDetails = eventPacketReceived{} + +func (e eventPacketReceived) Category() category { return categoryTransport } +func (e eventPacketReceived) Name() string { return "packet_received" } +func (e eventPacketReceived) IsNil() bool { return false } + +func (e eventPacketReceived) MarshalJSONObject(enc *gojay.Encoder) { + enc.StringKey("packet_type", e.PacketType.String()) + enc.ObjectKey("header", e.Header) + enc.ArrayKeyOmitEmpty("frames", e.Frames) + enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced) + enc.StringKeyOmitEmpty("trigger", e.Trigger) +} diff --git a/qlog/qlog.go b/qlog/qlog.go index 4da78fa7..97ea5dcf 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -13,6 +13,7 @@ import ( type Tracer interface { Export() error SentPacket(time.Time, *wire.ExtendedHeader, *wire.AckFrame, []wire.Frame) + ReceivedPacket(time.Time, *wire.ExtendedHeader, []wire.Frame) } type tracer struct { @@ -73,3 +74,18 @@ func (t *tracer) SentPacket(time time.Time, hdr *wire.ExtendedHeader, ack *wire. }, }) } + +func (t *tracer) ReceivedPacket(time time.Time, hdr *wire.ExtendedHeader, frames []wire.Frame) { + fs := make([]frame, len(frames)) + for i, f := range frames { + fs[i] = *transformFrame(f) + } + t.events = append(t.events, event{ + Time: time, + eventDetails: eventPacketReceived{ + PacketType: getPacketType(hdr), + Header: *transformHeader(hdr), + Frames: fs, + }, + }) +} diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 15107b42..16832cb2 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -130,5 +130,34 @@ var _ = Describe("Tracer", func() { Expect(frames[0].(map[string]interface{})).To(HaveKeyWithValue("frame_type", "ack")) Expect(frames[1].(map[string]interface{})).To(HaveKeyWithValue("frame_type", "max_data")) }) + + It("records a received packet", func() { + now := time.Now() + tracer.ReceivedPacket( + now, + &wire.ExtendedHeader{ + Header: wire.Header{ + IsLongHeader: true, + Type: protocol.PacketTypeInitial, + DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8}, + SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1}, + Version: protocol.VersionTLS, + }, + PacketNumber: 1337, + }, + []wire.Frame{ + &wire.MaxStreamDataFrame{StreamID: 42, ByteOffset: 987}, + &wire.StreamFrame{StreamID: 123, Offset: 1234, Data: []byte("foobar"), FinBit: true}, + }, + ) + t, category, eventName, ev := exportAndParse() + Expect(t).To(BeTemporally("~", now, time.Millisecond)) + Expect(category).To(Equal("transport")) + Expect(eventName).To(Equal("packet_received")) + Expect(ev).To(HaveKeyWithValue("packet_type", "initial")) + Expect(ev).To(HaveKey("header")) + Expect(ev).To(HaveKey("frames")) + Expect(ev["frames"].([]interface{})).To(HaveLen(2)) + }) }) })