Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * libjingle | 2 * libjingle | 
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. | 
| 4 * | 4 * | 
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without | 
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: | 
| 7 * | 7 * | 
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, | 
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. | 
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 
| (...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 544 ice_restart_latch_(new IceRestartAnswerLatch), | 544 ice_restart_latch_(new IceRestartAnswerLatch), | 
| 545 metrics_observer_(NULL) { | 545 metrics_observer_(NULL) { | 
| 546 } | 546 } | 
| 547 | 547 | 
| 548 WebRtcSession::~WebRtcSession() { | 548 WebRtcSession::~WebRtcSession() { | 
| 549 ASSERT(signaling_thread()->IsCurrent()); | 549 ASSERT(signaling_thread()->IsCurrent()); | 
| 550 // Destroy video_channel_ first since it may have a pointer to the | 550 // Destroy video_channel_ first since it may have a pointer to the | 
| 551 // voice_channel_. | 551 // voice_channel_. | 
| 552 if (video_channel_) { | 552 if (video_channel_) { | 
| 553 SignalVideoChannelDestroyed(); | 553 SignalVideoChannelDestroyed(); | 
| 554 media_controller_->set_video_channel(nullptr); | |
| 
 
pthatcher1
2015/09/02 21:24:22
Why is this necessary if media_controller_ is abou
 
the sun
2015/09/03 15:00:46
Part of LoadObserver discussion. Not strictly nece
 
 | |
| 554 channel_manager_->DestroyVideoChannel(video_channel_.release()); | 555 channel_manager_->DestroyVideoChannel(video_channel_.release()); | 
| 555 } | 556 } | 
| 556 if (voice_channel_) { | 557 if (voice_channel_) { | 
| 557 SignalVoiceChannelDestroyed(); | 558 SignalVoiceChannelDestroyed(); | 
| 558 channel_manager_->DestroyVoiceChannel(voice_channel_.release(), nullptr); | 559 channel_manager_->DestroyVoiceChannel(voice_channel_.release()); | 
| 559 } | 560 } | 
| 560 if (data_channel_) { | 561 if (data_channel_) { | 
| 561 SignalDataChannelDestroyed(); | 562 SignalDataChannelDestroyed(); | 
| 562 channel_manager_->DestroyDataChannel(data_channel_.release()); | 563 channel_manager_->DestroyDataChannel(data_channel_.release()); | 
| 563 } | 564 } | 
| 565 media_controller_.reset(nullptr); | |
| 564 for (size_t i = 0; i < saved_candidates_.size(); ++i) { | 566 for (size_t i = 0; i < saved_candidates_.size(); ++i) { | 
| 565 delete saved_candidates_[i]; | 567 delete saved_candidates_[i]; | 
| 566 } | 568 } | 
| 567 } | 569 } | 
| 568 | 570 | 
| 569 bool WebRtcSession::Initialize( | 571 bool WebRtcSession::Initialize( | 
| 570 const PeerConnectionFactoryInterface::Options& options, | 572 const PeerConnectionFactoryInterface::Options& options, | 
| 571 const MediaConstraintsInterface* constraints, | 573 const MediaConstraintsInterface* constraints, | 
| 572 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | 574 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | 
| 573 const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { | 575 const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { | 
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 758 } | 760 } | 
| 759 port_allocator()->set_candidate_filter( | 761 port_allocator()->set_candidate_filter( | 
| 760 ConvertIceTransportTypeToCandidateFilter(rtc_configuration.type)); | 762 ConvertIceTransportTypeToCandidateFilter(rtc_configuration.type)); | 
| 761 | 763 | 
| 762 if (rtc_configuration.enable_localhost_ice_candidate) { | 764 if (rtc_configuration.enable_localhost_ice_candidate) { | 
| 763 port_allocator()->set_flags( | 765 port_allocator()->set_flags( | 
| 764 port_allocator()->flags() | | 766 port_allocator()->flags() | | 
| 765 cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE); | 767 cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE); | 
| 766 } | 768 } | 
| 767 | 769 | 
| 770 media_controller_.reset( | |
| 771 new MediaController(worker_thread(), channel_manager_->media_engine())); | |
| 772 | |
| 768 return true; | 773 return true; | 
| 769 } | 774 } | 
| 770 | 775 | 
| 771 void WebRtcSession::Terminate() { | 776 void WebRtcSession::Terminate() { | 
| 772 SetState(STATE_RECEIVEDTERMINATE); | 777 SetState(STATE_RECEIVEDTERMINATE); | 
| 773 RemoveUnusedChannelsAndTransports(NULL); | 778 RemoveUnusedChannelsAndTransports(NULL); | 
| 774 ASSERT(!voice_channel_); | 779 ASSERT(!voice_channel_); | 
| 775 ASSERT(!video_channel_); | 780 ASSERT(!video_channel_); | 
| 776 ASSERT(!data_channel_); | 781 ASSERT(!data_channel_); | 
| 777 } | 782 } | 
| (...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1668 void WebRtcSession::RemoveUnusedChannelsAndTransports( | 1673 void WebRtcSession::RemoveUnusedChannelsAndTransports( | 
| 1669 const SessionDescription* desc) { | 1674 const SessionDescription* desc) { | 
| 1670 // Destroy video_channel_ first since it may have a pointer to the | 1675 // Destroy video_channel_ first since it may have a pointer to the | 
| 1671 // voice_channel_. | 1676 // voice_channel_. | 
| 1672 const cricket::ContentInfo* video_info = | 1677 const cricket::ContentInfo* video_info = | 
| 1673 cricket::GetFirstVideoContent(desc); | 1678 cricket::GetFirstVideoContent(desc); | 
| 1674 if ((!video_info || video_info->rejected) && video_channel_) { | 1679 if ((!video_info || video_info->rejected) && video_channel_) { | 
| 1675 mediastream_signaling_->OnVideoChannelClose(); | 1680 mediastream_signaling_->OnVideoChannelClose(); | 
| 1676 SignalVideoChannelDestroyed(); | 1681 SignalVideoChannelDestroyed(); | 
| 1677 const std::string content_name = video_channel_->content_name(); | 1682 const std::string content_name = video_channel_->content_name(); | 
| 1683 media_controller_->set_video_channel(nullptr); | |
| 1678 channel_manager_->DestroyVideoChannel(video_channel_.release()); | 1684 channel_manager_->DestroyVideoChannel(video_channel_.release()); | 
| 1679 DestroyTransportProxy(content_name); | 1685 DestroyTransportProxy(content_name); | 
| 1680 } | 1686 } | 
| 1681 | 1687 | 
| 1682 const cricket::ContentInfo* voice_info = | 1688 const cricket::ContentInfo* voice_info = | 
| 1683 cricket::GetFirstAudioContent(desc); | 1689 cricket::GetFirstAudioContent(desc); | 
| 1684 if ((!voice_info || voice_info->rejected) && voice_channel_) { | 1690 if ((!voice_info || voice_info->rejected) && voice_channel_) { | 
| 1685 mediastream_signaling_->OnAudioChannelClose(); | 1691 mediastream_signaling_->OnAudioChannelClose(); | 
| 1686 SignalVoiceChannelDestroyed(); | 1692 SignalVoiceChannelDestroyed(); | 
| 1687 const std::string content_name = voice_channel_->content_name(); | 1693 const std::string content_name = voice_channel_->content_name(); | 
| 1688 channel_manager_->DestroyVoiceChannel(voice_channel_.release(), | 1694 channel_manager_->DestroyVoiceChannel(voice_channel_.release()); | 
| 1689 video_channel_.get()); | |
| 1690 DestroyTransportProxy(content_name); | 1695 DestroyTransportProxy(content_name); | 
| 1691 } | 1696 } | 
| 1692 | 1697 | 
| 1693 const cricket::ContentInfo* data_info = | 1698 const cricket::ContentInfo* data_info = | 
| 1694 cricket::GetFirstDataContent(desc); | 1699 cricket::GetFirstDataContent(desc); | 
| 1695 if ((!data_info || data_info->rejected) && data_channel_) { | 1700 if ((!data_info || data_info->rejected) && data_channel_) { | 
| 1696 mediastream_signaling_->OnDataChannelClose(); | 1701 mediastream_signaling_->OnDataChannelClose(); | 
| 1697 SignalDataChannelDestroyed(); | 1702 SignalDataChannelDestroyed(); | 
| 1698 const std::string content_name = data_channel_->content_name(); | 1703 const std::string content_name = data_channel_->content_name(); | 
| 1699 channel_manager_->DestroyDataChannel(data_channel_.release()); | 1704 channel_manager_->DestroyDataChannel(data_channel_.release()); | 
| 1700 DestroyTransportProxy(content_name); | 1705 DestroyTransportProxy(content_name); | 
| 1701 } | 1706 } | 
| 1702 } | 1707 } | 
| 1703 | 1708 | 
| 1704 // TODO(mallinath) - Add a correct error code if the channels are not creatued | 1709 // TODO(mallinath) - Add a correct error code if the channels are not created | 
| 1705 // due to BUNDLE is enabled but rtcp-mux is disabled. | 1710 // due to BUNDLE is enabled but rtcp-mux is disabled. | 
| 1706 bool WebRtcSession::CreateChannels(const SessionDescription* desc) { | 1711 bool WebRtcSession::CreateChannels(const SessionDescription* desc) { | 
| 1707 // Creating the media channels and transport proxies. | 1712 // Creating the media channels and transport proxies. | 
| 1708 const cricket::ContentInfo* voice = cricket::GetFirstAudioContent(desc); | 1713 const cricket::ContentInfo* voice = cricket::GetFirstAudioContent(desc); | 
| 1709 if (voice && !voice->rejected && !voice_channel_) { | 1714 if (voice && !voice->rejected && !voice_channel_) { | 
| 1710 if (!CreateVoiceChannel(voice)) { | 1715 if (!CreateVoiceChannel(voice)) { | 
| 1711 LOG(LS_ERROR) << "Failed to create voice channel."; | 1716 LOG(LS_ERROR) << "Failed to create voice channel."; | 
| 1712 return false; | 1717 return false; | 
| 1713 } | 1718 } | 
| 1714 } | 1719 } | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1753 if (!BaseSession::BundleContentGroup(bundle_group)) { | 1758 if (!BaseSession::BundleContentGroup(bundle_group)) { | 
| 1754 LOG(LS_WARNING) << "max-bundle failed to enable bundling."; | 1759 LOG(LS_WARNING) << "max-bundle failed to enable bundling."; | 
| 1755 return false; | 1760 return false; | 
| 1756 } | 1761 } | 
| 1757 } | 1762 } | 
| 1758 | 1763 | 
| 1759 return true; | 1764 return true; | 
| 1760 } | 1765 } | 
| 1761 | 1766 | 
| 1762 bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { | 1767 bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { | 
| 1763 voice_channel_.reset(channel_manager_->CreateVoiceChannel( | 1768 voice_channel_.reset(channel_manager_->CreateVoiceChannel(this, content->name, | 
| 1764 this, content->name, true, audio_options_)); | 1769 true, media_controller_->call(), audio_options_)); | 
| 1765 if (!voice_channel_) { | 1770 if (!voice_channel_) { | 
| 1766 return false; | 1771 return false; | 
| 1767 } | 1772 } | 
| 1768 | 1773 | 
| 1769 voice_channel_->SignalDtlsSetupFailure.connect( | 1774 voice_channel_->SignalDtlsSetupFailure.connect( | 
| 1770 this, &WebRtcSession::OnDtlsSetupFailure); | 1775 this, &WebRtcSession::OnDtlsSetupFailure); | 
| 1771 return true; | 1776 return true; | 
| 1772 } | 1777 } | 
| 1773 | 1778 | 
| 1774 bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { | 1779 bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { | 
| 1775 video_channel_.reset(channel_manager_->CreateVideoChannel( | 1780 video_channel_.reset(channel_manager_->CreateVideoChannel(this, content->name, | 
| 1776 this, content->name, true, video_options_, voice_channel_.get())); | 1781 true, media_controller_->call(), video_options_)); | 
| 1777 if (!video_channel_) { | 1782 if (!video_channel_) { | 
| 1778 return false; | 1783 return false; | 
| 1779 } | 1784 } | 
| 1785 media_controller_->set_video_channel(video_channel_.get()); | |
| 1780 | 1786 | 
| 1781 video_channel_->SignalDtlsSetupFailure.connect( | 1787 video_channel_->SignalDtlsSetupFailure.connect( | 
| 1782 this, &WebRtcSession::OnDtlsSetupFailure); | 1788 this, &WebRtcSession::OnDtlsSetupFailure); | 
| 1783 return true; | 1789 return true; | 
| 1784 } | 1790 } | 
| 1785 | 1791 | 
| 1786 bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { | 1792 bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { | 
| 1787 bool sctp = (data_channel_type_ == cricket::DCT_SCTP); | 1793 bool sctp = (data_channel_type_ == cricket::DCT_SCTP); | 
| 1788 data_channel_.reset(channel_manager_->CreateDataChannel( | 1794 data_channel_.reset(channel_manager_->CreateDataChannel( | 
| 1789 this, content->name, !sctp, data_channel_type_)); | 1795 this, content->name, !sctp, data_channel_type_)); | 
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2085 | 2091 | 
| 2086 if (!srtp_cipher.empty()) { | 2092 if (!srtp_cipher.empty()) { | 
| 2087 metrics_observer_->AddHistogramSample(srtp_name, srtp_cipher); | 2093 metrics_observer_->AddHistogramSample(srtp_name, srtp_cipher); | 
| 2088 } | 2094 } | 
| 2089 if (!ssl_cipher.empty()) { | 2095 if (!ssl_cipher.empty()) { | 
| 2090 metrics_observer_->AddHistogramSample(ssl_name, ssl_cipher); | 2096 metrics_observer_->AddHistogramSample(ssl_name, ssl_cipher); | 
| 2091 } | 2097 } | 
| 2092 } | 2098 } | 
| 2093 | 2099 | 
| 2094 } // namespace webrtc | 2100 } // namespace webrtc | 
| OLD | NEW |