qlog: add support for ACK_FREQUENCY and IMMEDIATE_ACK frames (#5276)

This commit is contained in:
Marten Seemann
2025-08-04 10:00:02 +02:00
committed by GitHub
parent 2db5f56cc5
commit 69cbb6ec5b
3 changed files with 47 additions and 0 deletions

View File

@@ -44,6 +44,10 @@ type (
StreamsBlockedFrame = wire.StreamsBlockedFrame
// A StreamDataBlockedFrame is a STREAM_DATA_BLOCKED frame.
StreamDataBlockedFrame = wire.StreamDataBlockedFrame
// An AckFrequencyFrame is an ACK_FREQUENCY frame.
AckFrequencyFrame = wire.AckFrequencyFrame
// An ImmediateAckFrame is an IMMEDIATE_ACK frame.
ImmediateAckFrame = wire.ImmediateAckFrame
)
// A CryptoFrame is a CRYPTO frame.

View File

@@ -59,6 +59,10 @@ func (f frame) MarshalJSONObject(enc *gojay.Encoder) {
marshalHandshakeDoneFrame(enc, frame)
case *logging.DatagramFrame:
marshalDatagramFrame(enc, frame)
case *logging.AckFrequencyFrame:
marshalAckFrequencyFrame(enc, frame)
case *logging.ImmediateAckFrame:
marshalImmediateAckFrame(enc, frame)
default:
panic("unknown frame type")
}
@@ -232,3 +236,15 @@ func marshalDatagramFrame(enc *gojay.Encoder, f *logging.DatagramFrame) {
enc.StringKey("frame_type", "datagram")
enc.Int64Key("length", int64(f.Length))
}
func marshalAckFrequencyFrame(enc *gojay.Encoder, f *logging.AckFrequencyFrame) {
enc.StringKey("frame_type", "ack_frequency")
enc.Uint64Key("sequence_number", f.SequenceNumber)
enc.Uint64Key("ack_eliciting_threshold", f.AckElicitingThreshold)
enc.Float64Key("request_max_ack_delay", milliseconds(f.RequestMaxAckDelay))
enc.Uint64Key("reordering_threshold", uint64(f.ReorderingThreshold))
}
func marshalImmediateAckFrame(enc *gojay.Encoder, _ *logging.ImmediateAckFrame) {
enc.StringKey("frame_type", "immediate_ack")
}

View File

@@ -137,6 +137,33 @@ func TestResetStreamAtFrame(t *testing.T) {
)
}
func TestAckFrequencyFrame(t *testing.T) {
check(t,
&logging.AckFrequencyFrame{
SequenceNumber: 1337,
AckElicitingThreshold: 123,
RequestMaxAckDelay: 42 * time.Millisecond,
ReorderingThreshold: 1234,
},
map[string]interface{}{
"frame_type": "ack_frequency",
"sequence_number": 1337,
"ack_eliciting_threshold": 123,
"request_max_ack_delay": 42,
"reordering_threshold": 1234,
},
)
}
func TestImmediateAckFrame(t *testing.T) {
check(t,
&logging.ImmediateAckFrame{},
map[string]interface{}{
"frame_type": "immediate_ack",
},
)
}
func TestStopSendingFrame(t *testing.T) {
check(t,
&logging.StopSendingFrame{