Files
mediamtx/internal/protocols/moq/parameter/authorization_token.go
T

97 lines
2.1 KiB
Go

package parameter
import (
"fmt"
"github.com/bluenviron/mediamtx/internal/protocols/moq/varint"
)
const typeAuthorizationToken = 0x03
// AuthorizationTokenAliasType is a value of Alias Type.
// spec:
// * draft-17, section 9.3.2
// * draft-18/19, section 10.2.2
type AuthorizationTokenAliasType uint64
// spec:
// * draft-17, section 9.3.2
// * draft-18/19, section 10.2.2
const (
AuthorizationTokenAliasTypeUseValue AuthorizationTokenAliasType = 0x03
)
// AuthorizationToken is the AUTHORIZATION_TOKEN parameter.
// spec:
// * draft-17, section 9.3.2
// * draft-18/19, section 10.2.2
type AuthorizationToken struct {
AliasType AuthorizationTokenAliasType
TokenType uint64
TokenValue []byte
}
func (*AuthorizationToken) isParameter() {}
func (*AuthorizationToken) paramType() uint64 {
return typeAuthorizationToken
}
func (t *AuthorizationToken) unmarshal(buf []byte) (int, error) {
var le varint.Varint
n1, err := le.Unmarshal(buf)
if err != nil {
return 0, err
}
buf = buf[n1:]
if uint64(len(buf)) < uint64(le) {
return 0, fmt.Errorf("not enough bytes for parameter value")
}
buf = buf[:le]
var aliasType varint.Varint
n, err := aliasType.Unmarshal(buf)
if err != nil {
return 0, err
}
buf = buf[n:]
t.AliasType = AuthorizationTokenAliasType(aliasType)
if t.AliasType != AuthorizationTokenAliasTypeUseValue {
return 0, fmt.Errorf("unsupported token alias type: %d", aliasType)
}
var tokenType varint.Varint
n, err = tokenType.Unmarshal(buf)
if err != nil {
return 0, err
}
t.TokenType = uint64(tokenType)
t.TokenValue = buf[n:]
return n1 + int(le), nil
}
func (t AuthorizationToken) marshalSize() int {
n := varint.Varint(t.AliasType).MarshalSize() +
varint.Varint(t.TokenType).MarshalSize() +
len(t.TokenValue)
return varint.Varint(n).MarshalSize() + n
}
func (t AuthorizationToken) marshalTo(buf []byte) int {
innerSize := varint.Varint(t.AliasType).MarshalSize() +
varint.Varint(t.TokenType).MarshalSize() +
len(t.TokenValue)
n := varint.Varint(innerSize).MarshalTo(buf)
n += varint.Varint(t.AliasType).MarshalTo(buf[n:])
n += varint.Varint(t.TokenType).MarshalTo(buf[n:])
n += copy(buf[n:], t.TokenValue)
return n
}