From 34469d16ae66e90f4033bb7f9acb211f28ccd403 Mon Sep 17 00:00:00 2001 From: Filip Klembara Date: Tue, 1 Jun 2021 11:27:41 +0200 Subject: [PATCH] Add CName parsing from ssrc --- include/rtc/description.hpp | 1 + src/description.cpp | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/include/rtc/description.hpp b/include/rtc/description.hpp index ed649ef..49ab1d3 100644 --- a/include/rtc/description.hpp +++ b/include/rtc/description.hpp @@ -196,6 +196,7 @@ public: std::map mRtpMap; std::vector mSsrcs; + std::map mCNameMap; public: void addRTPMap(const RTPMap &map); diff --git a/src/description.cpp b/src/description.cpp index c6ffbe8..6c28541 100644 --- a/src/description.cpp +++ b/src/description.cpp @@ -556,10 +556,12 @@ Description::Entry::removeAttribute(std::vector::iterator it) { void Description::Media::addSSRC(uint32_t ssrc, optional name, optional msid, optional trackID) { - if (name) + if (name) { mAttributes.emplace_back("ssrc:" + std::to_string(ssrc) + " cname:" + *name); - else + mCNameMap.emplace(ssrc, *name); + } else { mAttributes.emplace_back("ssrc:" + std::to_string(ssrc)); + } if (msid) mAttributes.emplace_back("ssrc:" + std::to_string(ssrc) + " msid:" + *msid + " " + @@ -862,6 +864,11 @@ void Description::Media::parseSdpLine(string_view line) { if (!hasSSRC(ssrc)) { mSsrcs.emplace_back(ssrc); } + auto cnamePos = value.find("cname:"); + if (cnamePos != std::string::npos) { + auto cname = value.substr(cnamePos); + mCNameMap.emplace(ssrc, cname); + } mAttributes.emplace_back(attr); } else { Entry::parseSdpLine(line); @@ -880,14 +887,10 @@ void Description::Media::addRTPMap(const Description::Media::RTPMap &map) { std::vector Description::Media::getSSRCs() { return mSsrcs; } std::optional Description::Media::getCNameForSsrc(uint32_t ssrc) { - for (auto &val : mAttributes) { - if (val.find("ssrc:") == 0 && val.find("cname:") != std::string::npos) { - auto valSsrc = to_integer(val.substr(5)); - if (valSsrc == ssrc) { - return val.substr(val.find("cname:") + 6); - } - } - } + auto it = mCNameMap.find(ssrc); + if (it != mCNameMap.end()) { + return it->second; + } return std::nullopt; }