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 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
900 PeerConnectionInterface::IceGatheringState | 900 PeerConnectionInterface::IceGatheringState |
901 PeerConnection::ice_gathering_state() { | 901 PeerConnection::ice_gathering_state() { |
902 return ice_gathering_state_; | 902 return ice_gathering_state_; |
903 } | 903 } |
904 | 904 |
905 rtc::scoped_refptr<DataChannelInterface> | 905 rtc::scoped_refptr<DataChannelInterface> |
906 PeerConnection::CreateDataChannel( | 906 PeerConnection::CreateDataChannel( |
907 const std::string& label, | 907 const std::string& label, |
908 const DataChannelInit* config) { | 908 const DataChannelInit* config) { |
909 TRACE_EVENT0("webrtc", "PeerConnection::CreateDataChannel"); | 909 TRACE_EVENT0("webrtc", "PeerConnection::CreateDataChannel"); |
910 #ifdef HAVE_QUIC | |
911 if (session_->data_channel_type() == cricket::DCT_QUIC) { | |
912 // TODO(zhihuang): Handle case when config is NULL. | |
913 if (!config) { | |
914 LOG(LS_ERROR) << "Missing config for QUIC data channel."; | |
915 return nullptr; | |
916 } | |
917 // TODO(zhihuang): Allow unreliable or ordered QUIC data channels. | |
918 if (!config->reliable || config->ordered) { | |
919 LOG(LS_ERROR) << "QUIC data channel does not implement unreliable or " | |
920 "ordered delivery."; | |
921 return nullptr; | |
922 } | |
923 return session_->quic_data_transport()->CreateDataChannel(label, config); | |
924 } | |
925 #endif // HAVE_QUIC | |
926 | |
927 bool first_datachannel = !HasDataChannels(); | 910 bool first_datachannel = !HasDataChannels(); |
928 | 911 |
929 std::unique_ptr<InternalDataChannelInit> internal_config; | 912 std::unique_ptr<InternalDataChannelInit> internal_config; |
930 if (config) { | 913 if (config) { |
931 internal_config.reset(new InternalDataChannelInit(*config)); | 914 internal_config.reset(new InternalDataChannelInit(*config)); |
932 } | 915 } |
933 rtc::scoped_refptr<DataChannelInterface> channel( | 916 rtc::scoped_refptr<DataChannelInterface> channel( |
934 InternalCreateDataChannel(label, internal_config.get())); | 917 InternalCreateDataChannel(label, internal_config.get())); |
935 if (!channel.get()) { | 918 if (!channel.get()) { |
936 return nullptr; | 919 return nullptr; |
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 if (rtc_options.offer_to_receive_video == RTCOfferAnswerOptions::kUndefined) { | 1611 if (rtc_options.offer_to_receive_video == RTCOfferAnswerOptions::kUndefined) { |
1629 session_options->recv_video = | 1612 session_options->recv_video = |
1630 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO) || | 1613 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO) || |
1631 !remote_video_tracks_.empty(); | 1614 !remote_video_tracks_.empty(); |
1632 } | 1615 } |
1633 session_options->bundle_enabled = | 1616 session_options->bundle_enabled = |
1634 session_options->bundle_enabled && | 1617 session_options->bundle_enabled && |
1635 (session_options->has_audio() || session_options->has_video() || | 1618 (session_options->has_audio() || session_options->has_video() || |
1636 session_options->has_data()); | 1619 session_options->has_data()); |
1637 | 1620 |
1638 if (HasDataChannels()) { | 1621 if (session_->data_channel_type() == cricket::DCT_SCTP && HasDataChannels()) { |
1639 session_options->data_channel_type = session_->data_channel_type(); | 1622 session_options->data_channel_type = cricket::DCT_SCTP; |
1640 } | 1623 } |
1641 | 1624 |
1642 session_options->rtcp_cname = rtcp_cname_; | 1625 session_options->rtcp_cname = rtcp_cname_; |
1643 session_options->crypto_options = factory_->options().crypto_options; | 1626 session_options->crypto_options = factory_->options().crypto_options; |
1644 return true; | 1627 return true; |
1645 } | 1628 } |
1646 | 1629 |
1647 void PeerConnection::FinishOptionsForAnswer( | 1630 void PeerConnection::FinishOptionsForAnswer( |
1648 cricket::MediaSessionOptions* session_options) { | 1631 cricket::MediaSessionOptions* session_options) { |
1649 // TODO(deadbeef): Once we have transceivers, enumerate them here instead of | 1632 // TODO(deadbeef): Once we have transceivers, enumerate them here instead of |
1650 // ContentInfos. | 1633 // ContentInfos. |
1651 if (session_->remote_description()) { | 1634 if (session_->remote_description()) { |
1652 // Initialize the transport_options map. | 1635 // Initialize the transport_options map. |
1653 for (const cricket::ContentInfo& content : | 1636 for (const cricket::ContentInfo& content : |
1654 session_->remote_description()->description()->contents()) { | 1637 session_->remote_description()->description()->contents()) { |
1655 session_options->transport_options[content.name] = | 1638 session_options->transport_options[content.name] = |
1656 cricket::TransportOptions(); | 1639 cricket::TransportOptions(); |
1657 } | 1640 } |
1658 } | 1641 } |
1659 AddSendStreams(session_options, senders_, rtp_data_channels_); | 1642 AddSendStreams(session_options, senders_, rtp_data_channels_); |
1660 session_options->bundle_enabled = | 1643 session_options->bundle_enabled = |
1661 session_options->bundle_enabled && | 1644 session_options->bundle_enabled && |
1662 (session_options->has_audio() || session_options->has_video() || | 1645 (session_options->has_audio() || session_options->has_video() || |
1663 session_options->has_data()); | 1646 session_options->has_data()); |
1664 | 1647 |
1665 // RTP data channel is handled in MediaSessionOptions::AddStream. SCTP streams | 1648 // RTP data channel is handled in MediaSessionOptions::AddStream. SCTP streams |
1666 // are not signaled in the SDP so does not go through that path and must be | 1649 // are not signaled in the SDP so does not go through that path and must be |
1667 // handled here. | 1650 // handled here. |
1668 session_options->data_channel_type = session_->data_channel_type(); | 1651 if (session_->data_channel_type() == cricket::DCT_SCTP) { |
| 1652 session_options->data_channel_type = cricket::DCT_SCTP; |
| 1653 } |
1669 session_options->crypto_options = factory_->options().crypto_options; | 1654 session_options->crypto_options = factory_->options().crypto_options; |
1670 } | 1655 } |
1671 | 1656 |
1672 bool PeerConnection::GetOptionsForAnswer( | 1657 bool PeerConnection::GetOptionsForAnswer( |
1673 const MediaConstraintsInterface* constraints, | 1658 const MediaConstraintsInterface* constraints, |
1674 cricket::MediaSessionOptions* session_options) { | 1659 cricket::MediaSessionOptions* session_options) { |
1675 session_options->recv_audio = false; | 1660 session_options->recv_audio = false; |
1676 session_options->recv_video = false; | 1661 session_options->recv_video = false; |
1677 if (!ParseConstraintsForAnswer(constraints, session_options)) { | 1662 if (!ParseConstraintsForAnswer(constraints, session_options)) { |
1678 return false; | 1663 return false; |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2062 RTC_DCHECK(channel->data_channel_type() == cricket::DCT_SCTP); | 2047 RTC_DCHECK(channel->data_channel_type() == cricket::DCT_SCTP); |
2063 sctp_data_channels_.push_back(channel); | 2048 sctp_data_channels_.push_back(channel); |
2064 channel->SignalClosed.connect(this, | 2049 channel->SignalClosed.connect(this, |
2065 &PeerConnection::OnSctpDataChannelClosed); | 2050 &PeerConnection::OnSctpDataChannelClosed); |
2066 } | 2051 } |
2067 | 2052 |
2068 return channel; | 2053 return channel; |
2069 } | 2054 } |
2070 | 2055 |
2071 bool PeerConnection::HasDataChannels() const { | 2056 bool PeerConnection::HasDataChannels() const { |
2072 #ifdef HAVE_QUIC | |
2073 return !rtp_data_channels_.empty() || !sctp_data_channels_.empty() || | |
2074 (session_->quic_data_transport() && | |
2075 session_->quic_data_transport()->HasDataChannels()); | |
2076 #else | |
2077 return !rtp_data_channels_.empty() || !sctp_data_channels_.empty(); | 2057 return !rtp_data_channels_.empty() || !sctp_data_channels_.empty(); |
2078 #endif // HAVE_QUIC | |
2079 } | 2058 } |
2080 | 2059 |
2081 void PeerConnection::AllocateSctpSids(rtc::SSLRole role) { | 2060 void PeerConnection::AllocateSctpSids(rtc::SSLRole role) { |
2082 for (const auto& channel : sctp_data_channels_) { | 2061 for (const auto& channel : sctp_data_channels_) { |
2083 if (channel->id() < 0) { | 2062 if (channel->id() < 0) { |
2084 int sid; | 2063 int sid; |
2085 if (!sid_allocator_.AllocateSid(role, &sid)) { | 2064 if (!sid_allocator_.AllocateSid(role, &sid)) { |
2086 LOG(LS_ERROR) << "Failed to allocate SCTP sid."; | 2065 LOG(LS_ERROR) << "Failed to allocate SCTP sid."; |
2087 continue; | 2066 continue; |
2088 } | 2067 } |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2312 | 2291 |
2313 bool PeerConnection::StartRtcEventLog_w(rtc::PlatformFile file, | 2292 bool PeerConnection::StartRtcEventLog_w(rtc::PlatformFile file, |
2314 int64_t max_size_bytes) { | 2293 int64_t max_size_bytes) { |
2315 return media_controller_->call_w()->StartEventLog(file, max_size_bytes); | 2294 return media_controller_->call_w()->StartEventLog(file, max_size_bytes); |
2316 } | 2295 } |
2317 | 2296 |
2318 void PeerConnection::StopRtcEventLog_w() { | 2297 void PeerConnection::StopRtcEventLog_w() { |
2319 media_controller_->call_w()->StopEventLog(); | 2298 media_controller_->call_w()->StopEventLog(); |
2320 } | 2299 } |
2321 } // namespace webrtc | 2300 } // namespace webrtc |
OLD | NEW |