forked from quic-go/quic-go
move nackrange to frames
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package ackhandler
|
||||
|
||||
import "github.com/lucas-clemente/quic-go/protocol"
|
||||
import (
|
||||
"github.com/lucas-clemente/quic-go/frames"
|
||||
"github.com/lucas-clemente/quic-go/protocol"
|
||||
)
|
||||
|
||||
// The AckHandler handles ACKs
|
||||
type AckHandler struct {
|
||||
@@ -25,9 +28,9 @@ func (h *AckHandler) HandlePacket(packetNumber protocol.PacketNumber) {
|
||||
}
|
||||
|
||||
// GetNackRanges gets all the NACK ranges
|
||||
func (h *AckHandler) GetNackRanges() []*NackRange {
|
||||
func (h *AckHandler) GetNackRanges() []*frames.NackRange {
|
||||
// ToDo: improve performance
|
||||
var ranges []*NackRange
|
||||
var ranges []*frames.NackRange
|
||||
inRange := false
|
||||
// ToDo: fix types
|
||||
for i := 0; i < int(h.LargestObserved); i++ {
|
||||
@@ -35,7 +38,7 @@ func (h *AckHandler) GetNackRanges() []*NackRange {
|
||||
_, ok := h.Observed[packetNumber]
|
||||
if !ok {
|
||||
if !inRange {
|
||||
r := &NackRange{
|
||||
r := &frames.NackRange{
|
||||
FirstPacketNumber: packetNumber,
|
||||
Length: 1,
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
package ackhandler
|
||||
|
||||
import "github.com/lucas-clemente/quic-go/protocol"
|
||||
|
||||
// NackRange is a NACK range
|
||||
type NackRange struct {
|
||||
FirstPacketNumber protocol.PacketNumber
|
||||
Length uint8
|
||||
}
|
||||
@@ -4,17 +4,22 @@ import (
|
||||
"bytes"
|
||||
"errors"
|
||||
|
||||
"github.com/lucas-clemente/quic-go/ackhandler"
|
||||
"github.com/lucas-clemente/quic-go/protocol"
|
||||
"github.com/lucas-clemente/quic-go/utils"
|
||||
)
|
||||
|
||||
// NackRange is a NACK range
|
||||
type NackRange struct {
|
||||
FirstPacketNumber protocol.PacketNumber
|
||||
Length uint8
|
||||
}
|
||||
|
||||
// An AckFrame in QUIC
|
||||
type AckFrame struct {
|
||||
Entropy byte
|
||||
LargestObserved protocol.PacketNumber
|
||||
DelayTime uint16 // Todo: properly interpret this value as described in the specification
|
||||
NackRanges []*ackhandler.NackRange
|
||||
NackRanges []NackRange
|
||||
}
|
||||
|
||||
// Write writes an ACK frame.
|
||||
@@ -160,7 +165,7 @@ func ParseAckFrame(r *bytes.Reader) (*AckFrame, error) {
|
||||
}
|
||||
rangeLength := uint8(rangeLengthByte)
|
||||
|
||||
nackRange := ackhandler.NackRange{
|
||||
nackRange := NackRange{
|
||||
Length: uint8(rangeLength + 1),
|
||||
}
|
||||
if i == 0 {
|
||||
@@ -172,7 +177,7 @@ func ParseAckFrame(r *bytes.Reader) (*AckFrame, error) {
|
||||
lastNackRange := frame.NackRanges[len(frame.NackRanges)-1]
|
||||
nackRange.FirstPacketNumber = lastNackRange.FirstPacketNumber - protocol.PacketNumber(missingPacketSequenceNumberDelta+uint64(rangeLength)) - 1
|
||||
}
|
||||
frame.NackRanges = append(frame.NackRanges, &nackRange)
|
||||
frame.NackRanges = append(frame.NackRanges, nackRange)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package frames
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/lucas-clemente/quic-go/ackhandler"
|
||||
"github.com/lucas-clemente/quic-go/protocol"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
@@ -90,14 +89,14 @@ var _ = Describe("AckFrame", func() {
|
||||
|
||||
It("writes a frame with one NACK range", func() {
|
||||
b := &bytes.Buffer{}
|
||||
nackRange := ackhandler.NackRange{
|
||||
nackRange := NackRange{
|
||||
FirstPacketNumber: 2,
|
||||
Length: 1,
|
||||
}
|
||||
frame := AckFrame{
|
||||
Entropy: 2,
|
||||
LargestObserved: 4,
|
||||
NackRanges: []*ackhandler.NackRange{&nackRange},
|
||||
NackRanges: []NackRange{nackRange},
|
||||
}
|
||||
err := frame.Write(b)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
@@ -111,18 +110,18 @@ var _ = Describe("AckFrame", func() {
|
||||
|
||||
It("writes a frame with multiple NACK ranges", func() {
|
||||
b := &bytes.Buffer{}
|
||||
nackRange1 := ackhandler.NackRange{
|
||||
nackRange1 := NackRange{
|
||||
FirstPacketNumber: 4,
|
||||
Length: 3,
|
||||
}
|
||||
nackRange2 := ackhandler.NackRange{
|
||||
nackRange2 := NackRange{
|
||||
FirstPacketNumber: 2,
|
||||
Length: 1,
|
||||
}
|
||||
frame := AckFrame{
|
||||
Entropy: 2,
|
||||
LargestObserved: 7,
|
||||
NackRanges: []*ackhandler.NackRange{&nackRange1, &nackRange2},
|
||||
NackRanges: []NackRange{nackRange1, nackRange2},
|
||||
}
|
||||
err := frame.Write(b)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
@@ -156,10 +155,10 @@ var _ = Describe("AckFrame", func() {
|
||||
|
||||
It("is self-consistent for ACK frames with NACK ranges", func() {
|
||||
b := &bytes.Buffer{}
|
||||
nackRanges := []*ackhandler.NackRange{
|
||||
&ackhandler.NackRange{FirstPacketNumber: 9, Length: 3},
|
||||
&ackhandler.NackRange{FirstPacketNumber: 7, Length: 1},
|
||||
&ackhandler.NackRange{FirstPacketNumber: 2, Length: 2},
|
||||
nackRanges := []NackRange{
|
||||
NackRange{FirstPacketNumber: 9, Length: 3},
|
||||
NackRange{FirstPacketNumber: 7, Length: 1},
|
||||
NackRange{FirstPacketNumber: 2, Length: 2},
|
||||
}
|
||||
frameOrig := &AckFrame{
|
||||
LargestObserved: 15,
|
||||
|
||||
Reference in New Issue
Block a user