qlog the supported versions of a version negotiation packet

This commit is contained in:
Marten Seemann
2020-04-15 10:00:20 +07:00
parent 70ede9d73a
commit 74c9bd6031
3 changed files with 22 additions and 4 deletions

View File

@@ -47,6 +47,15 @@ func (e event) MarshalJSONArray(enc *gojay.Encoder) {
enc.Object(e.eventDetails) 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 { type eventConnectionStarted struct {
SrcAddr *net.UDPAddr SrcAddr *net.UDPAddr
DestAddr *net.UDPAddr DestAddr *net.UDPAddr
@@ -141,7 +150,8 @@ func (e eventRetryReceived) MarshalJSONObject(enc *gojay.Encoder) {
} }
type eventVersionNegotiationReceived struct { type eventVersionNegotiationReceived struct {
Header packetHeader Header packetHeader
SupportedVersions []versionNumber
} }
func (e eventVersionNegotiationReceived) Category() category { return categoryTransport } 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) { func (e eventVersionNegotiationReceived) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_type", PacketTypeVersionNegotiation.String()) enc.StringKey("packet_type", PacketTypeVersionNegotiation.String())
enc.ObjectKey("header", e.Header) enc.ObjectKey("header", e.Header)
enc.ArrayKey("supported_versions", versions(e.SupportedVersions))
} }
type eventStatelessResetReceived struct { type eventStatelessResetReceived struct {

View File

@@ -232,9 +232,14 @@ func (t *tracer) ReceivedRetry(hdr *wire.Header) {
} }
func (t *tracer) ReceivedVersionNegotiationPacket(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.mutex.Lock()
t.recordEvent(time.Now(), &eventVersionNegotiationReceived{ t.recordEvent(time.Now(), &eventVersionNegotiationReceived{
Header: *transformHeader(hdr), Header: *transformHeader(hdr),
SupportedVersions: versions,
}) })
t.mutex.Unlock() t.mutex.Unlock()
} }

View File

@@ -328,7 +328,7 @@ var _ = Describe("Tracer", func() {
Type: protocol.PacketTypeRetry, Type: protocol.PacketTypeRetry,
DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8}, DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8},
SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1}, SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1},
SupportedVersions: []protocol.VersionNumber{13, 37}, SupportedVersions: []protocol.VersionNumber{0xdeadbeef, 0xdecafbad},
}, },
) )
entry := exportAndParseSingle() entry := exportAndParseSingle()
@@ -338,12 +338,14 @@ var _ = Describe("Tracer", func() {
ev := entry.Event ev := entry.Event
Expect(ev).To(HaveKeyWithValue("packet_type", "version_negotiation")) Expect(ev).To(HaveKeyWithValue("packet_type", "version_negotiation"))
Expect(ev).To(HaveKey("header")) 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"] header := ev["header"]
Expect(header).ToNot(HaveKey("packet_number")) Expect(header).ToNot(HaveKey("packet_number"))
Expect(header).ToNot(HaveKey("version")) Expect(header).ToNot(HaveKey("version"))
Expect(header).To(HaveKey("dcid")) Expect(header).To(HaveKey("dcid"))
Expect(header).To(HaveKey("scid")) Expect(header).To(HaveKey("scid"))
Expect(ev).ToNot(HaveKey("frames"))
}) })
It("records a received Retry packet", func() { It("records a received Retry packet", func() {