Parse next RTCP XR report block after an unsupported block type.
R=stefan@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/2649004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5114 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
index c33cf23..25670f5 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
@@ -162,6 +162,17 @@
}
}
+ void AddXrUnknownBlock() {
+ Add8(6); // Block type.
+ Add8(0); // Reserved.
+ Add16(9); // Length.
+ Add32(0); // Receiver SSRC.
+ Add64(0, 0); // Remaining fields (RFC 3611) are set to zero.
+ Add64(0, 0);
+ Add64(0, 0);
+ Add64(0, 0);
+ }
+
void AddXrVoipBlock(uint32_t remote_ssrc, uint8_t loss) {
Add8(7); // Block type.
Add8(0); // Reserved.
@@ -452,6 +463,27 @@
EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item);
}
+TEST_F(RtcpReceiverTest, InjectXrPacketWithUnknownReportBlock) {
+ const uint8_t kLossRate = 123;
+ const uint32_t kSourceSsrc = 0x123456;
+ std::set<uint32_t> ssrcs;
+ ssrcs.insert(kSourceSsrc);
+ rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
+ std::vector<uint32_t> remote_ssrcs;
+ remote_ssrcs.push_back(kSourceSsrc);
+
+ PacketBuilder p;
+ p.AddXrHeader(0x2345);
+ p.AddXrVoipBlock(kSourceSsrc, kLossRate);
+ p.AddXrUnknownBlock();
+ p.AddXrReceiverReferenceTimeBlock(0x10203, 0x40506);
+
+ EXPECT_EQ(0, InjectRtcpPacket(p.packet(), p.length()));
+ EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime +
+ kRtcpXrVoipMetric),
+ rtcp_packet_info_.rtcpPacketTypeFlags);
+}
+
TEST(RtcpUtilityTest, MidNtp) {
const uint32_t kNtpSec = 0x12345678;
const uint32_t kNtpFrac = 0x23456789;