From 2f7577f7511acd892c499a32bc70ef833ebbd1cf Mon Sep 17 00:00:00 2001 From: Mathis Engelbart Date: Thu, 16 Jan 2025 17:10:59 +0100 Subject: [PATCH] Removes duplicated unwrapper code --- internal/sequencenumber/unwrapper_test.go | 8 ++++ pkg/rfc8888/stream_log.go | 7 +-- pkg/rfc8888/unwrapper.go | 42 ----------------- pkg/rfc8888/unwrapper_test.go | 57 ----------------------- 4 files changed, 12 insertions(+), 102 deletions(-) delete mode 100644 pkg/rfc8888/unwrapper.go delete mode 100644 pkg/rfc8888/unwrapper_test.go diff --git a/internal/sequencenumber/unwrapper_test.go b/internal/sequencenumber/unwrapper_test.go index e5129b28..47c4154e 100644 --- a/internal/sequencenumber/unwrapper_test.go +++ b/internal/sequencenumber/unwrapper_test.go @@ -83,6 +83,14 @@ func TestUnwrapper(t *testing.T) { input: []uint16{32767, 0}, expected: []int64{32767, 0}, }, + { + input: []uint16{0, 1, 4, 3, 2, 5}, + expected: []int64{0, 1, 4, 3, 2, 5}, + }, + { + input: []uint16{65534, 0, 1, 65535, 4, 3, 2, 5}, + expected: []int64{65534, 65536, 65537, 65535, 65540, 65539, 65538, 65541}, + }, { input: []uint16{ 0, 32767, 32768, 32769, 32770, diff --git a/pkg/rfc8888/stream_log.go b/pkg/rfc8888/stream_log.go index 8dfb14fc..2d18d9c6 100644 --- a/pkg/rfc8888/stream_log.go +++ b/pkg/rfc8888/stream_log.go @@ -6,6 +6,7 @@ package rfc8888 import ( "time" + "github.com/pion/interceptor/internal/sequencenumber" "github.com/pion/rtcp" ) @@ -13,7 +14,7 @@ const maxReportsPerReportBlock = 16384 type streamLog struct { ssrc uint32 - sequence unwrapper + sequence sequencenumber.Unwrapper init bool nextSequenceNumberToReport int64 // next to report lastSequenceNumberReceived int64 // highest received @@ -23,7 +24,7 @@ type streamLog struct { func newStreamLog(ssrc uint32) *streamLog { return &streamLog{ ssrc: ssrc, - sequence: unwrapper{}, + sequence: sequencenumber.Unwrapper{}, init: false, nextSequenceNumberToReport: 0, lastSequenceNumberReceived: 0, @@ -32,7 +33,7 @@ func newStreamLog(ssrc uint32) *streamLog { } func (l *streamLog) add(ts time.Time, sequenceNumber uint16, ecn uint8) { - unwrappedSequenceNumber := l.sequence.unwrap(sequenceNumber) + unwrappedSequenceNumber := l.sequence.Unwrap(sequenceNumber) if !l.init { l.init = true l.nextSequenceNumberToReport = unwrappedSequenceNumber diff --git a/pkg/rfc8888/unwrapper.go b/pkg/rfc8888/unwrapper.go deleted file mode 100644 index f15f33e6..00000000 --- a/pkg/rfc8888/unwrapper.go +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Pion community -// SPDX-License-Identifier: MIT - -package rfc8888 - -const ( - maxSequenceNumberPlusOne = int64(65536) - breakpoint = 32768 // half of max uint16 -) - -type unwrapper struct { - init bool - lastUnwrapped int64 -} - -func isNewer(value, previous uint16) bool { - if value-previous == breakpoint { - return value > previous - } - return value != previous && (value-previous) < breakpoint -} - -func (u *unwrapper) unwrap(i uint16) int64 { - if !u.init { - u.init = true - u.lastUnwrapped = int64(i) - return u.lastUnwrapped - } - - lastWrapped := uint16(u.lastUnwrapped) - delta := int64(i - lastWrapped) - if isNewer(i, lastWrapped) { - if delta < 0 { - delta += maxSequenceNumberPlusOne - } - } else if delta > 0 && u.lastUnwrapped+delta-maxSequenceNumberPlusOne >= 0 { - delta -= maxSequenceNumberPlusOne - } - - u.lastUnwrapped += delta - return u.lastUnwrapped -} diff --git a/pkg/rfc8888/unwrapper_test.go b/pkg/rfc8888/unwrapper_test.go deleted file mode 100644 index 3e7de924..00000000 --- a/pkg/rfc8888/unwrapper_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-FileCopyrightText: 2023 The Pion community -// SPDX-License-Identifier: MIT - -package rfc8888 - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestUnwrapper(t *testing.T) { - cases := []struct { - input []uint16 - expected []int64 - }{ - { - input: []uint16{}, - expected: []int64{}, - }, - { - input: []uint16{0, 1, 2, 3, 4}, - expected: []int64{0, 1, 2, 3, 4}, - }, - { - input: []uint16{65534, 65535, 0, 1, 2}, - expected: []int64{65534, 65535, 65536, 65537, 65538}, - }, - { - input: []uint16{32769, 0}, - expected: []int64{32769, 65536}, - }, - { - input: []uint16{32767, 0}, - expected: []int64{32767, 0}, - }, - { - input: []uint16{0, 1, 4, 3, 2, 5}, - expected: []int64{0, 1, 4, 3, 2, 5}, - }, - { - input: []uint16{65534, 0, 1, 65535, 4, 3, 2, 5}, - expected: []int64{65534, 65536, 65537, 65535, 65540, 65539, 65538, 65541}, - }, - } - for i, tc := range cases { - t.Run(fmt.Sprintf("%v", i), func(t *testing.T) { - u := &unwrapper{} - result := []int64{} - for _, i := range tc.input { - result = append(result, u.unwrap(i)) - } - assert.Equal(t, tc.expected, result) - }) - } -}