From b26b8ae6f860770b91f8553db6ecdc066c95cde6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20F=C3=B6rlin?= Date: Fri, 23 Apr 2021 18:03:20 +0200 Subject: gstrtspconnection: Add IPv6 support for tunneled mode An IPv6 address must be specified within [] brackets. Add brackets for IPv6 address used for tunneled mode, for non-tunneled this is already supported. Part-of: --- gst-libs/gst/rtsp/gstrtspconnection.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c index 574b967ce..2bdc229cd 100644 --- a/gst-libs/gst/rtsp/gstrtspconnection.c +++ b/gst-libs/gst/rtsp/gstrtspconnection.c @@ -774,6 +774,22 @@ gst_rtsp_connection_set_accept_certificate_func (GstRTSPConnection * conn, conn->accept_certificate_destroy_notify = destroy_notify; } +static gchar * +get_tunneled_connection_uri_strdup (GstRTSPUrl * url, guint16 port) +{ + const gchar *pre_host = ""; + const gchar *post_host = ""; + + if (url->family == GST_RTSP_FAM_INET6) { + pre_host = "["; + post_host = "]"; + } + + return g_strdup_printf ("http://%s%s%s:%d%s%s%s", pre_host, url->host, + post_host, port, url->abspath, url->query ? "?" : "", + url->query ? url->query : ""); +} + static GstRTSPResult setup_tunneling (GstRTSPConnection * conn, gint64 timeout, gchar * uri, GstRTSPMessage * response) @@ -845,8 +861,7 @@ setup_tunneling (GstRTSPConnection * conn, gint64 timeout, gchar * uri, conn->remote_ip = g_strdup (value); } - connection_uri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port, - url->abspath, url->query ? "?" : "", url->query ? url->query : ""); + connection_uri = get_tunneled_connection_uri_strdup (url, url_port); /* connect to the host/port */ if (conn->proxy_host) { @@ -998,8 +1013,7 @@ gst_rtsp_connection_connect_with_response_usec (GstRTSPConnection * conn, gst_rtsp_url_get_port (url, &url_port); if (conn->tunneled) { - connection_uri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port, - url->abspath, url->query ? "?" : "", url->query ? url->query : ""); + connection_uri = get_tunneled_connection_uri_strdup (url, url_port); } else { connection_uri = gst_rtsp_url_get_request_uri (url); } -- cgit v1.2.1