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

Unified Diff: webrtc/api/webrtcsession.cc

Issue 1844803002: Modify PeerConnection for end-to-end QuicDataChannel usage (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Sync to upstream after landing QUIC data channel and QUIC transport CLs Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/webrtcsession.h ('k') | webrtc/api/webrtcsession_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/webrtcsession.cc
diff --git a/webrtc/api/webrtcsession.cc b/webrtc/api/webrtcsession.cc
index 9f84840822fce12c4c9012b568e10c0b3b4e651b..2cd592a08241e350d14751127ba964cbaf2edc7b 100644
--- a/webrtc/api/webrtcsession.cc
+++ b/webrtc/api/webrtcsession.cc
@@ -24,6 +24,7 @@
#include "webrtc/api/webrtcsessiondescriptionfactory.h"
#include "webrtc/audio_sink.h"
#include "webrtc/base/basictypes.h"
+#include "webrtc/base/bind.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/helpers.h"
#include "webrtc/base/logging.h"
@@ -38,6 +39,10 @@
#include "webrtc/pc/channelmanager.h"
#include "webrtc/pc/mediasession.h"
+#ifdef HAVE_QUIC
+#include "webrtc/p2p/quic/quictransportchannel.h"
+#endif // HAVE_QUIC
+
using cricket::ContentInfo;
using cricket::ContentInfos;
using cricket::MediaContentDescription;
@@ -561,7 +566,17 @@ bool WebRtcSession::Initialize(
// PeerConnectionFactoryInterface::Options.
if (rtc_configuration.enable_rtp_data_channel) {
data_channel_type_ = cricket::DCT_RTP;
- } else {
+ }
+#ifdef HAVE_QUIC
+ else if (rtc_configuration.enable_quic && dtls_enabled_) {
+ // Use QUIC instead of DTLS when |enable_quic| is true and encryption is
+ // enabled.
+ data_channel_type_ = cricket::DCT_QUIC;
+ transport_controller_->use_quic();
+ LOG(LS_INFO) << "Using QUIC instead of DTLS";
+ }
+#endif // HAVE_QUIC
+ else {
// DTLS has to be enabled to use SCTP.
if (!options.disable_sctp_data_channels && dtls_enabled_) {
data_channel_type_ = cricket::DCT_SCTP;
@@ -1748,8 +1763,8 @@ bool WebRtcSession::CreateChannels(const SessionDescription* desc) {
}
const cricket::ContentInfo* data = cricket::GetFirstDataContent(desc);
- if (data_channel_type_ != cricket::DCT_NONE &&
- data && !data->rejected && !data_channel_) {
+ if (data_channel_type_ != cricket::DCT_NONE && data && !data->rejected &&
+ !data_channel_) {
if (!CreateDataChannel(data)) {
LOG(LS_ERROR) << "Failed to create data channel.";
return false;
@@ -1820,7 +1835,27 @@ bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) {
}
bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) {
- bool sctp = (data_channel_type_ == cricket::DCT_SCTP);
+#ifdef HAVE_QUIC
+ if (data_channel_type_ == cricket::DCT_QUIC) {
+ // The TransportController may not have a QuicTransportChannel, so force
+ // creation of it.
+ LOG(LS_INFO) << "Getting or creating QuicTransportChannel";
+ RTC_DCHECK(transport_controller_->quic());
+ cricket::TransportChannel* transport_channel =
+ worker_thread_->Invoke<cricket::TransportChannel*>(
+ rtc::Bind(&cricket::TransportController::CreateTransportChannel_w,
+ transport_controller_.get(), content->name,
+ cricket::ICE_CANDIDATE_COMPONENT_RTP));
+ if (!transport_channel) {
+ return false;
+ }
+ quic_transport_channel_ =
+ static_cast<cricket::QuicTransportChannel*>(transport_channel);
+ SignalQuicTransportChannelCreated(quic_transport_channel_);
+ return true;
+ }
+#endif // HAVE_QUIC
+ bool sctp = data_channel_type_ == cricket::DCT_SCTP;
data_channel_.reset(channel_manager_->CreateDataChannel(
transport_controller_.get(), content->name, !sctp, data_channel_type_));
if (!data_channel_) {
@@ -1994,7 +2029,7 @@ bool WebRtcSession::ReadyToUseRemoteCandidate(
const IceCandidateInterface* candidate,
const SessionDescriptionInterface* remote_desc,
bool* valid) {
- *valid = true;;
+ *valid = true;
const SessionDescriptionInterface* current_remote_desc =
remote_desc ? remote_desc : remote_desc_.get();
@@ -2019,6 +2054,14 @@ bool WebRtcSession::ReadyToUseRemoteCandidate(
current_remote_desc->description()->contents()[mediacontent_index];
cricket::BaseChannel* channel = GetChannel(content.name);
if (!channel) {
+#ifdef HAVE_QUIC
+ if (data_channel_type_ == cricket::DCT_QUIC && quic_transport_channel_ &&
+ content.name == quic_transport_channel_->transport_name()) {
+ // QUIC data channels do not have a BaseChannel unless bundle is enabled.
+ return transport_controller_->ReadyForRemoteCandidates(
+ quic_transport_channel_->transport_name());
+ }
+#endif // HAVE_QUIC
return false;
}
« no previous file with comments | « webrtc/api/webrtcsession.h ('k') | webrtc/api/webrtcsession_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698