forked from quic-go/quic-go
Merge pull request #2423 from lucas-clemente/qlog-dropped-encryption-levels
qlog dropped encryption levels
This commit is contained in:
@@ -238,3 +238,17 @@ func (e eventKeyUpdated) MarshalJSONObject(enc *gojay.Encoder) {
|
||||
enc.StringKey("key_type", e.KeyType.String())
|
||||
enc.Uint64KeyOmitEmpty("generation", uint64(e.Generation))
|
||||
}
|
||||
|
||||
type eventKeyRetired struct {
|
||||
KeyType keyType
|
||||
Generation protocol.KeyPhase
|
||||
}
|
||||
|
||||
func (e eventKeyRetired) Category() category { return categorySecurity }
|
||||
func (e eventKeyRetired) Name() string { return "key_retired" }
|
||||
func (e eventKeyRetired) IsNil() bool { return false }
|
||||
|
||||
func (e eventKeyRetired) MarshalJSONObject(enc *gojay.Encoder) {
|
||||
enc.StringKey("trigger", "tls")
|
||||
enc.StringKey("key_type", e.KeyType.String())
|
||||
}
|
||||
|
||||
16
qlog/qlog.go
16
qlog/qlog.go
@@ -25,6 +25,7 @@ type Tracer interface {
|
||||
UpdatedPTOCount(time.Time, uint32)
|
||||
UpdatedKeyFromTLS(time.Time, protocol.EncryptionLevel, protocol.Perspective)
|
||||
UpdatedKey(t time.Time, generation protocol.KeyPhase, remote bool)
|
||||
DroppedEncryptionLevel(time.Time, protocol.EncryptionLevel)
|
||||
}
|
||||
|
||||
type tracer struct {
|
||||
@@ -210,3 +211,18 @@ func (t *tracer) UpdatedKey(time time.Time, generation protocol.KeyPhase, remote
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (t *tracer) DroppedEncryptionLevel(time time.Time, encLevel protocol.EncryptionLevel) {
|
||||
t.events = append(t.events, event{
|
||||
Time: time,
|
||||
eventDetails: eventKeyRetired{
|
||||
KeyType: encLevelToKeyType(encLevel, protocol.PerspectiveServer),
|
||||
},
|
||||
})
|
||||
t.events = append(t.events, event{
|
||||
Time: time,
|
||||
eventDetails: eventKeyRetired{
|
||||
KeyType: encLevelToKeyType(encLevel, protocol.PerspectiveClient),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ var _ = Describe("Tracer", func() {
|
||||
Expect(ev).ToNot(HaveKey("new"))
|
||||
})
|
||||
|
||||
It("records QUIC key udpates", func() {
|
||||
It("records QUIC key updates", func() {
|
||||
now := time.Now()
|
||||
tracer.UpdatedKey(now, 1337, true)
|
||||
entries := exportAndParse()
|
||||
@@ -347,5 +347,24 @@ var _ = Describe("Tracer", func() {
|
||||
Expect(keyTypes).To(ContainElement("server_1rtt_secret"))
|
||||
Expect(keyTypes).To(ContainElement("client_1rtt_secret"))
|
||||
})
|
||||
|
||||
It("records dropped encryption levels", func() {
|
||||
now := time.Now()
|
||||
tracer.DroppedEncryptionLevel(now, protocol.EncryptionInitial)
|
||||
entries := exportAndParse()
|
||||
Expect(entries).To(HaveLen(2))
|
||||
var keyTypes []string
|
||||
for _, entry := range entries {
|
||||
Expect(entry.Time).To(BeTemporally("~", now, time.Millisecond))
|
||||
Expect(entry.Category).To(Equal("security"))
|
||||
Expect(entry.Name).To(Equal("key_retired"))
|
||||
ev := entry.Event
|
||||
Expect(ev).To(HaveKeyWithValue("trigger", "tls"))
|
||||
Expect(ev).To(HaveKey("key_type"))
|
||||
keyTypes = append(keyTypes, ev["key_type"].(string))
|
||||
}
|
||||
Expect(keyTypes).To(ContainElement("server_initial_secret"))
|
||||
Expect(keyTypes).To(ContainElement("client_initial_secret"))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1167,6 +1167,9 @@ func (s *session) dropEncryptionLevel(encLevel protocol.EncryptionLevel) {
|
||||
}
|
||||
s.sentPacketHandler.DropPackets(encLevel)
|
||||
s.receivedPacketHandler.DropPackets(encLevel)
|
||||
if s.qlogger != nil {
|
||||
s.qlogger.DroppedEncryptionLevel(time.Now(), encLevel)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *session) processTransportParameters(params *wire.TransportParameters) {
|
||||
|
||||
Reference in New Issue
Block a user