Index: webrtc/p2p/base/jseptransport.cc |
diff --git a/webrtc/p2p/base/jseptransport.cc b/webrtc/p2p/base/jseptransport.cc |
index abfe0449a48f93e9d5a15806133f7d17e01e43be..bf4d86c3afc85db76bd62b1fee91595c764bc6e4 100644 |
--- a/webrtc/p2p/base/jseptransport.cc |
+++ b/webrtc/p2p/base/jseptransport.cc |
@@ -176,6 +176,11 @@ bool JsepTransport::SetLocalTransportDescription( |
error_desc); |
} |
+ bool ice_restarting = |
+ local_description_set_ && |
+ IceCredentialsChanged(local_description_->ice_ufrag, |
+ local_description_->ice_pwd, description.ice_ufrag, |
+ description.ice_pwd); |
local_description_.reset(new TransportDescription(description)); |
rtc::SSLFingerprint* local_fp = |
@@ -199,11 +204,17 @@ bool JsepTransport::SetLocalTransportDescription( |
if (action == CA_PRANSWER || action == CA_ANSWER) { |
ret &= NegotiateTransportDescription(action, error_desc); |
} |
- if (ret) { |
- local_description_set_ = true; |
+ if (!ret) { |
+ return false; |
} |
- return ret; |
+ if (needs_ice_restart_ && ice_restarting) { |
+ needs_ice_restart_ = false; |
+ LOG(LS_VERBOSE) << "needs-ice-restart flag cleared for transport " << mid(); |
+ } |
+ |
+ local_description_set_ = true; |
+ return true; |
} |
bool JsepTransport::SetRemoteTransportDescription( |
@@ -233,6 +244,17 @@ bool JsepTransport::SetRemoteTransportDescription( |
return ret; |
} |
+void JsepTransport::SetNeedsIceRestartFlag() { |
+ if (!needs_ice_restart_) { |
+ needs_ice_restart_ = true; |
+ LOG(LS_VERBOSE) << "needs-ice-restart flag set for transport " << mid(); |
+ } |
+} |
+ |
+bool JsepTransport::NeedsIceRestart() const { |
+ return needs_ice_restart_; |
+} |
+ |
void JsepTransport::GetSslRole(rtc::SSLRole* ssl_role) const { |
RTC_DCHECK(ssl_role); |
*ssl_role = secure_role_; |