Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Loading...
Searching...
No Matches
session.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/session.h
10//! @brief RTCP session.
11
12#ifndef ROC_RTCP_SESSION_H_
13#define ROC_RTCP_SESSION_H_
14
16#include "roc_core/stddefs.h"
17#include "roc_core/time.h"
19#include "roc_packet/iwriter.h"
20#include "roc_packet/packet.h"
22#include "roc_rtcp/builder.h"
25#include "roc_rtcp/traverser.h"
26
27namespace roc {
28namespace rtcp {
29
30//! RTCP session.
31//! Processes incoming RTCP packets and generates outgoing RTCP packets.
32class Session {
33public:
34 //! Initialize.
36 ISenderHooks* send_hooks,
37 packet::IWriter* packet_writer,
38 packet::IComposer& packet_composer,
39 packet::PacketFactory& packet_factory,
40 core::BufferFactory<uint8_t>& buffer_factory);
41
42 //! Check if initialization succeeded.
43 bool valid() const;
44
45 //! Parse and process incoming packet.
46 //! Invokes session hooks methods during processing.
47 void process_packet(const packet::PacketPtr& packet);
48
49 //! When we should generate packets next time.
50 //! Returns absolute time.
52
53 //! Generate and send packet(s).
54 //! Should be called accroding to generation_deadline().
56
57private:
58 void parse_events_(const Traverser& traverser);
59 void parse_reports_(const Traverser& traverser);
60
61 void parse_session_description_(const SdesTraverser& sdes);
62 void parse_goodbye_(const ByeTraverser& bye);
63 void parse_sender_report_(const header::SenderReportPacket& sr);
64 void parse_receiver_report_(const header::ReceiverReportPacket& rr);
65 void parse_reception_block_(const header::ReceptionReportBlock& blk);
66
67 packet::PacketPtr generate_packet_();
68
69 bool build_packet_(core::Slice<uint8_t>& data);
70 void build_sender_report_(Builder& bld, packet::ntp_timestamp_t report_time);
71 void build_receiver_report_(Builder& bld, packet::ntp_timestamp_t report_time);
72 header::ReceptionReportBlock build_reception_block_(const ReceptionMetrics& metrics);
73 void build_session_description_(Builder& bld);
74 void build_source_description_(Builder& bld, packet::source_t ssrc);
75
76 packet::PacketFactory& packet_factory_;
77 core::BufferFactory<uint8_t>& buffer_factory_;
78
79 packet::IWriter* packet_writer_;
80 packet::IComposer& packet_composer_;
81
82 IReceiverHooks* recv_hooks_;
83 ISenderHooks* send_hooks_;
84
85 core::nanoseconds_t next_deadline_;
86
87 packet::source_t ssrc_;
89
90 bool valid_;
91};
92
93} // namespace rtcp
94} // namespace roc
95
96#endif // ROC_RTCP_SESSION_H_
Buffer factory.
RTCP packet builder.
Slice.
Definition: slice.h:54
Packet composer interface.
Definition: icomposer.h:22
Packet writer interface.
Definition: iwriter.h:21
RTCP compound packet builder.
Definition: builder.h:26
BYE packet traverer.
Definition: bye_traverser.h:25
Receiver hooks interface.
Sender hooks interface.
Definition: isender_hooks.h:22
SDES packet traverer.
RTCP session. Processes incoming RTCP packets and generates outgoing RTCP packets.
Definition: session.h:32
bool valid() const
Check if initialization succeeded.
void process_packet(const packet::PacketPtr &packet)
Parse and process incoming packet. Invokes session hooks methods during processing.
core::nanoseconds_t generation_deadline()
When we should generate packets next time. Returns absolute time.
Session(IReceiverHooks *recv_hooks, ISenderHooks *send_hooks, packet::IWriter *packet_writer, packet::IComposer &packet_composer, packet::PacketFactory &packet_factory, core::BufferFactory< uint8_t > &buffer_factory)
Initialize.
void generate_packets()
Generate and send packet(s). Should be called accroding to generation_deadline().
RTCP compound packet traverser.
Definition: traverser.h:24
Receiver Report RTCP packet (RR).
Definition: headers.h:471
Reception report block.
Definition: headers.h:285
static const size_t MaxTextLen
Get maximum allowed item text length.
Definition: headers.h:738
Sender Report RTCP packet (SR).
Definition: headers.h:568
Packet composer interface.
Receiver hooks interface.
Sender hooks interface.
Packet writer interface.
int64_t nanoseconds_t
Nanoseconds.
Definition: time.h:58
uint32_t source_t
Packet source ID identifying packet stream.
Definition: units.h:22
uint64_t ntp_timestamp_t
NTP timestamp.
Definition: units.h:91
Root namespace.
Packet.
Packet factory.
Commonly used types and functions.
Metrics sent from receiver to sender per source.
Definition: metrics.h:37
Time definitions.
RTCP packet traverser.