From 74c9bd60314462c19ac5c4eaa54462adcf06b18c Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 15 Apr 2020 10:00:20 +0700 Subject: [PATCH] qlog the supported versions of a version negotiation packet --- qlog/event.go | 13 ++++++++++++- qlog/qlog.go | 7 ++++++- qlog/qlog_test.go | 6 ++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/qlog/event.go b/qlog/event.go index 883664093..b77076789 100644 --- a/qlog/event.go +++ b/qlog/event.go @@ -47,6 +47,15 @@ func (e event) MarshalJSONArray(enc *gojay.Encoder) { enc.Object(e.eventDetails) } +type versions []versionNumber + +func (v versions) IsNil() bool { return false } +func (v versions) MarshalJSONArray(enc *gojay.Encoder) { + for _, e := range v { + enc.AddString(e.String()) + } +} + type eventConnectionStarted struct { SrcAddr *net.UDPAddr DestAddr *net.UDPAddr @@ -141,7 +150,8 @@ func (e eventRetryReceived) MarshalJSONObject(enc *gojay.Encoder) { } type eventVersionNegotiationReceived struct { - Header packetHeader + Header packetHeader + SupportedVersions []versionNumber } func (e eventVersionNegotiationReceived) Category() category { return categoryTransport } @@ -151,6 +161,7 @@ func (e eventVersionNegotiationReceived) IsNil() bool { return false } func (e eventVersionNegotiationReceived) MarshalJSONObject(enc *gojay.Encoder) { enc.StringKey("packet_type", PacketTypeVersionNegotiation.String()) enc.ObjectKey("header", e.Header) + enc.ArrayKey("supported_versions", versions(e.SupportedVersions)) } type eventStatelessResetReceived struct { diff --git a/qlog/qlog.go b/qlog/qlog.go index 5475a2489..9276b070c 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -232,9 +232,14 @@ func (t *tracer) ReceivedRetry(hdr *wire.Header) { } func (t *tracer) ReceivedVersionNegotiationPacket(hdr *wire.Header) { + versions := make([]versionNumber, len(hdr.SupportedVersions)) + for i, v := range hdr.SupportedVersions { + versions[i] = versionNumber(v) + } t.mutex.Lock() t.recordEvent(time.Now(), &eventVersionNegotiationReceived{ - Header: *transformHeader(hdr), + Header: *transformHeader(hdr), + SupportedVersions: versions, }) t.mutex.Unlock() } diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 96cd86658..ccf8083aa 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -328,7 +328,7 @@ var _ = Describe("Tracer", func() { Type: protocol.PacketTypeRetry, DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8}, SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1}, - SupportedVersions: []protocol.VersionNumber{13, 37}, + SupportedVersions: []protocol.VersionNumber{0xdeadbeef, 0xdecafbad}, }, ) entry := exportAndParseSingle() @@ -338,12 +338,14 @@ var _ = Describe("Tracer", func() { ev := entry.Event Expect(ev).To(HaveKeyWithValue("packet_type", "version_negotiation")) Expect(ev).To(HaveKey("header")) + Expect(ev).ToNot(HaveKey("frames")) + Expect(ev).To(HaveKey("supported_versions")) + Expect(ev["supported_versions"].([]interface{})).To(Equal([]interface{}{"deadbeef", "decafbad"})) header := ev["header"] Expect(header).ToNot(HaveKey("packet_number")) Expect(header).ToNot(HaveKey("version")) Expect(header).To(HaveKey("dcid")) Expect(header).To(HaveKey("scid")) - Expect(ev).ToNot(HaveKey("frames")) }) It("records a received Retry packet", func() {