write frames in big endian for QUIC 39

This commit is contained in:
Marten Seemann
2017-08-04 09:53:25 +07:00
parent dd0daaaf1e
commit 843764aea3
18 changed files with 2088 additions and 1003 deletions

View File

@@ -57,13 +57,13 @@ func ParseAckFrame(r *bytes.Reader, version protocol.VersionNumber) (*AckFrame,
missingSequenceNumberDeltaLen = 1
}
largestAcked, err := utils.LittleEndian.ReadUintN(r, largestAckedLen)
largestAcked, err := utils.GetByteOrder(version).ReadUintN(r, largestAckedLen)
if err != nil {
return nil, err
}
frame.LargestAcked = protocol.PacketNumber(largestAcked)
delay, err := utils.LittleEndian.ReadUfloat16(r)
delay, err := utils.GetByteOrder(version).ReadUfloat16(r)
if err != nil {
return nil, err
}
@@ -81,7 +81,7 @@ func ParseAckFrame(r *bytes.Reader, version protocol.VersionNumber) (*AckFrame,
return nil, ErrInvalidAckRanges
}
ackBlockLength, err := utils.LittleEndian.ReadUintN(r, missingSequenceNumberDeltaLen)
ackBlockLength, err := utils.GetByteOrder(version).ReadUintN(r, missingSequenceNumberDeltaLen)
if err != nil {
return nil, err
}
@@ -109,7 +109,7 @@ func ParseAckFrame(r *bytes.Reader, version protocol.VersionNumber) (*AckFrame,
return nil, err
}
ackBlockLength, err = utils.LittleEndian.ReadUintN(r, missingSequenceNumberDeltaLen)
ackBlockLength, err = utils.GetByteOrder(version).ReadUintN(r, missingSequenceNumberDeltaLen)
if err != nil {
return nil, err
}
@@ -167,7 +167,7 @@ func ParseAckFrame(r *bytes.Reader, version protocol.VersionNumber) (*AckFrame,
return nil, err
}
// First Timestamp
_, err = utils.LittleEndian.ReadUint32(r)
_, err = utils.GetByteOrder(version).ReadUint32(r)
if err != nil {
return nil, err
}
@@ -180,13 +180,12 @@ func ParseAckFrame(r *bytes.Reader, version protocol.VersionNumber) (*AckFrame,
}
// Time Since Previous Timestamp
_, err = utils.LittleEndian.ReadUint16(r)
_, err = utils.GetByteOrder(version).ReadUint16(r)
if err != nil {
return nil, err
}
}
}
return frame, nil
}
@@ -215,15 +214,15 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
case protocol.PacketNumberLen1:
b.WriteByte(uint8(f.LargestAcked))
case protocol.PacketNumberLen2:
utils.LittleEndian.WriteUint16(b, uint16(f.LargestAcked))
utils.GetByteOrder(version).WriteUint16(b, uint16(f.LargestAcked))
case protocol.PacketNumberLen4:
utils.LittleEndian.WriteUint32(b, uint32(f.LargestAcked))
utils.GetByteOrder(version).WriteUint32(b, uint32(f.LargestAcked))
case protocol.PacketNumberLen6:
utils.LittleEndian.WriteUint48(b, uint64(f.LargestAcked)&(1<<48-1))
utils.GetByteOrder(version).WriteUint48(b, uint64(f.LargestAcked)&(1<<48-1))
}
f.DelayTime = time.Since(f.PacketReceivedTime)
utils.LittleEndian.WriteUfloat16(b, uint64(f.DelayTime/time.Microsecond))
utils.GetByteOrder(version).WriteUfloat16(b, uint64(f.DelayTime/time.Microsecond))
var numRanges uint64
var numRangesWritten uint64
@@ -253,11 +252,11 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
case protocol.PacketNumberLen1:
b.WriteByte(uint8(firstAckBlockLength))
case protocol.PacketNumberLen2:
utils.LittleEndian.WriteUint16(b, uint16(firstAckBlockLength))
utils.GetByteOrder(version).WriteUint16(b, uint16(firstAckBlockLength))
case protocol.PacketNumberLen4:
utils.LittleEndian.WriteUint32(b, uint32(firstAckBlockLength))
utils.GetByteOrder(version).WriteUint32(b, uint32(firstAckBlockLength))
case protocol.PacketNumberLen6:
utils.LittleEndian.WriteUint48(b, uint64(firstAckBlockLength)&(1<<48-1))
utils.GetByteOrder(version).WriteUint48(b, uint64(firstAckBlockLength)&(1<<48-1))
}
for i, ackRange := range f.AckRanges {
@@ -279,11 +278,11 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
case protocol.PacketNumberLen1:
b.WriteByte(uint8(length))
case protocol.PacketNumberLen2:
utils.LittleEndian.WriteUint16(b, uint16(length))
utils.GetByteOrder(version).WriteUint16(b, uint16(length))
case protocol.PacketNumberLen4:
utils.LittleEndian.WriteUint32(b, uint32(length))
utils.GetByteOrder(version).WriteUint32(b, uint32(length))
case protocol.PacketNumberLen6:
utils.LittleEndian.WriteUint48(b, uint64(length)&(1<<48-1))
utils.GetByteOrder(version).WriteUint48(b, uint64(length)&(1<<48-1))
}
numRangesWritten++
} else {
@@ -304,11 +303,11 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
case protocol.PacketNumberLen1:
b.WriteByte(uint8(lengthWritten))
case protocol.PacketNumberLen2:
utils.LittleEndian.WriteUint16(b, uint16(lengthWritten))
utils.GetByteOrder(version).WriteUint16(b, uint16(lengthWritten))
case protocol.PacketNumberLen4:
utils.LittleEndian.WriteUint32(b, uint32(lengthWritten))
utils.GetByteOrder(version).WriteUint32(b, uint32(lengthWritten))
case protocol.PacketNumberLen6:
utils.LittleEndian.WriteUint48(b, lengthWritten&(1<<48-1))
utils.GetByteOrder(version).WriteUint48(b, lengthWritten&(1<<48-1))
}
numRangesWritten++
@@ -326,7 +325,6 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
}
b.WriteByte(0) // no timestamps
return nil
}