Index: talk/app/webrtc/webrtcsession.cc |
diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc |
index c0898ff79f3696ddc3ed2b0129503c5ab616bb97..a3ff934dbc00c244dd4453922fe73dad68c9a431 100644 |
--- a/talk/app/webrtc/webrtcsession.cc |
+++ b/talk/app/webrtc/webrtcsession.cc |
@@ -490,6 +490,7 @@ WebRtcSession::WebRtcSession( |
mediastream_signaling_(mediastream_signaling), |
ice_observer_(NULL), |
ice_connection_state_(PeerConnectionInterface::kIceConnectionNew), |
+ ice_connection_receiving_(true), |
older_version_remote_peer_(false), |
dtls_enabled_(false), |
data_channel_type_(cricket::DCT_NONE), |
@@ -1406,6 +1407,31 @@ void WebRtcSession::OnTransportFailed(cricket::Transport* transport) { |
SetIceConnectionState(PeerConnectionInterface::kIceConnectionFailed); |
} |
+void WebRtcSession::OnTransportReceiving(cricket::Transport* transport) { |
+ ASSERT(signaling_thread()->IsCurrent()); |
+ // The ice connection is considered receiving if at least one transport is |
+ // receiving on any channels. |
+ bool receiving = false; |
+ for (const auto& kv : transport_proxies()) { |
+ cricket::Transport* transport = kv.second->impl(); |
+ if (transport && transport->any_channel_receiving()) { |
+ receiving = true; |
+ break; |
+ } |
+ } |
+ SetIceConnectionReceiving(receiving); |
+} |
+ |
+void WebRtcSession::SetIceConnectionReceiving(bool receiving) { |
+ if (ice_connection_receiving_ == receiving) { |
+ return; |
+ } |
+ ice_connection_receiving_ = receiving; |
+ if (ice_observer_) { |
+ ice_observer_->OnIceConnectionReceivingChange(receiving); |
+ } |
+} |
+ |
void WebRtcSession::OnTransportProxyCandidatesReady( |
cricket::TransportProxy* proxy, const cricket::Candidates& candidates) { |
ASSERT(signaling_thread()->IsCurrent()); |