add support for FEC acks in version 31

fixes #68
This commit is contained in:
Lucas Clemente
2016-05-09 19:57:26 +02:00
parent 14b16a429c
commit a3d77bae33
4 changed files with 61 additions and 19 deletions

View File

@@ -83,6 +83,11 @@ func (f *AckFrame) Write(b *bytes.Buffer, packetNumber protocol.PacketNumber, pa
if rangeCounter != uint8(numRanges) {
panic("Inconsistent number of NACK ranges written.")
}
// TODO: Remove once we drop support for <32
if version < protocol.VersionNumber(32) {
b.WriteByte(0)
}
}
return nil
@@ -115,7 +120,7 @@ func (f *AckFrame) GetHighestInOrderPacketNumber() protocol.PacketNumber {
}
// ParseAckFrame reads an ACK frame
func ParseAckFrame(r *bytes.Reader) (*AckFrame, error) {
func ParseAckFrame(r *bytes.Reader, version protocol.VersionNumber) (*AckFrame, error) {
frame := &AckFrame{}
typeByte, err := r.ReadByte()
@@ -239,6 +244,14 @@ func ParseAckFrame(r *bytes.Reader) (*AckFrame, error) {
nackRange.LastPacketNumber = protocol.PacketNumber(uint64(nackRange.FirstPacketNumber) + uint64(rangeLength))
frame.NackRanges = append(frame.NackRanges, nackRange)
}
// TODO: Remove once we drop support for versions <32
if version < protocol.VersionNumber(32) {
_, err = r.ReadByte()
if err != nil {
return nil, err
}
}
}
}