OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 TEST_F(RtcpReceiverTest, BrokenPacketIsIgnored) { | 153 TEST_F(RtcpReceiverTest, BrokenPacketIsIgnored) { |
154 const uint8_t bad_packet[] = {0, 0, 0, 0}; | 154 const uint8_t bad_packet[] = {0, 0, 0, 0}; |
155 EXPECT_EQ(0, InjectRtcpPacket(bad_packet, sizeof(bad_packet))); | 155 EXPECT_EQ(0, InjectRtcpPacket(bad_packet, sizeof(bad_packet))); |
156 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 156 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
157 } | 157 } |
158 | 158 |
159 TEST_F(RtcpReceiverTest, InjectSrPacket) { | 159 TEST_F(RtcpReceiverTest, InjectSrPacket) { |
160 const uint32_t kSenderSsrc = 0x10203; | 160 const uint32_t kSenderSsrc = 0x10203; |
161 rtcp::SenderReport sr; | 161 rtcp::SenderReport sr; |
162 sr.From(kSenderSsrc); | 162 sr.From(kSenderSsrc); |
163 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 163 rtc::Buffer packet = sr.Build(); |
164 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 164 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
165 // The parser will note the remote SSRC on a SR from other than his | 165 // The parser will note the remote SSRC on a SR from other than his |
166 // expected peer, but will not flag that he's gotten a packet. | 166 // expected peer, but will not flag that he's gotten a packet. |
167 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 167 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
168 EXPECT_EQ(0U, | 168 EXPECT_EQ(0U, kRtcpSr & rtcp_packet_info_.rtcpPacketTypeFlags); |
169 kRtcpSr & rtcp_packet_info_.rtcpPacketTypeFlags); | |
170 } | 169 } |
171 | 170 |
172 TEST_F(RtcpReceiverTest, InjectSrPacketFromExpectedPeer) { | 171 TEST_F(RtcpReceiverTest, InjectSrPacketFromExpectedPeer) { |
173 const uint32_t kSenderSsrc = 0x10203; | 172 const uint32_t kSenderSsrc = 0x10203; |
174 rtcp_receiver_->SetRemoteSSRC(kSenderSsrc); | 173 rtcp_receiver_->SetRemoteSSRC(kSenderSsrc); |
175 rtcp::SenderReport sr; | 174 rtcp::SenderReport sr; |
176 sr.From(kSenderSsrc); | 175 sr.From(kSenderSsrc); |
177 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 176 rtc::Buffer packet = sr.Build(); |
178 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 177 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
179 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 178 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
180 EXPECT_EQ(kRtcpSr, rtcp_packet_info_.rtcpPacketTypeFlags); | 179 EXPECT_EQ(kRtcpSr, rtcp_packet_info_.rtcpPacketTypeFlags); |
181 } | 180 } |
182 | 181 |
183 TEST_F(RtcpReceiverTest, InjectRrPacket) { | 182 TEST_F(RtcpReceiverTest, InjectRrPacket) { |
184 const uint32_t kSenderSsrc = 0x10203; | 183 const uint32_t kSenderSsrc = 0x10203; |
185 rtcp::ReceiverReport rr; | 184 rtcp::ReceiverReport rr; |
186 rr.From(kSenderSsrc); | 185 rr.From(kSenderSsrc); |
187 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 186 rtc::Buffer packet = rr.Build(); |
188 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 187 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
189 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 188 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
190 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 189 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); |
191 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); | 190 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); |
192 } | 191 } |
193 | 192 |
194 TEST_F(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) { | 193 TEST_F(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) { |
195 const uint32_t kSenderSsrc = 0x10203; | 194 const uint32_t kSenderSsrc = 0x10203; |
196 const uint32_t kSourceSsrc = 0x123456; | 195 const uint32_t kSourceSsrc = 0x123456; |
197 std::set<uint32_t> ssrcs; | 196 std::set<uint32_t> ssrcs; |
198 ssrcs.insert(kSourceSsrc); | 197 ssrcs.insert(kSourceSsrc); |
199 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 198 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
200 | 199 |
201 rtcp::ReportBlock rb; | 200 rtcp::ReportBlock rb; |
202 rb.To(kSourceSsrc + 1); | 201 rb.To(kSourceSsrc + 1); |
203 rtcp::ReceiverReport rr; | 202 rtcp::ReceiverReport rr; |
204 rr.From(kSenderSsrc); | 203 rr.From(kSenderSsrc); |
205 rr.WithReportBlock(rb); | 204 rr.WithReportBlock(rb); |
206 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 205 rtc::Buffer packet = rr.Build(); |
207 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 206 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
208 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 207 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
209 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 208 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); |
210 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); | 209 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); |
211 | 210 |
212 std::vector<RTCPReportBlock> received_blocks; | 211 std::vector<RTCPReportBlock> received_blocks; |
213 rtcp_receiver_->StatisticsReceived(&received_blocks); | 212 rtcp_receiver_->StatisticsReceived(&received_blocks); |
214 EXPECT_TRUE(received_blocks.empty()); | 213 EXPECT_TRUE(received_blocks.empty()); |
215 } | 214 } |
216 | 215 |
217 TEST_F(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) { | 216 TEST_F(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) { |
218 const uint32_t kSenderSsrc = 0x10203; | 217 const uint32_t kSenderSsrc = 0x10203; |
219 const uint32_t kSourceSsrc = 0x123456; | 218 const uint32_t kSourceSsrc = 0x123456; |
220 std::set<uint32_t> ssrcs; | 219 std::set<uint32_t> ssrcs; |
221 ssrcs.insert(kSourceSsrc); | 220 ssrcs.insert(kSourceSsrc); |
222 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 221 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
223 | 222 |
224 rtcp::ReportBlock rb; | 223 rtcp::ReportBlock rb; |
225 rb.To(kSourceSsrc); | 224 rb.To(kSourceSsrc); |
226 rtcp::ReceiverReport rr; | 225 rtcp::ReceiverReport rr; |
227 rr.From(kSenderSsrc); | 226 rr.From(kSenderSsrc); |
228 rr.WithReportBlock(rb); | 227 rr.WithReportBlock(rb); |
229 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 228 rtc::Buffer packet = rr.Build(); |
230 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 229 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
231 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 230 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
232 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 231 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); |
233 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 232 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); |
234 | 233 |
235 std::vector<RTCPReportBlock> received_blocks; | 234 std::vector<RTCPReportBlock> received_blocks; |
236 rtcp_receiver_->StatisticsReceived(&received_blocks); | 235 rtcp_receiver_->StatisticsReceived(&received_blocks); |
237 EXPECT_EQ(1u, received_blocks.size()); | 236 EXPECT_EQ(1u, received_blocks.size()); |
238 } | 237 } |
239 | 238 |
240 TEST_F(RtcpReceiverTest, InjectRrPacketWithTwoReportBlocks) { | 239 TEST_F(RtcpReceiverTest, InjectRrPacketWithTwoReportBlocks) { |
(...skipping 15 matching lines...) Expand all Loading... |
256 | 255 |
257 rtcp::ReportBlock rb2; | 256 rtcp::ReportBlock rb2; |
258 rb2.To(kSourceSsrcs[1]); | 257 rb2.To(kSourceSsrcs[1]); |
259 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); | 258 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); |
260 | 259 |
261 rtcp::ReceiverReport rr1; | 260 rtcp::ReceiverReport rr1; |
262 rr1.From(kSenderSsrc); | 261 rr1.From(kSenderSsrc); |
263 rr1.WithReportBlock(rb1); | 262 rr1.WithReportBlock(rb1); |
264 rr1.WithReportBlock(rb2); | 263 rr1.WithReportBlock(rb2); |
265 | 264 |
266 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 265 rtc::Buffer p1 = rr1.Build(); |
267 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 266 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
268 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 267 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); |
269 EXPECT_EQ(10, rtcp_packet_info_.report_blocks.front().fractionLost); | 268 EXPECT_EQ(10, rtcp_packet_info_.report_blocks.front().fractionLost); |
270 EXPECT_EQ(0, rtcp_packet_info_.report_blocks.back().fractionLost); | 269 EXPECT_EQ(0, rtcp_packet_info_.report_blocks.back().fractionLost); |
271 | 270 |
272 rtcp::ReportBlock rb3; | 271 rtcp::ReportBlock rb3; |
273 rb3.To(kSourceSsrcs[0]); | 272 rb3.To(kSourceSsrcs[0]); |
274 rb3.WithExtHighestSeqNum(kSequenceNumbers[0]); | 273 rb3.WithExtHighestSeqNum(kSequenceNumbers[0]); |
275 rb3.WithFractionLost(kFracLost[0]); | 274 rb3.WithFractionLost(kFracLost[0]); |
276 rb3.WithCumulativeLost(kCumLost[0]); | 275 rb3.WithCumulativeLost(kCumLost[0]); |
277 | 276 |
278 rtcp::ReportBlock rb4; | 277 rtcp::ReportBlock rb4; |
279 rb4.To(kSourceSsrcs[1]); | 278 rb4.To(kSourceSsrcs[1]); |
280 rb4.WithExtHighestSeqNum(kSequenceNumbers[1]); | 279 rb4.WithExtHighestSeqNum(kSequenceNumbers[1]); |
281 rb4.WithFractionLost(kFracLost[1]); | 280 rb4.WithFractionLost(kFracLost[1]); |
282 rb4.WithCumulativeLost(kCumLost[1]); | 281 rb4.WithCumulativeLost(kCumLost[1]); |
283 | 282 |
284 rtcp::ReceiverReport rr2; | 283 rtcp::ReceiverReport rr2; |
285 rr2.From(kSenderSsrc); | 284 rr2.From(kSenderSsrc); |
286 rr2.WithReportBlock(rb3); | 285 rr2.WithReportBlock(rb3); |
287 rr2.WithReportBlock(rb4); | 286 rr2.WithReportBlock(rb4); |
288 | 287 |
289 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 288 rtc::Buffer p2 = rr2.Build(); |
290 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 289 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
291 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 290 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); |
292 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); | 291 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); |
293 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.back().fractionLost); | 292 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.back().fractionLost); |
294 | 293 |
295 std::vector<RTCPReportBlock> received_blocks; | 294 std::vector<RTCPReportBlock> received_blocks; |
296 rtcp_receiver_->StatisticsReceived(&received_blocks); | 295 rtcp_receiver_->StatisticsReceived(&received_blocks); |
297 EXPECT_EQ(2u, received_blocks.size()); | 296 EXPECT_EQ(2u, received_blocks.size()); |
298 for (size_t i = 0; i < received_blocks.size(); ++i) { | 297 for (size_t i = 0; i < received_blocks.size(); ++i) { |
299 EXPECT_EQ(kSenderSsrc, received_blocks[i].remoteSSRC); | 298 EXPECT_EQ(kSenderSsrc, received_blocks[i].remoteSSRC); |
300 EXPECT_EQ(kSourceSsrcs[i], received_blocks[i].sourceSSRC); | 299 EXPECT_EQ(kSourceSsrcs[i], received_blocks[i].sourceSSRC); |
(...skipping 17 matching lines...) Expand all Loading... |
318 | 317 |
319 rtcp::ReportBlock rb1; | 318 rtcp::ReportBlock rb1; |
320 rb1.To(kSourceSsrcs[0]); | 319 rb1.To(kSourceSsrcs[0]); |
321 rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); | 320 rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); |
322 rb1.WithFractionLost(kFracLost[0]); | 321 rb1.WithFractionLost(kFracLost[0]); |
323 rb1.WithCumulativeLost(kCumLost[0]); | 322 rb1.WithCumulativeLost(kCumLost[0]); |
324 rtcp::ReceiverReport rr1; | 323 rtcp::ReceiverReport rr1; |
325 rr1.From(kSenderSsrc1); | 324 rr1.From(kSenderSsrc1); |
326 rr1.WithReportBlock(rb1); | 325 rr1.WithReportBlock(rb1); |
327 | 326 |
328 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 327 rtc::Buffer p1 = rr1.Build(); |
329 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 328 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
330 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 329 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); |
331 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); | 330 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); |
332 | 331 |
333 std::vector<RTCPReportBlock> received_blocks; | 332 std::vector<RTCPReportBlock> received_blocks; |
334 rtcp_receiver_->StatisticsReceived(&received_blocks); | 333 rtcp_receiver_->StatisticsReceived(&received_blocks); |
335 EXPECT_EQ(1u, received_blocks.size()); | 334 EXPECT_EQ(1u, received_blocks.size()); |
336 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); | 335 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); |
337 EXPECT_EQ(kSourceSsrcs[0], received_blocks[0].sourceSSRC); | 336 EXPECT_EQ(kSourceSsrcs[0], received_blocks[0].sourceSSRC); |
338 EXPECT_EQ(kFracLost[0], received_blocks[0].fractionLost); | 337 EXPECT_EQ(kFracLost[0], received_blocks[0].fractionLost); |
339 EXPECT_EQ(kCumLost[0], received_blocks[0].cumulativeLost); | 338 EXPECT_EQ(kCumLost[0], received_blocks[0].cumulativeLost); |
340 EXPECT_EQ(kSequenceNumbers[0], received_blocks[0].extendedHighSeqNum); | 339 EXPECT_EQ(kSequenceNumbers[0], received_blocks[0].extendedHighSeqNum); |
341 | 340 |
342 rtcp::ReportBlock rb2; | 341 rtcp::ReportBlock rb2; |
343 rb2.To(kSourceSsrcs[0]); | 342 rb2.To(kSourceSsrcs[0]); |
344 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); | 343 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); |
345 rb2.WithFractionLost(kFracLost[1]); | 344 rb2.WithFractionLost(kFracLost[1]); |
346 rb2.WithCumulativeLost(kCumLost[1]); | 345 rb2.WithCumulativeLost(kCumLost[1]); |
347 rtcp::ReceiverReport rr2; | 346 rtcp::ReceiverReport rr2; |
348 rr2.From(kSenderSsrc2); | 347 rr2.From(kSenderSsrc2); |
349 rr2.WithReportBlock(rb2); | 348 rr2.WithReportBlock(rb2); |
350 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 349 rtc::Buffer p2 = rr2.Build(); |
351 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 350 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
352 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 351 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); |
353 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.front().fractionLost); | 352 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.front().fractionLost); |
354 | 353 |
355 received_blocks.clear(); | 354 received_blocks.clear(); |
356 rtcp_receiver_->StatisticsReceived(&received_blocks); | 355 rtcp_receiver_->StatisticsReceived(&received_blocks); |
357 ASSERT_EQ(2u, received_blocks.size()); | 356 ASSERT_EQ(2u, received_blocks.size()); |
358 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); | 357 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); |
359 EXPECT_EQ(kSenderSsrc2, received_blocks[1].remoteSSRC); | 358 EXPECT_EQ(kSenderSsrc2, received_blocks[1].remoteSSRC); |
360 for (size_t i = 0; i < received_blocks.size(); ++i) { | 359 for (size_t i = 0; i < received_blocks.size(); ++i) { |
361 EXPECT_EQ(kSourceSsrcs[0], received_blocks[i].sourceSSRC); | 360 EXPECT_EQ(kSourceSsrcs[0], received_blocks[i].sourceSSRC); |
(...skipping 12 matching lines...) Expand all Loading... |
374 | 373 |
375 // No report block received. | 374 // No report block received. |
376 EXPECT_EQ( | 375 EXPECT_EQ( |
377 -1, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); | 376 -1, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); |
378 | 377 |
379 rtcp::ReportBlock rb; | 378 rtcp::ReportBlock rb; |
380 rb.To(kSourceSsrc); | 379 rb.To(kSourceSsrc); |
381 rtcp::ReceiverReport rr; | 380 rtcp::ReceiverReport rr; |
382 rr.From(kSenderSsrc); | 381 rr.From(kSenderSsrc); |
383 rr.WithReportBlock(rb); | 382 rr.WithReportBlock(rb); |
384 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); | 383 rtc::Buffer packet = rr.Build(); |
385 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 384 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
386 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); | 385 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); |
387 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); | 386 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); |
388 EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); | 387 EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); |
389 EXPECT_EQ( | 388 EXPECT_EQ( |
390 0, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); | 389 0, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); |
391 | 390 |
392 // Report block not received. | 391 // Report block not received. |
393 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, nullptr, nullptr, nullptr, | 392 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, nullptr, nullptr, nullptr, |
394 nullptr)); | 393 nullptr)); |
395 } | 394 } |
396 | 395 |
397 TEST_F(RtcpReceiverTest, InjectIjWithNoItem) { | 396 TEST_F(RtcpReceiverTest, InjectIjWithNoItem) { |
398 rtcp::ExtendedJitterReport ij; | 397 rtcp::ExtendedJitterReport ij; |
399 rtc::scoped_ptr<rtcp::RawPacket> packet(ij.Build()); | 398 rtc::Buffer packet = ij.Build(); |
400 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 399 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
401 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 400 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
402 } | 401 } |
403 | 402 |
404 TEST_F(RtcpReceiverTest, InjectIjWithOneItem) { | 403 TEST_F(RtcpReceiverTest, InjectIjWithOneItem) { |
405 rtcp::ExtendedJitterReport ij; | 404 rtcp::ExtendedJitterReport ij; |
406 ij.WithJitter(0x11213141); | 405 ij.WithJitter(0x11213141); |
407 | 406 |
408 rtc::scoped_ptr<rtcp::RawPacket> packet(ij.Build()); | 407 rtc::Buffer packet = ij.Build(); |
409 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 408 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
410 EXPECT_EQ(kRtcpTransmissionTimeOffset, rtcp_packet_info_.rtcpPacketTypeFlags); | 409 EXPECT_EQ(kRtcpTransmissionTimeOffset, rtcp_packet_info_.rtcpPacketTypeFlags); |
411 EXPECT_EQ(0x11213141U, rtcp_packet_info_.interArrivalJitter); | 410 EXPECT_EQ(0x11213141U, rtcp_packet_info_.interArrivalJitter); |
412 } | 411 } |
413 | 412 |
414 TEST_F(RtcpReceiverTest, InjectAppWithNoData) { | 413 TEST_F(RtcpReceiverTest, InjectAppWithNoData) { |
415 rtcp::App app; | 414 rtcp::App app; |
416 app.WithSubType(30); | 415 app.WithSubType(30); |
417 uint32_t name = 'n' << 24; | 416 uint32_t name = 'n' << 24; |
418 name += 'a' << 16; | 417 name += 'a' << 16; |
419 name += 'm' << 8; | 418 name += 'm' << 8; |
420 name += 'e'; | 419 name += 'e'; |
421 app.WithName(name); | 420 app.WithName(name); |
422 | 421 |
423 rtc::scoped_ptr<rtcp::RawPacket> packet(app.Build()); | 422 rtc::Buffer packet = app.Build(); |
424 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 423 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
425 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags); | 424 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags); |
426 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType); | 425 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType); |
427 EXPECT_EQ(name, rtcp_packet_info_.applicationName); | 426 EXPECT_EQ(name, rtcp_packet_info_.applicationName); |
428 EXPECT_EQ(0, rtcp_packet_info_.applicationLength); | 427 EXPECT_EQ(0, rtcp_packet_info_.applicationLength); |
429 } | 428 } |
430 | 429 |
431 TEST_F(RtcpReceiverTest, InjectAppWithData) { | 430 TEST_F(RtcpReceiverTest, InjectAppWithData) { |
432 rtcp::App app; | 431 rtcp::App app; |
433 app.WithSubType(30); | 432 app.WithSubType(30); |
434 uint32_t name = 'n' << 24; | 433 uint32_t name = 'n' << 24; |
435 name += 'a' << 16; | 434 name += 'a' << 16; |
436 name += 'm' << 8; | 435 name += 'm' << 8; |
437 name += 'e'; | 436 name += 'e'; |
438 app.WithName(name); | 437 app.WithName(name); |
439 const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; | 438 const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; |
440 const size_t kDataLength = sizeof(kData) / sizeof(kData[0]); | 439 const size_t kDataLength = sizeof(kData) / sizeof(kData[0]); |
441 app.WithData((const uint8_t*)kData, kDataLength); | 440 app.WithData((const uint8_t*)kData, kDataLength); |
442 | 441 |
443 rtc::scoped_ptr<rtcp::RawPacket> packet(app.Build()); | 442 rtc::Buffer packet = app.Build(); |
444 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 443 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
445 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags); | 444 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags); |
446 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType); | 445 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType); |
447 EXPECT_EQ(name, rtcp_packet_info_.applicationName); | 446 EXPECT_EQ(name, rtcp_packet_info_.applicationName); |
448 EXPECT_EQ(kDataLength, rtcp_packet_info_.applicationLength); | 447 EXPECT_EQ(kDataLength, rtcp_packet_info_.applicationLength); |
449 } | 448 } |
450 | 449 |
451 TEST_F(RtcpReceiverTest, InjectSdesWithOneChunk) { | 450 TEST_F(RtcpReceiverTest, InjectSdesWithOneChunk) { |
452 const uint32_t kSenderSsrc = 0x123456; | 451 const uint32_t kSenderSsrc = 0x123456; |
453 rtcp::Sdes sdes; | 452 rtcp::Sdes sdes; |
454 sdes.WithCName(kSenderSsrc, "alice@host"); | 453 sdes.WithCName(kSenderSsrc, "alice@host"); |
455 | 454 |
456 rtc::scoped_ptr<rtcp::RawPacket> packet(sdes.Build()); | 455 rtc::Buffer packet = sdes.Build(); |
457 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 456 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
458 char cName[RTCP_CNAME_SIZE]; | 457 char cName[RTCP_CNAME_SIZE]; |
459 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName)); | 458 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName)); |
460 EXPECT_EQ(0, strncmp(cName, "alice@host", RTCP_CNAME_SIZE)); | 459 EXPECT_EQ(0, strncmp(cName, "alice@host", RTCP_CNAME_SIZE)); |
461 } | 460 } |
462 | 461 |
463 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesCname) { | 462 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesCname) { |
464 const uint32_t kSenderSsrc = 0x123456; | 463 const uint32_t kSenderSsrc = 0x123456; |
465 rtcp::Sdes sdes; | 464 rtcp::Sdes sdes; |
466 sdes.WithCName(kSenderSsrc, "alice@host"); | 465 sdes.WithCName(kSenderSsrc, "alice@host"); |
467 | 466 |
468 rtc::scoped_ptr<rtcp::RawPacket> packet(sdes.Build()); | 467 rtc::Buffer packet = sdes.Build(); |
469 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 468 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
470 char cName[RTCP_CNAME_SIZE]; | 469 char cName[RTCP_CNAME_SIZE]; |
471 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName)); | 470 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName)); |
472 | 471 |
473 // Verify that BYE removes the CNAME. | 472 // Verify that BYE removes the CNAME. |
474 rtcp::Bye bye; | 473 rtcp::Bye bye; |
475 bye.From(kSenderSsrc); | 474 bye.From(kSenderSsrc); |
476 rtc::scoped_ptr<rtcp::RawPacket> p2(bye.Build()); | 475 rtc::Buffer p2 = bye.Build(); |
477 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 476 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
478 EXPECT_EQ(-1, rtcp_receiver_->CNAME(kSenderSsrc, cName)); | 477 EXPECT_EQ(-1, rtcp_receiver_->CNAME(kSenderSsrc, cName)); |
479 } | 478 } |
480 | 479 |
481 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesReportBlocks) { | 480 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesReportBlocks) { |
482 const uint32_t kSenderSsrc = 0x10203; | 481 const uint32_t kSenderSsrc = 0x10203; |
483 const uint32_t kSourceSsrcs[] = {0x40506, 0x50607}; | 482 const uint32_t kSourceSsrcs[] = {0x40506, 0x50607}; |
484 const int kNumSsrcs = sizeof(kSourceSsrcs) / sizeof(kSourceSsrcs[0]); | 483 const int kNumSsrcs = sizeof(kSourceSsrcs) / sizeof(kSourceSsrcs[0]); |
485 | 484 |
486 std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); | 485 std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); |
487 rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); | 486 rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); |
488 | 487 |
489 rtcp::ReportBlock rb1; | 488 rtcp::ReportBlock rb1; |
490 rb1.To(kSourceSsrcs[0]); | 489 rb1.To(kSourceSsrcs[0]); |
491 rtcp::ReportBlock rb2; | 490 rtcp::ReportBlock rb2; |
492 rb2.To(kSourceSsrcs[1]); | 491 rb2.To(kSourceSsrcs[1]); |
493 rtcp::ReceiverReport rr; | 492 rtcp::ReceiverReport rr; |
494 rr.From(kSenderSsrc); | 493 rr.From(kSenderSsrc); |
495 rr.WithReportBlock(rb1); | 494 rr.WithReportBlock(rb1); |
496 rr.WithReportBlock(rb2); | 495 rr.WithReportBlock(rb2); |
497 | 496 |
498 rtc::scoped_ptr<rtcp::RawPacket> p1(rr.Build()); | 497 rtc::Buffer p1 = rr.Build(); |
499 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 498 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
500 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 499 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); |
501 std::vector<RTCPReportBlock> received_blocks; | 500 std::vector<RTCPReportBlock> received_blocks; |
502 rtcp_receiver_->StatisticsReceived(&received_blocks); | 501 rtcp_receiver_->StatisticsReceived(&received_blocks); |
503 EXPECT_EQ(2u, received_blocks.size()); | 502 EXPECT_EQ(2u, received_blocks.size()); |
504 | 503 |
505 // Verify that BYE removes the report blocks. | 504 // Verify that BYE removes the report blocks. |
506 rtcp::Bye bye; | 505 rtcp::Bye bye; |
507 bye.From(kSenderSsrc); | 506 bye.From(kSenderSsrc); |
508 rtc::scoped_ptr<rtcp::RawPacket> p2(bye.Build()); | 507 rtc::Buffer p2 = bye.Build(); |
509 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 508 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
510 received_blocks.clear(); | 509 received_blocks.clear(); |
511 rtcp_receiver_->StatisticsReceived(&received_blocks); | 510 rtcp_receiver_->StatisticsReceived(&received_blocks); |
512 EXPECT_TRUE(received_blocks.empty()); | 511 EXPECT_TRUE(received_blocks.empty()); |
513 | 512 |
514 // Inject packet. | 513 // Inject packet. |
515 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 514 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
516 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); | 515 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); |
517 received_blocks.clear(); | 516 received_blocks.clear(); |
518 rtcp_receiver_->StatisticsReceived(&received_blocks); | 517 rtcp_receiver_->StatisticsReceived(&received_blocks); |
519 EXPECT_EQ(2u, received_blocks.size()); | 518 EXPECT_EQ(2u, received_blocks.size()); |
520 } | 519 } |
521 | 520 |
522 TEST_F(RtcpReceiverTest, InjectPliPacket) { | 521 TEST_F(RtcpReceiverTest, InjectPliPacket) { |
523 const uint32_t kSourceSsrc = 0x123456; | 522 const uint32_t kSourceSsrc = 0x123456; |
524 std::set<uint32_t> ssrcs; | 523 std::set<uint32_t> ssrcs; |
525 ssrcs.insert(kSourceSsrc); | 524 ssrcs.insert(kSourceSsrc); |
526 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 525 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
527 | 526 |
528 rtcp::Pli pli; | 527 rtcp::Pli pli; |
529 pli.To(kSourceSsrc); | 528 pli.To(kSourceSsrc); |
530 rtc::scoped_ptr<rtcp::RawPacket> packet(pli.Build()); | 529 rtc::Buffer packet = pli.Build(); |
531 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 530 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
532 EXPECT_EQ(kRtcpPli, rtcp_packet_info_.rtcpPacketTypeFlags); | 531 EXPECT_EQ(kRtcpPli, rtcp_packet_info_.rtcpPacketTypeFlags); |
533 } | 532 } |
534 | 533 |
535 TEST_F(RtcpReceiverTest, PliPacketNotToUsIgnored) { | 534 TEST_F(RtcpReceiverTest, PliPacketNotToUsIgnored) { |
536 const uint32_t kSourceSsrc = 0x123456; | 535 const uint32_t kSourceSsrc = 0x123456; |
537 std::set<uint32_t> ssrcs; | 536 std::set<uint32_t> ssrcs; |
538 ssrcs.insert(kSourceSsrc); | 537 ssrcs.insert(kSourceSsrc); |
539 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 538 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
540 | 539 |
541 rtcp::Pli pli; | 540 rtcp::Pli pli; |
542 pli.To(kSourceSsrc + 1); | 541 pli.To(kSourceSsrc + 1); |
543 rtc::scoped_ptr<rtcp::RawPacket> packet(pli.Build()); | 542 rtc::Buffer packet = pli.Build(); |
544 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 543 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
545 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 544 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
546 } | 545 } |
547 | 546 |
548 TEST_F(RtcpReceiverTest, InjectFirPacket) { | 547 TEST_F(RtcpReceiverTest, InjectFirPacket) { |
549 const uint32_t kSourceSsrc = 0x123456; | 548 const uint32_t kSourceSsrc = 0x123456; |
550 std::set<uint32_t> ssrcs; | 549 std::set<uint32_t> ssrcs; |
551 ssrcs.insert(kSourceSsrc); | 550 ssrcs.insert(kSourceSsrc); |
552 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 551 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
553 | 552 |
554 rtcp::Fir fir; | 553 rtcp::Fir fir; |
555 fir.WithRequestTo(kSourceSsrc, 13); | 554 fir.WithRequestTo(kSourceSsrc, 13); |
556 rtc::scoped_ptr<rtcp::RawPacket> packet(fir.Build()); | 555 rtc::Buffer packet = fir.Build(); |
557 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 556 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
558 EXPECT_EQ(kRtcpFir, rtcp_packet_info_.rtcpPacketTypeFlags); | 557 EXPECT_EQ(kRtcpFir, rtcp_packet_info_.rtcpPacketTypeFlags); |
559 } | 558 } |
560 | 559 |
561 TEST_F(RtcpReceiverTest, FirPacketNotToUsIgnored) { | 560 TEST_F(RtcpReceiverTest, FirPacketNotToUsIgnored) { |
562 const uint32_t kSourceSsrc = 0x123456; | 561 const uint32_t kSourceSsrc = 0x123456; |
563 std::set<uint32_t> ssrcs; | 562 std::set<uint32_t> ssrcs; |
564 ssrcs.insert(kSourceSsrc); | 563 ssrcs.insert(kSourceSsrc); |
565 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 564 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
566 | 565 |
567 rtcp::Fir fir; | 566 rtcp::Fir fir; |
568 fir.WithRequestTo(kSourceSsrc + 1, 13); | 567 fir.WithRequestTo(kSourceSsrc + 1, 13); |
569 rtc::scoped_ptr<rtcp::RawPacket> packet(fir.Build()); | 568 rtc::Buffer packet = fir.Build(); |
570 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 569 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
571 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 570 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
572 } | 571 } |
573 | 572 |
574 TEST_F(RtcpReceiverTest, InjectSliPacket) { | 573 TEST_F(RtcpReceiverTest, InjectSliPacket) { |
575 rtcp::Sli sli; | 574 rtcp::Sli sli; |
576 sli.WithPictureId(40); | 575 sli.WithPictureId(40); |
577 rtc::scoped_ptr<rtcp::RawPacket> packet(sli.Build()); | 576 rtc::Buffer packet = sli.Build(); |
578 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 577 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
579 EXPECT_EQ(kRtcpSli, rtcp_packet_info_.rtcpPacketTypeFlags); | 578 EXPECT_EQ(kRtcpSli, rtcp_packet_info_.rtcpPacketTypeFlags); |
580 EXPECT_EQ(40, rtcp_packet_info_.sliPictureId); | 579 EXPECT_EQ(40, rtcp_packet_info_.sliPictureId); |
581 } | 580 } |
582 | 581 |
583 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) { | 582 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) { |
584 rtcp::ExtendedReports xr; | 583 rtcp::ExtendedReports xr; |
585 xr.From(0x2345); | 584 xr.From(0x2345); |
586 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 585 rtc::Buffer packet = xr.Build(); |
587 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 586 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
588 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 587 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
589 } | 588 } |
590 | 589 |
591 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) { | 590 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) { |
592 const uint32_t kSourceSsrc = 0x123456; | 591 const uint32_t kSourceSsrc = 0x123456; |
593 std::set<uint32_t> ssrcs; | 592 std::set<uint32_t> ssrcs; |
594 ssrcs.insert(kSourceSsrc); | 593 ssrcs.insert(kSourceSsrc); |
595 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 594 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
596 | 595 |
597 const uint8_t kLossRate = 123; | 596 const uint8_t kLossRate = 123; |
598 rtcp::VoipMetric voip_metric; | 597 rtcp::VoipMetric voip_metric; |
599 voip_metric.To(kSourceSsrc); | 598 voip_metric.To(kSourceSsrc); |
600 RTCPVoIPMetric metric; | 599 RTCPVoIPMetric metric; |
601 metric.lossRate = kLossRate; | 600 metric.lossRate = kLossRate; |
602 voip_metric.WithVoipMetric(metric); | 601 voip_metric.WithVoipMetric(metric); |
603 rtcp::ExtendedReports xr; | 602 rtcp::ExtendedReports xr; |
604 xr.From(0x2345); | 603 xr.From(0x2345); |
605 xr.WithVoipMetric(voip_metric); | 604 xr.WithVoipMetric(voip_metric); |
606 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 605 rtc::Buffer packet = xr.Build(); |
607 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 606 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
608 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); | 607 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); |
609 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); | 608 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); |
610 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); | 609 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); |
611 } | 610 } |
612 | 611 |
613 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) { | 612 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) { |
614 const uint32_t kSourceSsrc = 0x123456; | 613 const uint32_t kSourceSsrc = 0x123456; |
615 std::set<uint32_t> ssrcs; | 614 std::set<uint32_t> ssrcs; |
616 ssrcs.insert(kSourceSsrc); | 615 ssrcs.insert(kSourceSsrc); |
617 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 616 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
618 | 617 |
619 rtcp::VoipMetric voip_metric; | 618 rtcp::VoipMetric voip_metric; |
620 voip_metric.To(kSourceSsrc + 1); | 619 voip_metric.To(kSourceSsrc + 1); |
621 rtcp::ExtendedReports xr; | 620 rtcp::ExtendedReports xr; |
622 xr.From(0x2345); | 621 xr.From(0x2345); |
623 xr.WithVoipMetric(voip_metric); | 622 xr.WithVoipMetric(voip_metric); |
624 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 623 rtc::Buffer packet = xr.Build(); |
625 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 624 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
626 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 625 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
627 } | 626 } |
628 | 627 |
629 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) { | 628 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) { |
630 rtcp::Rrtr rrtr; | 629 rtcp::Rrtr rrtr; |
631 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); | 630 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); |
632 rtcp::ExtendedReports xr; | 631 rtcp::ExtendedReports xr; |
633 xr.From(0x2345); | 632 xr.From(0x2345); |
634 xr.WithRrtr(rrtr); | 633 xr.WithRrtr(rrtr); |
635 | 634 |
636 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 635 rtc::Buffer packet = xr.Build(); |
637 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 636 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
638 EXPECT_EQ(kRtcpXrReceiverReferenceTime, | 637 EXPECT_EQ(kRtcpXrReceiverReferenceTime, |
639 rtcp_packet_info_.rtcpPacketTypeFlags); | 638 rtcp_packet_info_.rtcpPacketTypeFlags); |
640 } | 639 } |
641 | 640 |
642 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) { | 641 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) { |
643 const uint32_t kSourceSsrc = 0x123456; | 642 const uint32_t kSourceSsrc = 0x123456; |
644 std::set<uint32_t> ssrcs; | 643 std::set<uint32_t> ssrcs; |
645 ssrcs.insert(kSourceSsrc); | 644 ssrcs.insert(kSourceSsrc); |
646 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 645 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
647 | 646 |
648 rtcp::Dlrr dlrr; | 647 rtcp::Dlrr dlrr; |
649 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); | 648 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); |
650 rtcp::ExtendedReports xr; | 649 rtcp::ExtendedReports xr; |
651 xr.From(0x2345); | 650 xr.From(0x2345); |
652 xr.WithDlrr(dlrr); | 651 xr.WithDlrr(dlrr); |
653 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 652 rtc::Buffer packet = xr.Build(); |
654 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 653 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
655 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 654 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
656 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); | 655 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); |
657 } | 656 } |
658 | 657 |
659 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) { | 658 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) { |
660 const uint32_t kSourceSsrc = 0x123456; | 659 const uint32_t kSourceSsrc = 0x123456; |
661 std::set<uint32_t> ssrcs; | 660 std::set<uint32_t> ssrcs; |
662 ssrcs.insert(kSourceSsrc); | 661 ssrcs.insert(kSourceSsrc); |
663 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 662 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
664 | 663 |
665 rtcp::Dlrr dlrr; | 664 rtcp::Dlrr dlrr; |
666 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 665 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
667 rtcp::ExtendedReports xr; | 666 rtcp::ExtendedReports xr; |
668 xr.From(0x2345); | 667 xr.From(0x2345); |
669 xr.WithDlrr(dlrr); | 668 xr.WithDlrr(dlrr); |
670 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 669 rtc::Buffer packet = xr.Build(); |
671 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 670 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
672 // The parser should note the DLRR report block item, but not flag the packet | 671 // The parser should note the DLRR report block item, but not flag the packet |
673 // since the RTT is not estimated. | 672 // since the RTT is not estimated. |
674 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 673 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
675 } | 674 } |
676 | 675 |
677 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) { | 676 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) { |
678 const uint32_t kSourceSsrc = 0x123456; | 677 const uint32_t kSourceSsrc = 0x123456; |
679 std::set<uint32_t> ssrcs; | 678 std::set<uint32_t> ssrcs; |
680 ssrcs.insert(kSourceSsrc); | 679 ssrcs.insert(kSourceSsrc); |
681 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 680 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
682 | 681 |
683 rtcp::Dlrr dlrr; | 682 rtcp::Dlrr dlrr; |
684 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); | 683 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); |
685 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); | 684 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); |
686 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 685 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
687 rtcp::ExtendedReports xr; | 686 rtcp::ExtendedReports xr; |
688 xr.From(0x2345); | 687 xr.From(0x2345); |
689 xr.WithDlrr(dlrr); | 688 xr.WithDlrr(dlrr); |
690 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 689 rtc::Buffer packet = xr.Build(); |
691 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 690 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
692 // The parser should note the DLRR report block item, but not flag the packet | 691 // The parser should note the DLRR report block item, but not flag the packet |
693 // since the RTT is not estimated. | 692 // since the RTT is not estimated. |
694 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 693 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
695 } | 694 } |
696 | 695 |
697 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) { | 696 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) { |
698 const uint32_t kSourceSsrc = 0x123456; | 697 const uint32_t kSourceSsrc = 0x123456; |
699 std::set<uint32_t> ssrcs; | 698 std::set<uint32_t> ssrcs; |
700 ssrcs.insert(kSourceSsrc); | 699 ssrcs.insert(kSourceSsrc); |
701 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 700 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
702 | 701 |
703 rtcp::Rrtr rrtr; | 702 rtcp::Rrtr rrtr; |
704 rtcp::Dlrr dlrr; | 703 rtcp::Dlrr dlrr; |
705 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 704 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
706 rtcp::VoipMetric metric; | 705 rtcp::VoipMetric metric; |
707 metric.To(kSourceSsrc); | 706 metric.To(kSourceSsrc); |
708 rtcp::ExtendedReports xr; | 707 rtcp::ExtendedReports xr; |
709 xr.From(0x2345); | 708 xr.From(0x2345); |
710 xr.WithRrtr(rrtr); | 709 xr.WithRrtr(rrtr); |
711 xr.WithDlrr(dlrr); | 710 xr.WithDlrr(dlrr); |
712 xr.WithVoipMetric(metric); | 711 xr.WithVoipMetric(metric); |
713 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 712 rtc::Buffer packet = xr.Build(); |
714 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 713 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
715 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + | 714 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + |
716 kRtcpXrVoipMetric), | 715 kRtcpXrVoipMetric), |
717 rtcp_packet_info_.rtcpPacketTypeFlags); | 716 rtcp_packet_info_.rtcpPacketTypeFlags); |
718 // The parser should note the DLRR report block item, but not flag the packet | 717 // The parser should note the DLRR report block item, but not flag the packet |
719 // since the RTT is not estimated. | 718 // since the RTT is not estimated. |
720 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 719 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
721 } | 720 } |
722 | 721 |
723 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) { | 722 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) { |
724 const uint32_t kSourceSsrc = 0x123456; | 723 const uint32_t kSourceSsrc = 0x123456; |
725 std::set<uint32_t> ssrcs; | 724 std::set<uint32_t> ssrcs; |
726 ssrcs.insert(kSourceSsrc); | 725 ssrcs.insert(kSourceSsrc); |
727 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 726 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
728 std::vector<uint32_t> remote_ssrcs; | 727 std::vector<uint32_t> remote_ssrcs; |
729 remote_ssrcs.push_back(kSourceSsrc); | 728 remote_ssrcs.push_back(kSourceSsrc); |
730 | 729 |
731 rtcp::Rrtr rrtr; | 730 rtcp::Rrtr rrtr; |
732 rtcp::Dlrr dlrr; | 731 rtcp::Dlrr dlrr; |
733 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 732 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
734 rtcp::VoipMetric metric; | 733 rtcp::VoipMetric metric; |
735 metric.To(kSourceSsrc); | 734 metric.To(kSourceSsrc); |
736 rtcp::ExtendedReports xr; | 735 rtcp::ExtendedReports xr; |
737 xr.From(0x2345); | 736 xr.From(0x2345); |
738 xr.WithRrtr(rrtr); | 737 xr.WithRrtr(rrtr); |
739 xr.WithDlrr(dlrr); | 738 xr.WithDlrr(dlrr); |
740 xr.WithVoipMetric(metric); | 739 xr.WithVoipMetric(metric); |
741 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 740 rtc::Buffer packet = xr.Build(); |
742 // Modify the DLRR block to have an unsupported block type, from 5 to 6. | 741 // Modify the DLRR block to have an unsupported block type, from 5 to 6. |
743 uint8_t* buffer = const_cast<uint8_t*>(packet->Buffer()); | 742 uint8_t* buffer = packet.data(); |
744 EXPECT_EQ(5, buffer[20]); | 743 EXPECT_EQ(5, buffer[20]); |
745 buffer[20] = 6; | 744 buffer[20] = 6; |
746 | 745 |
747 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 746 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
748 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + | 747 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + |
749 kRtcpXrVoipMetric), | 748 kRtcpXrVoipMetric), |
750 rtcp_packet_info_.rtcpPacketTypeFlags); | 749 rtcp_packet_info_.rtcpPacketTypeFlags); |
751 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); | 750 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); |
752 } | 751 } |
753 | 752 |
754 TEST_F(RtcpReceiverTest, TestXrRrRttInitiallyFalse) { | 753 TEST_F(RtcpReceiverTest, TestXrRrRttInitiallyFalse) { |
755 int64_t rtt_ms; | 754 int64_t rtt_ms; |
756 EXPECT_FALSE(rtcp_receiver_->GetAndResetXrRrRtt(&rtt_ms)); | 755 EXPECT_FALSE(rtcp_receiver_->GetAndResetXrRrRtt(&rtt_ms)); |
757 } | 756 } |
758 | 757 |
759 TEST_F(RtcpReceiverTest, LastReceivedXrReferenceTimeInfoInitiallyFalse) { | 758 TEST_F(RtcpReceiverTest, LastReceivedXrReferenceTimeInfoInitiallyFalse) { |
760 RtcpReceiveTimeInfo info; | 759 RtcpReceiveTimeInfo info; |
761 EXPECT_FALSE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); | 760 EXPECT_FALSE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); |
762 } | 761 } |
763 | 762 |
764 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) { | 763 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) { |
765 const uint32_t kSenderSsrc = 0x123456; | 764 const uint32_t kSenderSsrc = 0x123456; |
766 const NtpTime kNtp(0x10203, 0x40506); | 765 const NtpTime kNtp(0x10203, 0x40506); |
767 const uint32_t kNtpMid = | 766 const uint32_t kNtpMid = |
768 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); | 767 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); |
769 | 768 |
770 rtcp::Rrtr rrtr; | 769 rtcp::Rrtr rrtr; |
771 rrtr.WithNtp(kNtp); | 770 rrtr.WithNtp(kNtp); |
772 rtcp::ExtendedReports xr; | 771 rtcp::ExtendedReports xr; |
773 xr.From(kSenderSsrc); | 772 xr.From(kSenderSsrc); |
774 xr.WithRrtr(rrtr); | 773 xr.WithRrtr(rrtr); |
775 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 774 rtc::Buffer packet = xr.Build(); |
776 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 775 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
777 EXPECT_EQ(kRtcpXrReceiverReferenceTime, | 776 EXPECT_EQ(kRtcpXrReceiverReferenceTime, |
778 rtcp_packet_info_.rtcpPacketTypeFlags); | 777 rtcp_packet_info_.rtcpPacketTypeFlags); |
779 | 778 |
780 RtcpReceiveTimeInfo info; | 779 RtcpReceiveTimeInfo info; |
781 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); | 780 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); |
782 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); | 781 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); |
783 EXPECT_EQ(kNtpMid, info.lastRR); | 782 EXPECT_EQ(kNtpMid, info.lastRR); |
784 EXPECT_EQ(0U, info.delaySinceLastRR); | 783 EXPECT_EQ(0U, info.delaySinceLastRR); |
785 | 784 |
786 system_clock_.AdvanceTimeMilliseconds(1000); | 785 system_clock_.AdvanceTimeMilliseconds(1000); |
(...skipping 17 matching lines...) Expand all Loading... |
804 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 803 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
805 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 804 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
806 | 805 |
807 // Add a RR and advance the clock just enough to not trigger a timeout. | 806 // Add a RR and advance the clock just enough to not trigger a timeout. |
808 rtcp::ReportBlock rb1; | 807 rtcp::ReportBlock rb1; |
809 rb1.To(kSourceSsrc); | 808 rb1.To(kSourceSsrc); |
810 rb1.WithExtHighestSeqNum(kSequenceNumber); | 809 rb1.WithExtHighestSeqNum(kSequenceNumber); |
811 rtcp::ReceiverReport rr1; | 810 rtcp::ReceiverReport rr1; |
812 rr1.From(kSenderSsrc); | 811 rr1.From(kSenderSsrc); |
813 rr1.WithReportBlock(rb1); | 812 rr1.WithReportBlock(rb1); |
814 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 813 rtc::Buffer p1 = rr1.Build(); |
815 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 814 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
816 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1); | 815 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1); |
817 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 816 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
818 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 817 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
819 | 818 |
820 // Add a RR with the same extended max as the previous RR to trigger a | 819 // Add a RR with the same extended max as the previous RR to trigger a |
821 // sequence number timeout, but not a RR timeout. | 820 // sequence number timeout, but not a RR timeout. |
822 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 821 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
823 system_clock_.AdvanceTimeMilliseconds(2); | 822 system_clock_.AdvanceTimeMilliseconds(2); |
824 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 823 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
825 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 824 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
826 | 825 |
827 // Advance clock enough to trigger an RR timeout too. | 826 // Advance clock enough to trigger an RR timeout too. |
828 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs); | 827 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs); |
829 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 828 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
830 | 829 |
831 // We should only get one timeout even though we still haven't received a new | 830 // We should only get one timeout even though we still haven't received a new |
832 // RR. | 831 // RR. |
833 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 832 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
834 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 833 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
835 | 834 |
836 // Add a new RR with increase sequence number to reset timers. | 835 // Add a new RR with increase sequence number to reset timers. |
837 rtcp::ReportBlock rb2; | 836 rtcp::ReportBlock rb2; |
838 rb2.To(kSourceSsrc); | 837 rb2.To(kSourceSsrc); |
839 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 838 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); |
840 rtcp::ReceiverReport rr2; | 839 rtcp::ReceiverReport rr2; |
841 rr2.From(kSenderSsrc); | 840 rr2.From(kSenderSsrc); |
842 rr2.WithReportBlock(rb2); | 841 rr2.WithReportBlock(rb2); |
843 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 842 rtc::Buffer p2 = rr2.Build(); |
844 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 843 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
845 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 844 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
846 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 845 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
847 | 846 |
848 // Verify we can get a timeout again once we've received new RR. | 847 // Verify we can get a timeout again once we've received new RR. |
849 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 848 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); |
850 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 849 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
851 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); | 850 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); |
852 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 851 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
853 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 852 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
854 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 853 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); |
855 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 854 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
856 } | 855 } |
857 | 856 |
858 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { | 857 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { |
859 // This call is expected to fail because no data has arrived. | 858 // This call is expected to fail because no data has arrived. |
860 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 859 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); |
861 } | 860 } |
862 | 861 |
863 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { | 862 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { |
864 const uint32_t kMediaFlowSsrc = 0x2040608; | 863 const uint32_t kMediaFlowSsrc = 0x2040608; |
865 const uint32_t kSenderSsrc = 0x10203; | 864 const uint32_t kSenderSsrc = 0x10203; |
866 std::set<uint32_t> ssrcs; | 865 std::set<uint32_t> ssrcs; |
867 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 866 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
868 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 867 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
869 | 868 |
870 rtcp::Tmmbr tmmbr; | 869 rtcp::Tmmbr tmmbr; |
871 tmmbr.From(kSenderSsrc); | 870 tmmbr.From(kSenderSsrc); |
872 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); | 871 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); |
873 | 872 |
874 rtcp::SenderReport sr; | 873 rtcp::SenderReport sr; |
875 sr.From(kSenderSsrc); | 874 sr.From(kSenderSsrc); |
876 sr.Append(&tmmbr); | 875 sr.Append(&tmmbr); |
877 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 876 rtc::Buffer packet = sr.Build(); |
878 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 877 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
879 | 878 |
880 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 879 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); |
881 TMMBRSet candidate_set; | 880 TMMBRSet candidate_set; |
882 candidate_set.VerifyAndAllocateSet(1); | 881 candidate_set.VerifyAndAllocateSet(1); |
883 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); | 882 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); |
884 EXPECT_LT(0U, candidate_set.Tmmbr(0)); | 883 EXPECT_LT(0U, candidate_set.Tmmbr(0)); |
885 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); | 884 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); |
886 } | 885 } |
887 | 886 |
888 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { | 887 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { |
889 const uint32_t kMediaFlowSsrc = 0x2040608; | 888 const uint32_t kMediaFlowSsrc = 0x2040608; |
890 const uint32_t kSenderSsrc = 0x10203; | 889 const uint32_t kSenderSsrc = 0x10203; |
891 | 890 |
892 rtcp::Tmmbr tmmbr; | 891 rtcp::Tmmbr tmmbr; |
893 tmmbr.From(kSenderSsrc); | 892 tmmbr.From(kSenderSsrc); |
894 // This SSRC is not what we are sending. | 893 // This SSRC is not what we are sending. |
895 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); | 894 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); |
896 | 895 |
897 rtcp::SenderReport sr; | 896 rtcp::SenderReport sr; |
898 sr.From(kSenderSsrc); | 897 sr.From(kSenderSsrc); |
899 sr.Append(&tmmbr); | 898 sr.Append(&tmmbr); |
900 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 899 rtc::Buffer packet = sr.Build(); |
901 | 900 |
902 std::set<uint32_t> ssrcs; | 901 std::set<uint32_t> ssrcs; |
903 ssrcs.insert(kMediaFlowSsrc); | 902 ssrcs.insert(kMediaFlowSsrc); |
904 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 903 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
905 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 904 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
906 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 905 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); |
907 } | 906 } |
908 | 907 |
909 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { | 908 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { |
910 const uint32_t kMediaFlowSsrc = 0x2040608; | 909 const uint32_t kMediaFlowSsrc = 0x2040608; |
911 const uint32_t kSenderSsrc = 0x10203; | 910 const uint32_t kSenderSsrc = 0x10203; |
912 std::set<uint32_t> ssrcs; | 911 std::set<uint32_t> ssrcs; |
913 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 912 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
914 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 913 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
915 | 914 |
916 rtcp::Tmmbr tmmbr; | 915 rtcp::Tmmbr tmmbr; |
917 tmmbr.From(kSenderSsrc); | 916 tmmbr.From(kSenderSsrc); |
918 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); | 917 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); |
919 | 918 |
920 rtcp::SenderReport sr; | 919 rtcp::SenderReport sr; |
921 sr.From(kSenderSsrc); | 920 sr.From(kSenderSsrc); |
922 sr.Append(&tmmbr); | 921 sr.Append(&tmmbr); |
923 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 922 rtc::Buffer packet = sr.Build(); |
924 | 923 |
925 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 924 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
926 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 925 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); |
927 } | 926 } |
928 | 927 |
929 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { | 928 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { |
930 const uint32_t kMediaFlowSsrc = 0x2040608; | 929 const uint32_t kMediaFlowSsrc = 0x2040608; |
931 const uint32_t kSenderSsrc = 0x10203; | 930 const uint32_t kSenderSsrc = 0x10203; |
932 std::set<uint32_t> ssrcs; | 931 std::set<uint32_t> ssrcs; |
933 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 932 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
934 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 933 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
935 | 934 |
936 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. | 935 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. |
937 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. | 936 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. |
938 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { | 937 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { |
939 rtcp::Tmmbr tmmbr; | 938 rtcp::Tmmbr tmmbr; |
940 tmmbr.From(ssrc); | 939 tmmbr.From(ssrc); |
941 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); | 940 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); |
942 | 941 |
943 rtcp::SenderReport sr; | 942 rtcp::SenderReport sr; |
944 sr.From(ssrc); | 943 sr.From(ssrc); |
945 sr.Append(&tmmbr); | 944 sr.Append(&tmmbr); |
946 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); | 945 rtc::Buffer packet = sr.Build(); |
947 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 946 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
948 // 5 seconds between each packet. | 947 // 5 seconds between each packet. |
949 system_clock_.AdvanceTimeMilliseconds(5000); | 948 system_clock_.AdvanceTimeMilliseconds(5000); |
950 } | 949 } |
951 // It is now starttime + 15. | 950 // It is now starttime + 15. |
952 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 951 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); |
953 TMMBRSet candidate_set; | 952 TMMBRSet candidate_set; |
954 candidate_set.VerifyAndAllocateSet(3); | 953 candidate_set.VerifyAndAllocateSet(3); |
955 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); | 954 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); |
956 EXPECT_LT(0U, candidate_set.Tmmbr(0)); | 955 EXPECT_LT(0U, candidate_set.Tmmbr(0)); |
957 // We expect the timeout to be 25 seconds. Advance the clock by 12 | 956 // We expect the timeout to be 25 seconds. Advance the clock by 12 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 rtcp::ReportBlock rb1; | 1006 rtcp::ReportBlock rb1; |
1008 rb1.To(kSourceSsrc); | 1007 rb1.To(kSourceSsrc); |
1009 rb1.WithExtHighestSeqNum(kSequenceNumber); | 1008 rb1.WithExtHighestSeqNum(kSequenceNumber); |
1010 rb1.WithFractionLost(kFractionLoss); | 1009 rb1.WithFractionLost(kFractionLoss); |
1011 rb1.WithCumulativeLost(kCumulativeLoss); | 1010 rb1.WithCumulativeLost(kCumulativeLoss); |
1012 rb1.WithJitter(kJitter); | 1011 rb1.WithJitter(kJitter); |
1013 | 1012 |
1014 rtcp::ReceiverReport rr1; | 1013 rtcp::ReceiverReport rr1; |
1015 rr1.From(kSenderSsrc); | 1014 rr1.From(kSenderSsrc); |
1016 rr1.WithReportBlock(rb1); | 1015 rr1.WithReportBlock(rb1); |
1017 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); | 1016 rtc::Buffer p1 = rr1.Build(); |
1018 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); | 1017 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size())); |
1019 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 1018 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, |
1020 kCumulativeLoss, kJitter)); | 1019 kCumulativeLoss, kJitter)); |
1021 | 1020 |
1022 rtcp_receiver_->RegisterRtcpStatisticsCallback(nullptr); | 1021 rtcp_receiver_->RegisterRtcpStatisticsCallback(nullptr); |
1023 | 1022 |
1024 // Add arbitrary numbers, callback should not be called (retain old values). | 1023 // Add arbitrary numbers, callback should not be called (retain old values). |
1025 rtcp::ReportBlock rb2; | 1024 rtcp::ReportBlock rb2; |
1026 rb2.To(kSourceSsrc); | 1025 rb2.To(kSourceSsrc); |
1027 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); | 1026 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); |
1028 rb2.WithFractionLost(42); | 1027 rb2.WithFractionLost(42); |
1029 rb2.WithCumulativeLost(137); | 1028 rb2.WithCumulativeLost(137); |
1030 rb2.WithJitter(4711); | 1029 rb2.WithJitter(4711); |
1031 | 1030 |
1032 rtcp::ReceiverReport rr2; | 1031 rtcp::ReceiverReport rr2; |
1033 rr2.From(kSenderSsrc); | 1032 rr2.From(kSenderSsrc); |
1034 rr2.WithReportBlock(rb2); | 1033 rr2.WithReportBlock(rb2); |
1035 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); | 1034 rtc::Buffer p2 = rr2.Build(); |
1036 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); | 1035 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
1037 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, | 1036 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, |
1038 kCumulativeLoss, kJitter)); | 1037 kCumulativeLoss, kJitter)); |
1039 } | 1038 } |
1040 | 1039 |
1041 TEST_F(RtcpReceiverTest, ReceivesTransportFeedback) { | 1040 TEST_F(RtcpReceiverTest, ReceivesTransportFeedback) { |
1042 const uint32_t kSenderSsrc = 0x10203; | 1041 const uint32_t kSenderSsrc = 0x10203; |
1043 const uint32_t kSourceSsrc = 0x123456; | 1042 const uint32_t kSourceSsrc = 0x123456; |
1044 | 1043 |
1045 std::set<uint32_t> ssrcs; | 1044 std::set<uint32_t> ssrcs; |
1046 ssrcs.insert(kSourceSsrc); | 1045 ssrcs.insert(kSourceSsrc); |
1047 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 1046 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
1048 | 1047 |
1049 rtcp::TransportFeedback packet; | 1048 rtcp::TransportFeedback packet; |
1050 packet.WithMediaSourceSsrc(kSourceSsrc); | 1049 packet.WithMediaSourceSsrc(kSourceSsrc); |
1051 packet.WithPacketSenderSsrc(kSenderSsrc); | 1050 packet.WithPacketSenderSsrc(kSenderSsrc); |
1052 packet.WithBase(1, 1000); | 1051 packet.WithBase(1, 1000); |
1053 packet.WithReceivedPacket(1, 1000); | 1052 packet.WithReceivedPacket(1, 1000); |
1054 | 1053 |
1055 rtc::scoped_ptr<rtcp::RawPacket> built_packet = packet.Build(); | 1054 rtc::Buffer built_packet = packet.Build(); |
1056 ASSERT_TRUE(built_packet.get() != nullptr); | |
1057 | 1055 |
1058 EXPECT_EQ(0, | 1056 EXPECT_EQ(0, InjectRtcpPacket(built_packet.data(), built_packet.size())); |
1059 InjectRtcpPacket(built_packet->Buffer(), built_packet->Length())); | |
1060 | 1057 |
1061 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); | 1058 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); |
1062 EXPECT_TRUE(rtcp_packet_info_.transport_feedback_.get() != nullptr); | 1059 EXPECT_TRUE(rtcp_packet_info_.transport_feedback_.get() != nullptr); |
1063 } | 1060 } |
1064 | 1061 |
1065 TEST_F(RtcpReceiverTest, HandlesInvalidTransportFeedback) { | 1062 TEST_F(RtcpReceiverTest, HandlesInvalidTransportFeedback) { |
1066 const uint32_t kSenderSsrc = 0x10203; | 1063 const uint32_t kSenderSsrc = 0x10203; |
1067 const uint32_t kSourceSsrc = 0x123456; | 1064 const uint32_t kSourceSsrc = 0x123456; |
1068 | 1065 |
1069 std::set<uint32_t> ssrcs; | 1066 std::set<uint32_t> ssrcs; |
1070 ssrcs.insert(kSourceSsrc); | 1067 ssrcs.insert(kSourceSsrc); |
1071 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 1068 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
1072 | 1069 |
1073 // Send a compound packet with a TransportFeedback followed by something else. | 1070 // Send a compound packet with a TransportFeedback followed by something else. |
1074 rtcp::TransportFeedback packet; | 1071 rtcp::TransportFeedback packet; |
1075 packet.WithMediaSourceSsrc(kSourceSsrc); | 1072 packet.WithMediaSourceSsrc(kSourceSsrc); |
1076 packet.WithPacketSenderSsrc(kSenderSsrc); | 1073 packet.WithPacketSenderSsrc(kSenderSsrc); |
1077 packet.WithBase(1, 1000); | 1074 packet.WithBase(1, 1000); |
1078 packet.WithReceivedPacket(1, 1000); | 1075 packet.WithReceivedPacket(1, 1000); |
1079 | 1076 |
1080 static uint32_t kBitrateBps = 50000; | 1077 static uint32_t kBitrateBps = 50000; |
1081 rtcp::Remb remb; | 1078 rtcp::Remb remb; |
1082 remb.From(kSourceSsrc); | 1079 remb.From(kSourceSsrc); |
1083 remb.WithBitrateBps(kBitrateBps); | 1080 remb.WithBitrateBps(kBitrateBps); |
1084 packet.Append(&remb); | 1081 packet.Append(&remb); |
1085 | 1082 |
1086 rtc::scoped_ptr<rtcp::RawPacket> built_packet = packet.Build(); | 1083 rtc::Buffer built_packet = packet.Build(); |
1087 ASSERT_TRUE(built_packet.get() != nullptr); | |
1088 | 1084 |
1089 // Modify the TransportFeedback packet so that it is invalid. | 1085 // Modify the TransportFeedback packet so that it is invalid. |
1090 const size_t kStatusCountOffset = 14; | 1086 const size_t kStatusCountOffset = 14; |
1091 ByteWriter<uint16_t>::WriteBigEndian( | 1087 ByteWriter<uint16_t>::WriteBigEndian( |
1092 &built_packet->MutableBuffer()[kStatusCountOffset], 42); | 1088 &built_packet.data()[kStatusCountOffset], 42); |
1093 | 1089 |
1094 EXPECT_EQ(0, | 1090 EXPECT_EQ(0, InjectRtcpPacket(built_packet.data(), built_packet.size())); |
1095 InjectRtcpPacket(built_packet->Buffer(), built_packet->Length())); | |
1096 | 1091 |
1097 // Transport feedback should be ignored, but next packet should work. | 1092 // Transport feedback should be ignored, but next packet should work. |
1098 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); | 1093 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); |
1099 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); | 1094 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); |
1100 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); | 1095 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); |
1101 } | 1096 } |
1102 | 1097 |
1103 } // Anonymous namespace | 1098 } // Anonymous namespace |
1104 | 1099 |
1105 } // namespace webrtc | 1100 } // namespace webrtc |
OLD | NEW |