forked from quic-go/quic-go
wire: optimize parsing of long header packets (#4589)
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"io"
|
||||
|
||||
"github.com/quic-go/quic-go/internal/protocol"
|
||||
"github.com/quic-go/quic-go/internal/utils"
|
||||
"github.com/quic-go/quic-go/quicvarint"
|
||||
)
|
||||
|
||||
@@ -274,9 +275,9 @@ func (h *Header) ParsedLen() protocol.ByteCount {
|
||||
|
||||
// ParseExtended parses the version dependent part of the header.
|
||||
// The Reader has to be set such that it points to the first byte of the header.
|
||||
func (h *Header) ParseExtended(b *bytes.Reader, ver protocol.Version) (*ExtendedHeader, error) {
|
||||
func (h *Header) ParseExtended(data []byte) (*ExtendedHeader, error) {
|
||||
extHdr := h.toExtendedHeader()
|
||||
reservedBitsValid, err := extHdr.parse(b, ver)
|
||||
reservedBitsValid, err := extHdr.parse(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -294,3 +295,20 @@ func (h *Header) toExtendedHeader() *ExtendedHeader {
|
||||
func (h *Header) PacketType() string {
|
||||
return h.Type.String()
|
||||
}
|
||||
|
||||
func readPacketNumber(data []byte, pnLen protocol.PacketNumberLen) (protocol.PacketNumber, error) {
|
||||
var pn protocol.PacketNumber
|
||||
switch pnLen {
|
||||
case protocol.PacketNumberLen1:
|
||||
pn = protocol.PacketNumber(data[0])
|
||||
case protocol.PacketNumberLen2:
|
||||
pn = protocol.PacketNumber(utils.BigEndian.Uint16(data[:2]))
|
||||
case protocol.PacketNumberLen3:
|
||||
pn = protocol.PacketNumber(utils.BigEndian.Uint24(data[:3]))
|
||||
case protocol.PacketNumberLen4:
|
||||
pn = protocol.PacketNumber(utils.BigEndian.Uint32(data[:4]))
|
||||
default:
|
||||
return 0, fmt.Errorf("invalid packet number length: %d", pnLen)
|
||||
}
|
||||
return pn, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user