5
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2024-11-23 07:01:41 +00:00
matterbridge/vendor/github.com/go-asn1-ber/asn1-ber/header.go

39 lines
793 B
Go
Raw Normal View History

2020-08-09 22:29:54 +00:00
package ber
import (
"errors"
"fmt"
"io"
)
func readHeader(reader io.Reader) (identifier Identifier, length int, read int, err error) {
2020-10-19 21:40:00 +00:00
var (
c, l int
i Identifier
)
if i, c, err = readIdentifier(reader); err != nil {
2020-08-09 22:29:54 +00:00
return Identifier{}, 0, read, err
}
2020-10-19 21:40:00 +00:00
identifier = i
read += c
2020-08-09 22:29:54 +00:00
2020-10-19 21:40:00 +00:00
if l, c, err = readLength(reader); err != nil {
2020-08-09 22:29:54 +00:00
return Identifier{}, 0, read, err
}
2020-10-19 21:40:00 +00:00
length = l
read += c
2020-08-09 22:29:54 +00:00
// Validate length type with identifier (x.600, 8.1.3.2.a)
if length == LengthIndefinite && identifier.TagType == TypePrimitive {
return Identifier{}, 0, read, errors.New("indefinite length used with primitive type")
}
if length < LengthIndefinite {
err = fmt.Errorf("length cannot be less than %d", LengthIndefinite)
return
}
return identifier, length, read, nil
}