Chromium Code Reviews| 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 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 589 session_->SignalVoiceChannelDestroyed.connect( | 589 session_->SignalVoiceChannelDestroyed.connect( |
| 590 this, &PeerConnection::OnVoiceChannelDestroyed); | 590 this, &PeerConnection::OnVoiceChannelDestroyed); |
| 591 session_->SignalVideoChannelDestroyed.connect( | 591 session_->SignalVideoChannelDestroyed.connect( |
| 592 this, &PeerConnection::OnVideoChannelDestroyed); | 592 this, &PeerConnection::OnVideoChannelDestroyed); |
| 593 session_->SignalDataChannelCreated.connect( | 593 session_->SignalDataChannelCreated.connect( |
| 594 this, &PeerConnection::OnDataChannelCreated); | 594 this, &PeerConnection::OnDataChannelCreated); |
| 595 session_->SignalDataChannelDestroyed.connect( | 595 session_->SignalDataChannelDestroyed.connect( |
| 596 this, &PeerConnection::OnDataChannelDestroyed); | 596 this, &PeerConnection::OnDataChannelDestroyed); |
| 597 session_->SignalDataChannelOpenMessage.connect( | 597 session_->SignalDataChannelOpenMessage.connect( |
| 598 this, &PeerConnection::OnDataChannelOpenMessage); | 598 this, &PeerConnection::OnDataChannelOpenMessage); |
| 599 #ifdef HAVE_QUIC | |
| 600 session_->SignalQuicTransportChannelCreated.connect( | |
| 601 this, &PeerConnection::OnQuicTransportChannelCreated); | |
| 602 #endif // HAVE_QUIC | |
| 599 return true; | 603 return true; |
| 600 } | 604 } |
| 601 | 605 |
| 602 rtc::scoped_refptr<StreamCollectionInterface> | 606 rtc::scoped_refptr<StreamCollectionInterface> |
| 603 PeerConnection::local_streams() { | 607 PeerConnection::local_streams() { |
| 604 return local_streams_; | 608 return local_streams_; |
| 605 } | 609 } |
| 606 | 610 |
| 607 rtc::scoped_refptr<StreamCollectionInterface> | 611 rtc::scoped_refptr<StreamCollectionInterface> |
| 608 PeerConnection::remote_streams() { | 612 PeerConnection::remote_streams() { |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 826 PeerConnectionInterface::IceGatheringState | 830 PeerConnectionInterface::IceGatheringState |
| 827 PeerConnection::ice_gathering_state() { | 831 PeerConnection::ice_gathering_state() { |
| 828 return ice_gathering_state_; | 832 return ice_gathering_state_; |
| 829 } | 833 } |
| 830 | 834 |
| 831 rtc::scoped_refptr<DataChannelInterface> | 835 rtc::scoped_refptr<DataChannelInterface> |
| 832 PeerConnection::CreateDataChannel( | 836 PeerConnection::CreateDataChannel( |
| 833 const std::string& label, | 837 const std::string& label, |
| 834 const DataChannelInit* config) { | 838 const DataChannelInit* config) { |
| 835 TRACE_EVENT0("webrtc", "PeerConnection::CreateDataChannel"); | 839 TRACE_EVENT0("webrtc", "PeerConnection::CreateDataChannel"); |
| 840 #ifdef HAVE_QUIC | |
| 841 if (session_->data_channel_type() == cricket::DCT_QUIC) { | |
| 842 // TODO(mikescarlett): Handle case when config is NULL. | |
| 843 if (!config) { | |
| 844 LOG(LS_ERROR) << "Missing config for QUIC data channel."; | |
| 845 return nullptr; | |
| 846 } | |
| 847 // TODO(mikescarlett): Allow unreliable or ordered QUIC data channels. | |
| 848 if (!config->reliable || config->ordered) { | |
| 849 LOG(LS_ERROR) << "QUIC data channel does not implement unreliable or " | |
| 850 "ordered delivery."; | |
| 851 return nullptr; | |
| 852 } | |
| 853 return quic_data_transport_.CreateDataChannel( | |
| 854 session_->signaling_thread(), session_->worker_thread(), label, config); | |
| 855 } | |
| 856 #endif // HAVE_QUIC | |
| 857 | |
| 836 bool first_datachannel = !HasDataChannels(); | 858 bool first_datachannel = !HasDataChannels(); |
| 837 | 859 |
| 838 rtc::scoped_ptr<InternalDataChannelInit> internal_config; | 860 rtc::scoped_ptr<InternalDataChannelInit> internal_config; |
| 839 if (config) { | 861 if (config) { |
| 840 internal_config.reset(new InternalDataChannelInit(*config)); | 862 internal_config.reset(new InternalDataChannelInit(*config)); |
| 841 } | 863 } |
| 842 rtc::scoped_refptr<DataChannelInterface> channel( | 864 rtc::scoped_refptr<DataChannelInterface> channel( |
| 843 InternalCreateDataChannel(label, internal_config.get())); | 865 InternalCreateDataChannel(label, internal_config.get())); |
| 844 if (!channel.get()) { | 866 if (!channel.get()) { |
| 845 return nullptr; | 867 return nullptr; |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1493 if (rtc_options.offer_to_receive_video == RTCOfferAnswerOptions::kUndefined) { | 1515 if (rtc_options.offer_to_receive_video == RTCOfferAnswerOptions::kUndefined) { |
| 1494 session_options->recv_video = | 1516 session_options->recv_video = |
| 1495 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO) || | 1517 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO) || |
| 1496 !remote_video_tracks_.empty(); | 1518 !remote_video_tracks_.empty(); |
| 1497 } | 1519 } |
| 1498 session_options->bundle_enabled = | 1520 session_options->bundle_enabled = |
| 1499 session_options->bundle_enabled && | 1521 session_options->bundle_enabled && |
| 1500 (session_options->has_audio() || session_options->has_video() || | 1522 (session_options->has_audio() || session_options->has_video() || |
| 1501 session_options->has_data()); | 1523 session_options->has_data()); |
| 1502 | 1524 |
| 1503 if (session_->data_channel_type() == cricket::DCT_SCTP && HasDataChannels()) { | 1525 if (HasDataChannels()) { |
| 1504 session_options->data_channel_type = cricket::DCT_SCTP; | 1526 if (session_->data_channel_type() == cricket::DCT_SCTP) { |
| 1527 session_options->data_channel_type = cricket::DCT_SCTP; | |
| 1528 } else if (session_->data_channel_type() == cricket::DCT_QUIC) { | |
| 1529 session_options->data_channel_type = cricket::DCT_QUIC; | |
|
pthatcher1
2016/04/12 00:58:38
Why not just do session_options->data_channel_type
mikescarlett
2016/04/13 16:53:37
Sure I'll do that. I didn't know if RTP data chann
| |
| 1530 } | |
| 1505 } | 1531 } |
| 1506 return true; | 1532 return true; |
| 1507 } | 1533 } |
| 1508 | 1534 |
| 1509 void PeerConnection::FinishOptionsForAnswer( | 1535 void PeerConnection::FinishOptionsForAnswer( |
| 1510 cricket::MediaSessionOptions* session_options) { | 1536 cricket::MediaSessionOptions* session_options) { |
| 1511 // TODO(deadbeef): Once we have transceivers, enumerate them here instead of | 1537 // TODO(deadbeef): Once we have transceivers, enumerate them here instead of |
| 1512 // ContentInfos. | 1538 // ContentInfos. |
| 1513 if (session_->remote_description()) { | 1539 if (session_->remote_description()) { |
| 1514 // Initialize the transport_options map. | 1540 // Initialize the transport_options map. |
| 1515 for (const cricket::ContentInfo& content : | 1541 for (const cricket::ContentInfo& content : |
| 1516 session_->remote_description()->description()->contents()) { | 1542 session_->remote_description()->description()->contents()) { |
| 1517 session_options->transport_options[content.name] = | 1543 session_options->transport_options[content.name] = |
| 1518 cricket::TransportOptions(); | 1544 cricket::TransportOptions(); |
| 1519 } | 1545 } |
| 1520 } | 1546 } |
| 1521 AddSendStreams(session_options, senders_, rtp_data_channels_); | 1547 AddSendStreams(session_options, senders_, rtp_data_channels_); |
| 1522 session_options->bundle_enabled = | 1548 session_options->bundle_enabled = |
| 1523 session_options->bundle_enabled && | 1549 session_options->bundle_enabled && |
| 1524 (session_options->has_audio() || session_options->has_video() || | 1550 (session_options->has_audio() || session_options->has_video() || |
| 1525 session_options->has_data()); | 1551 session_options->has_data()); |
| 1526 | 1552 |
| 1527 // RTP data channel is handled in MediaSessionOptions::AddStream. SCTP streams | 1553 // RTP data channel is handled in MediaSessionOptions::AddStream. SCTP streams |
| 1528 // are not signaled in the SDP so does not go through that path and must be | 1554 // are not signaled in the SDP so does not go through that path and must be |
| 1529 // handled here. | 1555 // handled here. |
| 1530 if (session_->data_channel_type() == cricket::DCT_SCTP) { | 1556 if (session_->data_channel_type() == cricket::DCT_SCTP) { |
| 1531 session_options->data_channel_type = cricket::DCT_SCTP; | 1557 session_options->data_channel_type = cricket::DCT_SCTP; |
| 1532 } | 1558 } |
| 1559 if (session_->data_channel_type() == cricket::DCT_QUIC) { | |
| 1560 session_options->data_channel_type = cricket::DCT_QUIC; | |
| 1561 } | |
|
pthatcher1
2016/04/12 00:58:38
Same here.
mikescarlett
2016/04/13 16:53:37
Done.
| |
| 1533 } | 1562 } |
| 1534 | 1563 |
| 1535 bool PeerConnection::GetOptionsForAnswer( | 1564 bool PeerConnection::GetOptionsForAnswer( |
| 1536 const MediaConstraintsInterface* constraints, | 1565 const MediaConstraintsInterface* constraints, |
| 1537 cricket::MediaSessionOptions* session_options) { | 1566 cricket::MediaSessionOptions* session_options) { |
| 1538 session_options->recv_audio = false; | 1567 session_options->recv_audio = false; |
| 1539 session_options->recv_video = false; | 1568 session_options->recv_video = false; |
| 1540 if (!ParseConstraintsForAnswer(constraints, session_options)) { | 1569 if (!ParseConstraintsForAnswer(constraints, session_options)) { |
| 1541 return false; | 1570 return false; |
| 1542 } | 1571 } |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1914 RTC_DCHECK(channel->data_channel_type() == cricket::DCT_SCTP); | 1943 RTC_DCHECK(channel->data_channel_type() == cricket::DCT_SCTP); |
| 1915 sctp_data_channels_.push_back(channel); | 1944 sctp_data_channels_.push_back(channel); |
| 1916 channel->SignalClosed.connect(this, | 1945 channel->SignalClosed.connect(this, |
| 1917 &PeerConnection::OnSctpDataChannelClosed); | 1946 &PeerConnection::OnSctpDataChannelClosed); |
| 1918 } | 1947 } |
| 1919 | 1948 |
| 1920 return channel; | 1949 return channel; |
| 1921 } | 1950 } |
| 1922 | 1951 |
| 1923 bool PeerConnection::HasDataChannels() const { | 1952 bool PeerConnection::HasDataChannels() const { |
| 1953 #ifdef HAVE_QUIC | |
| 1954 return !rtp_data_channels_.empty() || !sctp_data_channels_.empty() || | |
| 1955 quic_data_transport_.HasDataChannels(); | |
| 1956 #else | |
| 1924 return !rtp_data_channels_.empty() || !sctp_data_channels_.empty(); | 1957 return !rtp_data_channels_.empty() || !sctp_data_channels_.empty(); |
| 1958 #endif // HAVE_QUIC | |
| 1925 } | 1959 } |
| 1926 | 1960 |
| 1927 void PeerConnection::AllocateSctpSids(rtc::SSLRole role) { | 1961 void PeerConnection::AllocateSctpSids(rtc::SSLRole role) { |
| 1928 for (const auto& channel : sctp_data_channels_) { | 1962 for (const auto& channel : sctp_data_channels_) { |
| 1929 if (channel->id() < 0) { | 1963 if (channel->id() < 0) { |
| 1930 int sid; | 1964 int sid; |
| 1931 if (!sid_allocator_.AllocateSid(role, &sid)) { | 1965 if (!sid_allocator_.AllocateSid(role, &sid)) { |
| 1932 LOG(LS_ERROR) << "Failed to allocate SCTP sid."; | 1966 LOG(LS_ERROR) << "Failed to allocate SCTP sid."; |
| 1933 continue; | 1967 continue; |
| 1934 } | 1968 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2057 | 2091 |
| 2058 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { | 2092 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { |
| 2059 for (const auto& channel : sctp_data_channels_) { | 2093 for (const auto& channel : sctp_data_channels_) { |
| 2060 if (channel->id() == sid) { | 2094 if (channel->id() == sid) { |
| 2061 return channel; | 2095 return channel; |
| 2062 } | 2096 } |
| 2063 } | 2097 } |
| 2064 return nullptr; | 2098 return nullptr; |
| 2065 } | 2099 } |
| 2066 | 2100 |
| 2101 #ifdef HAVE_QUIC | |
| 2102 void PeerConnection::OnQuicTransportChannelCreated( | |
| 2103 cricket::QuicTransportChannel* channel) { | |
| 2104 quic_data_transport_.SetTransportChannel(channel); | |
| 2105 } | |
| 2106 #endif // HAVE_QUIC | |
| 2107 | |
| 2067 } // namespace webrtc | 2108 } // namespace webrtc |
| OLD | NEW |