summaryrefslogtreecommitdiffstats
path: root/gst/rtsp/rtspurl.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2005-05-11 07:44:44 +0000
committerWim Taymans <wim.taymans@gmail.com>2005-05-11 07:44:44 +0000
commit6f0ea35883cec1b68eb1ac2f2bc511f856018f6f (patch)
tree601e40d1ac5cd282ad5f207f4a9a647da62fc126 /gst/rtsp/rtspurl.c
parent6cacd6f64958db92328a9ae52563160a583a395a (diff)
Ported to 0.9.
Original commit message from CVS: Ported to 0.9. Set up transports, init UDP ports, init RTP session managers.
Diffstat (limited to 'gst/rtsp/rtspurl.c')
-rw-r--r--gst/rtsp/rtspurl.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/gst/rtsp/rtspurl.c b/gst/rtsp/rtspurl.c
new file mode 100644
index 00000000..25c85a2f
--- /dev/null
+++ b/gst/rtsp/rtspurl.c
@@ -0,0 +1,101 @@
+/* GStreamer
+ * Copyright (C) <2005> 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.
+ */
+#include <stdlib.h>
+
+#include "rtspurl.h"
+
+#define RTSP_PROTO "rtsp://"
+#define RTSP_PROTO_LEN 7
+#define RTSPU_PROTO "rtspu://"
+#define RTSPU_PROTO_LEN 8
+
+/* format is rtsp[u]://[user:passwd@]host[:port]/abspath */
+
+RTSPResult
+rtsp_url_parse (const gchar * urlstr, RTSPUrl ** url)
+{
+ RTSPUrl *res;
+ gchar *p, *slash, *at, *col;
+
+ res = g_new0 (RTSPUrl, 1);
+
+ p = (gchar *) urlstr;
+ if (g_str_has_prefix (p, RTSP_PROTO)) {
+ res->protocol = RTSP_PROTO_TCP;
+ p += RTSP_PROTO_LEN;
+ } else if (g_str_has_prefix (p, RTSPU_PROTO)) {
+ res->protocol = RTSP_PROTO_UDP;
+ p += RTSPU_PROTO_LEN;
+ } else {
+ return RTSP_EINVAL;
+ }
+
+ slash = g_strrstr (p, "/");
+ at = g_strrstr (p, "@");
+
+ if (at && slash && at > slash)
+ at = NULL;
+
+ if (at) {
+ col = g_strrstr (p, ":");
+
+ if (col == NULL)
+ return RTSP_EINVAL;
+
+ res->user = g_strndup (p, col - p);
+ col++;
+ res->passwd = g_strndup (col, col - at);
+
+ p = at + 1;
+ }
+
+ col = g_strrstr (p, ":");
+ if (col) {
+ res->host = g_strndup (p, col - p);
+ p = col + 1;
+ res->port = strtoul (p, (char **) &p, 10);
+ if (slash)
+ p = slash + 1;
+ } else {
+ res->port = RTSP_DEFAULT_PORT;
+ if (!slash) {
+ res->host = g_strdup (p);
+ p = NULL;
+ } else {
+ res->host = g_strndup (p, slash - p);
+ p = slash + 1;
+ }
+ }
+ if (p)
+ res->abspath = g_strdup (p);
+
+ *url = res;
+
+ return RTSP_OK;
+}
+
+void
+rtsp_url_free (RTSPUrl * url)
+{
+ g_free (url->user);
+ g_free (url->passwd);
+ g_free (url->host);
+ g_free (url->abspath);
+ g_free (url);
+}