summaryrefslogtreecommitdiff
path: root/gst-libs/gst/rtsp/gstrtspurl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/gst/rtsp/gstrtspurl.c')
-rw-r--r--gst-libs/gst/rtsp/gstrtspurl.c353
1 files changed, 0 insertions, 353 deletions
diff --git a/gst-libs/gst/rtsp/gstrtspurl.c b/gst-libs/gst/rtsp/gstrtspurl.c
deleted file mode 100644
index 98f1ac24..00000000
--- a/gst-libs/gst/rtsp/gstrtspurl.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-/*
- * Unless otherwise indicated, Source Code is licensed under MIT license.
- * See further explanation attached in License Statement (distributed in the file
- * LICENSE).
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/**
- * SECTION:gstrtspurl
- * @short_description: handling RTSP urls
- *
- * <refsect2>
- * <para>
- * Provides helper functions to handle RTSP urls.
- * </para>
- * </refsect2>
- *
- * Last reviewed on 2007-07-25 (0.10.14)
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gstrtspurl.h"
-
-static void
-register_rtsp_url_type (GType * id)
-{
- *id = g_boxed_type_register_static ("GstRTSPUrl",
- (GBoxedCopyFunc) gst_rtsp_url_copy, (GBoxedFreeFunc) gst_rtsp_url_free);
-}
-
-GType
-gst_rtsp_url_get_type (void)
-{
- static GType id;
- static GOnce once = G_ONCE_INIT;
-
- g_once (&once, (GThreadFunc) register_rtsp_url_type, &id);
- return id;
-}
-
-static const gchar *rtsp_url_schemes[] = {
- "rtsp",
- "rtspu",
- "rtspt",
- "rtsph",
- NULL
-};
-
-static GstRTSPLowerTrans rtsp_url_transports[] = {
- GST_RTSP_LOWER_TRANS_TCP | GST_RTSP_LOWER_TRANS_UDP |
- GST_RTSP_LOWER_TRANS_UDP_MCAST,
- GST_RTSP_LOWER_TRANS_UDP | GST_RTSP_LOWER_TRANS_UDP_MCAST,
- GST_RTSP_LOWER_TRANS_TCP,
- GST_RTSP_LOWER_TRANS_HTTP | GST_RTSP_LOWER_TRANS_TCP,
-};
-
-/* format is rtsp[u]://[user:passwd@]host[:port]/abspath[?query] where host
- * is a host name, an IPv4 dotted decimal address ("aaa.bbb.ccc.ddd") or an
- * [IPv6] address ("[aabb:ccdd:eeff:gghh::sstt]" note the brackets around the
- * address to allow the distinction between ':' as an IPv6 hexgroup separator
- * and as a host/port separator) */
-
-/**
- * gst_rtsp_url_parse:
- * @urlstr: the url string to parse
- * @url: location to hold the result.
- *
- * Parse the RTSP @urlstr into a newly allocated #GstRTSPUrl. Free after usage
- * with gst_rtsp_url_free().
- *
- * Returns: a #GstRTSPResult.
- */
-GstRTSPResult
-gst_rtsp_url_parse (const gchar * urlstr, GstRTSPUrl ** url)
-{
- GstRTSPUrl *res;
- gchar *p, *delim, *at, *col;
- gchar *host_end = NULL;
- guint scheme;
-
- g_return_val_if_fail (urlstr != NULL, GST_RTSP_EINVAL);
- g_return_val_if_fail (url != NULL, GST_RTSP_EINVAL);
-
- res = g_new0 (GstRTSPUrl, 1);
-
- p = (gchar *) urlstr;
-
- col = strstr (p, "://");
- if (col == NULL)
- goto invalid;
-
- for (scheme = 0; rtsp_url_schemes[scheme] != NULL; scheme++) {
- if (g_ascii_strncasecmp (rtsp_url_schemes[scheme], p, col - p) == 0) {
- res->transports = rtsp_url_transports[scheme];
- p = col + 3;
- break;
- }
- }
-
- if (res->transports == GST_RTSP_LOWER_TRANS_UNKNOWN)
- goto invalid;
-
- delim = strpbrk (p, "/?");
- at = strchr (p, '@');
-
- if (at && delim && at > delim)
- at = NULL;
-
- if (at) {
- col = strchr (p, ':');
-
- /* must have a ':' and it must be before the '@' */
- if (col == NULL || col > at)
- goto invalid;
-
- res->user = g_strndup (p, col - p);
- col++;
- res->passwd = g_strndup (col, at - col);
-
- /* move to host */
- p = at + 1;
- }
-
- if (*p == '[') {
- res->family = GST_RTSP_FAM_INET6;
-
- /* we have an IPv6 address in the URL, find the ending ] which must be
- * before any delimiter */
- host_end = strchr (++p, ']');
- if (!host_end || (delim && host_end >= delim))
- goto invalid;
-
- /* a port specifier must follow the address immediately */
- col = host_end[1] == ':' ? host_end + 1 : NULL;
- } else {
- res->family = GST_RTSP_FAM_INET;
-
- col = strchr (p, ':');
-
- /* we have a ':' and a delimiter but the ':' is after the delimiter, it's
- * not really part of the hostname */
- if (col && delim && col >= delim)
- col = NULL;
-
- host_end = col ? col : delim;
- }
-
- if (!host_end)
- res->host = g_strdup (p);
- else {
- res->host = g_strndup (p, host_end - p);
-
- if (col) {
- res->port = strtoul (col + 1, NULL, 10);
- } else {
- /* no port specified, set to 0. gst_rtsp_url_get_port() will return the
- * default port */
- res->port = 0;
- }
- }
- p = delim;
-
- if (p && *p == '/') {
- delim = strchr (p, '?');
- if (!delim)
- res->abspath = g_strdup (p);
- else
- res->abspath = g_strndup (p, delim - p);
- p = delim;
- } else {
- res->abspath = g_strdup ("/");
- }
-
- if (p && *p == '?')
- res->query = g_strdup (p + 1);
-
- *url = res;
-
- return GST_RTSP_OK;
-
- /* ERRORS */
-invalid:
- {
- gst_rtsp_url_free (res);
- return GST_RTSP_EINVAL;
- }
-}
-
-/**
- * gst_rtsp_url_copy:
- * @url: a #GstRTSPUrl
- *
- * Make a copy of @url.
- *
- * Returns: a copy of @url. Free with gst_rtsp_url_free () after usage.
- *
- * Since: 0.10.22
- */
-GstRTSPUrl *
-gst_rtsp_url_copy (const GstRTSPUrl * url)
-{
- GstRTSPUrl *res;
-
- g_return_val_if_fail (url != NULL, NULL);
-
- res = g_new0 (GstRTSPUrl, 1);
-
- res->transports = url->transports;
- res->family = url->family;
- res->user = g_strdup (url->user);
- res->passwd = g_strdup (url->passwd);
- res->host = g_strdup (url->host);
- res->port = url->port;
- res->abspath = g_strdup (url->abspath);
- res->query = g_strdup (url->query);
-
- return res;
-}
-
-/**
- * gst_rtsp_url_free:
- * @url: a #GstRTSPUrl
- *
- * Free the memory used by @url.
- */
-void
-gst_rtsp_url_free (GstRTSPUrl * url)
-{
- if (url == NULL)
- return;
-
- g_free (url->user);
- g_free (url->passwd);
- g_free (url->host);
- g_free (url->abspath);
- g_free (url->query);
- g_free (url);
-}
-
-/**
- * gst_rtsp_url_set_port:
- * @url: a #GstRTSPUrl
- * @port: the port
- *
- * Set the port number in @url to @port.
- *
- * Returns: #GST_RTSP_OK.
- */
-GstRTSPResult
-gst_rtsp_url_set_port (GstRTSPUrl * url, guint16 port)
-{
- g_return_val_if_fail (url != NULL, GST_RTSP_EINVAL);
-
- url->port = port;
-
- return GST_RTSP_OK;
-}
-
-/**
- * gst_rtsp_url_get_port:
- * @url: a #GstRTSPUrl
- * @port: location to hold the port
- *
- * Get the port number of @url.
- *
- * Returns: #GST_RTSP_OK.
- */
-GstRTSPResult
-gst_rtsp_url_get_port (const GstRTSPUrl * url, guint16 * port)
-{
- g_return_val_if_fail (url != NULL, GST_RTSP_EINVAL);
- g_return_val_if_fail (port != NULL, GST_RTSP_EINVAL);
-
- /* if a port was specified, use that else use the default port. */
- if (url->port != 0)
- *port = url->port;
- else
- *port = GST_RTSP_DEFAULT_PORT;
-
- return GST_RTSP_OK;
-}
-
-/**
- * gst_rtsp_url_get_request_uri:
- * @url: a #GstRTSPUrl
- *
- * Get a newly allocated string describing the request URI for @url.
- *
- * Returns: a string with the request URI. g_free() after usage.
- */
-gchar *
-gst_rtsp_url_get_request_uri (const GstRTSPUrl * url)
-{
- gchar *uri;
- gchar *pre_host;
- gchar *post_host;
- gchar *pre_query;
- gchar *query;
-
- g_return_val_if_fail (url != NULL, NULL);
-
- pre_host = url->family == GST_RTSP_FAM_INET6 ? "[" : "";
- post_host = url->family == GST_RTSP_FAM_INET6 ? "]" : "";
- pre_query = url->query ? "?" : "";
- query = url->query ? url->query : "";
-
- if (url->port != 0) {
- uri = g_strdup_printf ("rtsp://%s%s%s:%u%s%s%s", 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,
- post_host, url->abspath, pre_query, query);
- }
-
- return uri;
-}