Chromium Code Reviews| Index: talk/session/media/channel.cc |
| diff --git a/talk/session/media/channel.cc b/talk/session/media/channel.cc |
| index 91808524e176be6ec0b46bd40042643048cfad59..b5824c4fbbe017b695c0cb826183885f93989bd7 100644 |
| --- a/talk/session/media/channel.cc |
| +++ b/talk/session/media/channel.cc |
| @@ -265,24 +265,39 @@ bool BaseChannel::SetTransport_w(const std::string& transport_name) { |
| // changes and wait until the DTLS handshake is complete to set the newly |
| // negotiated parameters. |
| if (ShouldSetupDtlsSrtp()) { |
| + // Set |writable_| to false such that UpdateWritableState_w could set up |
| + // DTLS-SRTP again. |
|
pthatcher1
2015/12/17 23:38:54
could => can
again => when the writable_ becomes t
guoweis_webrtc
2015/12/17 23:43:17
Done.
|
| + writable_ = false; |
| srtp_filter_.ResetParams(); |
| } |
| - set_transport_channel(transport_controller_->CreateTransportChannel_w( |
| - transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
| - if (!transport_channel()) { |
| - return false; |
| - } |
| + // TODO(guoweis): Remove this grossness when we remove non-muxed RTCP. |
| if (rtcp_transport_enabled()) { |
| LOG(LS_INFO) << "Create RTCP TransportChannel for " << content_name() |
| << " on " << transport_name << " transport "; |
| - set_rtcp_transport_channel(transport_controller_->CreateTransportChannel_w( |
| - transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP)); |
| + set_rtcp_transport_channel( |
| + transport_controller_->CreateTransportChannel_w( |
| + transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTCP), |
| + false /* update_writablity */); |
| if (!rtcp_transport_channel()) { |
| return false; |
| } |
| } |
| + // We're not updating the writablity during the transition state. |
| + set_transport_channel(transport_controller_->CreateTransportChannel_w( |
| + transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP)); |
| + if (!transport_channel()) { |
| + return false; |
| + } |
| + |
| + // TODO(guoweis): Remove this grossness when we remove non-muxed RTCP. |
| + if (rtcp_transport_enabled()) { |
| + // Update aggregate writable/ready-to-send state between RTP and RTCP upon |
| + // setting new channel |
|
pthatcher1
2015/12/17 23:38:54
This comment isn't accurate any more. Perhaps som
guoweis_webrtc
2015/12/17 23:43:17
Done.
|
| + SetReadyToSend( |
| + true, rtcp_transport_channel() && rtcp_transport_channel()->writable()); |
| + } |
| transport_name_ = transport_name; |
| return true; |
| } |
| @@ -318,7 +333,8 @@ void BaseChannel::set_transport_channel(TransportChannel* new_tc) { |
| SetReadyToSend(false, new_tc && new_tc->writable()); |
| } |
| -void BaseChannel::set_rtcp_transport_channel(TransportChannel* new_tc) { |
| +void BaseChannel::set_rtcp_transport_channel(TransportChannel* new_tc, |
| + bool update_writablity) { |
| ASSERT(worker_thread_ == rtc::Thread::Current()); |
| TransportChannel* old_tc = rtcp_transport_channel_; |
| @@ -346,10 +362,12 @@ void BaseChannel::set_rtcp_transport_channel(TransportChannel* new_tc) { |
| } |
| } |
| - // Update aggregate writable/ready-to-send state between RTP and RTCP upon |
| - // setting new channel |
| - UpdateWritableState_w(); |
| - SetReadyToSend(true, new_tc && new_tc->writable()); |
| + if (update_writablity) { |
| + // Update aggregate writable/ready-to-send state between RTP and RTCP upon |
| + // setting new channel |
| + UpdateWritableState_w(); |
| + SetReadyToSend(true, new_tc && new_tc->writable()); |
| + } |
| } |
| void BaseChannel::ConnectToTransportChannel(TransportChannel* tc) { |
| @@ -1070,7 +1088,7 @@ void BaseChannel::ActivateRtcpMux() { |
| void BaseChannel::ActivateRtcpMux_w() { |
| if (!rtcp_mux_filter_.IsActive()) { |
| rtcp_mux_filter_.SetActive(); |
| - set_rtcp_transport_channel(nullptr); |
| + set_rtcp_transport_channel(nullptr, true); |
| rtcp_transport_enabled_ = false; |
| } |
| } |
| @@ -1093,7 +1111,7 @@ bool BaseChannel::SetRtcpMux_w(bool enable, ContentAction action, |
| LOG(LS_INFO) << "Enabling rtcp-mux for " << content_name() |
| << " by destroying RTCP transport channel for " |
| << transport_name(); |
| - set_rtcp_transport_channel(nullptr); |
| + set_rtcp_transport_channel(nullptr, true); |
| rtcp_transport_enabled_ = false; |
| } |
| break; |