forked from quic-go/quic-go
qlog received Retry packets
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
14
qlog/qlog.go
14
qlog/qlog.go
@@ -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),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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"))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user