Skip to content

Commit

Permalink
Make MTU a uint16
Browse files Browse the repository at this point in the history
A MTU can never be negative so this removes a class of runtime errors.
  • Loading branch information
metaclips authored and Sean-Der committed Aug 5, 2021
1 parent 6cf5e9b commit e8906ad
Show file tree
Hide file tree
Showing 13 changed files with 24 additions and 61 deletions.
2 changes: 2 additions & 0 deletions AUTHORS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
adwpc <adwpc@hotmail.com>
aler9 <46489434+aler9@users.noreply.github.com>
Antoine Baché <antoine.bache@epitech.eu>
Antoine Baché <antoine@tenten.app>
Atsushi Watanabe <atsushi.w@ieee.org>
Bao Nguyen <bao@n4n.dev>
debiandebiandebian <debiandebiandebiandebian@gmail.com>
Expand All @@ -20,6 +21,7 @@ Luke Curley <kixelated@gmail.com>
lxb <xiangbing.li@uama.com.cn>
Michael MacDonald <github@macdonald.cx>
Michael MacDonald <mike.macdonald@savantsystems.com>
Michael Uti <utimichael9@gmail.com>
Raphael Derosso Pereira <raphaelpereira@gmail.com>
Rob Lofthouse <ri.lofthouse@gmail.com>
Robin Raymond <robin@goheadroom.com>
Expand Down
4 changes: 2 additions & 2 deletions codecs/g711_packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ package codecs
type G711Payloader struct{}

