forked from quic-go/quic-go
add the packet_received event
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
16
qlog/qlog.go
16
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,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user