Index: talk/app/webrtc/webrtcsession.cc |
diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc |
index 2ab9a1e6969599983724f9ffdce7aebb91b5d418..9156318e062b02a19851009ab10a8fc8424633d3 100644 |
--- a/talk/app/webrtc/webrtcsession.cc |
+++ b/talk/app/webrtc/webrtcsession.cc |
@@ -63,6 +63,14 @@ using cricket::STUN_PORT_TYPE; |
using cricket::RELAY_PORT_TYPE; |
using cricket::PRFLX_PORT_TYPE; |
+namespace { |
+ |
+enum { |
+ MSG_STATE = 0, |
+}; |
+ |
+} // namespace |
+ |
namespace webrtc { |
// Error messages |
@@ -330,7 +338,11 @@ static bool BadSdp(const std::string& source, |
const std::string& reason, |
std::string* err_desc) { |
std::ostringstream desc; |
- desc << "Failed to set " << source << " " << type << " sdp: " << reason; |
+ desc << "Failed to set " << source; |
+ if (!type.empty()) { |
+ desc << " " << type; |
+ } |
+ desc << " sdp: " << reason; |
if (err_desc) { |
*err_desc = desc.str(); |
@@ -381,12 +393,12 @@ static bool BadAnswerSdp(cricket::ContentSource source, |
return BadSdp(source, SessionDescriptionInterface::kAnswer, reason, err_desc); |
} |
-#define GET_STRING_OF_STATE(state) \ |
- case cricket::BaseSession::state: \ |
- result = #state; \ |
+#define GET_STRING_OF_STATE(state) \ |
+ case webrtc::WebRtcSession::state: \ |
+ result = #state; \ |
break; |
-static std::string GetStateString(cricket::BaseSession::State state) { |
+static std::string GetStateString(webrtc::WebRtcSession::State state) { |
std::string result; |
switch (state) { |
GET_STRING_OF_STATE(STATE_INIT) |
@@ -412,22 +424,19 @@ static std::string GetStateString(cricket::BaseSession::State state) { |
return result; |
} |
-#define GET_STRING_OF_ERROR_CODE(err) \ |
- case cricket::BaseSession::err: \ |
- result = #err; \ |
+#define GET_STRING_OF_ERROR_CODE(err) \ |
+ case webrtc::WebRtcSession::err: \ |
+ result = #err; \ |
break; |
-static std::string GetErrorCodeString(cricket::BaseSession::Error err) { |
+static std::string GetErrorCodeString(webrtc::WebRtcSession::Error err) { |
std::string result; |
switch (err) { |
GET_STRING_OF_ERROR_CODE(ERROR_NONE) |
- GET_STRING_OF_ERROR_CODE(ERROR_TIME) |
- GET_STRING_OF_ERROR_CODE(ERROR_RESPONSE) |
- GET_STRING_OF_ERROR_CODE(ERROR_NETWORK) |
GET_STRING_OF_ERROR_CODE(ERROR_CONTENT) |
GET_STRING_OF_ERROR_CODE(ERROR_TRANSPORT) |
default: |
- ASSERT(false); |
+ RTC_DCHECK(false); |
break; |
} |
return result; |
@@ -536,20 +545,21 @@ 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) |
- : cricket::BaseSession(signaling_thread, |
- worker_thread, |
- port_allocator, |
- rtc::ToString(rtc::CreateRandomId64() & LLONG_MAX), |
- false), |
+WebRtcSession::WebRtcSession(cricket::ChannelManager* channel_manager, |
+ rtc::Thread* signaling_thread, |
+ rtc::Thread* worker_thread, |
+ cricket::PortAllocator* port_allocator, |
+ MediaStreamSignaling* mediastream_signaling) |
+ : signaling_thread_(signaling_thread), |
+ worker_thread_(worker_thread), |
+ port_allocator_(port_allocator), |
// RFC 3264: The numeric value of the session id and version in the |
// o line MUST be representable with a "64 bit signed integer". |
// Due to this constraint session id |sid_| is max limited to LLONG_MAX. |
+ sid_(rtc::ToString(rtc::CreateRandomId64() & LLONG_MAX)), |
+ transport_controller_(new cricket::TransportController(signaling_thread, |
+ worker_thread, |
+ port_allocator)), |
channel_manager_(channel_manager), |
mediastream_signaling_(mediastream_signaling), |
ice_observer_(NULL), |
@@ -560,13 +570,14 @@ WebRtcSession::WebRtcSession( |
data_channel_type_(cricket::DCT_NONE), |
ice_restart_latch_(new IceRestartAnswerLatch), |
metrics_observer_(NULL) { |
- transport_controller()->SignalConnectionState.connect( |
+ transport_controller_->SetIceRole(cricket::ICEROLE_CONTROLLED); |
+ transport_controller_->SignalConnectionState.connect( |
this, &WebRtcSession::OnTransportControllerConnectionState); |
- transport_controller()->SignalReceiving.connect( |
+ transport_controller_->SignalReceiving.connect( |
this, &WebRtcSession::OnTransportControllerReceiving); |
- transport_controller()->SignalGatheringState.connect( |
+ transport_controller_->SignalGatheringState.connect( |
this, &WebRtcSession::OnTransportControllerGatheringState); |
- transport_controller()->SignalCandidatesGathered.connect( |
+ transport_controller_->SignalCandidatesGathered.connect( |
this, &WebRtcSession::OnTransportControllerCandidatesGathered); |
} |
@@ -589,6 +600,11 @@ WebRtcSession::~WebRtcSession() { |
for (size_t i = 0; i < saved_candidates_.size(); ++i) { |
delete saved_candidates_[i]; |
} |
+ |
+ RTC_DCHECK(state_ != STATE_DEINIT); |
+ LogState(state_, STATE_DEINIT); |
+ state_ = STATE_DEINIT; |
+ SignalState(this, state_); |
} |
bool WebRtcSession::Initialize( |
@@ -598,7 +614,7 @@ bool WebRtcSession::Initialize( |
const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { |
bundle_policy_ = rtc_configuration.bundle_policy; |
rtcp_mux_policy_ = rtc_configuration.rtcp_mux_policy; |
- transport_controller()->SetSslMaxProtocolVersion(options.ssl_max_version); |
+ transport_controller_->SetSslMaxProtocolVersion(options.ssl_max_version); |
// Obtain a certificate from RTCConfiguration if any were provided (optional). |
rtc::scoped_refptr<rtc::RTCCertificate> certificate; |
@@ -782,15 +798,6 @@ bool WebRtcSession::Initialize( |
return true; |
} |
-cricket::IceConfig WebRtcSession::ParseIceConfig( |
- const PeerConnectionInterface::RTCConfiguration& config) const { |
- cricket::IceConfig ice_config; |
- ice_config.receiving_timeout_ms = config.ice_connection_receiving_timeout; |
- ice_config.gather_continually = (config.continual_gathering_policy == |
- PeerConnectionInterface::GATHER_CONTINUALLY); |
- return ice_config; |
-} |
- |
void WebRtcSession::Terminate() { |
SetState(STATE_RECEIVEDTERMINATE); |
RemoveUnusedChannels(NULL); |
@@ -808,13 +815,13 @@ cricket::SecurePolicy WebRtcSession::SdesPolicy() const { |
} |
bool WebRtcSession::GetSslRole(rtc::SSLRole* role) { |
- if (local_description() == NULL || remote_description() == NULL) { |
+ if (!local_desc_ || !remote_desc_) { |
LOG(LS_INFO) << "Local and Remote descriptions must be applied to get " |
<< "SSL Role of the session."; |
return false; |
} |
- return transport_controller()->GetSslRole(role); |
+ return transport_controller_->GetSslRole(role); |
} |
void WebRtcSession::CreateOffer( |
@@ -843,7 +850,8 @@ bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc, |
// Update the initiator flag if this session is the initiator. |
Action action = GetAction(desc->type()); |
if (state() == STATE_INIT && action == kOffer) { |
- set_initiator(true); |
+ initiator_ = true; |
+ transport_controller_->SetIceRole(cricket::ICEROLE_CONTROLLING); |
} |
cricket::SecurePolicy sdes_policy = |
@@ -854,24 +862,23 @@ bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc, |
// Update the MediaContentDescription crypto settings as per the policy set. |
UpdateSessionDescriptionSecurePolicy(crypto_required, desc->description()); |
- set_local_description(desc->description()->Copy()); |
local_desc_.reset(desc_temp.release()); |
// Transport and Media channels will be created only when offer is set. |
- if (action == kOffer && !CreateChannels(local_desc_->description())) { |
+ if (action == kOffer && !CreateChannels(base_local_description())) { |
// TODO(mallinath) - Handle CreateChannel failure, as new local description |
// is applied. Restore back to old description. |
return BadLocalSdp(desc->type(), kCreateChannelFailed, err_desc); |
} |
// Remove unused channels if MediaContentDescription is rejected. |
- RemoveUnusedChannels(local_desc_->description()); |
+ RemoveUnusedChannels(base_local_description()); |
if (!UpdateSessionState(action, cricket::CS_LOCAL, err_desc)) { |
return false; |
} |
- if (remote_description()) { |
+ if (remote_desc_) { |
// Now that we have a local description, we can push down remote candidates |
// that we stored, and those from the remote description. |
if (!saved_candidates_.empty()) { |
@@ -891,7 +898,7 @@ bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc, |
if (data_channel_type_ == cricket::DCT_SCTP && GetSslRole(&role)) { |
mediastream_signaling_->OnDtlsRoleReadyForSctp(role); |
} |
- if (error() != cricket::BaseSession::ERROR_NONE) { |
+ if (error() != ERROR_NONE) { |
return BadLocalSdp(desc->type(), GetSessionErrorMsg(), err_desc); |
} |
return true; |
@@ -909,6 +916,10 @@ bool WebRtcSession::SetRemoteDescription(SessionDescriptionInterface* desc, |
return false; |
} |
+ rtc::scoped_ptr<SessionDescriptionInterface> old_remote_desc( |
+ remote_desc_.release()); |
+ remote_desc_.reset(desc_temp.release()); |
+ |
// Transport and Media channels will be created only when offer is set. |
Action action = GetAction(desc->type()); |
if (action == kOffer && !CreateChannels(desc->description())) { |
@@ -922,40 +933,38 @@ bool WebRtcSession::SetRemoteDescription(SessionDescriptionInterface* desc, |
// NOTE: Candidates allocation will be initiated only when SetLocalDescription |
// is called. |
- set_remote_description(desc->description()->Copy()); |
if (!UpdateSessionState(action, cricket::CS_REMOTE, err_desc)) { |
return false; |
} |
// Update remote MediaStreams. |
mediastream_signaling_->OnRemoteDescriptionChanged(desc); |
- if (local_description() && !UseCandidatesInSessionDescription(desc)) { |
- return BadRemoteSdp(desc->type(), kInvalidCandidates, err_desc); |
- } |
// Copy all saved candidates. |
CopySavedCandidates(desc); |
+ if (local_desc_ && !UseCandidatesInSessionDescription(desc)) { |
+ return BadRemoteSdp(desc->type(), kInvalidCandidates, err_desc); |
+ } |
+ |
// Check if this new SessionDescription contains new ice ufrag and password |
// that indicates the remote peer requests ice restart. |
bool ice_restart = |
- ice_restart_latch_->CheckForRemoteIceRestart(remote_desc_.get(), desc); |
+ ice_restart_latch_->CheckForRemoteIceRestart(old_remote_desc.get(), desc); |
// We retain all received candidates only if ICE is not restarted. |
// When ICE is restarted, all previous candidates belong to an old generation |
// and should not be kept. |
if (!ice_restart) { |
WebRtcSessionDescriptionFactory::CopyCandidatesFromSessionDescription( |
- remote_desc_.get(), desc); |
+ old_remote_desc.get(), 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) { |
+ if (error() != ERROR_NONE) { |
return BadRemoteSdp(desc->type(), GetSessionErrorMsg(), err_desc); |
} |
@@ -974,6 +983,48 @@ bool WebRtcSession::SetRemoteDescription(SessionDescriptionInterface* desc, |
return true; |
} |
+void WebRtcSession::OnMessage(rtc::Message* pmsg) { |
+ switch (pmsg->message_id) { |
+ case MSG_STATE: |
+ switch (state_) { |
+ case STATE_SENTACCEPT: |
+ case STATE_RECEIVEDACCEPT: |
+ SetState(STATE_INPROGRESS); |
+ break; |
+ |
+ default: |
+ // Explicitly ignoring some states here. |
+ break; |
+ } |
+ break; |
+ } |
+} |
+ |
+void WebRtcSession::LogState(State old_state, State new_state) { |
+ LOG(LS_INFO) << "Session:" << id() |
+ << " Old state:" << GetStateString(old_state) |
+ << " New state:" << GetStateString(new_state); |
+} |
+ |
+void WebRtcSession::SetState(State state) { |
+ ASSERT(signaling_thread_->IsCurrent()); |
+ if (state != state_) { |
+ LogState(state_, state); |
+ state_ = state; |
+ SignalState(this, state_); |
+ signaling_thread_->Post(this, MSG_STATE); |
pthatcher1
2015/10/09 03:28:57
The whole point of this is to convert STATE_SENTAC
Taylor Brandstetter
2015/10/09 23:02:06
Done.
|
+ } |
+} |
+ |
+void WebRtcSession::SetError(Error error, const std::string& error_desc) { |
+ ASSERT(signaling_thread_->IsCurrent()); |
+ if (error != error_) { |
+ error_ = error; |
+ error_desc_ = error_desc; |
+ SignalError(this, error); |
+ } |
+} |
+ |
bool WebRtcSession::UpdateSessionState( |
Action action, cricket::ContentSource source, |
std::string* err_desc) { |
@@ -981,7 +1032,7 @@ bool WebRtcSession::UpdateSessionState( |
// If there's already a pending error then no state transition should happen. |
// But all call-sites should be verifying this before calling us! |
- ASSERT(error() == cricket::BaseSession::ERROR_NONE); |
+ ASSERT(error() == ERROR_NONE); |
std::string td_err; |
if (action == kOffer) { |
if (!PushdownTransportDescription(source, cricket::CA_OFFER, &td_err)) { |
@@ -990,9 +1041,9 @@ bool WebRtcSession::UpdateSessionState( |
SetState(source == cricket::CS_LOCAL ? |
STATE_SENTINITIATE : STATE_RECEIVEDINITIATE); |
if (!PushdownMediaDescription(cricket::CA_OFFER, source, err_desc)) { |
- SetError(BaseSession::ERROR_CONTENT, *err_desc); |
+ SetError(ERROR_CONTENT, *err_desc); |
} |
- if (error() != cricket::BaseSession::ERROR_NONE) { |
+ if (error() != ERROR_NONE) { |
return BadOfferSdp(source, GetSessionErrorMsg(), err_desc); |
} |
} else if (action == kPrAnswer) { |
@@ -1003,9 +1054,9 @@ bool WebRtcSession::UpdateSessionState( |
SetState(source == cricket::CS_LOCAL ? |
STATE_SENTPRACCEPT : STATE_RECEIVEDPRACCEPT); |
if (!PushdownMediaDescription(cricket::CA_PRANSWER, source, err_desc)) { |
- SetError(BaseSession::ERROR_CONTENT, *err_desc); |
+ SetError(ERROR_CONTENT, *err_desc); |
} |
- if (error() != cricket::BaseSession::ERROR_NONE) { |
+ if (error() != ERROR_NONE) { |
return BadPranswerSdp(source, GetSessionErrorMsg(), err_desc); |
} |
} else if (action == kAnswer) { |
@@ -1013,11 +1064,9 @@ bool WebRtcSession::UpdateSessionState( |
return BadAnswerSdp(source, MakeTdErrorString(td_err), err_desc); |
} |
const cricket::ContentGroup* local_bundle = |
- BaseSession::local_description()->GetGroupByName( |
- cricket::GROUP_TYPE_BUNDLE); |
+ base_local_description()->GetGroupByName(cricket::GROUP_TYPE_BUNDLE); |
const cricket::ContentGroup* remote_bundle = |
- BaseSession::remote_description()->GetGroupByName( |
- cricket::GROUP_TYPE_BUNDLE); |
+ base_remote_description()->GetGroupByName(cricket::GROUP_TYPE_BUNDLE); |
if (local_bundle && remote_bundle) { |
// The answerer decides the transport to bundle on |
const cricket::ContentGroup* answer_bundle = |
@@ -1031,15 +1080,27 @@ bool WebRtcSession::UpdateSessionState( |
SetState(source == cricket::CS_LOCAL ? |
STATE_SENTACCEPT : STATE_RECEIVEDACCEPT); |
if (!PushdownMediaDescription(cricket::CA_ANSWER, source, err_desc)) { |
- SetError(BaseSession::ERROR_CONTENT, *err_desc); |
+ SetError(ERROR_CONTENT, *err_desc); |
} |
- if (error() != cricket::BaseSession::ERROR_NONE) { |
+ if (error() != ERROR_NONE) { |
return BadAnswerSdp(source, GetSessionErrorMsg(), err_desc); |
} |
} |
return true; |
} |
+WebRtcSession::Action WebRtcSession::GetAction(const std::string& type) { |
+ if (type == SessionDescriptionInterface::kOffer) { |
+ return WebRtcSession::kOffer; |
+ } else if (type == SessionDescriptionInterface::kPrAnswer) { |
+ return WebRtcSession::kPrAnswer; |
+ } else if (type == SessionDescriptionInterface::kAnswer) { |
+ return WebRtcSession::kAnswer; |
+ } |
+ ASSERT(false && "unknown action type"); |
+ return WebRtcSession::kOffer; |
+} |
+ |
bool WebRtcSession::PushdownMediaDescription( |
cricket::ContentAction action, |
cricket::ContentSource source, |
@@ -1061,19 +1122,76 @@ bool WebRtcSession::PushdownMediaDescription( |
set_content(data_channel())); |
} |
-WebRtcSession::Action WebRtcSession::GetAction(const std::string& type) { |
- if (type == SessionDescriptionInterface::kOffer) { |
- return WebRtcSession::kOffer; |
- } else if (type == SessionDescriptionInterface::kPrAnswer) { |
- return WebRtcSession::kPrAnswer; |
- } else if (type == SessionDescriptionInterface::kAnswer) { |
- return WebRtcSession::kAnswer; |
+bool WebRtcSession::PushdownTransportDescription(cricket::ContentSource source, |
+ cricket::ContentAction action, |
+ std::string* error_desc) { |
+ RTC_DCHECK(signaling_thread()->IsCurrent()); |
+ |
+ if (source == cricket::CS_LOCAL) { |
+ return PushdownLocalTransportDescription(base_local_description(), action, |
+ error_desc); |
} |
- ASSERT(false && "unknown action type"); |
- return WebRtcSession::kOffer; |
+ return PushdownRemoteTransportDescription(base_remote_description(), action, |
+ error_desc); |
} |
-bool WebRtcSession::GetTransportStats(cricket::SessionStats* stats) { |
+bool WebRtcSession::PushdownLocalTransportDescription( |
+ const SessionDescription* sdesc, |
+ cricket::ContentAction action, |
+ std::string* err) { |
+ RTC_DCHECK(signaling_thread()->IsCurrent()); |
+ |
+ if (!sdesc) { |
+ return false; |
+ } |
+ |
+ for (const TransportInfo& tinfo : sdesc->transport_infos()) { |
+ if (!transport_controller_->SetLocalTransportDescription( |
+ tinfo.content_name, tinfo.description, action, err)) { |
+ return false; |
+ } |
+ } |
+ |
+ return true; |
+} |
+ |
+bool WebRtcSession::PushdownRemoteTransportDescription( |
+ const SessionDescription* sdesc, |
+ cricket::ContentAction action, |
+ std::string* err) { |
+ RTC_DCHECK(signaling_thread()->IsCurrent()); |
+ |
+ if (!sdesc) { |
+ return false; |
+ } |
+ |
+ for (const TransportInfo& tinfo : sdesc->transport_infos()) { |
+ if (!transport_controller_->SetRemoteTransportDescription( |
+ tinfo.content_name, tinfo.description, action, err)) { |
+ return false; |
+ } |
+ } |
+ |
+ return true; |
+} |
+ |
+bool WebRtcSession::GetTransportDescription( |
+ const SessionDescription* description, |
+ const std::string& content_name, |
+ cricket::TransportDescription* tdesc) { |
+ if (!description || !tdesc) { |
+ return false; |
+ } |
+ const TransportInfo* transport_info = |
+ description->GetTransportInfoByName(content_name); |
+ if (!transport_info) { |
+ return false; |
+ } |
+ *tdesc = transport_info->description; |
+ return true; |
+} |
+ |
+bool WebRtcSession::GetTransportStats(SessionStats* stats) { |
ASSERT(signaling_thread()->IsCurrent()); |
return (GetChannelTransportStats(voice_channel(), stats) && |
GetChannelTransportStats(video_channel(), stats) && |
@@ -1081,7 +1199,7 @@ bool WebRtcSession::GetTransportStats(cricket::SessionStats* stats) { |
} |
bool WebRtcSession::GetChannelTransportStats(cricket::BaseChannel* ch, |
- cricket::SessionStats* stats) { |
+ SessionStats* stats) { |
ASSERT(signaling_thread()->IsCurrent()); |
if (!ch) { |
// Not using this channel. |
@@ -1098,7 +1216,7 @@ bool WebRtcSession::GetChannelTransportStats(cricket::BaseChannel* ch, |
} |
cricket::TransportStats tstats; |
- if (!transport_controller()->GetStats(transport_name, &tstats)) { |
+ if (!transport_controller_->GetStats(transport_name, &tstats)) { |
return false; |
} |
@@ -1110,14 +1228,14 @@ bool WebRtcSession::GetLocalCertificate( |
const std::string& transport_name, |
rtc::scoped_refptr<rtc::RTCCertificate>* certificate) { |
ASSERT(signaling_thread()->IsCurrent()); |
- return transport_controller()->GetLocalCertificate(transport_name, |
- certificate); |
+ return transport_controller_->GetLocalCertificate(transport_name, |
+ certificate); |
} |
bool WebRtcSession::GetRemoteSSLCertificate(const std::string& transport_name, |
rtc::SSLCertificate** cert) { |
ASSERT(signaling_thread()->IsCurrent()); |
- return transport_controller()->GetRemoteSSLCertificate(transport_name, cert); |
+ return transport_controller_->GetRemoteSSLCertificate(transport_name, cert); |
} |
cricket::BaseChannel* WebRtcSession::GetChannel( |
@@ -1213,17 +1331,36 @@ bool WebRtcSession::SetIceTransports( |
ConvertIceTransportTypeToCandidateFilter(type)); |
} |
+cricket::IceConfig WebRtcSession::ParseIceConfig( |
+ const PeerConnectionInterface::RTCConfiguration& config) const { |
+ cricket::IceConfig ice_config; |
+ ice_config.receiving_timeout_ms = config.ice_connection_receiving_timeout; |
+ ice_config.gather_continually = (config.continual_gathering_policy == |
+ PeerConnectionInterface::GATHER_CONTINUALLY); |
+ return ice_config; |
+} |
+ |
+void WebRtcSession::SetIceConfig(const cricket::IceConfig& config) { |
+ transport_controller_->SetIceConfig(config); |
+} |
+ |
+void WebRtcSession::MaybeStartGathering() { |
+ transport_controller_->MaybeStartGathering(); |
+} |
+ |
bool WebRtcSession::GetLocalTrackIdBySsrc(uint32_t ssrc, |
std::string* track_id) { |
- if (!base_local_description()) |
+ if (!local_desc_) { |
return false; |
+ } |
return webrtc::GetTrackIdBySsrc(base_local_description(), ssrc, track_id); |
} |
bool WebRtcSession::GetRemoteTrackIdBySsrc(uint32_t ssrc, |
std::string* track_id) { |
- if (!base_remote_description()) |
+ if (!remote_desc_) { |
return false; |
+ } |
return webrtc::GetTrackIdBySsrc(base_remote_description(), ssrc, track_id); |
} |
@@ -1480,7 +1617,7 @@ void WebRtcSession::ResetIceRestartLatch() { |
void WebRtcSession::OnCertificateReady( |
const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) { |
- transport_controller()->SetLocalCertificate(certificate); |
+ transport_controller_->SetLocalCertificate(certificate); |
} |
bool WebRtcSession::waiting_for_certificate_for_testing() const { |
@@ -1489,7 +1626,7 @@ bool WebRtcSession::waiting_for_certificate_for_testing() const { |
const rtc::scoped_refptr<rtc::RTCCertificate>& |
WebRtcSession::certificate_for_testing() { |
- return transport_controller()->certificate_for_testing(); |
+ return transport_controller_->certificate_for_testing(); |
} |
void WebRtcSession::SetIceConnectionState( |
@@ -1642,8 +1779,9 @@ void WebRtcSession::EnableChannels() { |
// Returns the media index for a local ice candidate given the content name. |
bool WebRtcSession::GetLocalCandidateMediaIndex(const std::string& content_name, |
int* sdp_mline_index) { |
- if (!base_local_description() || !sdp_mline_index) |
+ if (!local_desc_ || !sdp_mline_index) { |
return false; |
+ } |
bool content_found = false; |
const ContentInfos& contents = base_local_description()->contents(); |
@@ -1659,8 +1797,9 @@ bool WebRtcSession::GetLocalCandidateMediaIndex(const std::string& content_name, |
bool WebRtcSession::UseCandidatesInSessionDescription( |
const SessionDescriptionInterface* remote_desc) { |
- if (!remote_desc) |
+ if (!remote_desc) { |
return true; |
+ } |
bool ret = true; |
for (size_t m = 0; m < remote_desc->number_of_mediasections(); ++m) { |
@@ -1703,8 +1842,8 @@ bool WebRtcSession::UseCandidate( |
candidates.push_back(candidate->candidate()); |
// Invoking BaseSession method to handle remote candidates. |
std::string error; |
- if (transport_controller()->AddRemoteCandidates(content.name, candidates, |
- &error)) { |
+ if (transport_controller_->AddRemoteCandidates(content.name, candidates, |
+ &error)) { |
// Candidates successfully submitted for checking. |
if (ice_connection_state_ == PeerConnectionInterface::kIceConnectionNew || |
ice_connection_state_ == |
@@ -1819,7 +1958,7 @@ bool WebRtcSession::CreateChannels(const SessionDescription* desc) { |
bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { |
voice_channel_.reset(channel_manager_->CreateVoiceChannel( |
- media_controller_.get(), transport_controller(), content->name, true, |
+ media_controller_.get(), transport_controller_.get(), content->name, true, |
audio_options_)); |
if (!voice_channel_) { |
return false; |
@@ -1832,7 +1971,7 @@ bool WebRtcSession::CreateVoiceChannel(const cricket::ContentInfo* content) { |
bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { |
video_channel_.reset(channel_manager_->CreateVideoChannel( |
- media_controller_.get(), transport_controller(), content->name, true, |
+ media_controller_.get(), transport_controller_.get(), content->name, true, |
video_options_)); |
if (!video_channel_) { |
return false; |
@@ -1846,7 +1985,7 @@ bool WebRtcSession::CreateVideoChannel(const cricket::ContentInfo* content) { |
bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { |
bool sctp = (data_channel_type_ == cricket::DCT_SCTP); |
data_channel_.reset(channel_manager_->CreateDataChannel( |
- transport_controller(), content->name, !sctp, data_channel_type_)); |
+ transport_controller_.get(), content->name, !sctp, data_channel_type_)); |
if (!data_channel_) { |
return false; |
} |
@@ -1866,8 +2005,8 @@ bool WebRtcSession::CreateDataChannel(const cricket::ContentInfo* content) { |
} |
void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) { |
- SetError(BaseSession::ERROR_TRANSPORT, rtcp ? kDtlsSetupFailureRtcp : |
- kDtlsSetupFailureRtp); |
+ SetError(ERROR_TRANSPORT, |
+ rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp); |
} |
void WebRtcSession::CopySavedCandidates( |
@@ -1932,7 +2071,7 @@ bool WebRtcSession::ValidateSessionDescription( |
const SessionDescriptionInterface* sdesc, |
cricket::ContentSource source, std::string* err_desc) { |
std::string type; |
- if (error() != cricket::BaseSession::ERROR_NONE) { |
+ if (error() != ERROR_NONE) { |
return BadSdp(source, type, GetSessionErrorMsg(), err_desc); |
} |
@@ -1970,8 +2109,8 @@ bool WebRtcSession::ValidateSessionDescription( |
// Verify m-lines in Answer when compared against Offer. |
if (action == kAnswer) { |
const cricket::SessionDescription* offer_desc = |
- (source == cricket::CS_LOCAL) ? remote_description()->description() : |
- local_description()->description(); |
+ (source == cricket::CS_LOCAL) ? base_remote_description() |
+ : base_local_description(); |
if (!VerifyMediaDescriptions(sdesc->description(), offer_desc)) { |
return BadAnswerSdp(source, kMlineMismatch, err_desc); |
} |
@@ -2029,10 +2168,11 @@ bool WebRtcSession::ReadyToUseRemoteCandidate( |
*valid = true;; |
const SessionDescriptionInterface* current_remote_desc = |
- remote_desc ? remote_desc : remote_description(); |
+ remote_desc ? remote_desc : remote_desc_.get(); |
- if (!current_remote_desc) |
+ if (!current_remote_desc) { |
return false; |
+ } |
size_t mediacontent_index = |
static_cast<size_t>(candidate->sdp_mline_index()); |
@@ -2053,7 +2193,7 @@ bool WebRtcSession::ReadyToUseRemoteCandidate( |
return false; |
} |
- return transport_controller()->ReadyForRemoteCandidates( |
+ return transport_controller_->ReadyForRemoteCandidates( |
channel->transport_name()); |
} |
@@ -2089,7 +2229,7 @@ void WebRtcSession::ReportTransportStats() { |
} |
for (const auto& name : transport_names) { |
cricket::TransportStats stats; |
- if (transport_controller()->GetStats(name, &stats)) { |
+ if (transport_controller_->GetStats(name, &stats)) { |
ReportBestConnectionState(stats); |
ReportNegotiatedCiphers(stats); |
} |