Index: webrtc/pc/channel.cc |
diff --git a/webrtc/pc/channel.cc b/webrtc/pc/channel.cc |
index d45e220d5c7843b9eab9099d7ccdd58d6b4e9dc6..a871888fe2d8d9b930d9524c20d64bf97a762e15 100644 |
--- a/webrtc/pc/channel.cc |
+++ b/webrtc/pc/channel.cc |
@@ -176,6 +176,8 @@ BaseChannel::BaseChannel(rtc::Thread* worker_thread, |
#if defined(ENABLE_EXTERNAL_AUTH) |
srtp_filter_.EnableExternalAuth(); |
#endif |
+ rtp_transport_.SignalReadyToSend.connect( |
+ this, &BaseChannel::OnTransportReadyToSend); |
LOG(LS_INFO) << "Created channel for " << content_name; |
} |
@@ -377,8 +379,10 @@ void BaseChannel::SetTransport_n( |
RTC_DCHECK(old_packet_transport != new_packet_transport); |
if (old_dtls_transport) { |
DisconnectFromDtlsTransport(old_dtls_transport); |
+ rtp_transport_.Disconnect(rtcp); |
} else if (old_packet_transport) { |
DisconnectFromPacketTransport(old_packet_transport); |
+ rtp_transport_.Disconnect(rtcp); |
Taylor Brandstetter
2017/04/14 18:05:33
Could the "disconnect"/"connect" happen implicitly
Zach Stein
2017/04/18 23:39:29
Done.
|
} |
if (rtcp) { |
@@ -398,6 +402,8 @@ void BaseChannel::SetTransport_n( |
<< "Setting RTCP for DTLS/SRTP after SrtpFilter is active " |
<< "should never happen."; |
} |
+ |
+ rtp_transport_.Connect(rtcp); |
if (new_dtls_transport) { |
ConnectToDtlsTransport(new_dtls_transport); |
} else { |
@@ -412,9 +418,9 @@ void BaseChannel::SetTransport_n( |
void BaseChannel::ConnectToDtlsTransport(DtlsTransportInternal* transport) { |
RTC_DCHECK(network_thread_->IsCurrent()); |
+ // TODO(zstein): de-dup with ConnectToPacketTransport |
transport->SignalWritableState.connect(this, &BaseChannel::OnWritableState); |
transport->SignalReadPacket.connect(this, &BaseChannel::OnPacketRead); |
- transport->SignalReadyToSend.connect(this, &BaseChannel::OnReadyToSend); |
transport->SignalDtlsState.connect(this, &BaseChannel::OnDtlsState); |
transport->SignalSentPacket.connect(this, &BaseChannel::SignalSentPacket_n); |
transport->ice_transport()->SignalSelectedCandidatePairChanged.connect( |
@@ -429,7 +435,6 @@ void BaseChannel::DisconnectFromDtlsTransport( |
transport->SignalWritableState.disconnect(this); |
transport->SignalReadPacket.disconnect(this); |
- transport->SignalReadyToSend.disconnect(this); |
transport->SignalDtlsState.disconnect(this); |
transport->SignalSentPacket.disconnect(this); |
transport->ice_transport()->SignalSelectedCandidatePairChanged.disconnect( |
@@ -441,7 +446,6 @@ void BaseChannel::ConnectToPacketTransport( |
RTC_DCHECK_RUN_ON(network_thread_); |
transport->SignalWritableState.connect(this, &BaseChannel::OnWritableState); |
transport->SignalReadPacket.connect(this, &BaseChannel::OnPacketRead); |
- transport->SignalReadyToSend.connect(this, &BaseChannel::OnReadyToSend); |
transport->SignalSentPacket.connect(this, &BaseChannel::SignalSentPacket_n); |
} |
@@ -450,7 +454,6 @@ void BaseChannel::DisconnectFromPacketTransport( |
RTC_DCHECK_RUN_ON(network_thread_); |
transport->SignalWritableState.disconnect(this); |
transport->SignalReadPacket.disconnect(this); |
- transport->SignalReadyToSend.disconnect(this); |
transport->SignalSentPacket.disconnect(this); |
} |
@@ -618,13 +621,6 @@ void BaseChannel::OnPacketRead(rtc::PacketTransportInternal* transport, |
HandlePacket(rtcp, &packet, packet_time); |
} |
-void BaseChannel::OnReadyToSend(rtc::PacketTransportInternal* transport) { |
- RTC_DCHECK(transport == rtp_transport_.rtp_packet_transport() || |
- transport == rtp_transport_.rtcp_packet_transport()); |
- SetTransportChannelReadyToSend( |
- transport == rtp_transport_.rtcp_packet_transport(), true); |
-} |
- |
void BaseChannel::OnDtlsState(DtlsTransportInternal* transport, |
DtlsTransportState state) { |
if (!ShouldSetupDtlsSrtp_n()) { |
@@ -670,20 +666,13 @@ void BaseChannel::OnSelectedCandidatePairChanged( |
void BaseChannel::SetTransportChannelReadyToSend(bool rtcp, bool ready) { |
Taylor Brandstetter
2017/04/14 18:05:33
Can this method be removed, and the necessary logi
Zach Stein
2017/04/18 23:39:29
Done.
|
RTC_DCHECK(network_thread_->IsCurrent()); |
- if (rtcp) { |
- rtcp_ready_to_send_ = ready; |
- } else { |
- rtp_ready_to_send_ = ready; |
- } |
- |
- bool ready_to_send = |
- (rtp_ready_to_send_ && |
- // In the case of rtcp mux |rtcp_packet_transport_| will be null. |
- (rtcp_ready_to_send_ || !rtp_transport_.rtcp_packet_transport())); |
+ rtp_transport_.SetReadyToSend(rtcp, ready); |
+} |
+void BaseChannel::OnTransportReadyToSend(bool ready) { |
invoker_.AsyncInvoke<void>( |
RTC_FROM_HERE, worker_thread_, |
- Bind(&MediaChannel::OnReadyToSend, media_channel_, ready_to_send)); |
+ Bind(&MediaChannel::OnReadyToSend, media_channel_, ready)); |
} |
bool BaseChannel::PacketIsRtcp(const rtc::PacketTransportInternal* transport, |