summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2014-07-09 17:15:51 +0200
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2014-07-09 17:15:51 +0200
commitb3a4d9d683aa1b8692d2cbeba7e910af96e16393 (patch)
treef3df7c69538ac535255d0e77f9e94d492dd55ea3
parent2f0b88a55f677b5c1719787e2eeb1100315ed99a (diff)
dlnasrc: gst_dlna_src_uri_set_uri: set a GError when failing
GStreamer expects that a gst_uri_handler_set_uri() implementation returning FALSE also set the GError with the details about the failure. By not doing so, gst_element_make_from_uri() was crashing when trying to deference a NULL pointer.
-rw-r--r--src/gstdlnasrc.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/src/gstdlnasrc.c b/src/gstdlnasrc.c
index 0714f4e..33333c4 100644
--- a/src/gstdlnasrc.c
+++ b/src/gstdlnasrc.c
@@ -216,11 +216,12 @@ static void gst_dlna_src_uri_handler_init (gpointer g_iface,
static gboolean dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri,
GError ** error);
-static gboolean dlna_src_uri_init (GstDlnaSrc * dlna_src);
+static gboolean dlna_src_uri_init (GstDlnaSrc * dlna_src, GError ** error);
-static gboolean dlna_src_uri_gather_info (GstDlnaSrc * dlna_src);
+static gboolean dlna_src_uri_gather_info (GstDlnaSrc * dlna_src,
+ GError ** error);
-static gboolean dlna_src_setup_bin (GstDlnaSrc * dlna_src);
+static gboolean dlna_src_setup_bin (GstDlnaSrc * dlna_src, GError ** error);
static gboolean dlna_src_setup_dtcp (GstDlnaSrc * dlna_src);
@@ -1506,7 +1507,7 @@ dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri, GError ** error)
dlna_src->uri = g_strdup (uri);
- return dlna_src_uri_init (dlna_src);
+ return dlna_src_uri_init (dlna_src, error);
}
/**
@@ -1514,7 +1515,7 @@ dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri, GError ** error)
* dtcp decrypter element or not based on HEAD response.
*/
static gboolean
-dlna_src_uri_init (GstDlnaSrc * dlna_src)
+dlna_src_uri_init (GstDlnaSrc * dlna_src, GError ** error)
{
GST_DEBUG_OBJECT (dlna_src, "Initializing URI");
@@ -1523,12 +1524,12 @@ dlna_src_uri_init (GstDlnaSrc * dlna_src)
return TRUE;
}
- if (!dlna_src_uri_gather_info (dlna_src)) {
+ if (!dlna_src_uri_gather_info (dlna_src, error)) {
GST_ERROR_OBJECT (dlna_src, "Problems gathering URI info");
return FALSE;
}
- if (!dlna_src_setup_bin (dlna_src)) {
+ if (!dlna_src_setup_bin (dlna_src, error)) {
GST_ERROR_OBJECT (dlna_src, "Problems setting up dtcp elements");
return FALSE;
}
@@ -1548,7 +1549,7 @@ dlna_src_uri_init (GstDlnaSrc * dlna_src)
* @return true if uri is set without problems, false otherwise
*/
static gboolean
-dlna_src_setup_bin (GstDlnaSrc * dlna_src)
+dlna_src_setup_bin (GstDlnaSrc * dlna_src, GError ** error)
{
guint64 content_size;
GstPad *pad = NULL;
@@ -1561,6 +1562,8 @@ dlna_src_setup_bin (GstDlnaSrc * dlna_src)
if (!dlna_src->http_src) {
GST_ERROR_OBJECT (dlna_src,
"The http soup source element could not be created.");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "The http soup source element could not be created.");
return FALSE;
}
@@ -1576,6 +1579,8 @@ dlna_src_setup_bin (GstDlnaSrc * dlna_src)
/* Setup dtcp element regardless */
if (!dlna_src_setup_dtcp (dlna_src)) {
GST_ERROR_OBJECT (dlna_src, "Problems setting up dtcp elements");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems setting up dtcp elements");
return FALSE;
}
@@ -1585,6 +1590,8 @@ dlna_src_setup_bin (GstDlnaSrc * dlna_src)
if (!pad) {
GST_ERROR_OBJECT (dlna_src,
"Could not get pad to ghost pad for dlnasrc. Exiting.");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Could not get pad to ghost pad for dlnasrc. Exiting.");
return FALSE;
}
@@ -1676,7 +1683,7 @@ dlna_src_setup_dtcp (GstDlnaSrc * dlna_src)
* @return true if no problems encountered, false otherwise
*/
static gboolean
-dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
+dlna_src_uri_gather_info (GstDlnaSrc * dlna_src, GError ** error)
{
GString *struct_str = g_string_sized_new (MAX_HTTP_BUF_SIZE);
@@ -1715,6 +1722,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
if (!dlna_src_soup_session_open (dlna_src)) {
GST_ERROR_OBJECT (dlna_src,
"Problems initializing struct to store HEAD response");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems initializing struct to store HEAD response");
return FALSE;
}
@@ -1722,6 +1731,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
if (!dlna_src_head_response_init_struct (dlna_src, &dlna_src->server_info)) {
GST_ERROR_OBJECT (dlna_src,
"Problems initializing struct to store HEAD response");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems initializing struct to store HEAD response");
return FALSE;
}
@@ -1734,6 +1745,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
content_features_head_request_headers, dlna_src->server_info, TRUE)) {
GST_ERROR_OBJECT (dlna_src,
"Problems issuing HEAD request to get content features");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems issuing HEAD request to get content features");
return FALSE;
}
@@ -1747,6 +1760,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
live_content_head_request_headers, dlna_src->server_info, TRUE)) {
GST_ERROR_OBJECT (dlna_src,
"Problems issuing HEAD request to get live content information");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems issuing HEAD request to get live content information");
return FALSE;
}
} else if (dlna_src->time_seek_supported) {
@@ -1757,6 +1772,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
time_seek_head_request_headers, dlna_src->server_info, TRUE)) {
GST_ERROR_OBJECT (dlna_src,
"Problems issuing HEAD request to get time seek information");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems issuing HEAD request to get time seek information");
return FALSE;
}
} else if (dlna_src->byte_seek_supported && dlna_src->is_encrypted) {
@@ -1767,6 +1784,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
dtcp_range_head_request_headers, dlna_src->server_info, TRUE)) {
GST_ERROR_OBJECT (dlna_src,
"Problems issuing HEAD request to get range information");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems issuing HEAD request to get range information");
return FALSE;
}
} else if (dlna_src->byte_seek_supported) {
@@ -1777,6 +1796,8 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
range_head_request_headers, dlna_src->server_info, TRUE)) {
GST_ERROR_OBJECT (dlna_src,
"Problems issuing HEAD request to get range information");
+ g_set_error (error, GST_URI_ERROR_BAD_URI, GST_URI_ERROR_BAD_REFERENCE,
+ "Problems issuing HEAD request to get range information");
return FALSE;
}
} else {