commit - 3faffc6a916cf7e63b45d795ef3c1d1be5441407
commit + abc6381f91d6b8e36cfafad15375034229a640b8
blob - 242e18c2a2144ff847b36e827ec131dcd5058876
blob + cf8fef00422e539a03046c44557fc8845df5e438
--- rtp/rtp.go
+++ rtp/rtp.go
func Unmarshal(data []byte, p *Packet) error {
if len(data) < minHeaderLength {
return fmt.Errorf("need at least %d bytes, have %d", minHeaderLength, len(data))
+ } else if len(data) == minHeaderLength {
+ return ErrNoPayload
}
p.Header.Version = uint8(data[0] & 0b11000000)
p.Header.Timestamp = binary.BigEndian.Uint32(data[4:8])
p.Header.SyncSource = binary.BigEndian.Uint32(data[8:12])
- if len(data) == minHeaderLength {
- return ErrNoPayload
- }
- data = data[12:]
+ // throw away unmarshalled bytes
+ data = data[minHeaderLength:]
if hasExtension {
if len(data) < 4 {
return nil
}
+const maxContribCount = 0x0f // max 4-bit integer
+
func Marshal(p *Packet) ([]byte, error) {
if p.Header.Version > VersionRFC3550 {
return nil, fmt.Errorf("bad version %v", p.Header.Version)
if p.Header.Extension != nil {
buf[0] |= 0b00010000
}
- maxContribCount := 0x0f // max 4-bit integer
if len(p.Header.ContribSource) > maxContribCount {
return nil, fmt.Errorf("contribution source count %d greater than max %d", len(p.Header.ContribSource), maxContribCount)
}
if p.Header.Marker {
buf[1] |= 0b10000000
}
+
if p.Header.Type > 0x7f {
return nil, fmt.Errorf("payload type %s (%d) greater than max %d", p.Header.Type, p.Header.Type, 0x7f)
}