Fix rtcp_sender to support sdes with 31 chunk
Previosly it supported up to only 15 chunks which is a limit for csrcs in an rtp packet. BUG=None Review-Url: https://codereview.webrtc.org/2758533002 Cr-Commit-Position: refs/heads/master@{#17274}
This commit is contained in:
@ -20,6 +20,7 @@
|
||||
namespace webrtc {
|
||||
namespace rtcp {
|
||||
constexpr uint8_t Sdes::kPacketType;
|
||||
constexpr size_t Sdes::kMaxNumberOfChunks;
|
||||
// Source Description (SDES) (RFC 3550).
|
||||
//
|
||||
// 0 1 2 3
|
||||
|
||||
@ -28,6 +28,7 @@ class Sdes : public RtcpPacket {
|
||||
std::string cname;
|
||||
};
|
||||
static constexpr uint8_t kPacketType = 202;
|
||||
static constexpr size_t kMaxNumberOfChunks = 0x1f;
|
||||
|
||||
Sdes();
|
||||
~Sdes() override;
|
||||
@ -48,8 +49,6 @@ class Sdes : public RtcpPacket {
|
||||
RtcpPacket::PacketReadyCallback* callback) const override;
|
||||
|
||||
private:
|
||||
static const size_t kMaxNumberOfChunks = 0x1f;
|
||||
|
||||
std::vector<Chunk> chunks_;
|
||||
size_t block_length_;
|
||||
};
|
||||
|
||||
@ -327,7 +327,10 @@ int32_t RTCPSender::AddMixedCNAME(uint32_t SSRC, const char* c_name) {
|
||||
RTC_DCHECK(c_name);
|
||||
RTC_DCHECK_LT(strlen(c_name), RTCP_CNAME_SIZE);
|
||||
rtc::CritScope lock(&critical_section_rtcp_sender_);
|
||||
if (csrc_cnames_.size() >= kRtpCsrcSize)
|
||||
// One spot is reserved for ssrc_/cname_.
|
||||
// TODO(danilchap): Add support for more than 30 contributes by sending
|
||||
// several sdes packets.
|
||||
if (csrc_cnames_.size() >= rtcp::Sdes::kMaxNumberOfChunks - 1)
|
||||
return -1;
|
||||
|
||||
csrc_cnames_[SSRC] = c_name;
|
||||
@ -463,8 +466,8 @@ std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildSDES(
|
||||
rtcp::Sdes* sdes = new rtcp::Sdes();
|
||||
sdes->AddCName(ssrc_, cname_);
|
||||
|
||||
for (const auto it : csrc_cnames_)
|
||||
sdes->AddCName(it.first, it.second);
|
||||
for (const auto& it : csrc_cnames_)
|
||||
RTC_CHECK(sdes->AddCName(it.first, it.second));
|
||||
|
||||
return std::unique_ptr<rtcp::RtcpPacket>(sdes);
|
||||
}
|
||||
|
||||
@ -387,6 +387,19 @@ TEST_F(RtcpSenderTest, SendSdes) {
|
||||
EXPECT_EQ("alice@host", parser()->sdes()->chunks()[0].cname);
|
||||
}
|
||||
|
||||
TEST_F(RtcpSenderTest, SendSdesWithMaxChunks) {
|
||||
rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
|
||||
EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host"));
|
||||
const char cname[] = "smith@host";
|
||||
for (size_t i = 0; i < 30; ++i) {
|
||||
const uint32_t csrc = 0x1234 + i;
|
||||
EXPECT_EQ(0, rtcp_sender_->AddMixedCNAME(csrc, cname));
|
||||
}
|
||||
EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSdes));
|
||||
EXPECT_EQ(1, parser()->sdes()->num_packets());
|
||||
EXPECT_EQ(31U, parser()->sdes()->chunks().size());
|
||||
}
|
||||
|
||||
TEST_F(RtcpSenderTest, SdesIncludedInCompoundPacket) {
|
||||
rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
|
||||
EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host"));
|
||||
|
||||
Reference in New Issue
Block a user