webrtc: fix ice control mode when we offer initially
authorMatthew Waters <matthew@centricular.com>
Sun, 21 Jun 2020 06:02:43 +0000 (16:02 +1000)
committerSebastian Dröge <slomo@coaxion.net>
Mon, 22 Jun 2020 12:17:09 +0000 (12:17 +0000)
An initial offer means we have a local description not a remote
description.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1332

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1358>

ext/webrtc/gstwebrtcbin.c

index 6df7f46..52c89f9 100644 (file)
@@ -4461,13 +4461,17 @@ _set_description_task (GstWebRTCBin * webrtc, struct set_description *sd)
   {
     gboolean ice_controller = FALSE;
 
+    /* get the current value so we don't change ice controller from TRUE to
+     * FALSE on renegotiation or once set to TRUE for the initial local offer */
+    g_object_get (webrtc->priv->ice, "controller", &ice_controller, NULL);
+
     /* we control ice negotiation if we send the initial offer */
     ice_controller |=
-        new_signaling_state == GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER
+        new_signaling_state == GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER
         && webrtc->current_remote_description == NULL;
     /* or, if the remote is an ice-lite peer */
     ice_controller |= new_signaling_state == GST_WEBRTC_SIGNALING_STATE_STABLE
-        && webrtc->current_remote_description->type == GST_WEBRTC_SDP_TYPE_OFFER
+        && webrtc->current_remote_description
         && _message_has_attribute_key (webrtc->current_remote_description->sdp,
         "ice-lite");