From db2b357791d83e406e64abf33bcfa4b3e05b3528 Mon Sep 17 00:00:00 2001 From: Bart Van Severen Date: Wed, 25 Jan 2023 13:58:16 +0100 Subject: [PATCH] rtsp: gstrtspurl: gst_rtsp_url_get_request_uri: fix incorrect scheme for tls transport methods gst_rtsp_url_get_request_uri returns rtsp://... url when requested url is rtsps://, this is not in accordance with https://www.rfc-editor.org/rfc/rfc7826.html#section-19.2. This also impedes setting up a rtsps session with a live555 rtsp server. Part-of: --- .../gst-plugins-base/gst-libs/gst/rtsp/gstrtspurl.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspurl.c b/subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspurl.c index 4b46de7..1cacd4d 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspurl.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspurl.c @@ -59,9 +59,11 @@ G_DEFINE_BOXED_TYPE (GstRTSPUrl, gst_rtsp_url, (GBoxedCopyFunc) gst_rtsp_url_copy, (GBoxedFreeFunc) gst_rtsp_url_free); +#define SCHEME_SIZE 7 + static const struct { - const char scheme[6]; + const char scheme[SCHEME_SIZE]; GstRTSPLowerTrans transports; } rtsp_schemes_map[] = { { @@ -326,6 +328,8 @@ gst_rtsp_url_get_request_uri (const GstRTSPUrl * url) const gchar *post_host; const gchar *pre_query; const gchar *query; + gchar scheme[SCHEME_SIZE] = "rtsp"; + guint i; g_return_val_if_fail (url != NULL, NULL); @@ -333,12 +337,18 @@ gst_rtsp_url_get_request_uri (const GstRTSPUrl * url) post_host = url->family == GST_RTSP_FAM_INET6 ? "]" : ""; pre_query = url->query ? "?" : ""; query = url->query ? url->query : ""; + for (i = 0; i < G_N_ELEMENTS (rtsp_schemes_map); i++) { + if (url->transports == rtsp_schemes_map[i].transports) { + strcpy (scheme, rtsp_schemes_map[i].scheme); + break; + } + } if (url->port != 0) { - uri = g_strdup_printf ("rtsp://%s%s%s:%u%s%s%s", pre_host, url->host, + uri = g_strdup_printf ("%s://%s%s%s:%u%s%s%s", scheme, pre_host, url->host, post_host, url->port, url->abspath, pre_query, query); } else { - uri = g_strdup_printf ("rtsp://%s%s%s%s%s%s", pre_host, url->host, + uri = g_strdup_printf ("%s://%s%s%s%s%s%s", scheme, pre_host, url->host, post_host, url->abspath, pre_query, query); } return uri; -- 2.7.4