Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
sdes_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/sdes_traverser.h
10
//! @brief Sdes enums.
11
12
#ifndef ROC_RTCP_SDES_TRAVERSER_H_
13
#define ROC_RTCP_SDES_TRAVERSER_H_
14
15
#include "
roc_core/slice.h
"
16
#include "
roc_core/stddefs.h
"
17
#include "
roc_packet/units.h
"
18
#include "
roc_rtcp/headers.h
"
19
#include "
roc_rtcp/sdes.h
"
20
21
namespace
roc
{
22
namespace
rtcp
{
23
24
//! SDES packet traverer.
25
class
SdesTraverser
{
26
public
:
27
//! Packet iterator.
28
class
Iterator {
29
public
:
30
//! Iterator state.
31
enum
State
{
32
BEGIN
,
//!< Iterator created.
33
CHUNK
,
//!< SDES chunk.
34
ITEM
,
//!< SDES item.
35
END
//!< Parsed whole packet.
36
};
37
38
//! Advance iterator.
39
State
next
();
40
41
//! Check if there were any parsing errors.
42
bool
error
()
const
;
43
44
//! Get SDES chunk.
45
//! @pre Can be used if next() returned CHUNK.
46
SdesChunk
get_chunk
()
const
;
47
48
//! Get SDES item.
49
//! Item is valid only until next() call.
50
//! @pre Can be used if next() returned ITEM.
51
SdesItem
get_item
()
const
;
52
53
private
:
54
friend
class
SdesTraverser;
55
56
explicit
Iterator(
const
SdesTraverser& traverser);
57
void
next_element_();
58
void
parse_chunk_();
59
void
parse_item_();
60
61
const
SdesTraverser& traverser_;
62
63
State
state_;
64
const
core::Slice<uint8_t>
buf_;
65
size_t
cur_pos_;
66
size_t
cur_chunk_;
67
const
header::SdesItemHeader
* cur_item_header_;
68
size_t
cur_item_len_;
69
bool
error_;
70
71
packet::stream_source_t
parsed_ssrc_;
72
header::SdesItemType
parsed_item_type_;
73
char
parsed_item_text_[header::MaxTextLen + 1];
74
};
75
76
//! Initialize traverser.
77
//! It will parse and iterate provided buffer.
78
explicit
SdesTraverser
(
const
core::Slice<uint8_t>
& buf);
79
80
//! Parse packet from buffer.
81
bool
parse
();
82
83
//! Construct iterator.
84
//! @pre Can be used if parse() returned true.
85
Iterator
iter
()
const
;
86
87
//! Get number of SDES chunks in packet.
88
size_t
chunks_count
()
const
;
89
90
private
:
91
core::Slice<uint8_t>
buf_;
92
bool
parsed_;
93
size_t
chunks_count_;
94
};
95
96
}
// namespace rtcp
97
}
// namespace roc
98
99
#endif
// ROC_RTCP_SDES_TRAVERSER_H_
roc::core::Slice
Slice.
Definition
slice.h:55
roc::rtcp::SdesTraverser::Iterator
Packet iterator.
Definition
sdes_traverser.h:28
roc::rtcp::SdesTraverser::Iterator::next
State next()
Advance iterator.
roc::rtcp::SdesTraverser::Iterator::get_item
SdesItem get_item() const
Get SDES item. Item is valid only until next() call.
roc::rtcp::SdesTraverser::Iterator::error
bool error() const
Check if there were any parsing errors.
roc::rtcp::SdesTraverser::Iterator::State
State
Iterator state.
Definition
sdes_traverser.h:31
roc::rtcp::SdesTraverser::Iterator::ITEM
@ ITEM
SDES item.
Definition
sdes_traverser.h:34
roc::rtcp::SdesTraverser::Iterator::END
@ END
Parsed whole packet.
Definition
sdes_traverser.h:35
roc::rtcp::SdesTraverser::Iterator::CHUNK
@ CHUNK
SDES chunk.
Definition
sdes_traverser.h:33
roc::rtcp::SdesTraverser::Iterator::BEGIN
@ BEGIN
Iterator created.
Definition
sdes_traverser.h:32
roc::rtcp::SdesTraverser::Iterator::get_chunk
SdesChunk get_chunk() const
Get SDES chunk.
roc::rtcp::SdesTraverser::chunks_count
size_t chunks_count() const
Get number of SDES chunks in packet.
roc::rtcp::SdesTraverser::SdesTraverser
SdesTraverser(const core::Slice< uint8_t > &buf)
Initialize traverser. It will parse and iterate provided buffer.
roc::rtcp::SdesTraverser::parse
bool parse()
Parse packet from buffer.
roc::rtcp::SdesTraverser::iter
Iterator iter() const
Construct iterator.
roc::rtcp::header::SdesItemHeader
SDES item header.
Definition
headers.h:788
roc::packet::stream_source_t
uint32_t stream_source_t
Packet stream identifier.
Definition
units.h:27
roc::rtcp
RTCP protocol support.
roc
Root namespace.
headers.h
RTCP headers.
roc::rtcp::header::SdesItemType
SdesItemType
SDES item type.
Definition
headers.h:725
sdes.h
SDES elements.
slice.h
Slice.
stddefs.h
Commonly used types and functions.
roc::rtcp::SdesChunk
Parsed SDES chunk.
Definition
sdes.h:23
roc::rtcp::SdesItem
Parsed SDES item.
Definition
sdes.h:33
units.h
Various units used in packets.
roc_rtcp
sdes_traverser.h
Generated by
1.17.0