webrtc: Clean up the userinfo unescaping code
authorNirbheek Chauhan <nirbheek@centricular.com>
Fri, 28 Aug 2020 21:10:44 +0000 (02:40 +0530)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Sun, 30 Aug 2020 09:53:42 +0000 (09:53 +0000)
Continuation from 04fd705906f4bd4cf1901001484e60c21e1b3139. This is
easier to understand and also avoids two copies.

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

ext/webrtc/gstwebrtcice.c

index 14a9752373ec354ae571c96b4209745a1ea836b7..7dd716ff77253cf5a3347b29a7faa468e527de10 100644 (file)
@@ -286,7 +286,7 @@ _parse_userinfo (const gchar * userinfo, gchar ** user, gchar ** pass)
 
   colon = g_strstr_len (userinfo, -1, ":");
   if (!colon) {
-    *user = g_strdup (userinfo);
+    *user = g_uri_unescape_string (userinfo, NULL);
     *pass = NULL;
     return;
   }
@@ -297,8 +297,8 @@ _parse_userinfo (const gchar * userinfo, gchar ** user, gchar ** pass)
         "first ':' delineates user:pass. You should escape the user and pass "
         "before adding to the URI.", userinfo);
 
-  *user = g_strndup (userinfo, colon - userinfo);
-  *pass = g_strdup (&colon[1]);
+  *user = g_uri_unescape_segment (userinfo, colon, NULL);
+  *pass = g_uri_unescape_string (&colon[1], NULL);
 }
 
 static gchar *
@@ -334,7 +334,7 @@ _add_turn_server (GstWebRTCICE * ice, struct NiceStreamItem *item,
     GstUri * turn_server)
 {
   gboolean ret;
-  gchar *user, *user_unesc, *pass, *pass_unesc;
+  gchar *user, *pass;
   const gchar *host, *userinfo, *transport, *scheme;
   NiceRelayType relays[4] = { 0, };
   int i, relay_n = 0;
@@ -358,8 +358,6 @@ _add_turn_server (GstWebRTCICE * ice, struct NiceStreamItem *item,
   transport = gst_uri_get_query_value (turn_server, "transport");
   userinfo = gst_uri_get_userinfo (turn_server);
   _parse_userinfo (userinfo, &user, &pass);
-  user_unesc = g_uri_unescape_string (user, NULL);
-  pass_unesc = g_uri_unescape_string (pass, NULL);
 
   if (g_strcmp0 (scheme, "turns") == 0) {
     relays[relay_n++] = NICE_RELAY_TYPE_TURN_TLS;
@@ -375,7 +373,7 @@ _add_turn_server (GstWebRTCICE * ice, struct NiceStreamItem *item,
     ret = nice_agent_set_relay_info (ice->priv->nice_agent,
         item->nice_stream_id, NICE_COMPONENT_TYPE_RTP,
         gst_uri_get_host (turn_server), gst_uri_get_port (turn_server),
-        user_unesc, pass_unesc, relays[i]);
+        user, pass, relays[i]);
     if (!ret) {
       gchar *uri = gst_uri_to_string (turn_server);
       GST_ERROR_OBJECT (ice, "Failed to set TURN server '%s'", uri);
@@ -385,7 +383,7 @@ _add_turn_server (GstWebRTCICE * ice, struct NiceStreamItem *item,
     ret = nice_agent_set_relay_info (ice->priv->nice_agent,
         item->nice_stream_id, NICE_COMPONENT_TYPE_RTCP,
         gst_uri_get_host (turn_server), gst_uri_get_port (turn_server),
-        user_unesc, pass_unesc, relays[i]);
+        user, pass, relays[i]);
     if (!ret) {
       gchar *uri = gst_uri_to_string (turn_server);
       GST_ERROR_OBJECT (ice, "Failed to set TURN server '%s'", uri);
@@ -395,8 +393,6 @@ _add_turn_server (GstWebRTCICE * ice, struct NiceStreamItem *item,
   }
   g_free (user);
   g_free (pass);
-  g_free (user_unesc);
-  g_free (pass_unesc);
 
 out:
   g_free (ip);