// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
// SPDX-License-Identifier: MIT

// Package sequencenumber provides a sequence number unwrapper
package sequencenumber const ( maxSequenceNumberPlusOne = int64(65536) breakpoint = 32768 // half of max uint16 ) // Unwrapper stores an unwrapped sequence number. type Unwrapper struct { init bool lastUnwrapped int64 } func isNewer(, uint16) bool { if - == breakpoint { return > } return != && (-) < breakpoint } // Unwrap unwraps the next sequencenumber. func ( *Unwrapper) ( uint16) int64 { if !.init { .init = true .lastUnwrapped = int64() return .lastUnwrapped } := uint16(.lastUnwrapped) //nolint:gosec // G115 := int64( - ) if isNewer(, ) { if < 0 { += maxSequenceNumberPlusOne } } else if > 0 && .lastUnwrapped+-maxSequenceNumberPlusOne >= 0 { -= maxSequenceNumberPlusOne } .lastUnwrapped += return .lastUnwrapped }