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

Side by Side Diff: webrtc/api/webrtcsession.cc

Issue 2614263002: Remove BaseChannel's dependency on TransportController. (Closed)
Patch Set: Fix the channel_unittests 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 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 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 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 return transport_controller_->GetRemoteSSLCertificate(transport_name); 1032 return transport_controller_->GetRemoteSSLCertificate(transport_name);
1033 } 1033 }
1034 1034
1035 bool WebRtcSession::EnableBundle(const cricket::ContentGroup& bundle) { 1035 bool WebRtcSession::EnableBundle(const cricket::ContentGroup& bundle) {
1036 const std::string* first_content_name = bundle.FirstContentName(); 1036 const std::string* first_content_name = bundle.FirstContentName();
1037 if (!first_content_name) { 1037 if (!first_content_name) {
1038 LOG(LS_WARNING) << "Tried to BUNDLE with no contents."; 1038 LOG(LS_WARNING) << "Tried to BUNDLE with no contents.";
1039 return false; 1039 return false;
1040 } 1040 }
1041 const std::string& transport_name = *first_content_name; 1041 const std::string& transport_name = *first_content_name;
1042 cricket::BaseChannel* first_channel = GetChannel(transport_name);
1043 1042
1044 #ifdef HAVE_QUIC 1043 #ifdef HAVE_QUIC
1045 if (quic_data_transport_ && 1044 if (quic_data_transport_ &&
1046 bundle.HasContentName(quic_data_transport_->content_name()) && 1045 bundle.HasContentName(quic_data_transport_->content_name()) &&
1047 quic_data_transport_->transport_name() != transport_name) { 1046 quic_data_transport_->transport_name() != transport_name) {
1048 LOG(LS_ERROR) << "Unable to BUNDLE " << quic_data_transport_->content_name() 1047 LOG(LS_ERROR) << "Unable to BUNDLE " << quic_data_transport_->content_name()
1049 << " on " << transport_name << "with QUIC."; 1048 << " on " << transport_name << "with QUIC.";
1050 } 1049 }
1051 #endif 1050 #endif
1052 1051
1053 auto maybe_set_transport = [this, bundle, transport_name, 1052 auto maybe_set_transport = [this, bundle,
1054 first_channel](cricket::BaseChannel* ch) { 1053 transport_name](cricket::BaseChannel* ch) {
1055 if (!ch || !bundle.HasContentName(ch->content_name())) { 1054 if (!ch || !bundle.HasContentName(ch->content_name())) {
1056 return true; 1055 return true;
1057 } 1056 }
1058 1057
1059 if (ch->transport_name() == transport_name) { 1058 if (ch->transport_name() == transport_name) {
1060 LOG(LS_INFO) << "BUNDLE already enabled for " << ch->content_name() 1059 LOG(LS_INFO) << "BUNDLE already enabled for " << ch->content_name()
1061 << " on " << transport_name << "."; 1060 << " on " << transport_name << ".";
1062 return true; 1061 return true;
1063 } 1062 }
1064 1063
1065 if (!ch->SetTransport(transport_name)) { 1064 cricket::TransportChannel* rtp_transport =
1065 transport_controller_->CreateTransportChannel(
1066 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP);
1067 cricket::TransportChannel* rtcp_transport = nullptr;
1068 if (ch->ShouldCreateRtcpTransport()) {
1069 rtcp_transport = transport_controller_->CreateTransportChannel(
1070 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP);
1071 }
1072 if (!ch->SetTransport(rtp_transport, rtcp_transport)) {
Taylor Brandstetter 2017/01/09 22:50:42 I think there's an opportunity here to reduce some
1066 LOG(LS_WARNING) << "Failed to enable BUNDLE for " << ch->content_name(); 1073 LOG(LS_WARNING) << "Failed to enable BUNDLE for " << ch->content_name();
1067 return false; 1074 return false;
1068 } 1075 }
1069 LOG(LS_INFO) << "Enabled BUNDLE for " << ch->content_name() << " on " 1076 LOG(LS_INFO) << "Enabled BUNDLE for " << ch->content_name() << " on "
1070 << transport_name << "."; 1077 << transport_name << ".";
1071 return true; 1078 return true;
1072 }; 1079 };
1073 1080
1074 if (!maybe_set_transport(voice_channel()) || 1081 if (!maybe_set_transport(voice_channel()) ||
1075 !maybe_set_transport(video_channel()) || 1082 !maybe_set_transport(video_channel()) ||
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 if (require_rtcp_mux) { 1670 if (require_rtcp_mux) {
1664 voice_channel_->ActivateRtcpMux(); 1671 voice_channel_->ActivateRtcpMux();
1665 } 1672 }
1666 1673
1667 voice_channel_->SignalDtlsSetupFailure.connect( 1674 voice_channel_->SignalDtlsSetupFailure.connect(
1668 this, &WebRtcSession::OnDtlsSetupFailure); 1675 this, &WebRtcSession::OnDtlsSetupFailure);
1669 1676
1670 SignalVoiceChannelCreated(); 1677 SignalVoiceChannelCreated();
1671 voice_channel_->SignalSentPacket.connect(this, 1678 voice_channel_->SignalSentPacket.connect(this,
1672 &WebRtcSession::OnSentPacket_w); 1679 &WebRtcSession::OnSentPacket_w);
1680 voice_channel_->SignalDestroyTransport.connect(
1681 this, &WebRtcSession::OnDestroyTransport);
Taylor Brandstetter 2017/01/09 22:50:42 It would be nice if the creation *and* destruction
Zhi Huang 2017/01/12 03:47:46 Done.
1673 return true; 1682 return true;
1674 } 1683 }
1675 1684
1676 bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content, 1685 bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content,
1677 const std::string* bundle_transport) { 1686 const std::string* bundle_transport) {
1678 bool require_rtcp_mux = 1687 bool require_rtcp_mux =
1679 rtcp_mux_policy_ == PeerConnectionInterface::kRtcpMuxPolicyRequire; 1688 rtcp_mux_policy_ == PeerConnectionInterface::kRtcpMuxPolicyRequire;
1680 bool create_rtcp_transport_channel = !require_rtcp_mux; 1689 bool create_rtcp_transport_channel = !require_rtcp_mux;
1681 video_channel_.reset(channel_manager_->CreateVideoChannel( 1690 video_channel_.reset(channel_manager_->CreateVideoChannel(
1682 media_controller_, transport_controller_.get(), content->name, 1691 media_controller_, transport_controller_.get(), content->name,
1683 bundle_transport, create_rtcp_transport_channel, SrtpRequired(), 1692 bundle_transport, create_rtcp_transport_channel, SrtpRequired(),
1684 video_options_)); 1693 video_options_));
1685 if (!video_channel_) { 1694 if (!video_channel_) {
1686 return false; 1695 return false;
1687 } 1696 }
1688 if (require_rtcp_mux) { 1697 if (require_rtcp_mux) {
1689 video_channel_->ActivateRtcpMux(); 1698 video_channel_->ActivateRtcpMux();
1690 } 1699 }
1691 video_channel_->SignalDtlsSetupFailure.connect( 1700 video_channel_->SignalDtlsSetupFailure.connect(
1692 this, &WebRtcSession::OnDtlsSetupFailure); 1701 this, &WebRtcSession::OnDtlsSetupFailure);
1693 1702
1694 SignalVideoChannelCreated(); 1703 SignalVideoChannelCreated();
1695 video_channel_->SignalSentPacket.connect(this, 1704 video_channel_->SignalSentPacket.connect(this,
1696 &WebRtcSession::OnSentPacket_w); 1705 &WebRtcSession::OnSentPacket_w);
1706 video_channel_->SignalDestroyTransport.connect(
1707 this, &WebRtcSession::OnDestroyTransport);
1697 return true; 1708 return true;
1698 } 1709 }
1699 1710
1700 bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content, 1711 bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content,
1701 const std::string* bundle_transport) { 1712 const std::string* bundle_transport) {
1702 #ifdef HAVE_QUIC 1713 #ifdef HAVE_QUIC
1703 if (data_channel_type_ == cricket::DCT_QUIC) { 1714 if (data_channel_type_ == cricket::DCT_QUIC) {
1704 RTC_DCHECK(transport_controller_->quic()); 1715 RTC_DCHECK(transport_controller_->quic());
1705 const std::string transport_name = 1716 const std::string transport_name =
1706 bundle_transport ? *bundle_transport : content->name; 1717 bundle_transport ? *bundle_transport : content->name;
(...skipping 19 matching lines...) Expand all
1726 if (sctp) { 1737 if (sctp) {
1727 data_channel_->SignalDataReceived.connect( 1738 data_channel_->SignalDataReceived.connect(
1728 this, &WebRtcSession::OnDataChannelMessageReceived); 1739 this, &WebRtcSession::OnDataChannelMessageReceived);
1729 } 1740 }
1730 1741
1731 data_channel_->SignalDtlsSetupFailure.connect( 1742 data_channel_->SignalDtlsSetupFailure.connect(
1732 this, &WebRtcSession::OnDtlsSetupFailure); 1743 this, &WebRtcSession::OnDtlsSetupFailure);
1733 1744
1734 SignalDataChannelCreated(); 1745 SignalDataChannelCreated();
1735 data_channel_->SignalSentPacket.connect(this, &WebRtcSession::OnSentPacket_w); 1746 data_channel_->SignalSentPacket.connect(this, &WebRtcSession::OnSentPacket_w);
1747 data_channel_->SignalDestroyTransport.connect(
1748 this, &WebRtcSession::OnDestroyTransport);
1736 return true; 1749 return true;
1737 } 1750 }
1738 1751
1739 std::unique_ptr<SessionStats> WebRtcSession::GetStats_n( 1752 std::unique_ptr<SessionStats> WebRtcSession::GetStats_n(
1740 const ChannelNamePairs& channel_name_pairs) { 1753 const ChannelNamePairs& channel_name_pairs) {
1741 ASSERT(network_thread()->IsCurrent()); 1754 ASSERT(network_thread()->IsCurrent());
1742 std::unique_ptr<SessionStats> session_stats(new SessionStats()); 1755 std::unique_ptr<SessionStats> session_stats(new SessionStats());
1743 for (const auto channel_name_pair : { &channel_name_pairs.voice, 1756 for (const auto channel_name_pair : { &channel_name_pairs.voice,
1744 &channel_name_pairs.video, 1757 &channel_name_pairs.video,
1745 &channel_name_pairs.data }) { 1758 &channel_name_pairs.data }) {
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
2100 return channel->transport_name(); 2113 return channel->transport_name();
2101 } 2114 }
2102 2115
2103 void WebRtcSession::OnDtlsHandshakeError(rtc::SSLHandshakeError error) { 2116 void WebRtcSession::OnDtlsHandshakeError(rtc::SSLHandshakeError error) {
2104 if (metrics_observer_) { 2117 if (metrics_observer_) {
2105 metrics_observer_->IncrementEnumCounter( 2118 metrics_observer_->IncrementEnumCounter(
2106 webrtc::kEnumCounterDtlsHandshakeError, static_cast<int>(error), 2119 webrtc::kEnumCounterDtlsHandshakeError, static_cast<int>(error),
2107 static_cast<int>(rtc::SSLHandshakeError::MAX_VALUE)); 2120 static_cast<int>(rtc::SSLHandshakeError::MAX_VALUE));
2108 } 2121 }
2109 } 2122 }
2123
2124 void WebRtcSession::OnDestroyTransport(const std::string& transport_name,
2125 int component) {
2126 transport_controller_->DestroyTransportChannel(transport_name, component);
2127 }
2110 } // namespace webrtc 2128 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698