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

Side by Side 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, 3 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/base/checks.h"
11 #include "webrtc/test/rtcp_packet_parser.h" 12 #include "webrtc/test/rtcp_packet_parser.h"
12 13
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace webrtc { 14 namespace webrtc {
16 namespace test { 15 namespace test {
17 16
18 using namespace RTCPUtility; 17 RtcpPacketParser::RtcpPacketParser() = default;
18 RtcpPacketParser::~RtcpPacketParser() = default;
19 19
20 RtcpPacketParser::RtcpPacketParser() {} 20 bool RtcpPacketParser::Parse(const void* data, size_t length) {
21 21 const uint8_t* const buffer = static_cast<const uint8_t*>(data);
22 RtcpPacketParser::~RtcpPacketParser() {} 22 const uint8_t* const buffer_end = buffer + length;
23 23 rtcp::CommonHeader header;
24 void RtcpPacketParser::Parse(const void *data, size_t len) { 24 for (const uint8_t *next_packet = buffer;
25 const uint8_t* packet = static_cast<const uint8_t*>(data); 25 RTC_DCHECK(next_packet <= buffer_end), next_packet != buffer_end;
26 RTCPUtility::RTCPParserV2 parser(packet, len, true); 26 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
27 EXPECT_TRUE(parser.IsValid()); 27 if (!header.Parse(next_packet, buffer_end - next_packet)) {
28 for (RTCPUtility::RTCPPacketTypes type = parser.Begin(); 28 // Invalid rtcp header or unaligned rtcp packet.
29 type != RTCPPacketTypes::kInvalid; type = parser.Iterate()) { 29 return false;
30 switch (type) { 30 }
31 case RTCPPacketTypes::kSr: 31 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
32 sender_report_.Set(parser.Packet().SR); 32 case rtcp::App::kPacketType:
33 app_.Parse(header);
33 break; 34 break;
34 case RTCPPacketTypes::kRr: 35 case rtcp::Bye::kPacketType:
35 receiver_report_.Set(parser.Packet().RR); 36 bye_.Parse(header);
36 break; 37 break;
37 case RTCPPacketTypes::kReportBlockItem: 38 case rtcp::ExtendedReports::kPacketType:
38 report_block_.Set(parser.Packet().ReportBlockItem); 39 xr_.Parse(header);
39 ++report_blocks_per_ssrc_[parser.Packet().ReportBlockItem.SSRC];
40 break; 40 break;
41 case RTCPPacketTypes::kSdes: 41 case rtcp::ExtendedJitterReport::kPacketType:
42 sdes_.Set(); 42 ij_.Parse(header);
43 break; 43 break;
44 case RTCPPacketTypes::kSdesChunk: 44 case rtcp::Psfb::kPacketType:
45 sdes_chunk_.Set(parser.Packet().CName); 45 switch (header.fmt()) {
46 case rtcp::Fir::kFeedbackMessageType:
47 fir_.Parse(header);
48 break;
49 case rtcp::Pli::kFeedbackMessageType:
50 pli_.Parse(header);
51 break;
52 case rtcp::Remb::kFeedbackMessageType:
53 remb_.Parse(header);
54 break;
55 case rtcp::Rpsi::kFeedbackMessageType:
56 rpsi_.Parse(header);
57 break;
58 case rtcp::Sli::kFeedbackMessageType:
59 sli_.Parse(header);
60 break;
61 }
46 break; 62 break;
47 case RTCPPacketTypes::kBye: 63 case rtcp::ReceiverReport::kPacketType:
48 bye_.Set(parser.Packet().BYE); 64 receiver_report_.Parse(header);
49 break; 65 break;
50 case RTCPPacketTypes::kApp: 66 case rtcp::Rtpfb::kPacketType:
51 app_.Set(parser.Packet().APP); 67 switch (header.fmt()) {
68 case rtcp::Nack::kFeedbackMessageType:
69 nack_.Parse(header);
70 break;
71 case rtcp::RapidResyncRequest::kFeedbackMessageType:
72 rrr_.Parse(header);
73 break;
74 case rtcp::Tmmbn::kFeedbackMessageType:
75 tmmbn_.Parse(header);
76 break;
77 case rtcp::Tmmbr::kFeedbackMessageType:
78 tmmbr_.Parse(header);
79 break;
80 case rtcp::TransportFeedback::kFeedbackMessageType:
81 transport_feedback_.Parse(header);
82 break;
83 }
52 break; 84 break;
53 case RTCPPacketTypes::kAppItem: 85 case rtcp::Sdes::kPacketType:
54 app_item_.Set(parser.Packet().APP); 86 sdes_.Parse(header);
55 break; 87 break;
56 case RTCPPacketTypes::kExtendedIj: 88 case rtcp::SenderReport::kPacketType:
57 ij_.Set(); 89 sender_report_.Parse(header);
58 break;
59 case RTCPPacketTypes::kExtendedIjItem:
60 ij_item_.Set(parser.Packet().ExtendedJitterReportItem);
61 break;
62 case RTCPPacketTypes::kPsfbPli:
63 pli_.Set(parser.Packet().PLI);
64 break;
65 case RTCPPacketTypes::kPsfbSli:
66 sli_.Set(parser.Packet().SLI);
67 break;
68 case RTCPPacketTypes::kPsfbSliItem:
69 sli_item_.Set(parser.Packet().SLIItem);
70 break;
71 case RTCPPacketTypes::kPsfbRpsiItem:
72 rpsi_.Set(parser.Packet().RPSI);
73 break;
74 case RTCPPacketTypes::kPsfbFir:
75 fir_.Set(parser.Packet().FIR);
76 break;
77 case RTCPPacketTypes::kPsfbFirItem:
78 fir_item_.Set(parser.Packet().FIRItem);
79 break;
80 case RTCPPacketTypes::kRtpfbNack:
81 nack_.Set(parser.Packet().NACK);
82 nack_item_.Clear();
83 break;
84 case RTCPPacketTypes::kRtpfbNackItem:
85 nack_item_.Set(parser.Packet().NACKItem);
86 break;
87 case RTCPPacketTypes::kPsfbApp:
88 psfb_app_.Set(parser.Packet().PSFBAPP);
89 break;
90 case RTCPPacketTypes::kPsfbRembItem:
91 remb_item_.Set(parser.Packet().REMBItem);
92 break;
93 case RTCPPacketTypes::kRtpfbTmmbr:
94 tmmbr_.Set(parser.Packet().TMMBR);
95 break;
96 case RTCPPacketTypes::kRtpfbTmmbrItem:
97 tmmbr_item_.Set(parser.Packet().TMMBRItem);
98 break;
99 case RTCPPacketTypes::kRtpfbTmmbn:
100 tmmbn_.Set(parser.Packet().TMMBN);
101 tmmbn_items_.Clear();
102 break;
103 case RTCPPacketTypes::kRtpfbTmmbnItem:
104 tmmbn_items_.Set(parser.Packet().TMMBNItem);
105 break;
106 case RTCPPacketTypes::kXrHeader:
107 xr_header_.Set(parser.Packet().XR);
108 dlrr_items_.Clear();
109 break;
110 case RTCPPacketTypes::kXrReceiverReferenceTime:
111 rrtr_.Set(parser.Packet().XRReceiverReferenceTimeItem);
112 break;
113 case RTCPPacketTypes::kXrDlrrReportBlock:
114 dlrr_.Set();
115 break;
116 case RTCPPacketTypes::kXrDlrrReportBlockItem:
117 dlrr_items_.Set(parser.Packet().XRDLRRReportBlockItem);
118 break;
119 case RTCPPacketTypes::kXrVoipMetric:
120 voip_metric_.Set(parser.Packet().XRVOIPMetricItem);
121 break;
122 default:
123 break; 90 break;
124 } 91 }
125 } 92 }
126 } 93 return true;
127
128 uint64_t Rpsi::PictureId() const {
129 assert(num_packets_ > 0);
130 uint16_t num_bytes = rpsi_.NumberOfValidBits / 8;
131 assert(num_bytes > 0);
132 uint64_t picture_id = 0;
133 for (uint16_t i = 0; i < num_bytes - 1; ++i) {
134 picture_id += (rpsi_.NativeBitString[i] & 0x7f);
135 picture_id <<= 7;
136 }
137 picture_id += (rpsi_.NativeBitString[num_bytes - 1] & 0x7f);
138 return picture_id;
139 } 94 }
140 95
141 } // namespace test 96 } // namespace test
142 } // namespace webrtc 97 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698