OLD | NEW |
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 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 cricket::TransportChannel* rtp_transport = | 1085 cricket::TransportChannel* rtp_transport = |
1086 transport_controller_->CreateTransportChannel( | 1086 transport_controller_->CreateTransportChannel( |
1087 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1087 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
1088 bool need_rtcp = (ch->rtcp_transport() != nullptr); | 1088 bool need_rtcp = (ch->rtcp_transport() != nullptr); |
1089 cricket::TransportChannel* rtcp_transport = nullptr; | 1089 cricket::TransportChannel* rtcp_transport = nullptr; |
1090 if (need_rtcp) { | 1090 if (need_rtcp) { |
1091 rtcp_transport = transport_controller_->CreateTransportChannel_n( | 1091 rtcp_transport = transport_controller_->CreateTransportChannel_n( |
1092 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 1092 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
1093 } | 1093 } |
1094 | 1094 |
1095 if (!ch->SetTransport(rtp_transport, rtcp_transport)) { | 1095 ch->SetTransports(rtp_transport, rtcp_transport); |
1096 LOG(LS_WARNING) << "Failed to enable BUNDLE for " << ch->content_name(); | |
1097 return false; | |
1098 } | |
1099 LOG(LS_INFO) << "Enabled BUNDLE for " << ch->content_name() << " on " | 1096 LOG(LS_INFO) << "Enabled BUNDLE for " << ch->content_name() << " on " |
1100 << transport_name << "."; | 1097 << transport_name << "."; |
1101 DestroyTransport(old_transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 1098 transport_controller_->DestroyTransportChannel( |
| 1099 old_transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
1102 // If the channel needs rtcp, it means that the channel used to have a | 1100 // If the channel needs rtcp, it means that the channel used to have a |
1103 // rtcp transport which needs to be deleted now. | 1101 // rtcp transport which needs to be deleted now. |
1104 if (need_rtcp) { | 1102 if (need_rtcp) { |
1105 DestroyTransport(old_transport_name, | 1103 transport_controller_->DestroyTransportChannel( |
1106 cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 1104 old_transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
1107 } | 1105 } |
1108 return true; | 1106 return true; |
1109 }; | 1107 }; |
1110 | 1108 |
1111 if (!maybe_set_transport(voice_channel()) || | 1109 if (!maybe_set_transport(voice_channel()) || |
1112 !maybe_set_transport(video_channel()) || | 1110 !maybe_set_transport(video_channel()) || |
1113 !maybe_set_transport(rtp_data_channel())) { | 1111 !maybe_set_transport(rtp_data_channel())) { |
1114 return false; | 1112 return false; |
1115 } | 1113 } |
1116 // For SCTP, transport creation/deletion happens here instead of in the | 1114 // For SCTP, transport creation/deletion happens here instead of in the |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1798 if (!require_rtcp_mux) { | 1796 if (!require_rtcp_mux) { |
1799 rtcp_transport = transport_controller_->CreateTransportChannel( | 1797 rtcp_transport = transport_controller_->CreateTransportChannel( |
1800 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 1798 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
1801 } | 1799 } |
1802 | 1800 |
1803 voice_channel_.reset(channel_manager_->CreateVoiceChannel( | 1801 voice_channel_.reset(channel_manager_->CreateVoiceChannel( |
1804 media_controller_, rtp_transport, rtcp_transport, | 1802 media_controller_, rtp_transport, rtcp_transport, |
1805 transport_controller_->signaling_thread(), content->name, | 1803 transport_controller_->signaling_thread(), content->name, |
1806 bundle_transport, require_rtcp_mux, SrtpRequired(), audio_options_)); | 1804 bundle_transport, require_rtcp_mux, SrtpRequired(), audio_options_)); |
1807 if (!voice_channel_) { | 1805 if (!voice_channel_) { |
| 1806 transport_controller_->DestroyTransportChannel( |
| 1807 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1808 if (rtcp_transport) { |
| 1809 transport_controller_->DestroyTransportChannel( |
| 1810 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1811 } |
1808 return false; | 1812 return false; |
1809 } | 1813 } |
1810 | 1814 |
1811 voice_channel_->SignalRtcpMuxFullyActive.connect( | 1815 voice_channel_->SignalRtcpMuxFullyActive.connect( |
1812 this, &WebRtcSession::DestroyRtcpTransport_n); | 1816 this, &WebRtcSession::DestroyRtcpTransport_n); |
1813 voice_channel_->SignalDtlsSrtpSetupFailure.connect( | 1817 voice_channel_->SignalDtlsSrtpSetupFailure.connect( |
1814 this, &WebRtcSession::OnDtlsSrtpSetupFailure); | 1818 this, &WebRtcSession::OnDtlsSrtpSetupFailure); |
1815 | 1819 |
1816 SignalVoiceChannelCreated(); | 1820 SignalVoiceChannelCreated(); |
1817 voice_channel_->SignalSentPacket.connect(this, | 1821 voice_channel_->SignalSentPacket.connect(this, |
(...skipping 17 matching lines...) Expand all Loading... |
1835 rtcp_transport = transport_controller_->CreateTransportChannel( | 1839 rtcp_transport = transport_controller_->CreateTransportChannel( |
1836 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 1840 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
1837 } | 1841 } |
1838 | 1842 |
1839 video_channel_.reset(channel_manager_->CreateVideoChannel( | 1843 video_channel_.reset(channel_manager_->CreateVideoChannel( |
1840 media_controller_, rtp_transport, rtcp_transport, | 1844 media_controller_, rtp_transport, rtcp_transport, |
1841 transport_controller_->signaling_thread(), content->name, | 1845 transport_controller_->signaling_thread(), content->name, |
1842 bundle_transport, require_rtcp_mux, SrtpRequired(), video_options_)); | 1846 bundle_transport, require_rtcp_mux, SrtpRequired(), video_options_)); |
1843 | 1847 |
1844 if (!video_channel_) { | 1848 if (!video_channel_) { |
| 1849 transport_controller_->DestroyTransportChannel( |
| 1850 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1851 if (rtcp_transport) { |
| 1852 transport_controller_->DestroyTransportChannel( |
| 1853 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1854 } |
1845 return false; | 1855 return false; |
1846 } | 1856 } |
1847 | 1857 |
1848 video_channel_->SignalRtcpMuxFullyActive.connect( | 1858 video_channel_->SignalRtcpMuxFullyActive.connect( |
1849 this, &WebRtcSession::DestroyRtcpTransport_n); | 1859 this, &WebRtcSession::DestroyRtcpTransport_n); |
1850 video_channel_->SignalDtlsSrtpSetupFailure.connect( | 1860 video_channel_->SignalDtlsSrtpSetupFailure.connect( |
1851 this, &WebRtcSession::OnDtlsSrtpSetupFailure); | 1861 this, &WebRtcSession::OnDtlsSrtpSetupFailure); |
1852 | 1862 |
1853 SignalVideoChannelCreated(); | 1863 SignalVideoChannelCreated(); |
1854 video_channel_->SignalSentPacket.connect(this, | 1864 video_channel_->SignalSentPacket.connect(this, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1894 rtcp_transport = transport_controller_->CreateTransportChannel( | 1904 rtcp_transport = transport_controller_->CreateTransportChannel( |
1895 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 1905 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
1896 } | 1906 } |
1897 | 1907 |
1898 rtp_data_channel_.reset(channel_manager_->CreateRtpDataChannel( | 1908 rtp_data_channel_.reset(channel_manager_->CreateRtpDataChannel( |
1899 media_controller_, rtp_transport, rtcp_transport, | 1909 media_controller_, rtp_transport, rtcp_transport, |
1900 transport_controller_->signaling_thread(), content->name, | 1910 transport_controller_->signaling_thread(), content->name, |
1901 bundle_transport, require_rtcp_mux, SrtpRequired())); | 1911 bundle_transport, require_rtcp_mux, SrtpRequired())); |
1902 | 1912 |
1903 if (!rtp_data_channel_) { | 1913 if (!rtp_data_channel_) { |
| 1914 transport_controller_->DestroyTransportChannel( |
| 1915 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1916 if (rtcp_transport) { |
| 1917 transport_controller_->DestroyTransportChannel( |
| 1918 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
| 1919 } |
1904 return false; | 1920 return false; |
1905 } | 1921 } |
1906 | 1922 |
1907 rtp_data_channel_->SignalRtcpMuxFullyActive.connect( | 1923 rtp_data_channel_->SignalRtcpMuxFullyActive.connect( |
1908 this, &WebRtcSession::DestroyRtcpTransport_n); | 1924 this, &WebRtcSession::DestroyRtcpTransport_n); |
1909 rtp_data_channel_->SignalDtlsSrtpSetupFailure.connect( | 1925 rtp_data_channel_->SignalDtlsSrtpSetupFailure.connect( |
1910 this, &WebRtcSession::OnDtlsSrtpSetupFailure); | 1926 this, &WebRtcSession::OnDtlsSrtpSetupFailure); |
1911 rtp_data_channel_->SignalSentPacket.connect(this, | 1927 rtp_data_channel_->SignalSentPacket.connect(this, |
1912 &WebRtcSession::OnSentPacket_w); | 1928 &WebRtcSession::OnSentPacket_w); |
1913 } | 1929 } |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2358 if (content_name == *sctp_content_name_) { | 2374 if (content_name == *sctp_content_name_) { |
2359 return *sctp_transport_name_; | 2375 return *sctp_transport_name_; |
2360 } | 2376 } |
2361 } | 2377 } |
2362 // Return an empty string if failed to retrieve the transport name. | 2378 // Return an empty string if failed to retrieve the transport name. |
2363 return ""; | 2379 return ""; |
2364 } | 2380 } |
2365 return channel->transport_name(); | 2381 return channel->transport_name(); |
2366 } | 2382 } |
2367 | 2383 |
2368 void WebRtcSession::DestroyTransport(const std::string& transport_name, | |
2369 int component) { | |
2370 network_thread_->Invoke<void>( | |
2371 RTC_FROM_HERE, | |
2372 rtc::Bind(&cricket::TransportController::DestroyTransportChannel_n, | |
2373 transport_controller_.get(), transport_name, component)); | |
2374 } | |
2375 | |
2376 void WebRtcSession::DestroyRtcpTransport_n(const std::string& transport_name) { | 2384 void WebRtcSession::DestroyRtcpTransport_n(const std::string& transport_name) { |
2377 RTC_DCHECK(network_thread()->IsCurrent()); | 2385 RTC_DCHECK(network_thread()->IsCurrent()); |
2378 transport_controller_->DestroyTransportChannel_n( | 2386 transport_controller_->DestroyTransportChannel_n( |
2379 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 2387 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
2380 } | 2388 } |
2381 | 2389 |
2382 void WebRtcSession::DestroyVideoChannel() { | 2390 void WebRtcSession::DestroyVideoChannel() { |
2383 SignalVideoChannelDestroyed(); | 2391 SignalVideoChannelDestroyed(); |
2384 RTC_DCHECK(video_channel_->rtp_transport()); | 2392 RTC_DCHECK(video_channel_->rtp_transport()); |
2385 std::string transport_name; | 2393 std::string transport_name; |
2386 transport_name = video_channel_->rtp_transport()->transport_name(); | 2394 transport_name = video_channel_->rtp_transport()->transport_name(); |
2387 bool need_to_delete_rtcp = (video_channel_->rtcp_transport() != nullptr); | 2395 bool need_to_delete_rtcp = (video_channel_->rtcp_transport() != nullptr); |
2388 channel_manager_->DestroyVideoChannel(video_channel_.release()); | 2396 channel_manager_->DestroyVideoChannel(video_channel_.release()); |
2389 DestroyTransport(transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 2397 transport_controller_->DestroyTransportChannel( |
| 2398 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
2390 if (need_to_delete_rtcp) { | 2399 if (need_to_delete_rtcp) { |
2391 DestroyTransport(transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 2400 transport_controller_->DestroyTransportChannel( |
| 2401 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
2392 } | 2402 } |
2393 } | 2403 } |
2394 | 2404 |
2395 void WebRtcSession::DestroyVoiceChannel() { | 2405 void WebRtcSession::DestroyVoiceChannel() { |
2396 SignalVoiceChannelDestroyed(); | 2406 SignalVoiceChannelDestroyed(); |
2397 RTC_DCHECK(voice_channel_->rtp_transport()); | 2407 RTC_DCHECK(voice_channel_->rtp_transport()); |
2398 std::string transport_name; | 2408 std::string transport_name; |
2399 transport_name = voice_channel_->rtp_transport()->transport_name(); | 2409 transport_name = voice_channel_->rtp_transport()->transport_name(); |
2400 bool need_to_delete_rtcp = (voice_channel_->rtcp_transport() != nullptr); | 2410 bool need_to_delete_rtcp = (voice_channel_->rtcp_transport() != nullptr); |
2401 channel_manager_->DestroyVoiceChannel(voice_channel_.release()); | 2411 channel_manager_->DestroyVoiceChannel(voice_channel_.release()); |
2402 DestroyTransport(transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 2412 transport_controller_->DestroyTransportChannel( |
| 2413 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
2403 if (need_to_delete_rtcp) { | 2414 if (need_to_delete_rtcp) { |
2404 DestroyTransport(transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 2415 transport_controller_->DestroyTransportChannel( |
| 2416 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
2405 } | 2417 } |
2406 } | 2418 } |
2407 | 2419 |
2408 void WebRtcSession::DestroyDataChannel() { | 2420 void WebRtcSession::DestroyDataChannel() { |
2409 SignalDataChannelDestroyed(); | 2421 SignalDataChannelDestroyed(); |
2410 RTC_DCHECK(rtp_data_channel_->rtp_transport()); | 2422 RTC_DCHECK(rtp_data_channel_->rtp_transport()); |
2411 std::string transport_name; | 2423 std::string transport_name; |
2412 transport_name = rtp_data_channel_->rtp_transport()->transport_name(); | 2424 transport_name = rtp_data_channel_->rtp_transport()->transport_name(); |
2413 bool need_to_delete_rtcp = (rtp_data_channel_->rtcp_transport() != nullptr); | 2425 bool need_to_delete_rtcp = (rtp_data_channel_->rtcp_transport() != nullptr); |
2414 channel_manager_->DestroyRtpDataChannel(rtp_data_channel_.release()); | 2426 channel_manager_->DestroyRtpDataChannel(rtp_data_channel_.release()); |
2415 DestroyTransport(transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); | 2427 transport_controller_->DestroyTransportChannel( |
| 2428 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP); |
2416 if (need_to_delete_rtcp) { | 2429 if (need_to_delete_rtcp) { |
2417 DestroyTransport(transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); | 2430 transport_controller_->DestroyTransportChannel( |
| 2431 transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP); |
2418 } | 2432 } |
2419 } | 2433 } |
2420 } // namespace webrtc | 2434 } // namespace webrtc |
OLD | NEW |