Skip to main content

rtp/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5#[derive(Error, Debug, PartialEq)]
6#[non_exhaustive]
7pub enum Error {
8    #[error("RTP header size insufficient")]
9    ErrHeaderSizeInsufficient,
10    #[error("RTP header size insufficient for extension")]
11    ErrHeaderSizeInsufficientForExtension,
12    #[error("buffer too small")]
13    ErrBufferTooSmall,
14    #[error("extension not enabled")]
15    ErrHeaderExtensionsNotEnabled,
16    #[error("extension not found")]
17    ErrHeaderExtensionNotFound,
18
19    #[error("header extension id must be between 1 and 14 for RFC 5285 extensions")]
20    ErrRfc8285oneByteHeaderIdrange,
21    #[error("header extension payload must be 16bytes or less for RFC 5285 one byte extensions")]
22    ErrRfc8285oneByteHeaderSize,
23
24    #[error("header extension id must be between 1 and 255 for RFC 5285 extensions")]
25    ErrRfc8285twoByteHeaderIdrange,
26    #[error("header extension payload must be 255bytes or less for RFC 5285 two byte extensions")]
27    ErrRfc8285twoByteHeaderSize,
28
29    #[error("header extension id must be 0 for none RFC 5285 extensions")]
30    ErrRfc3550headerIdrange,
31
32    #[error("packet is not large enough")]
33    ErrShortPacket,
34    #[error("invalid nil packet")]
35    ErrNilPacket,
36    #[error("too many PDiff")]
37    ErrTooManyPDiff,
38    #[error("too many spatial layers")]
39    ErrTooManySpatialLayers,
40    #[error("NALU Type is unhandled")]
41    ErrUnhandledNaluType,
42
43    #[error("corrupted h265 packet")]
44    ErrH265CorruptedPacket,
45    #[error("invalid h265 packet type")]
46    ErrInvalidH265PacketType,
47
48    #[error("payload is too small for OBU extension header")]
49    ErrPayloadTooSmallForObuExtensionHeader,
50    #[error("payload is too small for OBU payload size")]
51    ErrPayloadTooSmallForObuPayloadSize,
52
53    #[error("extension_payload must be in 32-bit words")]
54    HeaderExtensionPayloadNot32BitWords,
55    #[error("audio level overflow")]
56    AudioLevelOverflow,
57    #[error("playout delay overflow")]
58    PlayoutDelayOverflow,
59    #[error("payload is not large enough")]
60    PayloadIsNotLargeEnough,
61    #[error("STAP-A declared size({0}) is larger than buffer({1})")]
62    StapASizeLargerThanBuffer(usize, usize),
63    #[error("nalu type {0} is currently not handled")]
64    NaluTypeIsNotHandled(u8),
65    #[error("{0}")]
66    Util(#[from] util::Error),
67
68    #[error("{0}")]
69    Other(String),
70}
71
72impl From<Error> for util::Error {
73    fn from(e: Error) -> Self {
74        util::Error::from_std(e)
75    }
76}
77
78impl PartialEq<util::Error> for Error {
79    fn eq(&self, other: &util::Error) -> bool {
80        if let Some(down) = other.downcast_ref::<Error>() {
81            self == down
82        } else {
83            false
84        }
85    }
86}