Revert "Replace the IceConnectionState implementation."
This reverts commit 1e87b4f32b73526f9caaae2a7bccfbd0cd84dcb9.
Reason for revert: Breaks internal project
Original change's description:
> Replace the IceConnectionState implementation.
>
> PeerConnection::ice_connection_state() used to return a value based on both DTLS and ICE transports.
> Now that we have PeerConnection::peer_connection_state() to fill that role we can change the implementation of ice_connection_state over to match the spec.
>
> Bug: webrtc:6145
> Change-Id: Ia4f348f728f24faf4b976c63dea2187bb1f01ef0
> Reviewed-on: https://webrtc-review.googlesource.com/c/108780
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#25773}
TBR=kwiberg@webrtc.org,hbos@webrtc.org,hta@webrtc.org,jonasolsson@webrtc.org
Change-Id: Icc4368d120a4167286fa6ba2e884a3650b453eff
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:6145
Reviewed-on: https://webrtc-review.googlesource.com/c/111925
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25775}
diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index 6a2e370..e60474c 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -998,7 +998,9 @@
signaling_thread(), network_thread(), port_allocator_.get(),
async_resolver_factory_.get(), config));
transport_controller_->SignalIceConnectionState.connect(
- this, &PeerConnection::SetIceConnectionState);
+ this, &PeerConnection::OnTransportControllerConnectionState);
+ transport_controller_->SignalStandardizedIceConnectionState.connect(
+ this, &PeerConnection::SetStandardizedIceConnectionState);
transport_controller_->SignalConnectionState.connect(
this, &PeerConnection::SetConnectionState);
transport_controller_->SignalIceGatheringState.connect(
@@ -1760,6 +1762,11 @@
return ice_connection_state_;
}
+PeerConnectionInterface::IceConnectionState
+PeerConnection::standardized_ice_connection_state() {
+ return standardized_ice_connection_state_;
+}
+
PeerConnectionInterface::PeerConnectionState
PeerConnection::peer_connection_state() {
return connection_state_;
@@ -3625,17 +3632,22 @@
RTC_DCHECK(ice_connection_state_ !=
PeerConnectionInterface::kIceConnectionClosed);
- if (new_state == PeerConnectionInterface::kIceConnectionConnected) {
- NoteUsageEvent(UsageEvent::ICE_STATE_CONNECTED);
- } else if (new_state == PeerConnectionInterface::kIceConnectionCompleted) {
- NoteUsageEvent(UsageEvent::ICE_STATE_CONNECTED);
- ReportTransportStats();
- }
-
ice_connection_state_ = new_state;
Observer()->OnIceConnectionChange(ice_connection_state_);
}
+void PeerConnection::SetStandardizedIceConnectionState(
+ PeerConnectionInterface::IceConnectionState new_state) {
+ RTC_DCHECK(signaling_thread()->IsCurrent());
+ if (standardized_ice_connection_state_ == new_state)
+ return;
+ if (IsClosed())
+ return;
+ standardized_ice_connection_state_ = new_state;
+ // TODO(jonasolsson): Pass this value on to OnIceConnectionChange instead of
+ // the old one once disconnects are handled properly.
+}
+
void PeerConnection::SetConnectionState(
PeerConnectionInterface::PeerConnectionState new_state) {
RTC_DCHECK(signaling_thread()->IsCurrent());
@@ -3694,6 +3706,8 @@
if (signaling_state == kClosed) {
ice_connection_state_ = kIceConnectionClosed;
Observer()->OnIceConnectionChange(ice_connection_state_);
+ standardized_ice_connection_state_ =
+ PeerConnectionInterface::IceConnectionState::kIceConnectionClosed;
connection_state_ = PeerConnectionInterface::PeerConnectionState::kClosed;
Observer()->OnConnectionChange(connection_state_);
if (ice_gathering_state_ != kIceGatheringComplete) {
@@ -5493,6 +5507,51 @@
rtcp ? kDtlsSrtpSetupFailureRtcp : kDtlsSrtpSetupFailureRtp);
}
+void PeerConnection::OnTransportControllerConnectionState(
+ cricket::IceConnectionState state) {
+ switch (state) {
+ case cricket::kIceConnectionConnecting:
+ // If the current state is Connected or Completed, then there were
+ // writable channels but now there are not, so the next state must
+ // be Disconnected.
+ // kIceConnectionConnecting is currently used as the default,
+ // un-connected state by the TransportController, so its only use is
+ // detecting disconnections.
+ if (ice_connection_state_ ==
+ PeerConnectionInterface::kIceConnectionConnected ||
+ ice_connection_state_ ==
+ PeerConnectionInterface::kIceConnectionCompleted) {
+ SetIceConnectionState(
+ PeerConnectionInterface::kIceConnectionDisconnected);
+ }
+ break;
+ case cricket::kIceConnectionFailed:
+ SetIceConnectionState(PeerConnectionInterface::kIceConnectionFailed);
+ break;
+ case cricket::kIceConnectionConnected:
+ RTC_LOG(LS_INFO) << "Changing to ICE connected state because "
+ "all transports are writable.";
+ SetIceConnectionState(PeerConnectionInterface::kIceConnectionConnected);
+ NoteUsageEvent(UsageEvent::ICE_STATE_CONNECTED);
+ break;
+ case cricket::kIceConnectionCompleted:
+ RTC_LOG(LS_INFO) << "Changing to ICE completed state because "
+ "all transports are complete.";
+ if (ice_connection_state_ !=
+ PeerConnectionInterface::kIceConnectionConnected) {
+ // If jumping directly from "checking" to "connected",
+ // signal "connected" first.
+ SetIceConnectionState(PeerConnectionInterface::kIceConnectionConnected);
+ }
+ SetIceConnectionState(PeerConnectionInterface::kIceConnectionCompleted);
+ NoteUsageEvent(UsageEvent::ICE_STATE_CONNECTED);
+ ReportTransportStats();
+ break;
+ default:
+ RTC_NOTREACHED();
+ }
+}
+
void PeerConnection::OnTransportControllerCandidatesGathered(
const std::string& transport_name,
const cricket::Candidates& candidates) {