forked from quic-go/quic-go
@@ -15,9 +15,11 @@ var errInvalidNackRanges = errors.New("AckFrame: ACK frame contains invalid NACK
|
||||
type AckFrame struct {
|
||||
LargestObserved protocol.PacketNumber
|
||||
Entropy byte
|
||||
DelayTime time.Duration
|
||||
NackRanges []NackRange // has to be ordered. The NACK range with the highest FirstPacketNumber goes first, the NACK range with the lowest FirstPacketNumber goes last
|
||||
Truncated bool
|
||||
|
||||
DelayTime time.Duration
|
||||
PacketReceivedTime time.Time // only for received packets. Will not be modified for received ACKs frames
|
||||
}
|
||||
|
||||
// Write writes an ACK frame.
|
||||
@@ -28,6 +30,8 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
|
||||
typeByte |= (0x20 | 0x03)
|
||||
}
|
||||
|
||||
f.DelayTime = time.Now().Sub(f.PacketReceivedTime)
|
||||
|
||||
b.WriteByte(typeByte)
|
||||
b.WriteByte(f.Entropy)
|
||||
utils.WriteUint48(b, uint64(f.LargestObserved)) // TODO: send the correct length
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/lucas-clemente/quic-go/protocol"
|
||||
"github.com/lucas-clemente/quic-go/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
@@ -251,7 +252,22 @@ var _ = Describe("AckFrame", func() {
|
||||
}
|
||||
err := frame.Write(b, 32)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Bytes()).To(Equal([]byte{0x4c, 0x02, 0x01, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}))
|
||||
// check all values except the DelayTime
|
||||
Expect(b.Bytes()[0:8]).To(Equal([]byte{0x4c, 0x02, 0x01, 0, 0, 0, 0, 0}))
|
||||
Expect(b.Bytes()[10:]).To(Equal([]byte{1, 0, 0, 0, 0, 0}))
|
||||
})
|
||||
|
||||
It("calculates the DelayTime", func() {
|
||||
frame := AckFrame{
|
||||
LargestObserved: 5,
|
||||
PacketReceivedTime: time.Now().Add(-750 * time.Millisecond),
|
||||
}
|
||||
frame.Write(b, 32)
|
||||
Expect(frame.DelayTime).To(BeNumerically("~", 750*time.Millisecond, 10*time.Millisecond))
|
||||
delayTime := frame.DelayTime
|
||||
var b2 bytes.Buffer
|
||||
utils.WriteUfloat16(&b2, uint64(delayTime/time.Microsecond))
|
||||
Expect(b.Bytes()[8:10]).To(Equal(b2.Bytes()))
|
||||
})
|
||||
|
||||
It("writes a frame with one NACK range", func() {
|
||||
|
||||
Reference in New Issue
Block a user