forked from quic-go/quic-go
Merge pull request #3004 from lucas-clemente/fix-qlog-payload-length
fix qlogging of the packet payload length
This commit is contained in:
@@ -45,12 +45,14 @@ func (v versions) MarshalJSONArray(enc *gojay.Encoder) {
|
||||
}
|
||||
|
||||
type rawInfo struct {
|
||||
Length logging.ByteCount
|
||||
Length logging.ByteCount // full packet length, including header and AEAD authentication tag
|
||||
PayloadLength logging.ByteCount // length of the packet payload, excluding AEAD tag
|
||||
}
|
||||
|
||||
func (i rawInfo) IsNil() bool { return false }
|
||||
func (i rawInfo) MarshalJSONObject(enc *gojay.Encoder) {
|
||||
enc.Uint64Key("length", uint64(i.Length))
|
||||
enc.Uint64KeyOmitEmpty("payload_length", uint64(i.PayloadLength))
|
||||
}
|
||||
|
||||
type eventConnectionStarted struct {
|
||||
@@ -125,11 +127,12 @@ func (e eventConnectionClosed) MarshalJSONObject(enc *gojay.Encoder) {
|
||||
}
|
||||
|
||||
type eventPacketSent struct {
|
||||
Header packetHeader
|
||||
Length logging.ByteCount
|
||||
Frames frames
|
||||
IsCoalesced bool
|
||||
Trigger string
|
||||
Header packetHeader
|
||||
Length logging.ByteCount
|
||||
PayloadLength logging.ByteCount
|
||||
Frames frames
|
||||
IsCoalesced bool
|
||||
Trigger string
|
||||
}
|
||||
|
||||
var _ eventDetails = eventPacketSent{}
|
||||
@@ -140,18 +143,19 @@ 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.ObjectKey("raw", rawInfo{Length: e.Length, PayloadLength: e.PayloadLength})
|
||||
enc.ArrayKeyOmitEmpty("frames", e.Frames)
|
||||
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
|
||||
enc.StringKeyOmitEmpty("trigger", e.Trigger)
|
||||
}
|
||||
|
||||
type eventPacketReceived struct {
|
||||
Header packetHeader
|
||||
Length logging.ByteCount
|
||||
Frames frames
|
||||
IsCoalesced bool
|
||||
Trigger string
|
||||
Header packetHeader
|
||||
Length logging.ByteCount
|
||||
PayloadLength logging.ByteCount
|
||||
Frames frames
|
||||
IsCoalesced bool
|
||||
Trigger string
|
||||
}
|
||||
|
||||
var _ eventDetails = eventPacketReceived{}
|
||||
@@ -162,7 +166,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.ObjectKey("raw", rawInfo{Length: e.Length, PayloadLength: e.PayloadLength})
|
||||
enc.ArrayKeyOmitEmpty("frames", e.Frames)
|
||||
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
|
||||
enc.StringKeyOmitEmpty("trigger", e.Trigger)
|
||||
|
||||
@@ -40,9 +40,8 @@ func (t token) MarshalJSONObject(enc *gojay.Encoder) {
|
||||
type packetHeader struct {
|
||||
PacketType logging.PacketType
|
||||
|
||||
KeyPhaseBit logging.KeyPhaseBit
|
||||
PacketNumber logging.PacketNumber
|
||||
PayloadLength logging.ByteCount
|
||||
KeyPhaseBit logging.KeyPhaseBit
|
||||
PacketNumber logging.PacketNumber
|
||||
|
||||
Version logging.VersionNumber
|
||||
SrcConnectionID logging.ConnectionID
|
||||
@@ -54,7 +53,6 @@ type packetHeader struct {
|
||||
func transformHeader(hdr *wire.Header) *packetHeader {
|
||||
h := &packetHeader{
|
||||
PacketType: logging.PacketTypeFromHeader(hdr),
|
||||
PayloadLength: hdr.Length,
|
||||
SrcConnectionID: hdr.SrcConnectionID,
|
||||
DestConnectionID: hdr.DestConnectionID,
|
||||
Version: hdr.Version,
|
||||
@@ -77,7 +75,6 @@ func (h packetHeader) MarshalJSONObject(enc *gojay.Encoder) {
|
||||
if h.PacketType != logging.PacketTypeRetry && h.PacketType != logging.PacketTypeVersionNegotiation {
|
||||
enc.Int64Key("packet_number", int64(h.PacketNumber))
|
||||
}
|
||||
enc.Int64KeyOmitEmpty("payload_length", int64(h.PayloadLength))
|
||||
if h.Version != 0 {
|
||||
enc.StringKey("version", versionNumber(h.Version).String())
|
||||
}
|
||||
|
||||
@@ -59,12 +59,11 @@ var _ = Describe("Packet Header", func() {
|
||||
},
|
||||
},
|
||||
map[string]interface{}{
|
||||
"packet_type": "initial",
|
||||
"packet_number": 42,
|
||||
"payload_length": 123,
|
||||
"dcil": 0,
|
||||
"scil": 0,
|
||||
"version": "decafbad",
|
||||
"packet_type": "initial",
|
||||
"packet_number": 42,
|
||||
"dcil": 0,
|
||||
"scil": 0,
|
||||
"version": "decafbad",
|
||||
},
|
||||
)
|
||||
})
|
||||
@@ -82,13 +81,12 @@ var _ = Describe("Packet Header", func() {
|
||||
},
|
||||
},
|
||||
map[string]interface{}{
|
||||
"packet_type": "initial",
|
||||
"packet_number": 4242,
|
||||
"payload_length": 123,
|
||||
"dcil": 0,
|
||||
"scil": 0,
|
||||
"version": "decafbad",
|
||||
"token": map[string]interface{}{"data": "deadbeef"},
|
||||
"packet_type": "initial",
|
||||
"packet_number": 4242,
|
||||
"dcil": 0,
|
||||
"scil": 0,
|
||||
"version": "decafbad",
|
||||
"token": map[string]interface{}{"data": "deadbeef"},
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
14
qlog/qlog.go
14
qlog/qlog.go
@@ -239,9 +239,10 @@ func (t *connectionTracer) SentPacket(hdr *wire.ExtendedHeader, packetSize loggi
|
||||
header := *transformExtendedHeader(hdr)
|
||||
t.mutex.Lock()
|
||||
t.recordEvent(time.Now(), &eventPacketSent{
|
||||
Header: header,
|
||||
Length: packetSize,
|
||||
Frames: fs,
|
||||
Header: header,
|
||||
Length: packetSize,
|
||||
PayloadLength: hdr.Length,
|
||||
Frames: fs,
|
||||
})
|
||||
t.mutex.Unlock()
|
||||
}
|
||||
@@ -254,9 +255,10 @@ func (t *connectionTracer) ReceivedPacket(hdr *wire.ExtendedHeader, packetSize l
|
||||
header := *transformExtendedHeader(hdr)
|
||||
t.mutex.Lock()
|
||||
t.recordEvent(time.Now(), &eventPacketReceived{
|
||||
Header: header,
|
||||
Length: packetSize,
|
||||
Frames: fs,
|
||||
Header: header,
|
||||
Length: packetSize,
|
||||
PayloadLength: hdr.Length,
|
||||
Frames: fs,
|
||||
})
|
||||
t.mutex.Unlock()
|
||||
}
|
||||
|
||||
@@ -372,6 +372,7 @@ var _ = Describe("Tracing", func() {
|
||||
Type: protocol.PacketTypeHandshake,
|
||||
DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8},
|
||||
SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1},
|
||||
Length: 1337,
|
||||
Version: protocol.VersionTLS,
|
||||
},
|
||||
PacketNumber: 1337,
|
||||
@@ -387,9 +388,11 @@ var _ = Describe("Tracing", func() {
|
||||
Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond)))
|
||||
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)))
|
||||
raw := ev["raw"].(map[string]interface{})
|
||||
Expect(raw).To(HaveKeyWithValue("length", float64(987)))
|
||||
Expect(raw).To(HaveKeyWithValue("payload_length", float64(1337)))
|
||||
Expect(ev).To(HaveKey("header"))
|
||||
hdr := ev["header"].(map[string]interface{})
|
||||
Expect(hdr).To(HaveKeyWithValue("packet_type", "handshake"))
|
||||
Expect(hdr).To(HaveKeyWithValue("packet_number", float64(1337)))
|
||||
@@ -413,6 +416,9 @@ var _ = Describe("Tracing", func() {
|
||||
)
|
||||
entry := exportAndParseSingle()
|
||||
ev := entry.Event
|
||||
raw := ev["raw"].(map[string]interface{})
|
||||
Expect(raw).To(HaveKeyWithValue("length", float64(123)))
|
||||
Expect(raw).ToNot(HaveKey("payload_length"))
|
||||
Expect(ev).To(HaveKey("header"))
|
||||
hdr := ev["header"].(map[string]interface{})
|
||||
Expect(hdr).To(HaveKeyWithValue("packet_type", "1RTT"))
|
||||
@@ -433,6 +439,7 @@ var _ = Describe("Tracing", func() {
|
||||
DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8},
|
||||
SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1},
|
||||
Token: []byte{0xde, 0xad, 0xbe, 0xef},
|
||||
Length: 1234,
|
||||
Version: protocol.VersionTLS,
|
||||
},
|
||||
PacketNumber: 1337,
|
||||
@@ -447,9 +454,11 @@ var _ = Describe("Tracing", func() {
|
||||
Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond)))
|
||||
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)))
|
||||
raw := ev["raw"].(map[string]interface{})
|
||||
Expect(raw).To(HaveKeyWithValue("length", float64(789)))
|
||||
Expect(raw).To(HaveKeyWithValue("payload_length", float64(1234)))
|
||||
Expect(ev).To(HaveKey("header"))
|
||||
hdr := ev["header"].(map[string]interface{})
|
||||
Expect(hdr).To(HaveKeyWithValue("packet_type", "initial"))
|
||||
Expect(hdr).To(HaveKeyWithValue("packet_number", float64(1337)))
|
||||
@@ -476,6 +485,7 @@ var _ = Describe("Tracing", func() {
|
||||
Expect(entry.Time).To(BeTemporally("~", time.Now(), scaleDuration(10*time.Millisecond)))
|
||||
Expect(entry.Name).To(Equal("transport:packet_received"))
|
||||
ev := entry.Event
|
||||
Expect(ev).ToNot(HaveKey("raw"))
|
||||
Expect(ev).To(HaveKey("header"))
|
||||
header := ev["header"].(map[string]interface{})
|
||||
Expect(header).To(HaveKeyWithValue("packet_type", "retry"))
|
||||
|
||||
Reference in New Issue
Block a user