diff --git a/qlog/event.go b/qlog/event.go index 71880ed58..096d9e792 100644 --- a/qlog/event.go +++ b/qlog/event.go @@ -44,6 +44,15 @@ func (v versions) MarshalJSONArray(enc *gojay.Encoder) { } } +type rawInfo struct { + Length logging.ByteCount +} + +func (i rawInfo) IsNil() bool { return false } +func (i rawInfo) MarshalJSONObject(enc *gojay.Encoder) { + enc.Uint64Key("length", uint64(i.Length)) +} + type eventConnectionStarted struct { SrcAddr *net.UDPAddr DestAddr *net.UDPAddr @@ -117,6 +126,7 @@ func (e eventConnectionClosed) MarshalJSONObject(enc *gojay.Encoder) { type eventPacketSent struct { Header packetHeader + Length logging.ByteCount Frames frames IsCoalesced bool Trigger string @@ -130,6 +140,7 @@ func (e eventPacketSent) IsNil() bool { return false } func (e eventPacketSent) MarshalJSONObject(enc *gojay.Encoder) { enc.ObjectKey("header", e.Header) + enc.ObjectKey("raw", rawInfo{Length: e.Length}) enc.ArrayKeyOmitEmpty("frames", e.Frames) enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced) enc.StringKeyOmitEmpty("trigger", e.Trigger) @@ -137,6 +148,7 @@ func (e eventPacketSent) MarshalJSONObject(enc *gojay.Encoder) { type eventPacketReceived struct { Header packetHeader + Length logging.ByteCount Frames frames IsCoalesced bool Trigger string @@ -150,6 +162,7 @@ func (e eventPacketReceived) IsNil() bool { return false } func (e eventPacketReceived) MarshalJSONObject(enc *gojay.Encoder) { enc.ObjectKey("header", e.Header) + enc.ObjectKey("raw", rawInfo{Length: e.Length}) enc.ArrayKeyOmitEmpty("frames", e.Frames) enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced) enc.StringKeyOmitEmpty("trigger", e.Trigger) @@ -206,7 +219,7 @@ func (e eventPacketDropped) IsNil() bool { return false } func (e eventPacketDropped) MarshalJSONObject(enc *gojay.Encoder) { enc.StringKeyOmitEmpty("packet_type", e.PacketType.String()) - enc.Uint64Key("packet_size", uint64(e.PacketSize)) + enc.ObjectKey("raw", rawInfo{Length: e.PacketSize}) enc.StringKey("trigger", e.Trigger.String()) } diff --git a/qlog/packet_header.go b/qlog/packet_header.go index e45c9af9f..70802245c 100644 --- a/qlog/packet_header.go +++ b/qlog/packet_header.go @@ -45,9 +45,6 @@ type packetHeader struct { KeyPhaseBit logging.KeyPhaseBit PacketNumber logging.PacketNumber PayloadLength logging.ByteCount - // Size of the QUIC packet (QUIC header + payload). - // See https://github.com/quiclog/internet-drafts/issues/40. - PacketSize logging.ByteCount Version logging.VersionNumber SrcConnectionID logging.ConnectionID @@ -83,7 +80,6 @@ func (h packetHeader) MarshalJSONObject(enc *gojay.Encoder) { enc.Int64Key("packet_number", int64(h.PacketNumber)) } enc.Int64KeyOmitEmpty("payload_length", int64(h.PayloadLength)) - enc.Int64KeyOmitEmpty("packet_size", int64(h.PacketSize)) if h.Version != 0 { enc.StringKey("version", versionNumber(h.Version).String()) } diff --git a/qlog/qlog.go b/qlog/qlog.go index 5e38af48d..3563554e6 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -209,7 +209,7 @@ func (t *connectionTracer) recordTransportParameters(sentBy protocol.Perspective t.mutex.Unlock() } -func (t *connectionTracer) SentPacket(hdr *wire.ExtendedHeader, packetSize protocol.ByteCount, ack *logging.AckFrame, frames []logging.Frame) { +func (t *connectionTracer) SentPacket(hdr *wire.ExtendedHeader, packetSize logging.ByteCount, ack *logging.AckFrame, frames []logging.Frame) { numFrames := len(frames) if ack != nil { numFrames++ @@ -222,25 +222,25 @@ func (t *connectionTracer) SentPacket(hdr *wire.ExtendedHeader, packetSize proto fs = append(fs, frame{Frame: f}) } header := *transformExtendedHeader(hdr) - header.PacketSize = packetSize t.mutex.Lock() t.recordEvent(time.Now(), &eventPacketSent{ Header: header, + Length: packetSize, Frames: fs, }) t.mutex.Unlock() } -func (t *connectionTracer) ReceivedPacket(hdr *wire.ExtendedHeader, packetSize protocol.ByteCount, frames []logging.Frame) { +func (t *connectionTracer) ReceivedPacket(hdr *wire.ExtendedHeader, packetSize logging.ByteCount, frames []logging.Frame) { fs := make([]frame, len(frames)) for i, f := range frames { fs[i] = frame{Frame: f} } header := *transformExtendedHeader(hdr) - header.PacketSize = packetSize t.mutex.Lock() t.recordEvent(time.Now(), &eventPacketReceived{ Header: header, + Length: packetSize, Frames: fs, }) t.mutex.Unlock() diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 52b9eb764..41274ed9e 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -351,9 +351,10 @@ var _ = Describe("Tracing", func() { Expect(entry.Name).To(Equal("transport:packet_sent")) ev := entry.Event Expect(ev).To(HaveKey("header")) + Expect(ev).To(HaveKey("raw")) + Expect(ev["raw"].(map[string]interface{})).To(HaveKeyWithValue("length", float64(987))) hdr := ev["header"].(map[string]interface{}) Expect(hdr).To(HaveKeyWithValue("packet_type", "handshake")) - Expect(hdr).To(HaveKeyWithValue("packet_size", float64(987))) Expect(hdr).To(HaveKeyWithValue("packet_number", float64(1337))) Expect(hdr).To(HaveKeyWithValue("scid", "04030201")) Expect(ev).To(HaveKey("frames")) @@ -410,9 +411,10 @@ var _ = Describe("Tracing", func() { Expect(entry.Name).To(Equal("transport:packet_received")) ev := entry.Event Expect(ev).To(HaveKey("header")) + Expect(ev).To(HaveKey("raw")) + Expect(ev["raw"].(map[string]interface{})).To(HaveKeyWithValue("length", float64(789))) hdr := ev["header"].(map[string]interface{}) Expect(hdr).To(HaveKeyWithValue("packet_type", "initial")) - Expect(hdr).To(HaveKeyWithValue("packet_size", float64(789))) Expect(hdr).To(HaveKeyWithValue("packet_number", float64(1337))) Expect(hdr).To(HaveKeyWithValue("scid", "04030201")) Expect(hdr).To(HaveKey("token")) @@ -493,7 +495,8 @@ var _ = Describe("Tracing", func() { Expect(entry.Name).To(Equal("transport:packet_dropped")) ev := entry.Event Expect(ev).To(HaveKeyWithValue("packet_type", "handshake")) - Expect(ev).To(HaveKeyWithValue("packet_size", float64(1337))) + Expect(ev).To(HaveKey("raw")) + Expect(ev["raw"].(map[string]interface{})).To(HaveKeyWithValue("length", float64(1337))) Expect(ev).To(HaveKeyWithValue("trigger", "payload_decrypt_error")) })