Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
traverser.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2022 Roc Streaming authors
3
*
4
* This Source Code Form is subject to the terms of the Mozilla Public
5
* License, v. 2.0. If a copy of the MPL was not distributed with this
6
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
*/
8
9
//! @file roc_rtcp/traverser.h
10
//! @brief RTCP packet traverser.
11
12
#ifndef ROC_RTCP_TRAVERSER_H_
13
#define ROC_RTCP_TRAVERSER_H_
14
15
#include "
roc_rtcp/bye_traverser.h
"
16
#include "
roc_rtcp/headers.h
"
17
#include "
roc_rtcp/sdes_traverser.h
"
18
#include "
roc_rtcp/xr_traverser.h
"
19
20
namespace
roc
{
21
namespace
rtcp
{
22
23
//! RTCP compound packet traverser.
24
class
Traverser
{
25
public
:
26
//! Packet iterator.
27
class
Iterator {
28
public
:
29
//! Iterator state.
30
enum
State
{
31
BEGIN
,
//!< Iterator created.
32
SR
,
//!< SR packet.
33
RR
,
//!< RR packet.
34
XR
,
//!< XR packet.
35
SDES
,
//!< SDES packet.
36
BYE
,
//!< BYE packet.
37
END
//!< Parsed whole compound packet.
38
};
39
40
//! Advance iterator.
41
State
next
();
42
43
//! Check if there were any parsing errors.
44
bool
error
()
const
;
45
46
//! Get SR packet.
47
//! @pre Can be used if next() returned SR.
48
const
header::SenderReportPacket
&
get_sr
()
const
;
49
50
//! Get RR packet.
51
//! @pre Can be used if next() returned RR.
52
const
header::ReceiverReportPacket
&
get_rr
()
const
;
53
54
//! Get traverser for XR packet.
55
//! @pre Can be used if next() returned XR.
56
XrTraverser
get_xr
()
const
;
57
58
//! Get traverser for SDES packet.
59
//! @pre Can be used if next() returned SDES.
60
SdesTraverser
get_sdes
();
61
62
//! Get traverser for BYE packet.
63
//! @pre Can be used if next() returned BYE.
64
ByeTraverser
get_bye
();
65
66
private
:
67
friend
class
Traverser;
68
69
explicit
Iterator(
const
Traverser& traverser);
70
void
next_packet_();
71
bool
remove_padding_();
72
bool
check_sr_();
73
bool
check_rr_();
74
75
State
state_;
76
const
core::Slice<uint8_t>
buf_;
77
size_t
cur_pos_;
78
const
header::PacketHeader
* cur_pkt_header_;
79
size_t
cur_pkt_len_;
80
core::Slice<uint8_t>
cur_pkt_slice_;
81
bool
error_;
82
};
83
84
//! Initialize traverser.
85
//! It will parse and iterate provided buffer.
86
explicit
Traverser
(
const
core::Slice<uint8_t>
& buf);
87
88
//! Parse packet from buffer.
89
bool
parse
();
90
91
//! Construct iterator.
92
//! @pre Can be used if parse() returned true.
93
Iterator
iter
()
const
;
94
95
private
:
96
const
core::Slice<uint8_t>
buf_;
97
bool
parsed_;
98
};
99
100
}
// namespace rtcp
101
}
// namespace roc
102
103
#endif
// ROC_RTCP_TRAVERSER_H_
bye_traverser.h
RTCP interface structures.
roc::core::Slice
Slice.
Definition
slice.h:55
roc::rtcp::ByeTraverser
BYE packet traverer.
Definition
bye_traverser.h:25
roc::rtcp::SdesTraverser
SDES packet traverer.
Definition
sdes_traverser.h:25
roc::rtcp::Traverser::Iterator
Packet iterator.
Definition
traverser.h:27
roc::rtcp::Traverser::Iterator::next
State next()
Advance iterator.
roc::rtcp::Traverser::Iterator::get_rr
const header::ReceiverReportPacket & get_rr() const
Get RR packet.
roc::rtcp::Traverser::Iterator::error
bool error() const
Check if there were any parsing errors.
roc::rtcp::Traverser::Iterator::get_sdes
SdesTraverser get_sdes()
Get traverser for SDES packet.
roc::rtcp::Traverser::Iterator::get_sr
const header::SenderReportPacket & get_sr() const
Get SR packet.
roc::rtcp::Traverser::Iterator::get_bye
ByeTraverser get_bye()
Get traverser for BYE packet.
roc::rtcp::Traverser::Iterator::get_xr
XrTraverser get_xr() const
Get traverser for XR packet.
roc::rtcp::Traverser::Iterator::State
State
Iterator state.
Definition
traverser.h:30
roc::rtcp::Traverser::Iterator::BEGIN
@ BEGIN
Iterator created.
Definition
traverser.h:31
roc::rtcp::Traverser::Iterator::SR
@ SR
SR packet.
Definition
traverser.h:32
roc::rtcp::Traverser::Iterator::RR
@ RR
RR packet.
Definition
traverser.h:33
roc::rtcp::Traverser::Iterator::END
@ END
Parsed whole compound packet.
Definition
traverser.h:37
roc::rtcp::Traverser::Iterator::BYE
@ BYE
BYE packet.
Definition
traverser.h:36
roc::rtcp::Traverser::Iterator::XR
@ XR
XR packet.
Definition
traverser.h:34
roc::rtcp::Traverser::Iterator::SDES
@ SDES
SDES packet.
Definition
traverser.h:35
roc::rtcp::Traverser::Traverser
Traverser(const core::Slice< uint8_t > &buf)
Initialize traverser. It will parse and iterate provided buffer.
roc::rtcp::Traverser::iter
Iterator iter() const
Construct iterator.
roc::rtcp::Traverser::parse
bool parse()
Parse packet from buffer.
roc::rtcp::XrTraverser
XR packet traverser.
Definition
xr_traverser.h:23
roc::rtcp::header::PacketHeader
RTCP packet header, common for all RTCP packet types.
Definition
headers.h:126
roc::rtcp::header::ReceiverReportPacket
Receiver Report RTCP packet (RR).
Definition
headers.h:524
roc::rtcp::header::SenderReportPacket
Sender Report RTCP packet (SR).
Definition
headers.h:621
roc::rtcp
RTCP protocol support.
roc
Root namespace.
headers.h
RTCP headers.
sdes_traverser.h
Sdes enums.
xr_traverser.h
XR Traverser.
roc_rtcp
traverser.h
Generated by
1.17.0