qlog received Retry packets

This commit is contained in:
Marten Seemann
2020-01-27 12:59:16 +07:00
parent b1a3e7a00b
commit a58bcb747b
6 changed files with 57 additions and 5 deletions

View File

@@ -83,3 +83,16 @@ func (e eventPacketReceived) MarshalJSONObject(enc *gojay.Encoder) {
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
enc.StringKeyOmitEmpty("trigger", e.Trigger)
}
type eventRetryReceived struct {
Header packetHeader
}
func (e eventRetryReceived) Category() category { return categoryTransport }
func (e eventRetryReceived) Name() string { return "packet_received" }
func (e eventRetryReceived) IsNil() bool { return false }
func (e eventRetryReceived) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_type", packetTypeRetry.String())
enc.ObjectKey("header", e.Header)
}

View File

@@ -28,9 +28,8 @@ func getPacketType(hdr *wire.ExtendedHeader) packetType {
}
}
func transformHeader(hdr *wire.ExtendedHeader) *packetHeader {
func transformHeader(hdr *wire.Header) *packetHeader {
return &packetHeader{
PacketNumber: hdr.PacketNumber,
PayloadLength: hdr.Length,
SrcConnectionID: hdr.SrcConnectionID,
DestConnectionID: hdr.DestConnectionID,
@@ -38,6 +37,12 @@ func transformHeader(hdr *wire.ExtendedHeader) *packetHeader {
}
}
func transformExtendedHeader(hdr *wire.ExtendedHeader) *packetHeader {
h := transformHeader(&hdr.Header)
h.PacketNumber = hdr.PacketNumber
return h
}
type packetHeader struct {
PacketNumber protocol.PacketNumber
PacketSize protocol.ByteCount

View File

@@ -72,7 +72,7 @@ var _ = Describe("Packet Header", func() {
check := func(hdr *wire.ExtendedHeader, expected map[string]interface{}) {
buf := &bytes.Buffer{}
enc := gojay.NewEncoder(buf)
ExpectWithOffset(1, enc.Encode(transformHeader(hdr))).To(Succeed())
ExpectWithOffset(1, enc.Encode(transformExtendedHeader(hdr))).To(Succeed())
data := buf.Bytes()
ExpectWithOffset(1, json.Valid(data)).To(BeTrue())
checkEncoding(data, expected)

View File

@@ -13,6 +13,7 @@ import (
type Tracer interface {
Export() error
SentPacket(time.Time, *wire.ExtendedHeader, *wire.AckFrame, []wire.Frame)
ReceivedRetry(time.Time, *wire.Header)
ReceivedPacket(time.Time, *wire.ExtendedHeader, []wire.Frame)
}
@@ -71,7 +72,7 @@ func (t *tracer) SentPacket(time time.Time, hdr *wire.ExtendedHeader, ack *wire.
Time: time,
eventDetails: eventPacketSent{
PacketType: getPacketType(hdr),
Header: *transformHeader(hdr),
Header: *transformExtendedHeader(hdr),
Frames: fs,
},
})
@@ -86,8 +87,17 @@ func (t *tracer) ReceivedPacket(time time.Time, hdr *wire.ExtendedHeader, frames
Time: time,
eventDetails: eventPacketReceived{
PacketType: getPacketType(hdr),
Header: *transformHeader(hdr),
Header: *transformExtendedHeader(hdr),
Frames: fs,
},
})
}
func (t *tracer) ReceivedRetry(time time.Time, hdr *wire.Header) {
t.events = append(t.events, event{
Time: time,
eventDetails: eventRetryReceived{
Header: *transformHeader(hdr),
},
})
}

View File

@@ -159,5 +159,26 @@ var _ = Describe("Tracer", func() {
Expect(ev).To(HaveKey("frames"))
Expect(ev["frames"].([]interface{})).To(HaveLen(2))
})
It("records a received Retry packet", func() {
now := time.Now()
tracer.ReceivedRetry(
now,
&wire.Header{
IsLongHeader: true,
Type: protocol.PacketTypeRetry,
DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8},
SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1},
Version: protocol.VersionTLS,
},
)
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", "retry"))
Expect(ev).To(HaveKey("header"))
Expect(ev).ToNot(HaveKey("frames"))
})
})
})

View File

@@ -791,6 +791,9 @@ func (s *session) handleRetryPacket(hdr *wire.Header, data []byte) bool /* was t
}
s.logger.Debugf("<- Received Retry")
s.logger.Debugf("Switching destination connection ID to: %s", hdr.SrcConnectionID)
if s.qlogger != nil {
s.qlogger.ReceivedRetry(time.Now(), hdr)
}
s.origDestConnID = s.handshakeDestConnID
newDestConnID := hdr.SrcConnectionID
s.receivedRetry = true