calculate the Entropy byte for the highest in order received packet

This commit is contained in:
Marten Seemann
2016-04-22 17:50:04 +07:00
parent aad1fd2ee7
commit 3e5f43f45a
2 changed files with 38 additions and 4 deletions

View File

@@ -11,9 +11,10 @@ var ErrDuplicatePacket = errors.New("Duplicate Packet")
// The AckHandler handles ACKs
type incomingPacketAckHandler struct {
highestInOrderObserved protocol.PacketNumber
largestObserved protocol.PacketNumber
packetHistory map[protocol.PacketNumber]bool
highestInOrderObserved protocol.PacketNumber
highestInOrderObservedEntropy EntropyAccumulator
largestObserved protocol.PacketNumber
packetHistory map[protocol.PacketNumber]bool
}
// NewIncomingPacketAckHandler creates a new outgoingPacketAckHandler
@@ -37,6 +38,7 @@ func (h *incomingPacketAckHandler) ReceivedPacket(packetNumber protocol.PacketNu
if packetNumber == h.highestInOrderObserved+1 {
h.highestInOrderObserved = packetNumber
h.highestInOrderObservedEntropy.Add(packetNumber, entropyBit)
}
h.packetHistory[packetNumber] = true

View File

@@ -48,7 +48,39 @@ var _ = Describe("incomingPacketAckHandler", func() {
})
Context("Entropy calculation", func() {
// It("calculates the entropy f")
It("calculates the entropy for continously received packets", func() {
entropy := EntropyAccumulator(0)
for i := 1; i < 100; i++ {
entropyBit := false
if i%3 == 0 || i%5 == 0 {
entropyBit = true
}
entropy.Add(protocol.PacketNumber(i), entropyBit)
err := handler.ReceivedPacket(protocol.PacketNumber(i), entropyBit)
Expect(err).ToNot(HaveOccurred())
}
Expect(handler.highestInOrderObservedEntropy).To(Equal(entropy))
})
It("calculates the entropy if there is a NACK range", func() {
entropy := EntropyAccumulator(0)
for i := 1; i < 100; i++ {
entropyBit := false
if i%3 == 0 || i%5 == 0 {
entropyBit = true
}
if i == 10 || i == 11 || i == 12 {
continue
}
if i < 10 {
entropy.Add(protocol.PacketNumber(i), entropyBit)
}
err := handler.ReceivedPacket(protocol.PacketNumber(i), entropyBit)
Expect(err).ToNot(HaveOccurred())
}
Expect(handler.highestInOrderObservedEntropy).To(Equal(entropy))
})
})
Context("NACK range calculation", func() {