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

Side by Side Diff: webrtc/pc/channel_unittest.cc

Issue 2606123002: Remove the dependency of TransportChannel and TransportChannelImpl. (Closed)
Patch Set: Fix the format. Created 3 years, 11 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 2009 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2009 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 <memory> 11 #include <memory>
12 12
13 #include "webrtc/base/array_view.h" 13 #include "webrtc/base/array_view.h"
14 #include "webrtc/base/buffer.h" 14 #include "webrtc/base/buffer.h"
15 #include "webrtc/base/fakeclock.h" 15 #include "webrtc/base/fakeclock.h"
16 #include "webrtc/base/gunit.h" 16 #include "webrtc/base/gunit.h"
17 #include "webrtc/base/logging.h" 17 #include "webrtc/base/logging.h"
18 #include "webrtc/base/sslstreamadapter.h" 18 #include "webrtc/base/sslstreamadapter.h"
19 #include "webrtc/media/base/fakemediaengine.h" 19 #include "webrtc/media/base/fakemediaengine.h"
20 #include "webrtc/media/base/fakertp.h" 20 #include "webrtc/media/base/fakertp.h"
21 #include "webrtc/media/base/mediachannel.h" 21 #include "webrtc/media/base/mediachannel.h"
22 #include "webrtc/media/base/testutils.h" 22 #include "webrtc/media/base/testutils.h"
23 #include "webrtc/p2p/base/dtlstransportinternal.h"
23 #include "webrtc/p2p/base/faketransportcontroller.h" 24 #include "webrtc/p2p/base/faketransportcontroller.h"
24 #include "webrtc/p2p/base/transportchannelimpl.h"
25 #include "webrtc/pc/channel.h" 25 #include "webrtc/pc/channel.h"
26 26
27 #define MAYBE_SKIP_TEST(feature) \ 27 #define MAYBE_SKIP_TEST(feature) \
28 if (!(rtc::SSLStreamAdapter::feature())) { \ 28 if (!(rtc::SSLStreamAdapter::feature())) { \
29 LOG(LS_INFO) << "Feature disabled... skipping"; \ 29 LOG(LS_INFO) << "Feature disabled... skipping"; \
30 return; \ 30 return; \
31 } 31 }
32 32
33 using cricket::CA_OFFER; 33 using cricket::CA_OFFER;
34 using cricket::CA_PRANSWER; 34 using cricket::CA_PRANSWER;
35 using cricket::CA_ANSWER; 35 using cricket::CA_ANSWER;
36 using cricket::CA_UPDATE; 36 using cricket::CA_UPDATE;
37 using cricket::DtlsTransportInternal;
37 using cricket::FakeVoiceMediaChannel; 38 using cricket::FakeVoiceMediaChannel;
38 using cricket::StreamParams; 39 using cricket::StreamParams;
39 using cricket::TransportChannel;
40 40
41 namespace { 41 namespace {
42 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 64000, 8000, 1); 42 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 64000, 8000, 1);
43 const cricket::AudioCodec kPcmaCodec(8, "PCMA", 64000, 8000, 1); 43 const cricket::AudioCodec kPcmaCodec(8, "PCMA", 64000, 8000, 1);
44 const cricket::AudioCodec kIsacCodec(103, "ISAC", 40000, 16000, 1); 44 const cricket::AudioCodec kIsacCodec(103, "ISAC", 40000, 16000, 1);
45 const cricket::VideoCodec kH264Codec(97, "H264"); 45 const cricket::VideoCodec kH264Codec(97, "H264");
46 const cricket::VideoCodec kH264SvcCodec(99, "H264-SVC"); 46 const cricket::VideoCodec kH264SvcCodec(99, "H264-SVC");
47 const cricket::DataCodec kGoogleDataCodec(101, "google-data"); 47 const cricket::DataCodec kGoogleDataCodec(101, "google-data");
48 const uint32_t kSsrc1 = 0x1111; 48 const uint32_t kSsrc1 = 0x1111;
49 const uint32_t kSsrc2 = 0x2222; 49 const uint32_t kSsrc2 = 0x2222;
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 rtc::Thread* signaling_thread = 208 rtc::Thread* signaling_thread =
209 transport_controller ? transport_controller->signaling_thread() 209 transport_controller ? transport_controller->signaling_thread()
210 : nullptr; 210 : nullptr;
211 typename T::Channel* channel = new typename T::Channel( 211 typename T::Channel* channel = new typename T::Channel(
212 worker_thread, network_thread, signaling_thread, engine, ch, 212 worker_thread, network_thread, signaling_thread, engine, ch,
213 cricket::CN_AUDIO, (flags & RTCP_MUX_REQUIRED) != 0, 213 cricket::CN_AUDIO, (flags & RTCP_MUX_REQUIRED) != 0,
214 (flags & SECURE) != 0); 214 (flags & SECURE) != 0);
215 rtc::CryptoOptions crypto_options; 215 rtc::CryptoOptions crypto_options;
216 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; 216 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0;
217 channel->SetCryptoOptions(crypto_options); 217 channel->SetCryptoOptions(crypto_options);
218 cricket::TransportChannel* rtp_transport = 218 cricket::DtlsTransportInternal* rtp_dtls_transport =
219 transport_controller->CreateTransportChannel( 219 transport_controller->CreateDtlsTransport(
220 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTP); 220 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTP);
221 cricket::TransportChannel* rtcp_transport = nullptr; 221 cricket::DtlsTransportInternal* rtcp_dtls_transport = nullptr;
222 if (channel->NeedsRtcpTransport()) { 222 if (channel->NeedsRtcpTransport()) {
223 rtcp_transport = transport_controller->CreateTransportChannel( 223 rtcp_dtls_transport = transport_controller->CreateDtlsTransport(
224 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTCP); 224 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTCP);
225 } 225 }
226 if (!channel->Init_w(rtp_transport, rtcp_transport)) { 226 if (!channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport)) {
227 delete channel; 227 delete channel;
228 channel = NULL; 228 channel = NULL;
229 } 229 }
230 return channel; 230 return channel;
231 } 231 }
232 232
233 bool SendInitiate() { 233 bool SendInitiate() {
234 bool result = channel1_->SetLocalContent(&local_media_content1_, 234 bool result = channel1_->SetLocalContent(&local_media_content1_,
235 CA_OFFER, NULL); 235 CA_OFFER, NULL);
236 if (result) { 236 if (result) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 return true; 291 return true;
292 } 292 }
293 293
294 bool AddStream1(int id) { 294 bool AddStream1(int id) {
295 return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id)); 295 return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id));
296 } 296 }
297 bool RemoveStream1(int id) { 297 bool RemoveStream1(int id) {
298 return channel1_->RemoveRecvStream(id); 298 return channel1_->RemoveRecvStream(id);
299 } 299 }
300 300
301 std::vector<cricket::TransportChannelImpl*> GetChannels1() { 301 std::vector<cricket::DtlsTransportInternal*> GetChannels1() {
302 return transport_controller1_->channels_for_testing(); 302 return transport_controller1_->channels_for_testing();
303 } 303 }
304 304
305 std::vector<cricket::TransportChannelImpl*> GetChannels2() { 305 std::vector<cricket::DtlsTransportInternal*> GetChannels2() {
306 return transport_controller2_->channels_for_testing(); 306 return transport_controller2_->channels_for_testing();
307 } 307 }
308 308
309 cricket::FakeTransportChannel* GetFakeChannel1(int component) { 309 cricket::FakeDtlsTransport* GetFakeChannel1(int component) {
310 return transport_controller1_->GetFakeTransportChannel_n( 310 return transport_controller1_->GetFakeDtlsTransport_n(
311 channel1_->content_name(), component); 311 channel1_->content_name(), component);
312 } 312 }
313 313
314 cricket::FakeTransportChannel* GetFakeChannel2(int component) { 314 cricket::FakeDtlsTransport* GetFakeChannel2(int component) {
315 return transport_controller2_->GetFakeTransportChannel_n( 315 return transport_controller2_->GetFakeDtlsTransport_n(
316 channel2_->content_name(), component); 316 channel2_->content_name(), component);
317 } 317 }
318 318
319 void SendRtp1() { 319 void SendRtp1() {
320 media_channel1_->SendRtp(rtp_packet_.data(), rtp_packet_.size(), 320 media_channel1_->SendRtp(rtp_packet_.data(), rtp_packet_.size(),
321 rtc::PacketOptions()); 321 rtc::PacketOptions());
322 } 322 }
323 void SendRtp2() { 323 void SendRtp2() {
324 media_channel2_->SendRtp(rtp_packet_.data(), rtp_packet_.size(), 324 media_channel2_->SendRtp(rtp_packet_.data(), rtp_packet_.size(),
325 rtc::PacketOptions()); 325 rtc::PacketOptions());
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 bool CheckNoRtcp1() { 403 bool CheckNoRtcp1() {
404 return media_channel1_->CheckNoRtcp(); 404 return media_channel1_->CheckNoRtcp();
405 } 405 }
406 bool CheckNoRtcp2() { 406 bool CheckNoRtcp2() {
407 return media_channel2_->CheckNoRtcp(); 407 return media_channel2_->CheckNoRtcp();
408 } 408 }
409 // Checks that the channel is using GCM iff GCM_CIPHER is set in flags. 409 // Checks that the channel is using GCM iff GCM_CIPHER is set in flags.
410 // Returns true if so. 410 // Returns true if so.
411 bool CheckGcmCipher(typename T::Channel* channel, int flags) { 411 bool CheckGcmCipher(typename T::Channel* channel, int flags) {
412 int suite; 412 int suite;
413 if (!channel->rtp_transport()->GetSrtpCryptoSuite(&suite)) { 413 if (!channel->rtp_dtls_transport()->GetSrtpCryptoSuite(&suite)) {
414 return false; 414 return false;
415 } 415 }
416 416
417 if (flags & GCM_CIPHER) { 417 if (flags & GCM_CIPHER) {
418 return rtc::IsGcmCryptoSuite(suite); 418 return rtc::IsGcmCryptoSuite(suite);
419 } else { 419 } else {
420 return (suite != rtc::SRTP_INVALID_CRYPTO_SUITE && 420 return (suite != rtc::SRTP_INVALID_CRYPTO_SUITE &&
421 !rtc::IsGcmCryptoSuite(suite)); 421 !rtc::IsGcmCryptoSuite(suite));
422 } 422 }
423 } 423 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 533 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL));
534 ASSERT_EQ(1U, media_channel1_->codecs().size()); 534 ASSERT_EQ(1U, media_channel1_->codecs().size());
535 EXPECT_TRUE(CodecMatches(content.codecs()[0], 535 EXPECT_TRUE(CodecMatches(content.codecs()[0],
536 media_channel1_->codecs()[0])); 536 media_channel1_->codecs()[0]));
537 } 537 }
538 538
539 // Test that SetLocalContent and SetRemoteContent properly set RTCP 539 // Test that SetLocalContent and SetRemoteContent properly set RTCP
540 // mux. 540 // mux.
541 void TestSetContentsRtcpMux() { 541 void TestSetContentsRtcpMux() {
542 CreateChannels(0, 0); 542 CreateChannels(0, 0);
543 EXPECT_TRUE(channel1_->rtcp_transport() != NULL); 543 EXPECT_TRUE(channel1_->rtcp_dtls_transport() != NULL);
544 EXPECT_TRUE(channel2_->rtcp_transport() != NULL); 544 EXPECT_TRUE(channel2_->rtcp_dtls_transport() != NULL);
545 typename T::Content content; 545 typename T::Content content;
546 CreateContent(0, kPcmuCodec, kH264Codec, &content); 546 CreateContent(0, kPcmuCodec, kH264Codec, &content);
547 // Both sides agree on mux. Should no longer be a separate RTCP channel. 547 // Both sides agree on mux. Should no longer be a separate RTCP channel.
548 content.set_rtcp_mux(true); 548 content.set_rtcp_mux(true);
549 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 549 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL));
550 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 550 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL));
551 EXPECT_TRUE(channel1_->rtcp_transport() == NULL); 551 EXPECT_TRUE(channel1_->rtcp_dtls_transport() == NULL);
552 // Only initiator supports mux. Should still have a separate RTCP channel. 552 // Only initiator supports mux. Should still have a separate RTCP channel.
553 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL)); 553 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL));
554 content.set_rtcp_mux(false); 554 content.set_rtcp_mux(false);
555 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL)); 555 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL));
556 EXPECT_TRUE(channel2_->rtcp_transport() != NULL); 556 EXPECT_TRUE(channel2_->rtcp_dtls_transport() != NULL);
557 } 557 }
558 558
559 // Test that SetLocalContent and SetRemoteContent properly set RTCP 559 // Test that SetLocalContent and SetRemoteContent properly set RTCP
560 // mux when a provisional answer is received. 560 // mux when a provisional answer is received.
561 void TestSetContentsRtcpMuxWithPrAnswer() { 561 void TestSetContentsRtcpMuxWithPrAnswer() {
562 CreateChannels(0, 0); 562 CreateChannels(0, 0);
563 EXPECT_TRUE(channel1_->rtcp_transport() != NULL); 563 EXPECT_TRUE(channel1_->rtcp_dtls_transport() != NULL);
564 EXPECT_TRUE(channel2_->rtcp_transport() != NULL); 564 EXPECT_TRUE(channel2_->rtcp_dtls_transport() != NULL);
565 typename T::Content content; 565 typename T::Content content;
566 CreateContent(0, kPcmuCodec, kH264Codec, &content); 566 CreateContent(0, kPcmuCodec, kH264Codec, &content);
567 content.set_rtcp_mux(true); 567 content.set_rtcp_mux(true);
568 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 568 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL));
569 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_PRANSWER, NULL)); 569 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_PRANSWER, NULL));
570 EXPECT_TRUE(channel1_->rtcp_transport() != NULL); 570 EXPECT_TRUE(channel1_->rtcp_dtls_transport() != NULL);
571 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 571 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL));
572 // Both sides agree on mux. Should no longer be a separate RTCP channel. 572 // Both sides agree on mux. Should no longer be a separate RTCP channel.
573 EXPECT_TRUE(channel1_->rtcp_transport() == NULL); 573 EXPECT_TRUE(channel1_->rtcp_dtls_transport() == NULL);
574 // Only initiator supports mux. Should still have a separate RTCP channel. 574 // Only initiator supports mux. Should still have a separate RTCP channel.
575 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL)); 575 EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL));
576 content.set_rtcp_mux(false); 576 content.set_rtcp_mux(false);
577 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_PRANSWER, NULL)); 577 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_PRANSWER, NULL));
578 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL)); 578 EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL));
579 EXPECT_TRUE(channel2_->rtcp_transport() != NULL); 579 EXPECT_TRUE(channel2_->rtcp_dtls_transport() != NULL);
580 } 580 }
581 581
582 // Test that SetRemoteContent properly deals with a content update. 582 // Test that SetRemoteContent properly deals with a content update.
583 void TestSetRemoteContentUpdate() { 583 void TestSetRemoteContentUpdate() {
584 CreateChannels(0, 0); 584 CreateChannels(0, 0);
585 typename T::Content content; 585 typename T::Content content;
586 CreateContent(RTCP_MUX | SECURE, kPcmuCodec, kH264Codec, &content); 586 CreateContent(RTCP_MUX | SECURE, kPcmuCodec, kH264Codec, &content);
587 EXPECT_EQ(0U, media_channel1_->codecs().size()); 587 EXPECT_EQ(0U, media_channel1_->codecs().size());
588 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 588 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL));
589 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 589 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL));
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 949
950 // Tests that when the transport channel signals a candidate pair change 950 // Tests that when the transport channel signals a candidate pair change
951 // event, the media channel will receive a call on the network route change. 951 // event, the media channel will receive a call on the network route change.
952 void TestNetworkRouteChanges() { 952 void TestNetworkRouteChanges() {
953 constexpr uint16_t kLocalNetId = 1; 953 constexpr uint16_t kLocalNetId = 1;
954 constexpr uint16_t kRemoteNetId = 2; 954 constexpr uint16_t kRemoteNetId = 2;
955 constexpr int kLastPacketId = 100; 955 constexpr int kLastPacketId = 100;
956 956
957 CreateChannels(0, 0); 957 CreateChannels(0, 0);
958 958
959 cricket::TransportChannel* transport_channel1 = channel1_->rtp_transport(); 959 cricket::DtlsTransportInternal* transport_channel1 =
960 channel1_->rtp_dtls_transport();
960 ASSERT_TRUE(transport_channel1); 961 ASSERT_TRUE(transport_channel1);
961 typename T::MediaChannel* media_channel1 = 962 typename T::MediaChannel* media_channel1 =
962 static_cast<typename T::MediaChannel*>(channel1_->media_channel()); 963 static_cast<typename T::MediaChannel*>(channel1_->media_channel());
963 ASSERT_TRUE(media_channel1); 964 ASSERT_TRUE(media_channel1);
964 965
965 media_channel1->set_num_network_route_changes(0); 966 media_channel1->set_num_network_route_changes(0);
966 network_thread_->Invoke<void>(RTC_FROM_HERE, [transport_channel1] { 967 network_thread_->Invoke<void>(RTC_FROM_HERE, [transport_channel1] {
967 // The transport channel becomes disconnected. 968 // The transport channel becomes disconnected.
968 transport_channel1->SignalSelectedCandidatePairChanged( 969 transport_channel1->ice_transport()->SignalSelectedCandidatePairChanged(
969 transport_channel1, nullptr, -1, false); 970 transport_channel1->ice_transport(), nullptr, -1, false);
970 }); 971 });
971 WaitForThreads(); 972 WaitForThreads();
972 EXPECT_EQ(1, media_channel1->num_network_route_changes()); 973 EXPECT_EQ(1, media_channel1->num_network_route_changes());
973 EXPECT_FALSE(media_channel1->last_network_route().connected); 974 EXPECT_FALSE(media_channel1->last_network_route().connected);
974 media_channel1->set_num_network_route_changes(0); 975 media_channel1->set_num_network_route_changes(0);
975 976
976 network_thread_->Invoke<void>(RTC_FROM_HERE, [this, transport_channel1, 977 network_thread_->Invoke<void>(RTC_FROM_HERE, [this, transport_channel1,
977 media_channel1, kLocalNetId, 978 media_channel1, kLocalNetId,
978 kRemoteNetId, kLastPacketId] { 979 kRemoteNetId, kLastPacketId] {
979 // The transport channel becomes connected. 980 // The transport channel becomes connected.
980 rtc::SocketAddress local_address("192.168.1.1", 1000 /* port number */); 981 rtc::SocketAddress local_address("192.168.1.1", 1000 /* port number */);
981 rtc::SocketAddress remote_address("192.168.1.2", 2000 /* port number */); 982 rtc::SocketAddress remote_address("192.168.1.2", 2000 /* port number */);
982 std::unique_ptr<cricket::CandidatePairInterface> candidate_pair( 983 std::unique_ptr<cricket::CandidatePairInterface> candidate_pair(
983 transport_controller1_->CreateFakeCandidatePair( 984 transport_controller1_->CreateFakeCandidatePair(
984 local_address, kLocalNetId, remote_address, kRemoteNetId)); 985 local_address, kLocalNetId, remote_address, kRemoteNetId));
985 transport_channel1->SignalSelectedCandidatePairChanged( 986 transport_channel1->ice_transport()->SignalSelectedCandidatePairChanged(
986 transport_channel1, candidate_pair.get(), kLastPacketId, true); 987 transport_channel1->ice_transport(), candidate_pair.get(),
988 kLastPacketId, true);
987 }); 989 });
988 WaitForThreads(); 990 WaitForThreads();
989 EXPECT_EQ(1, media_channel1->num_network_route_changes()); 991 EXPECT_EQ(1, media_channel1->num_network_route_changes());
990 rtc::NetworkRoute expected_network_route(true, kLocalNetId, kRemoteNetId, 992 rtc::NetworkRoute expected_network_route(true, kLocalNetId, kRemoteNetId,
991 kLastPacketId); 993 kLastPacketId);
992 EXPECT_EQ(expected_network_route, media_channel1->last_network_route()); 994 EXPECT_EQ(expected_network_route, media_channel1->last_network_route());
993 EXPECT_EQ(kLastPacketId, 995 EXPECT_EQ(kLastPacketId,
994 media_channel1->last_network_route().last_sent_packet_id); 996 media_channel1->last_network_route().last_sent_packet_id);
995 constexpr int kTransportOverheadPerPacket = 28; // Ipv4(20) + UDP(8). 997 constexpr int kTransportOverheadPerPacket = 28; // Ipv4(20) + UDP(8).
996 EXPECT_EQ(kTransportOverheadPerPacket, 998 EXPECT_EQ(kTransportOverheadPerPacket,
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1465 network_thread_->Invoke<void>( 1467 network_thread_->Invoke<void>(
1466 RTC_FROM_HERE, [this] { GetFakeChannel1(1)->SetDestination(nullptr); }); 1468 RTC_FROM_HERE, [this] { GetFakeChannel1(1)->SetDestination(nullptr); });
1467 EXPECT_TRUE(media_channel1_->sending()); 1469 EXPECT_TRUE(media_channel1_->sending());
1468 1470
1469 // Should fail also. 1471 // Should fail also.
1470 SendRtp1(); 1472 SendRtp1();
1471 SendRtp2(); 1473 SendRtp2();
1472 WaitForThreads(); 1474 WaitForThreads();
1473 EXPECT_TRUE(CheckRtp1()); 1475 EXPECT_TRUE(CheckRtp1());
1474 EXPECT_TRUE(CheckNoRtp2()); 1476 EXPECT_TRUE(CheckNoRtp2());
1477 EXPECT_TRUE(CheckNoRtp1());
1475 1478
1476 // Gain writability back 1479 // Gain writability back
1477 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { 1480 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
1478 GetFakeChannel1(1)->SetDestination(GetFakeChannel2(1)); 1481 GetFakeChannel1(1)->SetDestination(GetFakeChannel2(1));
1479 }); 1482 });
1480 EXPECT_TRUE(media_channel1_->sending()); 1483 EXPECT_TRUE(media_channel1_->sending());
1481 SendRtp1(); 1484 SendRtp1();
1482 SendRtp2(); 1485 SendRtp2();
1483 WaitForThreads(); 1486 WaitForThreads();
1484 EXPECT_TRUE(CheckRtp1()); 1487 EXPECT_TRUE(CheckRtp1());
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1774 rtc::PacketOptions()); 1777 rtc::PacketOptions());
1775 WaitForThreads(); 1778 WaitForThreads();
1776 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_handler.error_); 1779 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_handler.error_);
1777 EXPECT_EQ(cricket::SrtpFilter::PROTECT, error_handler.mode_); 1780 EXPECT_EQ(cricket::SrtpFilter::PROTECT, error_handler.mode_);
1778 1781
1779 // Testing failures in receiving packets. 1782 // Testing failures in receiving packets.
1780 error_handler.error_ = cricket::SrtpFilter::ERROR_NONE; 1783 error_handler.error_ = cricket::SrtpFilter::ERROR_NONE;
1781 error_handler.mode_ = cricket::SrtpFilter::UNPROTECT; 1784 error_handler.mode_ = cricket::SrtpFilter::UNPROTECT;
1782 1785
1783 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { 1786 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
1784 cricket::TransportChannel* transport_channel = channel2_->rtp_transport(); 1787 cricket::DtlsTransportInternal* transport_channel =
1788 channel2_->rtp_dtls_transport();
1785 transport_channel->SignalReadPacket( 1789 transport_channel->SignalReadPacket(
1786 transport_channel, reinterpret_cast<const char*>(kBadPacket), 1790 transport_channel, reinterpret_cast<const char*>(kBadPacket),
1787 sizeof(kBadPacket), rtc::PacketTime(), 0); 1791 sizeof(kBadPacket), rtc::PacketTime(), 0);
1788 }); 1792 });
1789 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_handler.error_); 1793 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_handler.error_);
1790 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, error_handler.mode_); 1794 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, error_handler.mode_);
1791 // Terminate channels before the fake clock is destroyed. 1795 // Terminate channels before the fake clock is destroyed.
1792 EXPECT_TRUE(SendTerminate()); 1796 EXPECT_TRUE(SendTerminate());
1793 } 1797 }
1794 1798
1795 void TestOnReadyToSend() { 1799 void TestOnReadyToSend() {
1796 CreateChannels(0, 0); 1800 CreateChannels(0, 0);
1797 TransportChannel* rtp = channel1_->rtp_transport(); 1801 DtlsTransportInternal* rtp = channel1_->rtp_dtls_transport();
1798 TransportChannel* rtcp = channel1_->rtcp_transport(); 1802 DtlsTransportInternal* rtcp = channel1_->rtcp_dtls_transport();
1799 EXPECT_FALSE(media_channel1_->ready_to_send()); 1803 EXPECT_FALSE(media_channel1_->ready_to_send());
1800 1804
1801 network_thread_->Invoke<void>(RTC_FROM_HERE, 1805 network_thread_->Invoke<void>(RTC_FROM_HERE,
1802 [rtp] { rtp->SignalReadyToSend(rtp); }); 1806 [rtp] { rtp->SignalReadyToSend(rtp); });
1803 WaitForThreads(); 1807 WaitForThreads();
1804 EXPECT_FALSE(media_channel1_->ready_to_send()); 1808 EXPECT_FALSE(media_channel1_->ready_to_send());
1805 1809
1806 network_thread_->Invoke<void>(RTC_FROM_HERE, 1810 network_thread_->Invoke<void>(RTC_FROM_HERE,
1807 [rtcp] { rtcp->SignalReadyToSend(rtcp); }); 1811 [rtcp] { rtcp->SignalReadyToSend(rtcp); });
1808 WaitForThreads(); 1812 WaitForThreads();
(...skipping 29 matching lines...) Expand all
1838 } 1842 }
1839 1843
1840 void TestOnReadyToSendWithRtcpMux() { 1844 void TestOnReadyToSendWithRtcpMux() {
1841 CreateChannels(0, 0); 1845 CreateChannels(0, 0);
1842 typename T::Content content; 1846 typename T::Content content;
1843 CreateContent(0, kPcmuCodec, kH264Codec, &content); 1847 CreateContent(0, kPcmuCodec, kH264Codec, &content);
1844 // Both sides agree on mux. Should no longer be a separate RTCP channel. 1848 // Both sides agree on mux. Should no longer be a separate RTCP channel.
1845 content.set_rtcp_mux(true); 1849 content.set_rtcp_mux(true);
1846 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 1850 EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL));
1847 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 1851 EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL));
1848 EXPECT_TRUE(channel1_->rtcp_transport() == NULL); 1852 EXPECT_TRUE(channel1_->rtcp_dtls_transport() == NULL);
1849 TransportChannel* rtp = channel1_->rtp_transport(); 1853 DtlsTransportInternal* rtp = channel1_->rtp_dtls_transport();
1850 EXPECT_FALSE(media_channel1_->ready_to_send()); 1854 EXPECT_FALSE(media_channel1_->ready_to_send());
1851 // In the case of rtcp mux, the SignalReadyToSend() from rtp channel 1855 // In the case of rtcp mux, the SignalReadyToSend() from rtp channel
1852 // should trigger the MediaChannel's OnReadyToSend. 1856 // should trigger the MediaChannel's OnReadyToSend.
1853 network_thread_->Invoke<void>(RTC_FROM_HERE, 1857 network_thread_->Invoke<void>(RTC_FROM_HERE,
1854 [rtp] { rtp->SignalReadyToSend(rtp); }); 1858 [rtp] { rtp->SignalReadyToSend(rtp); });
1855 WaitForThreads(); 1859 WaitForThreads();
1856 EXPECT_TRUE(media_channel1_->ready_to_send()); 1860 EXPECT_TRUE(media_channel1_->ready_to_send());
1857 1861
1858 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] { 1862 network_thread_->Invoke<void>(RTC_FROM_HERE, [this] {
1859 channel1_->SetTransportChannelReadyToSend(false, false); 1863 channel1_->SetTransportChannelReadyToSend(false, false);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2018 cricket::TransportController* transport_controller, 2022 cricket::TransportController* transport_controller,
2019 int flags) { 2023 int flags) {
2020 rtc::Thread* signaling_thread = 2024 rtc::Thread* signaling_thread =
2021 transport_controller ? transport_controller->signaling_thread() : nullptr; 2025 transport_controller ? transport_controller->signaling_thread() : nullptr;
2022 cricket::VideoChannel* channel = new cricket::VideoChannel( 2026 cricket::VideoChannel* channel = new cricket::VideoChannel(
2023 worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO, 2027 worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO,
2024 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); 2028 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0);
2025 rtc::CryptoOptions crypto_options; 2029 rtc::CryptoOptions crypto_options;
2026 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; 2030 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0;
2027 channel->SetCryptoOptions(crypto_options); 2031 channel->SetCryptoOptions(crypto_options);
2028 cricket::TransportChannel* rtp_transport = 2032 cricket::DtlsTransportInternal* rtp_dtls_transport =
2029 transport_controller->CreateTransportChannel( 2033 transport_controller->CreateDtlsTransport(
2030 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTP); 2034 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTP);
2031 cricket::TransportChannel* rtcp_transport = nullptr; 2035 cricket::DtlsTransportInternal* rtcp_dtls_transport = nullptr;
2032 if (channel->NeedsRtcpTransport()) { 2036 if (channel->NeedsRtcpTransport()) {
2033 rtcp_transport = transport_controller->CreateTransportChannel( 2037 rtcp_dtls_transport = transport_controller->CreateDtlsTransport(
2034 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTCP); 2038 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTCP);
2035 } 2039 }
2036 if (!channel->Init_w(rtp_transport, rtcp_transport)) { 2040 if (!channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport)) {
2037 delete channel; 2041 delete channel;
2038 channel = NULL; 2042 channel = NULL;
2039 } 2043 }
2040 return channel; 2044 return channel;
2041 } 2045 }
2042 2046
2043 // override to add 0 parameter 2047 // override to add 0 parameter
2044 template<> 2048 template<>
2045 bool ChannelTest<VideoTraits>::AddStream1(int id) { 2049 bool ChannelTest<VideoTraits>::AddStream1(int id) {
2046 return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id)); 2050 return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id));
(...skipping 1205 matching lines...) Expand 10 before | Expand all | Expand 10 after
3252 cricket::TransportController* transport_controller, 3256 cricket::TransportController* transport_controller,
3253 int flags) { 3257 int flags) {
3254 rtc::Thread* signaling_thread = 3258 rtc::Thread* signaling_thread =
3255 transport_controller ? transport_controller->signaling_thread() : nullptr; 3259 transport_controller ? transport_controller->signaling_thread() : nullptr;
3256 cricket::RtpDataChannel* channel = new cricket::RtpDataChannel( 3260 cricket::RtpDataChannel* channel = new cricket::RtpDataChannel(
3257 worker_thread, network_thread, signaling_thread, ch, cricket::CN_DATA, 3261 worker_thread, network_thread, signaling_thread, ch, cricket::CN_DATA,
3258 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0); 3262 (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0);
3259 rtc::CryptoOptions crypto_options; 3263 rtc::CryptoOptions crypto_options;
3260 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0; 3264 crypto_options.enable_gcm_crypto_suites = (flags & GCM_CIPHER) != 0;
3261 channel->SetCryptoOptions(crypto_options); 3265 channel->SetCryptoOptions(crypto_options);
3262 cricket::TransportChannel* rtp_transport = 3266 cricket::DtlsTransportInternal* rtp_dtls_transport =
3263 transport_controller->CreateTransportChannel( 3267 transport_controller->CreateDtlsTransport(
3264 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTP); 3268 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTP);
3265 cricket::TransportChannel* rtcp_transport = nullptr; 3269 cricket::DtlsTransportInternal* rtcp_dtls_transport = nullptr;
3266 if (channel->NeedsRtcpTransport()) { 3270 if (channel->NeedsRtcpTransport()) {
3267 rtcp_transport = transport_controller->CreateTransportChannel( 3271 rtcp_dtls_transport = transport_controller->CreateDtlsTransport(
3268 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTCP); 3272 channel->content_name(), cricket::ICE_CANDIDATE_COMPONENT_RTCP);
3269 } 3273 }
3270 if (!channel->Init_w(rtp_transport, rtcp_transport)) { 3274 if (!channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport)) {
3271 delete channel; 3275 delete channel;
3272 channel = NULL; 3276 channel = NULL;
3273 } 3277 }
3274 return channel; 3278 return channel;
3275 } 3279 }
3276 3280
3277 template <> 3281 template <>
3278 void ChannelTest<DataTraits>::CreateContent( 3282 void ChannelTest<DataTraits>::CreateContent(
3279 int flags, 3283 int flags,
3280 const cricket::AudioCodec& audio_codec, 3284 const cricket::AudioCodec& audio_codec,
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
3571 }; 3575 };
3572 rtc::CopyOnWriteBuffer payload(data, 3); 3576 rtc::CopyOnWriteBuffer payload(data, 3);
3573 cricket::SendDataResult result; 3577 cricket::SendDataResult result;
3574 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); 3578 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result));
3575 EXPECT_EQ(params.ssrc, 3579 EXPECT_EQ(params.ssrc,
3576 media_channel1_->last_sent_data_params().ssrc); 3580 media_channel1_->last_sent_data_params().ssrc);
3577 EXPECT_EQ("foo", media_channel1_->last_sent_data()); 3581 EXPECT_EQ("foo", media_channel1_->last_sent_data());
3578 } 3582 }
3579 3583
3580 // TODO(pthatcher): TestSetReceiver? 3584 // TODO(pthatcher): TestSetReceiver?
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698