2024-05-15 23:15:00 +00:00
|
|
|
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
2022-03-10 09:44:48 +00:00
|
|
|
package srtp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2024-10-10 11:33:36 +00:00
|
|
|
// ErrFailedToVerifyAuthTag is returned when decryption fails due to invalid authentication tag
|
|
|
|
ErrFailedToVerifyAuthTag = errors.New("failed to verify auth tag")
|
|
|
|
// ErrMKINotFound is returned when decryption fails due to unknown MKI value in packet
|
|
|
|
ErrMKINotFound = errors.New("MKI not found")
|
|
|
|
|
2022-03-10 09:44:48 +00:00
|
|
|
errDuplicated = errors.New("duplicated packet")
|
|
|
|
errShortSrtpMasterKey = errors.New("SRTP master key is not long enough")
|
|
|
|
errShortSrtpMasterSalt = errors.New("SRTP master salt is not long enough")
|
|
|
|
errNoSuchSRTPProfile = errors.New("no such SRTP Profile")
|
|
|
|
errNonZeroKDRNotSupported = errors.New("indexOverKdr > 0 is not supported yet")
|
|
|
|
errExporterWrongLabel = errors.New("exporter called with wrong label")
|
|
|
|
errNoConfig = errors.New("no config provided")
|
|
|
|
errNoConn = errors.New("no conn provided")
|
2024-10-10 11:33:36 +00:00
|
|
|
errTooShortRTP = errors.New("packet is too short to be RTP packet")
|
|
|
|
errTooShortRTCP = errors.New("packet is too short to be RTCP packet")
|
2022-03-10 09:44:48 +00:00
|
|
|
errPayloadDiffers = errors.New("payload differs")
|
|
|
|
errStartedChannelUsedIncorrectly = errors.New("started channel used incorrectly, should only be closed")
|
2024-05-15 23:15:00 +00:00
|
|
|
errBadIVLength = errors.New("bad iv length in xorBytesCTR")
|
|
|
|
errExceededMaxPackets = errors.New("exceeded the maximum number of packets")
|
2024-10-10 11:33:36 +00:00
|
|
|
errMKIAlreadyInUse = errors.New("MKI already in use")
|
|
|
|
errMKIIsNotEnabled = errors.New("MKI is not enabled")
|
|
|
|
errInvalidMKILength = errors.New("invalid MKI length")
|
2022-03-10 09:44:48 +00:00
|
|
|
|
|
|
|
errStreamNotInited = errors.New("stream has not been inited, unable to close")
|
|
|
|
errStreamAlreadyClosed = errors.New("stream is already closed")
|
|
|
|
errStreamAlreadyInited = errors.New("stream is already inited")
|
|
|
|
errFailedTypeAssertion = errors.New("failed to cast child")
|
|
|
|
)
|
|
|
|
|
2024-05-15 23:15:00 +00:00
|
|
|
type duplicatedError struct {
|
2022-03-10 09:44:48 +00:00
|
|
|
Proto string // srtp or srtcp
|
|
|
|
SSRC uint32
|
|
|
|
Index uint32 // sequence number or index
|
|
|
|
}
|
|
|
|
|
2024-05-15 23:15:00 +00:00
|
|
|
func (e *duplicatedError) Error() string {
|
2022-03-10 09:44:48 +00:00
|
|
|
return fmt.Sprintf("%s ssrc=%d index=%d: %v", e.Proto, e.SSRC, e.Index, errDuplicated)
|
|
|
|
}
|
|
|
|
|
2024-05-15 23:15:00 +00:00
|
|
|
func (e *duplicatedError) Unwrap() error {
|
2022-03-10 09:44:48 +00:00
|
|
|
return errDuplicated
|
|
|
|
}
|