Skip to content

Commit

Permalink
Merge pull request #455 from oto313/feature/fix-dtls-connection-with-…
Browse files Browse the repository at this point in the history
…lite-ice-role

Fix of dtls connection with lite ice role
yngrtc authored Jun 12, 2023
2 parents 92d376b + a1c8844 commit 8168625
Showing 1 changed file with 22 additions and 9 deletions.
31 changes: 22 additions & 9 deletions webrtc/src/peer_connection/mod.rs
Original file line number Diff line number Diff line change
@@ -913,9 +913,14 @@ impl RTCPeerConnection {
_options: Option<RTCAnswerOptions>,
) -> Result<RTCSessionDescription> {
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)?;

0 comments on commit 8168625

Please sign in to comment.