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

Unified Diff: talk/app/webrtc/webrtcsession.cc

Issue 1393563002: Moving MediaStreamSignaling logic into PeerConnection. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing copyright header Created 5 years, 2 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 | « talk/app/webrtc/webrtcsession.h ('k') | talk/app/webrtc/webrtcsession_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/app/webrtc/webrtcsession.cc
diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc
index bdc47840bd1274380b10c906a4287ac63e9a9ba4..1a5751a111ed089af01b63e25ec4c2728091c845 100644
--- a/talk/app/webrtc/webrtcsession.cc
+++ b/talk/app/webrtc/webrtcsession.cc
@@ -38,6 +38,7 @@
#include "talk/app/webrtc/mediaconstraintsinterface.h"
#include "talk/app/webrtc/mediastreamsignaling.h"
#include "talk/app/webrtc/peerconnectioninterface.h"
+#include "talk/app/webrtc/sctputils.h"
#include "talk/app/webrtc/webrtcsessiondescriptionfactory.h"
#include "talk/media/base/constants.h"
#include "talk/media/base/videocapturer.h"
@@ -536,12 +537,10 @@ class IceRestartAnswerLatch {
bool ice_restart_;
};
-WebRtcSession::WebRtcSession(
- cricket::ChannelManager* channel_manager,
- rtc::Thread* signaling_thread,
- rtc::Thread* worker_thread,
- cricket::PortAllocator* port_allocator,
- MediaStreamSignaling* mediastream_signaling)
+WebRtcSession::WebRtcSession(cricket::ChannelManager* channel_manager,
+ rtc::Thread* signaling_thread,
+ rtc::Thread* worker_thread,
+ cricket::PortAllocator* port_allocator)
: cricket::BaseSession(signaling_thread,
worker_thread,
port_allocator,
@@ -551,7 +550,6 @@ WebRtcSession::WebRtcSession(
// o line MUST be representable with a "64 bit signed integer".
// Due to this constraint session id |sid_| is max limited to LLONG_MAX.
channel_manager_(channel_manager),
- mediastream_signaling_(mediastream_signaling),
ice_observer_(NULL),
ice_connection_state_(PeerConnectionInterface::kIceConnectionNew),
ice_connection_receiving_(true),
@@ -643,9 +641,6 @@ bool WebRtcSession::Initialize(
data_channel_type_ = cricket::DCT_SCTP;
}
}
- if (data_channel_type_ != cricket::DCT_NONE) {
- mediastream_signaling_->SetDataChannelFactory(this);
- }
// Find DSCP constraint.
if (FindConstraint(
@@ -743,21 +738,19 @@ bool WebRtcSession::Initialize(
if (!dtls_enabled_) {
// Construct with DTLS disabled.
webrtc_session_desc_factory_.reset(new WebRtcSessionDescriptionFactory(
- signaling_thread(), channel_manager_, mediastream_signaling_, this,
- id(), data_channel_type_));
+ signaling_thread(), channel_manager_, this, id()));
} else {
// Construct with DTLS enabled.
if (!certificate) {
// Use the |dtls_identity_store| to generate a certificate.
RTC_DCHECK(dtls_identity_store);
webrtc_session_desc_factory_.reset(new WebRtcSessionDescriptionFactory(
- signaling_thread(), channel_manager_, mediastream_signaling_,
- dtls_identity_store.Pass(), this, id(), data_channel_type_));
+ signaling_thread(), channel_manager_, dtls_identity_store.Pass(),
+ this, id()));
} else {
// Use the already generated certificate.
webrtc_session_desc_factory_.reset(new WebRtcSessionDescriptionFactory(
- signaling_thread(), channel_manager_, mediastream_signaling_,
- certificate, this, id(), data_channel_type_));
+ signaling_thread(), channel_manager_, certificate, this, id()));
}
}
@@ -819,13 +812,17 @@ bool WebRtcSession::GetSslRole(rtc::SSLRole* role) {
void WebRtcSession::CreateOffer(
CreateSessionDescriptionObserver* observer,
- const PeerConnectionInterface::RTCOfferAnswerOptions& options) {
- webrtc_session_desc_factory_->CreateOffer(observer, options);
+ const PeerConnectionInterface::RTCOfferAnswerOptions& options,
+ const cricket::MediaSessionOptions& session_options) {
+ webrtc_session_desc_factory_->CreateOffer(observer, options, session_options);
}
-void WebRtcSession::CreateAnswer(CreateSessionDescriptionObserver* observer,
- const MediaConstraintsInterface* constraints) {
- webrtc_session_desc_factory_->CreateAnswer(observer, constraints);
+void WebRtcSession::CreateAnswer(
+ CreateSessionDescriptionObserver* observer,
+ const MediaConstraintsInterface* constraints,
+ const cricket::MediaSessionOptions& session_options) {
+ webrtc_session_desc_factory_->CreateAnswer(observer, constraints,
+ session_options);
}
bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc,
@@ -883,14 +880,6 @@ bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc,
UseCandidatesInSessionDescription(remote_desc_.get());
}
- // Update state and SSRC of local MediaStreams and DataChannels based on the
- // local session description.
- mediastream_signaling_->OnLocalDescriptionChanged(local_desc_.get());
-
- rtc::SSLRole role;
- if (data_channel_type_ == cricket::DCT_SCTP && GetSslRole(&role)) {
- mediastream_signaling_->OnDtlsRoleReadyForSctp(role);
- }
if (error() != cricket::BaseSession::ERROR_NONE) {
return BadLocalSdp(desc->type(), GetSessionErrorMsg(), err_desc);
}
@@ -927,8 +916,6 @@ bool WebRtcSession::SetRemoteDescription(SessionDescriptionInterface* desc,
return false;
}
- // Update remote MediaStreams.
- mediastream_signaling_->OnRemoteDescriptionChanged(desc);
if (local_description() && !UseCandidatesInSessionDescription(desc)) {
return BadRemoteSdp(desc->type(), kInvalidCandidates, err_desc);
}
@@ -950,11 +937,6 @@ bool WebRtcSession::SetRemoteDescription(SessionDescriptionInterface* desc,
remote_desc_.reset(desc_temp.release());
- rtc::SSLRole role;
- if (data_channel_type_ == cricket::DCT_SCTP && GetSslRole(&role)) {
- mediastream_signaling_->OnDtlsRoleReadyForSctp(role);
- }
-
if (error() != cricket::BaseSession::ERROR_NONE) {
return BadRemoteSdp(desc->type(), GetSessionErrorMsg(), err_desc);
}
@@ -1387,6 +1369,8 @@ bool WebRtcSession::ConnectDataChannel(DataChannel* webrtc_data_channel) {
&DataChannel::OnChannelReady);
data_channel_->SignalDataReceived.connect(webrtc_data_channel,
&DataChannel::OnDataReceived);
+ data_channel_->SignalStreamClosedRemotely.connect(
+ webrtc_data_channel, &DataChannel::OnStreamClosedRemotely);
return true;
}
@@ -1397,6 +1381,7 @@ void WebRtcSession::DisconnectDataChannel(DataChannel* webrtc_data_channel) {
}
data_channel_->SignalReadyToSendData.disconnect(webrtc_data_channel);
data_channel_->SignalDataReceived.disconnect(webrtc_data_channel);
+ data_channel_->SignalStreamClosedRemotely.disconnect(webrtc_data_channel);
}
void WebRtcSession::AddSctpDataStream(int sid) {
@@ -1409,8 +1394,6 @@ void WebRtcSession::AddSctpDataStream(int sid) {
}
void WebRtcSession::RemoveSctpDataStream(int sid) {
- mediastream_signaling_->RemoveSctpDataChannel(sid);
-
if (!data_channel_) {
LOG(LS_ERROR) << "RemoveDataChannelStreams called when data_channel_ is "
<< "NULL.";
@@ -1424,41 +1407,6 @@ bool WebRtcSession::ReadyToSendData() const {
return data_channel_ && data_channel_->ready_to_send_data();
}
-rtc::scoped_refptr<DataChannel> WebRtcSession::CreateDataChannel(
- const std::string& label,
- const InternalDataChannelInit* config) {
- if (state() == STATE_RECEIVEDTERMINATE) {
- return NULL;
- }
- if (data_channel_type_ == cricket::DCT_NONE) {
- LOG(LS_ERROR) << "CreateDataChannel: Data is not supported in this call.";
- return NULL;
- }
- InternalDataChannelInit new_config =
- config ? (*config) : InternalDataChannelInit();
- if (data_channel_type_ == cricket::DCT_SCTP) {
- if (new_config.id < 0) {
- rtc::SSLRole role;
- if (GetSslRole(&role) &&
- !mediastream_signaling_->AllocateSctpSid(role, &new_config.id)) {
- LOG(LS_ERROR) << "No id can be allocated for the SCTP data channel.";
- return NULL;
- }
- } else if (!mediastream_signaling_->IsSctpSidAvailable(new_config.id)) {
- LOG(LS_ERROR) << "Failed to create a SCTP data channel "
- << "because the id is already in use or out of range.";
- return NULL;
- }
- }
-
- rtc::scoped_refptr<DataChannel> channel(DataChannel::Create(
- this, data_channel_type_, label, new_config));
- if (channel && !mediastream_signaling_->AddDataChannel(channel))
- return NULL;
-
- return channel;
-}
-
cricket::DataChannelType WebRtcSession::data_channel_type() const {
return data_channel_type_;
}
@@ -1727,7 +1675,6 @@ void WebRtcSession::RemoveUnusedChannels(const SessionDescription* desc) {
const cricket::ContentInfo* video_info =
cricket::GetFirstVideoContent(desc);
if ((!video_info || video_info->rejected) && video_channel_) {
- mediastream_signaling_->OnVideoChannelClose();
SignalVideoChannelDestroyed();
const std::string content_name = video_channel_->content_name();
channel_manager_->DestroyVideoChannel(video_channel_.release());
@@ -1736,7 +1683,6 @@ void WebRtcSession::RemoveUnusedChannels(const SessionDescription* desc) {
const cricket::ContentInfo* voice_info =
cricket::GetFirstAudioContent(desc);
if ((!voice_info || voice_info->rejected) && voice_channel_) {
- mediastream_signaling_->OnAudioChannelClose();
SignalVoiceChannelDestroyed();
const std::string content_name = voice_channel_->content_name();
channel_manager_->DestroyVoiceChannel(voice_channel_.release());
@@ -1745,7 +1691,6 @@ void WebRtcSession::RemoveUnusedChannels(const SessionDescription* desc) {
const cricket::ContentInfo* data_info =
cricket::GetFirstDataContent(desc);
if ((!data_info || data_info->rejected) && data_channel_) {
- mediastream_signaling_->OnDataChannelClose();
SignalDataChannelDestroyed();
const std::string content_name = data_channel_->content_name();
channel_manager_->DestroyDataChannel(data_channel_.release());
@@ -1820,6 +1765,8 @@ bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) {
voice_channel_->SignalDtlsSetupFailure.connect(
this, &WebRtcSession::OnDtlsSetupFailure);
+
+ SignalVoiceChannelCreated();
return true;
}
@@ -1833,6 +1780,8 @@ bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) {
video_channel_->SignalDtlsSetupFailure.connect(
this, &WebRtcSession::OnDtlsSetupFailure);
+
+ SignalVideoChannelCreated();
return true;
}
@@ -1845,16 +1794,14 @@ bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) {
}
if (sctp) {
- mediastream_signaling_->OnDataTransportCreatedForSctp();
data_channel_->SignalDataReceived.connect(
this, &WebRtcSession::OnDataChannelMessageReceived);
- data_channel_->SignalStreamClosedRemotely.connect(
- mediastream_signaling_,
- &MediaStreamSignaling::OnRemoteSctpDataChannelClosed);
}
data_channel_->SignalDtlsSetupFailure.connect(
this, &WebRtcSession::OnDtlsSetupFailure);
+
+ SignalDataChannelCreated();
return true;
}
@@ -1880,13 +1827,22 @@ void WebRtcSession::OnDataChannelMessageReceived(
cricket::DataChannel* channel,
const cricket::ReceiveDataParams& params,
const rtc::Buffer& payload) {
- ASSERT(data_channel_type_ == cricket::DCT_SCTP);
- if (params.type == cricket::DMT_CONTROL &&
- mediastream_signaling_->IsSctpSidAvailable(params.ssrc)) {
- // Received CONTROL on unused sid, process as an OPEN message.
- mediastream_signaling_->AddDataChannelFromOpenMessage(params, payload);
+ RTC_DCHECK(data_channel_type_ == cricket::DCT_SCTP);
+ if (params.type == cricket::DMT_CONTROL && IsOpenMessage(payload)) {
+ // Received OPEN message; parse and signal that a new data channel should
+ // be created.
+ std::string label;
+ InternalDataChannelInit config;
+ config.id = params.ssrc;
+ if (!ParseDataChannelOpenMessage(payload, &label, &config)) {
+ LOG(LS_WARNING) << "Failed to parse the OPEN message for sid "
+ << params.ssrc;
+ return;
+ }
+ config.open_handshake_role = InternalDataChannelInit::kAcker;
+ SignalDataChannelOpenMessage(label, config);
}
- // otherwise ignore the message.
+ // Otherwise ignore the message.
}
// Returns false if bundle is enabled and rtcp_mux is disabled.
« no previous file with comments | « talk/app/webrtc/webrtcsession.h ('k') | talk/app/webrtc/webrtcsession_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698