implement writing of ACK frames containing ECN counts

This commit is contained in:
Marten Seemann
2020-08-10 12:20:31 +07:00
parent 1914e5f100
commit 13fa0bcdd1
7 changed files with 95 additions and 14 deletions

View File

@@ -102,6 +102,11 @@ func marshalAckFrame(enc *gojay.Encoder, f *logging.AckFrame) {
enc.StringKey("frame_type", "ack")
enc.FloatKeyOmitEmpty("ack_delay", milliseconds(f.DelayTime))
enc.ArrayKey("acked_ranges", ackRanges(f.AckRanges))
if hasECN := f.ECT0 > 0 || f.ECT1 > 0 || f.ECNCE > 0; hasECN {
enc.Uint64Key("ect0", f.ECT0)
enc.Uint64Key("ect1", f.ECT1)
enc.Uint64Key("ce", f.ECNCE)
}
}
func marshalResetStreamFrame(enc *gojay.Encoder, f *logging.ResetStreamFrame) {

View File

@@ -60,6 +60,24 @@ var _ = Describe("Frames", func() {
)
})
It("marshals ACK frames with ECN counts", func() {
check(
&logging.AckFrame{
AckRanges: []logging.AckRange{{Smallest: 120, Largest: 120}},
ECT0: 10,
ECT1: 100,
ECNCE: 1000,
},
map[string]interface{}{
"frame_type": "ack",
"acked_ranges": [][]float64{{120}},
"ect0": 10,
"ect1": 100,
"ce": 1000,
},
)
})
It("marshals ACK frames with a range acknowledging ranges of packets", func() {
check(
&logging.AckFrame{