forked from quic-go/quic-go
move varint encoding / decoding to a separate package
... which is not internal.
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
"github.com/lucas-clemente/quic-go/internal/protocol"
|
||||
"github.com/lucas-clemente/quic-go/internal/utils"
|
||||
"github.com/lucas-clemente/quic-go/quicvarint"
|
||||
)
|
||||
|
||||
var errInvalidAckRanges = errors.New("AckFrame: ACK frame contains invalid ACK ranges")
|
||||
@@ -30,12 +31,12 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNu
|
||||
|
||||
frame := &AckFrame{}
|
||||
|
||||
la, err := utils.ReadVarInt(r)
|
||||
la, err := quicvarint.ReadVarInt(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
largestAcked := protocol.PacketNumber(la)
|
||||
delay, err := utils.ReadVarInt(r)
|
||||
delay, err := quicvarint.ReadVarInt(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -47,13 +48,13 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNu
|
||||
}
|
||||
frame.DelayTime = delayTime
|
||||
|
||||
numBlocks, err := utils.ReadVarInt(r)
|
||||
numBlocks, err := quicvarint.ReadVarInt(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// read the first ACK range
|
||||
ab, err := utils.ReadVarInt(r)
|
||||
ab, err := quicvarint.ReadVarInt(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -66,7 +67,7 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNu
|
||||
// read all the other ACK ranges
|
||||
frame.AckRanges = append(frame.AckRanges, AckRange{Smallest: smallest, Largest: largestAcked})
|
||||
for i := uint64(0); i < numBlocks; i++ {
|
||||
g, err := utils.ReadVarInt(r)
|
||||
g, err := quicvarint.ReadVarInt(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -76,7 +77,7 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNu
|
||||
}
|
||||
largest := smallest - gap - 2
|
||||
|
||||
ab, err := utils.ReadVarInt(r)
|
||||
ab, err := quicvarint.ReadVarInt(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -96,7 +97,7 @@ func parseAckFrame(r *bytes.Reader, ackDelayExponent uint8, _ protocol.VersionNu
|
||||
// parse (and skip) the ECN section
|
||||
if ecn {
|
||||
for i := 0; i < 3; i++ {
|
||||
if _, err := utils.ReadVarInt(r); err != nil {
|
||||
if _, err := quicvarint.ReadVarInt(r); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -113,27 +114,27 @@ func (f *AckFrame) Write(b *bytes.Buffer, _ protocol.VersionNumber) error {
|
||||
} else {
|
||||
b.WriteByte(0x2)
|
||||
}
|
||||
utils.WriteVarInt(b, uint64(f.LargestAcked()))
|
||||
utils.WriteVarInt(b, encodeAckDelay(f.DelayTime))
|
||||
quicvarint.WriteVarInt(b, uint64(f.LargestAcked()))
|
||||
quicvarint.WriteVarInt(b, encodeAckDelay(f.DelayTime))
|
||||
|
||||
numRanges := f.numEncodableAckRanges()
|
||||
utils.WriteVarInt(b, uint64(numRanges-1))
|
||||
quicvarint.WriteVarInt(b, uint64(numRanges-1))
|
||||
|
||||
// write the first range
|
||||
_, firstRange := f.encodeAckRange(0)
|
||||
utils.WriteVarInt(b, firstRange)
|
||||
quicvarint.WriteVarInt(b, firstRange)
|
||||
|
||||
// write all the other range
|
||||
for i := 1; i < numRanges; i++ {
|
||||
gap, len := f.encodeAckRange(i)
|
||||
utils.WriteVarInt(b, gap)
|
||||
utils.WriteVarInt(b, len)
|
||||
quicvarint.WriteVarInt(b, gap)
|
||||
quicvarint.WriteVarInt(b, len)
|
||||
}
|
||||
|
||||
if hasECN {
|
||||
utils.WriteVarInt(b, f.ECT0)
|
||||
utils.WriteVarInt(b, f.ECT1)
|
||||
utils.WriteVarInt(b, f.ECNCE)
|
||||
quicvarint.WriteVarInt(b, f.ECT0)
|
||||
quicvarint.WriteVarInt(b, f.ECT1)
|
||||
quicvarint.WriteVarInt(b, f.ECNCE)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -143,21 +144,21 @@ func (f *AckFrame) Length(version protocol.VersionNumber) protocol.ByteCount {
|
||||
largestAcked := f.AckRanges[0].Largest
|
||||
numRanges := f.numEncodableAckRanges()
|
||||
|
||||
length := 1 + utils.VarIntLen(uint64(largestAcked)) + utils.VarIntLen(encodeAckDelay(f.DelayTime))
|
||||
length := 1 + quicvarint.VarIntLen(uint64(largestAcked)) + quicvarint.VarIntLen(encodeAckDelay(f.DelayTime))
|
||||
|
||||
length += utils.VarIntLen(uint64(numRanges - 1))
|
||||
length += quicvarint.VarIntLen(uint64(numRanges - 1))
|
||||
lowestInFirstRange := f.AckRanges[0].Smallest
|
||||
length += utils.VarIntLen(uint64(largestAcked - lowestInFirstRange))
|
||||
length += quicvarint.VarIntLen(uint64(largestAcked - lowestInFirstRange))
|
||||
|
||||
for i := 1; i < numRanges; i++ {
|
||||
gap, len := f.encodeAckRange(i)
|
||||
length += utils.VarIntLen(gap)
|
||||
length += utils.VarIntLen(len)
|
||||
length += quicvarint.VarIntLen(gap)
|
||||
length += quicvarint.VarIntLen(len)
|
||||
}
|
||||
if f.ECT0 > 0 || f.ECT1 > 0 || f.ECNCE > 0 {
|
||||
length += utils.VarIntLen(f.ECT0)
|
||||
length += utils.VarIntLen(f.ECT1)
|
||||
length += utils.VarIntLen(f.ECNCE)
|
||||
length += quicvarint.VarIntLen(f.ECT0)
|
||||
length += quicvarint.VarIntLen(f.ECT1)
|
||||
length += quicvarint.VarIntLen(f.ECNCE)
|
||||
}
|
||||
return length
|
||||
}
|
||||
@@ -165,11 +166,11 @@ func (f *AckFrame) Length(version protocol.VersionNumber) protocol.ByteCount {
|
||||
// gets the number of ACK ranges that can be encoded
|
||||
// such that the resulting frame is smaller than the maximum ACK frame size
|
||||
func (f *AckFrame) numEncodableAckRanges() int {
|
||||
length := 1 + utils.VarIntLen(uint64(f.LargestAcked())) + utils.VarIntLen(encodeAckDelay(f.DelayTime))
|
||||
length := 1 + quicvarint.VarIntLen(uint64(f.LargestAcked())) + quicvarint.VarIntLen(encodeAckDelay(f.DelayTime))
|
||||
length += 2 // assume that the number of ranges will consume 2 bytes
|
||||
for i := 1; i < len(f.AckRanges); i++ {
|
||||
gap, len := f.encodeAckRange(i)
|
||||
rangeLen := utils.VarIntLen(gap) + utils.VarIntLen(len)
|
||||
rangeLen := quicvarint.VarIntLen(gap) + quicvarint.VarIntLen(len)
|
||||
if length+rangeLen > protocol.MaxAckFrameSize {
|
||||
// Writing range i would exceed the MaxAckFrameSize.
|
||||
// So encode one range less than that.
|
||||
|
||||
Reference in New Issue
Block a user