Index: webrtc/api/peerconnection.cc |
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc |
index a47b2f2d8c55831f0ab80d4699d446d4ed3b1954..a85e6a2aa284a834dd1d4c6d8b9e286aedd359fb 100644 |
--- a/webrtc/api/peerconnection.cc |
+++ b/webrtc/api/peerconnection.cc |
@@ -1279,9 +1279,16 @@ bool PeerConnection::SetConfiguration(const RTCConfiguration& configuration) { |
} |
} |
- // TODO(deadbeef): Shouldn't have to hop to the worker thread twice... |
+ // TODO(deadbeef): Shouldn't have to hop to the network thread twice... |
session_->SetIceConfig(session_->ParseIceConfig(configuration)); |
+ // As described in JSEP, calling setConfiguration with new ICE servers or |
+ // candidate policy must set a "needs-ice-restart" bit so that the next offer |
+ // triggers an ICE restart which will pick up the changes. |
+ if (configuration.servers != configuration_.servers || |
+ configuration.type != configuration_.type) { |
+ session_->SetNeedsIceRestartFlag(); |
+ } |
configuration_ = configuration; |
return true; |
} |