// Payload fragments an G711 packet across one or more byte arrays
func (p *G711Payloader) Payload(mtu int, payload []byte) [][]byte {
func (p *G711Payloader) Payload(mtu uint16, payload []byte) [][]byte {
var out [][]byte
if payload == nil || mtu <= 0 {
return out
}

for len(payload) > mtu {
for len(payload) > int(mtu) {
o := make([]byte, mtu)
copy(o, payload[:mtu])
payload = payload[mtu:]
Expand Down
15 changes: 2 additions & 13 deletions codecs/g711_packet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,20 +45,9 @@ func TestG711Payloader(t *testing.T) {
}

payload := []byte{0x90, 0x90, 0x90}
// Nil payload
res := p.Payload(-1, nil)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}

// Negative MTU, small payload
res = p.Payload(-1, payload)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}

// 0 MTU, small payload
res = p.Payload(0, payload)
res := p.Payload(0, payload)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}
Expand All @@ -70,7 +59,7 @@ func TestG711Payloader(t *testing.T) {
}

// Positive MTU, small payload
res = p.Payload(len(payload)-1, payload)
res = p.Payload(uint16(len(payload)-1), payload)
if len(res) != len(payload)-1 {
t.Fatal("Generated payload should be the same smaller than original payload size")
}
Expand Down
6 changes: 3 additions & 3 deletions codecs/g722_packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ package codecs
type G722Payloader struct{}

// Payload fragments an G722 packet across one or more byte arrays
func (p *G722Payloader) Payload(mtu int, payload []byte) [][]byte {
func (p *G722Payloader) Payload(mtu uint16, payload []byte) [][]byte {
var out [][]byte
if payload == nil || mtu <= 0 {
if payload == nil || mtu == 0 {
return out
}

for len(payload) > mtu {
for len(payload) > int(mtu) {
o := make([]byte, mtu)
copy(o, payload[:mtu])
payload = payload[mtu:]
Expand Down
15 changes: 2 additions & 13 deletions codecs/g722_packet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,20 +45,9 @@ func TestG722Payloader(t *testing.T) {
}

payload := []byte{0x90, 0x90, 0x90}
// Nil payload
res := p.Payload(-1, nil)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}

// Negative MTU, small payload
res = p.Payload(-1, payload)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}

// 0 MTU, small payload
res = p.Payload(0, payload)
res := p.Payload(0, payload)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}
Expand All @@ -70,7 +59,7 @@ func TestG722Payloader(t *testing.T) {
}

// Positive MTU, small payload
res = p.Payload(len(payload)-1, payload)
res = p.Payload(uint16(len(payload)-1), payload)
if len(res) != len(payload)-1 {
t.Fatal("Generated payload should be the same smaller than original payload size")
}
Expand Down
6 changes: 3 additions & 3 deletions codecs/h264_packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func emitNalus(nals []byte, emit func([]byte)) {
}

// Payload fragments a H264 packet across one or more byte arrays
func (p *H264Payloader) Payload(mtu int, payload []byte) [][]byte {
func (p *H264Payloader) Payload(mtu uint16, payload []byte) [][]byte {
var payloads [][]byte
if len(payload) == 0 {
return payloads
Expand All @@ -80,15 +80,15 @@ func (p *H264Payloader) Payload(mtu int, payload []byte) [][]byte {
}

// Single NALU
if len(nalu) <= mtu {
if len(nalu) <= int(mtu) {
out := make([]byte, len(nalu))
copy(out, nalu)
payloads = append(payloads, out)
return
}

// FU-A
maxFragmentSize := mtu - fuaHeaderSize
maxFragmentSize := int(mtu) - fuaHeaderSize

// The FU payload consists of fragments of the payload of the fragmented
// NAL unit so that if the fragmentation unit payloads of consecutive
Expand Down
2 changes: 1 addition & 1 deletion codecs/opus_packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package codecs
type OpusPayloader struct{}

// Payload fragments an Opus packet across one or more byte arrays
func (p *OpusPayloader) Payload(mtu int, payload []byte) [][]byte {
func (p *OpusPayloader) Payload(mtu uint16, payload []byte) [][]byte {
if payload == nil {
return [][]byte{}
}
Expand Down
6 changes: 0 additions & 6 deletions codecs/opus_packet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,6 @@ func TestOpusPayloader_Payload(t *testing.T) {
t.Fatal("Generated payload should be the 1")
}

// Negative MTU, small payload
res = pck.Payload(-1, payload)
if len(res) != 1 {
t.Fatal("Generated payload should be the 1")
}

// Positive MTU, small payload
res = pck.Payload(2, payload)
if len(res) != 1 {
Expand Down
4 changes: 2 additions & 2 deletions codecs/vp8_packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const (
)

// Payload fragments a VP8 packet across one or more byte arrays
func (p *VP8Payloader) Payload(mtu int, payload []byte) [][]byte {
func (p *VP8Payloader) Payload(mtu uint16, payload []byte) [][]byte {
/*
* https://tools.ietf.org/html/rfc7741#section-4.2
*
Expand Down Expand Up @@ -44,7 +44,7 @@ func (p *VP8Payloader) Payload(mtu int, payload []byte) [][]byte {
}
}

maxFragmentSize := mtu - usingHeaderSize
maxFragmentSize := int(mtu) - usingHeaderSize

payloadData := payload
payloadDataRemaining := len(payload)
Expand Down
8 changes: 1 addition & 7 deletions codecs/vp8_packet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func TestVP8Packet_Unmarshal(t *testing.T) {
func TestVP8Payloader_Payload(t *testing.T) {
testCases := map[string]struct {
payloader VP8Payloader
mtu int
mtu uint16
payload [][]byte
expected [][][]byte
}{
Expand Down Expand Up @@ -199,12 +199,6 @@ func TestVP8Payloader_Payload(t *testing.T) {
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}

// Negative MTU, small payload
res = pck.Payload(-1, payload)
if len(res) != 0 {
t.Fatal("Generated payload should be empty")
}
})
}

Expand Down
4 changes: 2 additions & 2 deletions codecs/vp9_packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const (
)

// Payload fragments an VP9 packet across one or more byte arrays
func (p *VP9Payloader) Payload(mtu int, payload []byte) [][]byte {
func (p *VP9Payloader) Payload(mtu uint16, payload []byte) [][]byte {
/*
* https://www.ietf.org/id/draft-ietf-payload-vp9-13.txt
*
Expand Down Expand Up @@ -75,7 +75,7 @@ func (p *VP9Payloader) Payload(mtu int, payload []byte) [][]byte {
return [][]byte{}
}

maxFragmentSize := mtu - vp9HeaderSize
maxFragmentSize := int(mtu) - vp9HeaderSize
payloadDataRemaining := len(payload)
payloadDataIndex := 0

Expand Down
7 changes: 1 addition & 6 deletions codecs/vp9_packet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ func TestVP9Payloader_Payload(t *testing.T) {

cases := map[string]struct {
b [][]byte
mtu int
mtu uint16
res [][]byte
}{
"NilPayload": {
Expand All @@ -218,11 +218,6 @@ func TestVP9Payloader_Payload(t *testing.T) {
mtu: 1,
res: [][]byte{},
},
"NegativeMTU": {
b: [][]byte{{0x00, 0x00}},
mtu: -1,
res: [][]byte{},
},
"OnePacket": {
b: [][]byte{{0x01, 0x02}},
mtu: 10,
Expand Down
6 changes: 3 additions & 3 deletions packetizer.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

// Payloader payloads a byte array for use as rtp.Packet payloads
type Payloader interface {
Payload(mtu int, payload []byte) [][]byte
Payload(mtu uint16, payload []byte) [][]byte
}

// Packetizer packetizes a payload
Expand All @@ -17,7 +17,7 @@ type Packetizer interface {
}

type packetizer struct {
MTU int
MTU uint16
PayloadType uint8
SSRC uint32
Payloader Payloader
Expand All @@ -31,7 +31,7 @@ type packetizer struct {
}

// NewPacketizer returns a new instance of a Packetizer for a specific payloader
func NewPacketizer(mtu int, pt uint8, ssrc uint32, payloader Payloader, sequencer Sequencer, clockRate uint32) Packetizer {
func NewPacketizer(mtu uint16, pt uint8, ssrc uint32, payloader Payloader, sequencer Sequencer, clockRate uint32) Packetizer {
return &packetizer{
MTU: mtu,
PayloadType: pt,
Expand Down

0 comments on commit e8906ad

Please sign in to comment.