forked from quic-go/quic-go
@@ -32,7 +32,7 @@ type sentPacketHandler struct {
|
|||||||
// TODO: Move into separate class as in chromium
|
// TODO: Move into separate class as in chromium
|
||||||
packetHistory map[protocol.PacketNumber]*Packet
|
packetHistory map[protocol.PacketNumber]*Packet
|
||||||
|
|
||||||
retransmissionQueue []*Packet // ToDo: use better data structure
|
retransmissionQueue []*Packet
|
||||||
stopWaitingManager StopWaitingManager
|
stopWaitingManager StopWaitingManager
|
||||||
|
|
||||||
bytesInFlight protocol.ByteCount
|
bytesInFlight protocol.ByteCount
|
||||||
@@ -210,8 +210,10 @@ func (h *sentPacketHandler) DequeuePacketForRetransmission() (packet *Packet) {
|
|||||||
if len(h.retransmissionQueue) == 0 {
|
if len(h.retransmissionQueue) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
packet = h.retransmissionQueue[0]
|
queueLen := len(h.retransmissionQueue)
|
||||||
h.retransmissionQueue = h.retransmissionQueue[1:]
|
// packets are usually NACKed in descending order. So use the slice as a stack
|
||||||
|
packet = h.retransmissionQueue[queueLen-1]
|
||||||
|
h.retransmissionQueue = h.retransmissionQueue[:queueLen-1]
|
||||||
return packet
|
return packet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -375,10 +375,10 @@ var _ = Describe("SentPacketHandler", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("keeps the packets in the right order", func() {
|
It("keeps the packets in the right order", func() {
|
||||||
handler.nackPacket(2)
|
|
||||||
handler.nackPacket(2)
|
|
||||||
handler.nackPacket(4)
|
handler.nackPacket(4)
|
||||||
handler.nackPacket(4)
|
handler.nackPacket(4)
|
||||||
|
handler.nackPacket(2)
|
||||||
|
handler.nackPacket(2)
|
||||||
packet := handler.DequeuePacketForRetransmission()
|
packet := handler.DequeuePacketForRetransmission()
|
||||||
Expect(packet.PacketNumber).To(Equal(protocol.PacketNumber(2)))
|
Expect(packet.PacketNumber).To(Equal(protocol.PacketNumber(2)))
|
||||||
packet = handler.DequeuePacketForRetransmission()
|
packet = handler.DequeuePacketForRetransmission()
|
||||||
@@ -386,12 +386,12 @@ var _ = Describe("SentPacketHandler", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("only queues each packet once, regardless of the number of NACKs", func() {
|
It("only queues each packet once, regardless of the number of NACKs", func() {
|
||||||
handler.nackPacket(2)
|
|
||||||
handler.nackPacket(2)
|
|
||||||
handler.nackPacket(4)
|
handler.nackPacket(4)
|
||||||
handler.nackPacket(4)
|
handler.nackPacket(4)
|
||||||
handler.nackPacket(2)
|
handler.nackPacket(2)
|
||||||
handler.nackPacket(2)
|
handler.nackPacket(2)
|
||||||
|
handler.nackPacket(4)
|
||||||
|
handler.nackPacket(4)
|
||||||
_ = handler.DequeuePacketForRetransmission()
|
_ = handler.DequeuePacketForRetransmission()
|
||||||
_ = handler.DequeuePacketForRetransmission()
|
_ = handler.DequeuePacketForRetransmission()
|
||||||
Expect(handler.DequeuePacketForRetransmission()).To(BeNil())
|
Expect(handler.DequeuePacketForRetransmission()).To(BeNil())
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ func (s *Session) sendPacket() error {
|
|||||||
// TODO: handle multiple packets retransmissions
|
// TODO: handle multiple packets retransmissions
|
||||||
retransmitPacket := s.sentPacketHandler.DequeuePacketForRetransmission()
|
retransmitPacket := s.sentPacketHandler.DequeuePacketForRetransmission()
|
||||||
if retransmitPacket != nil {
|
if retransmitPacket != nil {
|
||||||
utils.Debugf("\tQueueing retransmission for packet 0x%x", retransmitPacket.PacketNumber)
|
utils.Debugf("\tDequeueing retransmission for packet 0x%x", retransmitPacket.PacketNumber)
|
||||||
s.stopWaitingManager.RegisterPacketForRetransmission(retransmitPacket)
|
s.stopWaitingManager.RegisterPacketForRetransmission(retransmitPacket)
|
||||||
// resend the frames that were in the packet
|
// resend the frames that were in the packet
|
||||||
controlFrames = append(controlFrames, retransmitPacket.GetControlFramesForRetransmission()...)
|
controlFrames = append(controlFrames, retransmitPacket.GetControlFramesForRetransmission()...)
|
||||||
|
|||||||
Reference in New Issue
Block a user