Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: webrtc/test/rtcp_packet_parser.cc

Issue 2070673002: Test RtcpParser rewritten to use rtcp packet classes (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: reinterpret_cast -> static_cast Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/test/rtcp_packet_parser.cc
diff --git a/webrtc/test/rtcp_packet_parser.cc b/webrtc/test/rtcp_packet_parser.cc
index 65f450d2e3dfdfa91fcf4d9d5a9f34b4cc450bc1..d8cac5b0b07c2e06177b8d46e0abacc9705eacf5 100644
--- a/webrtc/test/rtcp_packet_parser.cc
+++ b/webrtc/test/rtcp_packet_parser.cc
@@ -8,134 +8,89 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include "webrtc/base/checks.h"
#include "webrtc/test/rtcp_packet_parser.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
namespace webrtc {
namespace test {
-using namespace RTCPUtility;
-
-RtcpPacketParser::RtcpPacketParser() {}
-
-RtcpPacketParser::~RtcpPacketParser() {}
+RtcpPacketParser::RtcpPacketParser() = default;
+RtcpPacketParser::~RtcpPacketParser() = default;
-void RtcpPacketParser::Parse(const void *data, size_t len) {
- const uint8_t* packet = static_cast<const uint8_t*>(data);
- RTCPUtility::RTCPParserV2 parser(packet, len, true);
- EXPECT_TRUE(parser.IsValid());
- for (RTCPUtility::RTCPPacketTypes type = parser.Begin();
- type != RTCPPacketTypes::kInvalid; type = parser.Iterate()) {
- switch (type) {
- case RTCPPacketTypes::kSr:
- sender_report_.Set(parser.Packet().SR);
- break;
- case RTCPPacketTypes::kRr:
- receiver_report_.Set(parser.Packet().RR);
- break;
- case RTCPPacketTypes::kReportBlockItem:
- report_block_.Set(parser.Packet().ReportBlockItem);
- ++report_blocks_per_ssrc_[parser.Packet().ReportBlockItem.SSRC];
- break;
- case RTCPPacketTypes::kSdes:
- sdes_.Set();
- break;
- case RTCPPacketTypes::kSdesChunk:
- sdes_chunk_.Set(parser.Packet().CName);
- break;
- case RTCPPacketTypes::kBye:
- bye_.Set(parser.Packet().BYE);
- break;
- case RTCPPacketTypes::kApp:
- app_.Set(parser.Packet().APP);
- break;
- case RTCPPacketTypes::kAppItem:
- app_item_.Set(parser.Packet().APP);
- break;
- case RTCPPacketTypes::kExtendedIj:
- ij_.Set();
- break;
- case RTCPPacketTypes::kExtendedIjItem:
- ij_item_.Set(parser.Packet().ExtendedJitterReportItem);
- break;
- case RTCPPacketTypes::kPsfbPli:
- pli_.Set(parser.Packet().PLI);
- break;
- case RTCPPacketTypes::kPsfbSli:
- sli_.Set(parser.Packet().SLI);
- break;
- case RTCPPacketTypes::kPsfbSliItem:
- sli_item_.Set(parser.Packet().SLIItem);
- break;
- case RTCPPacketTypes::kPsfbRpsiItem:
- rpsi_.Set(parser.Packet().RPSI);
- break;
- case RTCPPacketTypes::kPsfbFir:
- fir_.Set(parser.Packet().FIR);
- break;
- case RTCPPacketTypes::kPsfbFirItem:
- fir_item_.Set(parser.Packet().FIRItem);
- break;
- case RTCPPacketTypes::kRtpfbNack:
- nack_.Set(parser.Packet().NACK);
- nack_item_.Clear();
- break;
- case RTCPPacketTypes::kRtpfbNackItem:
- nack_item_.Set(parser.Packet().NACKItem);
- break;
- case RTCPPacketTypes::kPsfbApp:
- psfb_app_.Set(parser.Packet().PSFBAPP);
- break;
- case RTCPPacketTypes::kPsfbRembItem:
- remb_item_.Set(parser.Packet().REMBItem);
- break;
- case RTCPPacketTypes::kRtpfbTmmbr:
- tmmbr_.Set(parser.Packet().TMMBR);
- break;
- case RTCPPacketTypes::kRtpfbTmmbrItem:
- tmmbr_item_.Set(parser.Packet().TMMBRItem);
- break;
- case RTCPPacketTypes::kRtpfbTmmbn:
- tmmbn_.Set(parser.Packet().TMMBN);
- tmmbn_items_.Clear();
- break;
- case RTCPPacketTypes::kRtpfbTmmbnItem:
- tmmbn_items_.Set(parser.Packet().TMMBNItem);
- break;
- case RTCPPacketTypes::kXrHeader:
- xr_header_.Set(parser.Packet().XR);
- dlrr_items_.Clear();
- break;
- case RTCPPacketTypes::kXrReceiverReferenceTime:
- rrtr_.Set(parser.Packet().XRReceiverReferenceTimeItem);
- break;
- case RTCPPacketTypes::kXrDlrrReportBlock:
- dlrr_.Set();
- break;
- case RTCPPacketTypes::kXrDlrrReportBlockItem:
- dlrr_items_.Set(parser.Packet().XRDLRRReportBlockItem);
- break;
- case RTCPPacketTypes::kXrVoipMetric:
- voip_metric_.Set(parser.Packet().XRVOIPMetricItem);
- break;
- default:
+bool RtcpPacketParser::Parse(const void* data, size_t length) {
+ const uint8_t* const buffer = static_cast<const uint8_t*>(data);
+ const uint8_t* const buffer_end = buffer + length;
+ rtcp::CommonHeader header;
+ for (const uint8_t *next_packet = buffer;
+ RTC_DCHECK(next_packet <= buffer_end), next_packet != buffer_end;
+ next_packet = header.NextPacket()) {
sprang_webrtc 2016/09/02 07:43:21 The dcheck inside the test statement of the for-lo
danilchap 2016/09/02 08:15:53 Done. Failed to find reasons I had for putting DCH
+ if (!header.Parse(next_packet, buffer_end - next_packet)) {
+ // Invalid rtcp header or unaligned rtcp packet.
+ return false;
+ }
+ switch (header.type()) {
sprang_webrtc 2016/09/02 07:43:21 Header type is just an uin8_t, right? Can we add a
danilchap 2016/09/02 08:15:53 Done. ADD_FAILURE would crash fuzzers fast, so add
+ case rtcp::App::kPacketType:
+ app_.Parse(header);
+ break;
+ case rtcp::Bye::kPacketType:
+ bye_.Parse(header);
+ break;
+ case rtcp::ExtendedReports::kPacketType:
+ xr_.Parse(header);
+ break;
+ case rtcp::ExtendedJitterReport::kPacketType:
+ ij_.Parse(header);
+ break;
+ case rtcp::Psfb::kPacketType:
+ switch (header.fmt()) {
+ case rtcp::Fir::kFeedbackMessageType:
+ fir_.Parse(header);
+ break;
+ case rtcp::Pli::kFeedbackMessageType:
+ pli_.Parse(header);
+ break;
+ case rtcp::Remb::kFeedbackMessageType:
+ remb_.Parse(header);
+ break;
+ case rtcp::Rpsi::kFeedbackMessageType:
+ rpsi_.Parse(header);
+ break;
+ case rtcp::Sli::kFeedbackMessageType:
+ sli_.Parse(header);
+ break;
+ }
+ break;
+ case rtcp::ReceiverReport::kPacketType:
+ receiver_report_.Parse(header);
+ break;
+ case rtcp::Rtpfb::kPacketType:
+ switch (header.fmt()) {
+ case rtcp::Nack::kFeedbackMessageType:
+ nack_.Parse(header);
+ break;
+ case rtcp::RapidResyncRequest::kFeedbackMessageType:
+ rrr_.Parse(header);
+ break;
+ case rtcp::Tmmbn::kFeedbackMessageType:
+ tmmbn_.Parse(header);
+ break;
+ case rtcp::Tmmbr::kFeedbackMessageType:
+ tmmbr_.Parse(header);
+ break;
+ case rtcp::TransportFeedback::kFeedbackMessageType:
+ transport_feedback_.Parse(header);
+ break;
+ }
+ break;
+ case rtcp::Sdes::kPacketType:
+ sdes_.Parse(header);
+ break;
+ case rtcp::SenderReport::kPacketType:
+ sender_report_.Parse(header);
break;
}
}
-}
-
-uint64_t Rpsi::PictureId() const {
- assert(num_packets_ > 0);
- uint16_t num_bytes = rpsi_.NumberOfValidBits / 8;
- assert(num_bytes > 0);
- uint64_t picture_id = 0;
- for (uint16_t i = 0; i < num_bytes - 1; ++i) {
- picture_id += (rpsi_.NativeBitString[i] & 0x7f);
- picture_id <<= 7;
- }
- picture_id += (rpsi_.NativeBitString[num_bytes - 1] & 0x7f);
- return picture_id;
+ return true;
}
} // namespace test

Powered by Google App Engine
This is Rietveld 408576698