mirror of
https://github.com/pion/webrtc.git
synced 2025-11-01 03:04:06 +08:00
34 lines
795 B
Go
34 lines
795 B
Go
package sctp
|
|
|
|
import "encoding/binary"
|
|
|
|
type ParamHeader struct {
|
|
typ ParamType
|
|
length int
|
|
raw []byte
|
|
}
|
|
|
|
func (p *ParamHeader) Marshal() ([]byte, error) {
|
|
paramLengthPlusHeader := 4 + len(p.raw)
|
|
|
|
rawParam := make([]byte, paramLengthPlusHeader)
|
|
binary.BigEndian.PutUint16(rawParam[0:], uint16(p.typ))
|
|
binary.BigEndian.PutUint16(rawParam[2:], uint16(paramLengthPlusHeader))
|
|
copy(rawParam[4:], p.raw)
|
|
|
|
return rawParam, nil
|
|
}
|
|
|
|
func (p *ParamHeader) Unmarshal(raw []byte) {
|
|
paramLengthPlusHeader := binary.BigEndian.Uint16(raw[2:])
|
|
paramLength := paramLengthPlusHeader - initOptionalVarHeaderLength
|
|
|
|
p.typ = ParamType(binary.BigEndian.Uint16(raw[0:]))
|
|
p.raw = raw[4 : 4+paramLength]
|
|
p.length = int(paramLengthPlusHeader)
|
|
}
|
|
|
|
func (p *ParamHeader) Length() int {
|
|
return p.length
|
|
}
|