diff --git a/webrtc/src/peer_connection/mod.rs b/webrtc/src/peer_connection/mod.rs index 8cdec1c27..87dd1fcce 100644 --- a/webrtc/src/peer_connection/mod.rs +++ b/webrtc/src/peer_connection/mod.rs @@ -913,9 +913,14 @@ impl RTCPeerConnection { _options: Option, ) -> Result { let use_identity = self.idp_login_url.is_some(); - if self.remote_description().await.is_none() { + let remote_desc = self.remote_description().await; + let remote_description: RTCSessionDescription; + if let Some(desc) = remote_desc { + remote_description = desc; + } else { return Err(Error::ErrNoRemoteDescription); - } else if use_identity { + } + if use_identity { return Err(Error::ErrIdentityProviderNotImplemented); } else if self.internal.is_closed.load(Ordering::SeqCst) { return Err(Error::ErrConnectionClosed); @@ -932,6 +937,11 @@ impl RTCPeerConnection { .to_connection_role(); if connection_role == ConnectionRole::Unspecified { connection_role = DEFAULT_DTLS_ROLE_ANSWER.to_connection_role(); + if let Some(parsed) = remote_description.parsed { + if Self::is_lite_set(&parsed) && !self.internal.setting_engine.candidates.ice_lite { + connection_role = DTLSRole::Server.to_connection_role(); + } + } } let local_transceivers = self.get_transceivers().await; @@ -1302,6 +1312,15 @@ impl RTCPeerConnection { self.current_local_description().await } + pub fn is_lite_set(desc: &SessionDescription) -> bool { + for a in &desc.attributes { + if a.key.trim() == ATTR_KEY_ICELITE { + return true; + } + } + false + } + /// set_remote_description sets the SessionDescription of the remote peer pub async fn set_remote_description(&self, mut desc: RTCSessionDescription) -> Result<()> { if self.internal.is_closed.load(Ordering::SeqCst) { @@ -1521,13 +1540,7 @@ impl RTCPeerConnection { return Ok(()); } - let mut remote_is_lite = false; - for a in &parsed.attributes { - if a.key.trim() == ATTR_KEY_ICELITE { - remote_is_lite = true; - break; - } - } + let remote_is_lite = Self::is_lite_set(parsed); let (fingerprint, fingerprint_hash) = extract_fingerprint(parsed)?;