diff --git a/crypto_stream.go b/crypto_stream.go index 7589cdc0d..fbf7324ce 100644 --- a/crypto_stream.go +++ b/crypto_stream.go @@ -5,6 +5,8 @@ import ( "encoding/binary" "errors" "sort" + + "github.com/lucas-clemente/quic-go/utils" ) // A Tag in the QUIC crypto @@ -116,9 +118,9 @@ func ParseCryptoMessage(data []byte) (Tag, map[Tag][]byte, error) { // WriteCryptoMessage writes a crypto message func WriteCryptoMessage(b *bytes.Buffer, messageTag Tag, data map[Tag][]byte) { - writeUint32(b, uint32(messageTag)) - writeUint16(b, uint16(len(data))) - writeUint16(b, 0) + utils.WriteUint32(b, uint32(messageTag)) + utils.WriteUint16(b, uint16(len(data))) + utils.WriteUint16(b, 0) // Save current position in the buffer, so that we can update the index in-place later indexStart := b.Len() @@ -133,7 +135,7 @@ func WriteCryptoMessage(b *bytes.Buffer, messageTag Tag, data map[Tag][]byte) { tags[i] = uint32(t) i++ } - sort.Sort(Uint32Slice(tags)) + sort.Sort(utils.Uint32Slice(tags)) offset := uint32(0) for i, t := range tags { diff --git a/frame.go b/frame.go index dd9f2abab..8ccf142c5 100644 --- a/frame.go +++ b/frame.go @@ -3,6 +3,8 @@ package quic import ( "bytes" "io/ioutil" + + "github.com/lucas-clemente/quic-go/utils" ) // A StreamFrame of QUIC @@ -29,20 +31,20 @@ func ParseStreamFrame(r *bytes.Reader) (*StreamFrame, error) { } streamIDLen := typeByte&0x03 + 1 - sid, err := readUintN(r, streamIDLen) + sid, err := utils.ReadUintN(r, streamIDLen) if err != nil { return nil, err } frame.StreamID = uint32(sid) - frame.Offset, err = readUintN(r, offsetLen) + frame.Offset, err = utils.ReadUintN(r, offsetLen) if err != nil { return nil, err } var dataLen uint16 if dataLenPresent { - dataLen, err = readUint16(r) + dataLen, err = utils.ReadUint16(r) if err != nil { return nil, err } @@ -76,10 +78,10 @@ func WriteStreamFrame(b *bytes.Buffer, f *StreamFrame) { } typeByte ^= 0x03 // TODO: Send shorter stream ID if possible b.WriteByte(typeByte) - writeUint32(b, f.StreamID) + utils.WriteUint32(b, f.StreamID) if f.Offset != 0 { - writeUint64(b, f.Offset) + utils.WriteUint64(b, f.Offset) } - writeUint16(b, uint16(len(f.Data))) + utils.WriteUint16(b, uint16(len(f.Data))) b.Write(f.Data) } diff --git a/public_header.go b/public_header.go index cf2b08257..0c6c46157 100644 --- a/public_header.go +++ b/public_header.go @@ -3,6 +3,8 @@ package quic import ( "bytes" "io" + + "github.com/lucas-clemente/quic-go/utils" ) // The PublicHeader of a QUIC packet @@ -47,7 +49,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) { } // Connection ID - header.ConnectionID, err = readUintN(b, connectionIDLen) + header.ConnectionID, err = utils.ReadUintN(b, connectionIDLen) if err != nil { return nil, err } @@ -55,7 +57,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) { // Version (optional) if header.VersionFlag { var v uint64 - v, err = readUintN(b, 4) + v, err = utils.ReadUintN(b, 4) if err != nil { return nil, err } @@ -63,7 +65,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) { } // Packet number - header.PacketNumber, err = readUintN(b, packetNumberLen) + header.PacketNumber, err = utils.ReadUintN(b, packetNumberLen) if err != nil { return nil, err } diff --git a/utils.go b/utils/utils.go similarity index 76% rename from utils.go rename to utils/utils.go index e799b1b9d..acf8d28e6 100644 --- a/utils.go +++ b/utils/utils.go @@ -1,11 +1,12 @@ -package quic +package utils import ( "bytes" "io" ) -func readUintN(b io.ByteReader, length uint8) (uint64, error) { +// ReadUintN reads N bytes +func ReadUintN(b io.ByteReader, length uint8) (uint64, error) { var res uint64 for i := uint8(0); i < length; i++ { bt, err := b.ReadByte() @@ -17,7 +18,8 @@ func readUintN(b io.ByteReader, length uint8) (uint64, error) { return res, nil } -func readUint32(b io.ByteReader) (uint32, error) { +// ReadUint32 reads a uint32 +func ReadUint32(b io.ByteReader) (uint32, error) { var b1, b2, b3, b4 uint8 var err error if b1, err = b.ReadByte(); err != nil { @@ -35,7 +37,8 @@ func readUint32(b io.ByteReader) (uint32, error) { return uint32(b1) + uint32(b2)<<8 + uint32(b3)<<16 + uint32(b4)<<24, nil } -func readUint16(b io.ByteReader) (uint16, error) { +// ReadUint16 reads a uint16 +func ReadUint16(b io.ByteReader) (uint16, error) { var b1, b2 uint8 var err error if b1, err = b.ReadByte(); err != nil { @@ -47,7 +50,8 @@ func readUint16(b io.ByteReader) (uint16, error) { return uint16(b1) + uint16(b2)<<8, nil } -func writeUint64(b *bytes.Buffer, i uint64) { +// WriteUint64 writes a uint64 +func WriteUint64(b *bytes.Buffer, i uint64) { b.WriteByte(uint8(i & 0xff)) b.WriteByte(uint8((i >> 8) & 0xff)) b.WriteByte(uint8((i >> 16) & 0xff)) @@ -58,14 +62,16 @@ func writeUint64(b *bytes.Buffer, i uint64) { b.WriteByte(uint8((i >> 56) & 0xff)) } -func writeUint32(b *bytes.Buffer, i uint32) { +// WriteUint32 writes a uint32 +func WriteUint32(b *bytes.Buffer, i uint32) { b.WriteByte(uint8(i & 0xff)) b.WriteByte(uint8((i >> 8) & 0xff)) b.WriteByte(uint8((i >> 16) & 0xff)) b.WriteByte(uint8((i >> 24) & 0xff)) } -func writeUint16(b *bytes.Buffer, i uint16) { +// WriteUint16 writes a uint16 +func WriteUint16(b *bytes.Buffer, i uint16) { b.WriteByte(uint8(i & 0xff)) b.WriteByte(uint8((i >> 8) & 0xff)) }