forked from quic-go/quic-go
qlog: add support for ACK_FREQUENCY and IMMEDIATE_ACK frames (#5276)
This commit is contained in:
@@ -44,6 +44,10 @@ type (
|
|||||||
StreamsBlockedFrame = wire.StreamsBlockedFrame
|
StreamsBlockedFrame = wire.StreamsBlockedFrame
|
||||||
// A StreamDataBlockedFrame is a STREAM_DATA_BLOCKED frame.
|
// A StreamDataBlockedFrame is a STREAM_DATA_BLOCKED frame.
|
||||||
StreamDataBlockedFrame = wire.StreamDataBlockedFrame
|
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.
|
// A CryptoFrame is a CRYPTO frame.
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ func (f frame) MarshalJSONObject(enc *gojay.Encoder) {
|
|||||||
marshalHandshakeDoneFrame(enc, frame)
|
marshalHandshakeDoneFrame(enc, frame)
|
||||||
case *logging.DatagramFrame:
|
case *logging.DatagramFrame:
|
||||||
marshalDatagramFrame(enc, frame)
|
marshalDatagramFrame(enc, frame)
|
||||||
|
case *logging.AckFrequencyFrame:
|
||||||
|
marshalAckFrequencyFrame(enc, frame)
|
||||||
|
case *logging.ImmediateAckFrame:
|
||||||
|
marshalImmediateAckFrame(enc, frame)
|
||||||
default:
|
default:
|
||||||
panic("unknown frame type")
|
panic("unknown frame type")
|
||||||
}
|
}
|
||||||
@@ -232,3 +236,15 @@ func marshalDatagramFrame(enc *gojay.Encoder, f *logging.DatagramFrame) {
|
|||||||
enc.StringKey("frame_type", "datagram")
|
enc.StringKey("frame_type", "datagram")
|
||||||
enc.Int64Key("length", int64(f.Length))
|
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")
|
||||||
|
}
|
||||||
|
|||||||
@@ -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) {
|
func TestStopSendingFrame(t *testing.T) {
|
||||||
check(t,
|
check(t,
|
||||||
&logging.StopSendingFrame{
|
&logging.StopSendingFrame{
|
||||||
|
|||||||
Reference in New Issue
Block a user