forked from quic-go/quic-go
calculate the EntropyByte of every sent packet
This commit is contained in:
@@ -9,9 +9,11 @@ import (
|
||||
)
|
||||
|
||||
type outgoingPacketAckHandler struct {
|
||||
lastSentPacketNumber protocol.PacketNumber
|
||||
packetHistory map[protocol.PacketNumber]*Packet
|
||||
packetHistoryMutex sync.Mutex
|
||||
lastSentPacketNumber protocol.PacketNumber
|
||||
highestInOrderAckedPacketNumber protocol.PacketNumber
|
||||
highestInOrderAckedEntropy EntropyAccumulator
|
||||
packetHistory map[protocol.PacketNumber]*Packet
|
||||
packetHistoryMutex sync.Mutex
|
||||
}
|
||||
|
||||
// NewOutgoingPacketAckHandler creates a new outgoingPacketAckHandler
|
||||
@@ -31,6 +33,20 @@ func (h *outgoingPacketAckHandler) SentPacket(packet *Packet) error {
|
||||
if h.lastSentPacketNumber+1 != packet.PacketNumber {
|
||||
return errors.New("Packet number must be increased by exactly 1")
|
||||
}
|
||||
|
||||
var lastPacketEntropy EntropyAccumulator
|
||||
// ToDo: write tests for this
|
||||
if packet.PacketNumber == 0 {
|
||||
lastPacketEntropy = EntropyAccumulator(0)
|
||||
} else {
|
||||
if h.highestInOrderAckedPacketNumber == packet.PacketNumber-1 {
|
||||
lastPacketEntropy = h.highestInOrderAckedEntropy
|
||||
} else {
|
||||
lastPacketEntropy = h.packetHistory[packet.PacketNumber-1].Entropy
|
||||
}
|
||||
}
|
||||
lastPacketEntropy.Add(packet.PacketNumber, packet.EntropyBit)
|
||||
packet.Entropy = lastPacketEntropy
|
||||
h.lastSentPacketNumber = packet.PacketNumber
|
||||
h.packetHistory[packet.PacketNumber] = packet
|
||||
return nil
|
||||
|
||||
@@ -13,9 +13,10 @@ var _ = Describe("AckHandler", func() {
|
||||
})
|
||||
|
||||
Context("SentPacket", func() {
|
||||
It("accepts two consecutive packets", func() {
|
||||
It("accepts three consecutive packets", func() {
|
||||
entropy := EntropyAccumulator(0)
|
||||
packet1 := Packet{PacketNumber: 1, Plaintext: []byte{0x13, 0x37}, EntropyBit: true}
|
||||
packet2 := Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: false}
|
||||
packet2 := Packet{PacketNumber: 2, Plaintext: []byte{0xBE, 0xEF}, EntropyBit: true}
|
||||
err := handler.SentPacket(&packet1)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
err = handler.SentPacket(&packet2)
|
||||
@@ -23,6 +24,12 @@ var _ = Describe("AckHandler", func() {
|
||||
Expect(handler.lastSentPacketNumber).To(Equal(protocol.PacketNumber(2)))
|
||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1)))
|
||||
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
|
||||
entropy.Add(packet1.PacketNumber, packet1.EntropyBit)
|
||||
Expect(handler.packetHistory[1].PacketNumber).To(Equal(protocol.PacketNumber(1)))
|
||||
Expect(handler.packetHistory[1].Entropy).To(Equal(entropy))
|
||||
entropy.Add(packet2.PacketNumber, packet2.EntropyBit)
|
||||
Expect(handler.packetHistory[2].PacketNumber).To(Equal(protocol.PacketNumber(2)))
|
||||
Expect(handler.packetHistory[2].Entropy).To(Equal(entropy))
|
||||
})
|
||||
|
||||
It("rejects packets with the same packet number", func() {
|
||||
|
||||
@@ -7,6 +7,7 @@ type Packet struct {
|
||||
PacketNumber protocol.PacketNumber
|
||||
Plaintext []byte
|
||||
EntropyBit bool
|
||||
Entropy EntropyAccumulator
|
||||
|
||||
MissingReports uint8
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user