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