diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-06-18 16:16:28 +0200 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-06-18 16:16:28 +0200 |
commit | e25cdc31d30d5bade601fcc662cecb3f2e707e78 (patch) | |
tree | 381dc83ff73d477957afbea5e8e6a8cf2f09442c | |
parent | 966ced220858a2f15f1efeb2a739a0db977110d5 (diff) | |
download | gstreamer-plugins-good-e25cdc31d30d5bade601fcc662cecb3f2e707e78.tar.gz |
udp: make url parsing compatible with VLC syntax
Skip everything before the @ sign in the url location. VLC uses that as the
remote address to connect to (but we ignore it for now). This makes our udp urls
compatible with the ones used by VLC.
Fixes #597695
-rw-r--r-- | gst/udp/gstudpnetutils.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gst/udp/gstudpnetutils.c b/gst/udp/gstudpnetutils.c index 85d6f74c6..f488fcc41 100644 --- a/gst/udp/gstudpnetutils.c +++ b/gst/udp/gstudpnetutils.c @@ -370,7 +370,7 @@ gst_udp_uri_update (GstUDPUri * uri, const gchar * host, gint port) int gst_udp_parse_uri (const gchar * uristr, GstUDPUri * uri) { - gchar *protocol; + gchar *protocol, *location_start; gchar *location, *location_end; gchar *colptr; @@ -379,11 +379,19 @@ gst_udp_parse_uri (const gchar * uristr, GstUDPUri * uri) goto wrong_protocol; g_free (protocol); - location = gst_uri_get_location (uristr); - if (!location) + location_start = gst_uri_get_location (uristr); + if (!location_start) return FALSE; - GST_DEBUG ("got location '%s'", location); + GST_DEBUG ("got location '%s'", location_start); + + /* VLC compatibility, strip everything before the @ sign. VLC uses that as the + * remote address. */ + location = g_strstr_len (location_start, -1, "@"); + if (location == NULL) + location = location_start; + else + location += 1; if (location[0] == '[') { GST_DEBUG ("parse IPV6 address '%s'", location); @@ -412,7 +420,7 @@ gst_udp_parse_uri (const gchar * uristr, GstUDPUri * uri) if (colptr != NULL) { uri->port = atoi (colptr + 1); } - g_free (location); + g_free (location_start); return 0; |