From 10c14b9f998dd6d8f9d421e0e219edcb23a3948f Mon Sep 17 00:00:00 2001 From: Heikki Tampio Date: Mon, 31 Jul 2023 09:39:52 +0300 Subject: [PATCH] multiplex: Fix bug in rtcp_reader, finding correct handler when remote SSRC is not manually set --- src/rtcp_reader.cc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/rtcp_reader.cc b/src/rtcp_reader.cc index 5bd7f1a..f633f5c 100644 --- a/src/rtcp_reader.cc +++ b/src/rtcp_reader.cc @@ -73,13 +73,16 @@ void uvgrtp::rtcp_reader::rtcp_report_reader() { { uint32_t sender_ssrc = ntohl(*(uint32_t*)&buffer.get()[0 + RTCP_HEADER_SIZE]); map_mutex_.lock(); - for (auto& p : rtcps_map_) { - std::shared_ptr rtcp_ptr = p.second; - if (sender_ssrc == p.first.get()->load()) { - (void)rtcp_ptr->handle_incoming_packet(nullptr, 0, buffer.get(), (size_t)nread, nullptr); - } - else if (p.first.get()->load() == 0) { - (void)rtcp_ptr->handle_incoming_packet(nullptr, 0, buffer.get(), (size_t)nread, nullptr); + if (rtcps_map_.size() == 1) { + auto& ptr = rtcps_map_.begin()->second; + (void)ptr->handle_incoming_packet(nullptr, 0, buffer.get(), (size_t)nread, nullptr); + } + else { + for (auto& p : rtcps_map_) { + std::shared_ptr rtcp_ptr = p.second; + if (sender_ssrc == p.first.get()->load()) { + (void)rtcp_ptr->handle_incoming_packet(nullptr, 0, buffer.get(), (size_t)nread, nullptr); + } } } map_mutex_.unlock();