forked from quic-go/quic-go
Merge pull request #2817 from lucas-clemente/qlog-key-phase-bit
qlog the key phase bit
This commit is contained in:
@@ -3,23 +3,34 @@ package protocol
|
|||||||
// KeyPhase is the key phase
|
// KeyPhase is the key phase
|
||||||
type KeyPhase uint64
|
type KeyPhase uint64
|
||||||
|
|
||||||
|
// Bit determines the key phase bit
|
||||||
func (p KeyPhase) Bit() KeyPhaseBit {
|
func (p KeyPhase) Bit() KeyPhaseBit {
|
||||||
return p%2 == 1
|
if p%2 == 0 {
|
||||||
|
return KeyPhaseZero
|
||||||
|
}
|
||||||
|
return KeyPhaseOne
|
||||||
}
|
}
|
||||||
|
|
||||||
// KeyPhaseBit is the key phase bit
|
// KeyPhaseBit is the key phase bit
|
||||||
type KeyPhaseBit bool
|
type KeyPhaseBit uint8
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// KeyPhaseUndefined is an undefined key phase
|
||||||
|
KeyPhaseUndefined KeyPhaseBit = iota
|
||||||
// KeyPhaseZero is key phase 0
|
// KeyPhaseZero is key phase 0
|
||||||
KeyPhaseZero KeyPhaseBit = false
|
KeyPhaseZero
|
||||||
// KeyPhaseOne is key phase 1
|
// KeyPhaseOne is key phase 1
|
||||||
KeyPhaseOne KeyPhaseBit = true
|
KeyPhaseOne
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p KeyPhaseBit) String() string {
|
func (p KeyPhaseBit) String() string {
|
||||||
if p == KeyPhaseZero {
|
//nolint:exhaustive
|
||||||
|
switch p {
|
||||||
|
case KeyPhaseZero:
|
||||||
return "0"
|
return "0"
|
||||||
|
case KeyPhaseOne:
|
||||||
|
return "1"
|
||||||
|
default:
|
||||||
|
return "undefined"
|
||||||
}
|
}
|
||||||
return "1"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var _ = Describe("Key Phases", func() {
|
var _ = Describe("Key Phases", func() {
|
||||||
|
It("has undefined as its default value", func() {
|
||||||
|
var k KeyPhaseBit
|
||||||
|
Expect(k).To(Equal(KeyPhaseUndefined))
|
||||||
|
})
|
||||||
|
|
||||||
It("has the correct string representation", func() {
|
It("has the correct string representation", func() {
|
||||||
Expect(KeyPhaseZero.String()).To(Equal("0"))
|
Expect(KeyPhaseZero.String()).To(Equal("0"))
|
||||||
Expect(KeyPhaseOne.String()).To(Equal("1"))
|
Expect(KeyPhaseOne.String()).To(Equal("1"))
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ type (
|
|||||||
EncryptionLevel = protocol.EncryptionLevel
|
EncryptionLevel = protocol.EncryptionLevel
|
||||||
// The KeyPhase is the key phase of the 1-RTT keys.
|
// The KeyPhase is the key phase of the 1-RTT keys.
|
||||||
KeyPhase = protocol.KeyPhase
|
KeyPhase = protocol.KeyPhase
|
||||||
|
// The KeyPhaseBit is the value of the key phase bit of the 1-RTT packets.
|
||||||
|
KeyPhaseBit = protocol.KeyPhaseBit
|
||||||
// The PacketNumber is the packet number of a packet.
|
// The PacketNumber is the packet number of a packet.
|
||||||
PacketNumber = protocol.PacketNumber
|
PacketNumber = protocol.PacketNumber
|
||||||
// The Perspective is the role of a QUIC endpoint (client or server).
|
// The Perspective is the role of a QUIC endpoint (client or server).
|
||||||
@@ -53,6 +55,13 @@ type (
|
|||||||
RTTStats = utils.RTTStats
|
RTTStats = utils.RTTStats
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// KeyPhaseZero is key phase bit 0
|
||||||
|
KeyPhaseZero KeyPhaseBit = protocol.KeyPhaseZero
|
||||||
|
// KeyPhaseOne is key phase bit 1
|
||||||
|
KeyPhaseOne KeyPhaseBit = protocol.KeyPhaseOne
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// PerspectiveServer is used for a QUIC server
|
// PerspectiveServer is used for a QUIC server
|
||||||
PerspectiveServer Perspective = protocol.PerspectiveServer
|
PerspectiveServer Perspective = protocol.PerspectiveServer
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ type packetHeader struct {
|
|||||||
Version logging.VersionNumber
|
Version logging.VersionNumber
|
||||||
SrcConnectionID logging.ConnectionID
|
SrcConnectionID logging.ConnectionID
|
||||||
DestConnectionID logging.ConnectionID
|
DestConnectionID logging.ConnectionID
|
||||||
|
|
||||||
|
KeyPhaseBit logging.KeyPhaseBit
|
||||||
}
|
}
|
||||||
|
|
||||||
func transformHeader(hdr *wire.Header) *packetHeader {
|
func transformHeader(hdr *wire.Header) *packetHeader {
|
||||||
@@ -52,6 +54,7 @@ func transformHeader(hdr *wire.Header) *packetHeader {
|
|||||||
func transformExtendedHeader(hdr *wire.ExtendedHeader) *packetHeader {
|
func transformExtendedHeader(hdr *wire.ExtendedHeader) *packetHeader {
|
||||||
h := transformHeader(&hdr.Header)
|
h := transformHeader(&hdr.Header)
|
||||||
h.PacketNumber = hdr.PacketNumber
|
h.PacketNumber = hdr.PacketNumber
|
||||||
|
h.KeyPhaseBit = hdr.KeyPhase
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,4 +77,7 @@ func (h packetHeader) MarshalJSONObject(enc *gojay.Encoder) {
|
|||||||
if h.DestConnectionID.Len() > 0 {
|
if h.DestConnectionID.Len() > 0 {
|
||||||
enc.StringKey("dcid", connectionID(h.DestConnectionID).String())
|
enc.StringKey("dcid", connectionID(h.DestConnectionID).String())
|
||||||
}
|
}
|
||||||
|
if h.KeyPhaseBit == logging.KeyPhaseZero || h.KeyPhaseBit == logging.KeyPhaseOne {
|
||||||
|
enc.StringKey("key_phase_bit", h.KeyPhaseBit.String())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,10 +34,14 @@ var _ = Describe("Packet Header", func() {
|
|||||||
|
|
||||||
It("marshals a header for a 1-RTT packet", func() {
|
It("marshals a header for a 1-RTT packet", func() {
|
||||||
check(
|
check(
|
||||||
&wire.ExtendedHeader{PacketNumber: 42},
|
&wire.ExtendedHeader{
|
||||||
|
PacketNumber: 42,
|
||||||
|
KeyPhase: protocol.KeyPhaseZero,
|
||||||
|
},
|
||||||
map[string]interface{}{
|
map[string]interface{}{
|
||||||
"packet_number": 42,
|
"packet_number": 42,
|
||||||
"dcil": 0,
|
"dcil": 0,
|
||||||
|
"key_phase_bit": "0",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@@ -108,11 +112,13 @@ var _ = Describe("Packet Header", func() {
|
|||||||
&wire.ExtendedHeader{
|
&wire.ExtendedHeader{
|
||||||
PacketNumber: 42,
|
PacketNumber: 42,
|
||||||
Header: wire.Header{DestConnectionID: protocol.ConnectionID{0xde, 0xad, 0xbe, 0xef}},
|
Header: wire.Header{DestConnectionID: protocol.ConnectionID{0xde, 0xad, 0xbe, 0xef}},
|
||||||
|
KeyPhase: protocol.KeyPhaseOne,
|
||||||
},
|
},
|
||||||
map[string]interface{}{
|
map[string]interface{}{
|
||||||
"packet_number": 42,
|
"packet_number": 42,
|
||||||
"dcil": 4,
|
"dcil": 4,
|
||||||
"dcid": "deadbeef",
|
"dcid": "deadbeef",
|
||||||
|
"key_phase_bit": "1",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user