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

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

View File

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