move nackrange to frames

This commit is contained in:
Lucas Clemente
2016-04-20 12:15:03 +02:00
parent 80e6569d5d
commit 650e9d38d3
4 changed files with 25 additions and 27 deletions

View File

@@ -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,
}

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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,