forked from quic-go/quic-go
better tests for PublicHeader
This commit is contained in:
@@ -9,6 +9,12 @@ import (
|
||||
"github.com/lucas-clemente/quic-go/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
errResetAndVersionFlagSet = errors.New("PublicHeader: Reset Flag and Version Flag should not be set at the same time")
|
||||
errReceivedTruncatedConnectionID = errors.New("PublicHeader: Receiving packets with truncated ConnectionID is not supported")
|
||||
errInvalidConnectionID = errors.New("PublicHeader: connection ID cannot be 0")
|
||||
)
|
||||
|
||||
// The PublicHeader of a QUIC packet
|
||||
type PublicHeader struct {
|
||||
Raw []byte
|
||||
@@ -25,7 +31,7 @@ type PublicHeader struct {
|
||||
func (h *PublicHeader) WritePublicHeader(b *bytes.Buffer) error {
|
||||
publicFlagByte := uint8(0x3c)
|
||||
if h.VersionFlag && h.ResetFlag {
|
||||
return errors.New("Reset Flag and Version Flag should not be set at the same time")
|
||||
return errResetAndVersionFlagSet
|
||||
}
|
||||
if h.VersionFlag {
|
||||
publicFlagByte |= 0x01
|
||||
@@ -58,7 +64,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
|
||||
// }
|
||||
|
||||
if publicFlagByte&0x08 == 0 {
|
||||
return nil, errors.New("truncating connection ID is not supported")
|
||||
return nil, errReceivedTruncatedConnectionID
|
||||
}
|
||||
|
||||
switch publicFlagByte & 0x30 {
|
||||
@@ -79,7 +85,7 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
|
||||
}
|
||||
header.ConnectionID = protocol.ConnectionID(connID)
|
||||
if header.ConnectionID == 0 {
|
||||
return nil, errors.New("PublicHeader: connection ID cannot be 0")
|
||||
return nil, errInvalidConnectionID
|
||||
}
|
||||
|
||||
// Version (optional)
|
||||
@@ -93,11 +99,11 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) {
|
||||
}
|
||||
|
||||
// Packet number
|
||||
pcktNumber, err := utils.ReadUintN(b, header.PacketNumberLen)
|
||||
packetNumber, err := utils.ReadUintN(b, header.PacketNumberLen)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
header.PacketNumber = protocol.PacketNumber(pcktNumber)
|
||||
header.PacketNumber = protocol.PacketNumber(packetNumber)
|
||||
|
||||
return header, nil
|
||||
}
|
||||
|
||||
@@ -26,6 +26,14 @@ var _ = Describe("Public Header", func() {
|
||||
b := bytes.NewReader([]byte{0x00, 0x01})
|
||||
_, err := ParsePublicHeader(b)
|
||||
Expect(err).To(HaveOccurred())
|
||||
Expect(err).To(Equal(errReceivedTruncatedConnectionID))
|
||||
})
|
||||
|
||||
It("rejects 0 as a connection ID", func() {
|
||||
b := bytes.NewReader([]byte{0x09, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x51, 0x30, 0x33, 0x30, 0x01})
|
||||
_, err := ParsePublicHeader(b)
|
||||
Expect(err).To(HaveOccurred())
|
||||
Expect(err).To(Equal(errInvalidConnectionID))
|
||||
})
|
||||
|
||||
It("accepts 1-byte packet numbers", func() {
|
||||
@@ -115,6 +123,7 @@ var _ = Describe("Public Header", func() {
|
||||
}
|
||||
err := publicHeader.WritePublicHeader(b)
|
||||
Expect(err).To(HaveOccurred())
|
||||
Expect(err).To(Equal(errResetAndVersionFlagSet))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user