/* GStreamer
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ * Copyright (C) <2012> Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#endif
#include "gstudpsink.h"
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <errno.h>
-#include <string.h>
-
#define UDP_DEFAULT_HOST "localhost"
#define UDP_DEFAULT_PORT 4951
static void
gst_udpsink_init (GstUDPSink * udpsink)
{
- gst_udp_uri_init (&udpsink->uri, UDP_DEFAULT_HOST, UDP_DEFAULT_PORT);
+ udpsink->host = g_strdup (UDP_DEFAULT_HOST);
+ udpsink->port = UDP_DEFAULT_PORT;
+ udpsink->uri = g_strdup_printf ("udp://%s:%d", udpsink->host, udpsink->port);
- gst_multiudpsink_add (GST_MULTIUDPSINK (udpsink), udpsink->uri.host,
- udpsink->uri.port);
+ gst_multiudpsink_add (GST_MULTIUDPSINK (udpsink), udpsink->host,
+ udpsink->port);
}
static void
gst_udpsink_finalize (GstUDPSink * udpsink)
{
- gst_udp_uri_free (&udpsink->uri);
- g_free (udpsink->uristr);
+ g_free (udpsink->host);
+ udpsink->host = NULL;
+
+ g_free (udpsink->uri);
+ udpsink->uri = NULL;
G_OBJECT_CLASS (parent_class)->finalize ((GObject *) udpsink);
}
static gboolean
-gst_udpsink_set_uri (GstUDPSink * sink, const gchar * uri)
+gst_udpsink_set_uri (GstUDPSink * sink, const gchar * uri, GError ** error)
{
- gst_multiudpsink_remove (GST_MULTIUDPSINK (sink), sink->uri.host,
- sink->uri.port);
+ gst_multiudpsink_remove (GST_MULTIUDPSINK (sink), sink->host, sink->port);
- if (gst_udp_parse_uri (uri, &sink->uri) < 0)
+ if (!gst_udp_parse_uri (uri, &sink->host, &sink->port))
goto wrong_uri;
- gst_multiudpsink_add (GST_MULTIUDPSINK (sink), sink->uri.host,
- sink->uri.port);
+ g_free (sink->uri);
+ sink->uri = g_strdup (uri);
+
+ gst_multiudpsink_add (GST_MULTIUDPSINK (sink), sink->host, sink->port);
return TRUE;
{
GST_ELEMENT_ERROR (sink, RESOURCE, READ, (NULL),
("error parsing uri %s", uri));
+ g_set_error_literal (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Could not parse UDP URI");
return FALSE;
}
}
/* remove old host */
gst_multiudpsink_remove (GST_MULTIUDPSINK (udpsink),
- udpsink->uri.host, udpsink->uri.port);
+ udpsink->host, udpsink->port);
switch (prop_id) {
case PROP_HOST:
const gchar *host;
host = g_value_get_string (value);
-
- if (host)
- gst_udp_uri_update (&udpsink->uri, host, -1);
- else
- gst_udp_uri_update (&udpsink->uri, UDP_DEFAULT_HOST, -1);
+ g_free (udpsink->host);
+ udpsink->host = g_strdup (host);
+ g_free (udpsink->uri);
+ udpsink->uri =
+ g_strdup_printf ("udp://%s:%d", udpsink->host, udpsink->port);
break;
}
case PROP_PORT:
- gst_udp_uri_update (&udpsink->uri, NULL, g_value_get_int (value));
+ udpsink->port = g_value_get_int (value);
+ g_free (udpsink->uri);
+ udpsink->uri =
+ g_strdup_printf ("udp://%s:%d", udpsink->host, udpsink->port);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
/* add new host */
gst_multiudpsink_add (GST_MULTIUDPSINK (udpsink),
- udpsink->uri.host, udpsink->uri.port);
+ udpsink->host, udpsink->port);
}
static void
switch (prop_id) {
case PROP_HOST:
- g_value_set_string (value, udpsink->uri.host);
+ g_value_set_string (value, udpsink->host);
break;
case PROP_PORT:
- g_value_set_int (value, udpsink->uri.port);
+ g_value_set_int (value, udpsink->port);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
return GST_URI_SINK;
}
-static gchar **
+static const gchar *const *
gst_udpsink_uri_get_protocols (GType type)
{
- static gchar *protocols[] = { (char *) "udp", NULL };
+ static const gchar *protocols[] = { "udp", NULL };
return protocols;
}
-static const gchar *
+static gchar *
gst_udpsink_uri_get_uri (GstURIHandler * handler)
{
GstUDPSink *sink = GST_UDPSINK (handler);
- g_free (sink->uristr);
- sink->uristr = gst_udp_uri_string (&sink->uri);
-
- return sink->uristr;
+ return g_strdup (sink->uri);
}
static gboolean
-gst_udpsink_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+gst_udpsink_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
- gboolean ret;
- GstUDPSink *sink = GST_UDPSINK (handler);
-
- ret = gst_udpsink_set_uri (sink, uri);
-
- return ret;
+ return gst_udpsink_set_uri (GST_UDPSINK (handler), uri, error);
}
static void