mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
neonhttpsrc: add "cookies" property
Based on patch by: Sameer Naik https://bugzilla.gnome.org/show_bug.cgi?id=625174
This commit is contained in:
parent
c2c32fe773
commit
640a1ff0e8
3 changed files with 39 additions and 0 deletions
|
@ -66,6 +66,7 @@ enum
|
||||||
PROP_LOCATION,
|
PROP_LOCATION,
|
||||||
PROP_PROXY,
|
PROP_PROXY,
|
||||||
PROP_USER_AGENT,
|
PROP_USER_AGENT,
|
||||||
|
PROP_COOKIES,
|
||||||
PROP_IRADIO_MODE,
|
PROP_IRADIO_MODE,
|
||||||
PROP_IRADIO_NAME,
|
PROP_IRADIO_NAME,
|
||||||
PROP_IRADIO_GENRE,
|
PROP_IRADIO_GENRE,
|
||||||
|
@ -173,6 +174,17 @@ gst_neonhttp_src_class_init (GstNeonhttpSrcClass * klass)
|
||||||
"Value of the User-Agent HTTP request header field",
|
"Value of the User-Agent HTTP request header field",
|
||||||
"GStreamer neonhttpsrc", G_PARAM_READWRITE));
|
"GStreamer neonhttpsrc", G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstNeonhttpSrc:cookies
|
||||||
|
*
|
||||||
|
* HTTP request cookies
|
||||||
|
*
|
||||||
|
* Since: 0.10.20
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class, PROP_COOKIES,
|
||||||
|
g_param_spec_boxed ("cookies", "Cookies", "HTTP request cookies",
|
||||||
|
G_TYPE_STRV, G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(gobject_class, PROP_IRADIO_MODE,
|
(gobject_class, PROP_IRADIO_MODE,
|
||||||
g_param_spec_boolean ("iradio-mode", "iradio-mode",
|
g_param_spec_boolean ("iradio-mode", "iradio-mode",
|
||||||
|
@ -242,6 +254,7 @@ gst_neonhttp_src_init (GstNeonhttpSrc * src, GstNeonhttpSrcClass * g_class)
|
||||||
src->automatic_redirect = DEFAULT_AUTOMATIC_REDIRECT;
|
src->automatic_redirect = DEFAULT_AUTOMATIC_REDIRECT;
|
||||||
src->accept_self_signed = DEFAULT_ACCEPT_SELF_SIGNED;
|
src->accept_self_signed = DEFAULT_ACCEPT_SELF_SIGNED;
|
||||||
|
|
||||||
|
src->cookies = NULL;
|
||||||
src->session = NULL;
|
src->session = NULL;
|
||||||
src->request = NULL;
|
src->request = NULL;
|
||||||
memset (&src->uri, 0, sizeof (src->uri));
|
memset (&src->uri, 0, sizeof (src->uri));
|
||||||
|
@ -274,6 +287,11 @@ gst_neonhttp_src_dispose (GObject * gobject)
|
||||||
g_free (src->iradio_genre);
|
g_free (src->iradio_genre);
|
||||||
g_free (src->iradio_url);
|
g_free (src->iradio_url);
|
||||||
|
|
||||||
|
if (src->cookies) {
|
||||||
|
g_strfreev (src->cookies);
|
||||||
|
src->cookies = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (src->icy_caps) {
|
if (src->icy_caps) {
|
||||||
gst_caps_unref (src->icy_caps);
|
gst_caps_unref (src->icy_caps);
|
||||||
src->icy_caps = NULL;
|
src->icy_caps = NULL;
|
||||||
|
@ -344,6 +362,11 @@ gst_neonhttp_src_set_property (GObject * object, guint prop_id,
|
||||||
g_free (src->user_agent);
|
g_free (src->user_agent);
|
||||||
src->user_agent = g_strdup (g_value_get_string (value));
|
src->user_agent = g_strdup (g_value_get_string (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_COOKIES:
|
||||||
|
if (src->cookies)
|
||||||
|
g_strfreev (src->cookies);
|
||||||
|
src->cookies = (gchar **) g_value_dup_boxed (value);
|
||||||
|
break;
|
||||||
case PROP_IRADIO_MODE:
|
case PROP_IRADIO_MODE:
|
||||||
src->iradio_mode = g_value_get_boolean (value);
|
src->iradio_mode = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
@ -406,6 +429,9 @@ gst_neonhttp_src_get_property (GObject * object, guint prop_id,
|
||||||
case PROP_USER_AGENT:
|
case PROP_USER_AGENT:
|
||||||
g_value_set_string (value, neonhttpsrc->user_agent);
|
g_value_set_string (value, neonhttpsrc->user_agent);
|
||||||
break;
|
break;
|
||||||
|
case PROP_COOKIES:
|
||||||
|
g_value_set_boxed (value, neonhttpsrc->cookies);
|
||||||
|
break;
|
||||||
case PROP_IRADIO_MODE:
|
case PROP_IRADIO_MODE:
|
||||||
g_value_set_boolean (value, neonhttpsrc->iradio_mode);
|
g_value_set_boolean (value, neonhttpsrc->iradio_mode);
|
||||||
break;
|
break;
|
||||||
|
@ -823,6 +849,7 @@ gst_neonhttp_src_send_request_and_redirect (GstNeonhttpSrc * src,
|
||||||
{
|
{
|
||||||
ne_session *session = NULL;
|
ne_session *session = NULL;
|
||||||
ne_request *request = NULL;
|
ne_request *request = NULL;
|
||||||
|
gchar **c;
|
||||||
gint res;
|
gint res;
|
||||||
gint http_status = 0;
|
gint http_status = 0;
|
||||||
guint request_count = 0;
|
guint request_count = 0;
|
||||||
|
@ -849,6 +876,11 @@ gst_neonhttp_src_send_request_and_redirect (GstNeonhttpSrc * src,
|
||||||
ne_add_request_header (request, "User-Agent", src->user_agent);
|
ne_add_request_header (request, "User-Agent", src->user_agent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (c = src->cookies; c != NULL && *c != NULL; ++c) {
|
||||||
|
GST_INFO ("Adding header Cookie : %s", *c);
|
||||||
|
ne_add_request_header (request, "Cookies", *c);
|
||||||
|
}
|
||||||
|
|
||||||
if (src->iradio_mode) {
|
if (src->iradio_mode) {
|
||||||
ne_add_request_header (request, "icy-metadata", "1");
|
ne_add_request_header (request, "icy-metadata", "1");
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct _GstNeonhttpSrc {
|
||||||
gchar *query_string;
|
gchar *query_string;
|
||||||
ne_uri proxy;
|
ne_uri proxy;
|
||||||
gchar *user_agent;
|
gchar *user_agent;
|
||||||
|
gchar **cookies;
|
||||||
|
|
||||||
guint64 content_size;
|
guint64 content_size;
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ GST_START_TEST (test_first_buffer_has_offset)
|
||||||
GstStateChangeReturn ret;
|
GstStateChangeReturn ret;
|
||||||
GstElement *pipe, *src, *sink;
|
GstElement *pipe, *src, *sink;
|
||||||
GstBuffer *buf = NULL;
|
GstBuffer *buf = NULL;
|
||||||
|
gchar **cookies;
|
||||||
|
|
||||||
pipe = gst_pipeline_new (NULL);
|
pipe = gst_pipeline_new (NULL);
|
||||||
|
|
||||||
|
@ -53,6 +54,11 @@ GST_START_TEST (test_first_buffer_has_offset)
|
||||||
g_object_set (src, "location", "http://gstreamer.freedesktop.org/", NULL);
|
g_object_set (src, "location", "http://gstreamer.freedesktop.org/", NULL);
|
||||||
g_object_set (src, "automatic-redirect", TRUE, NULL);
|
g_object_set (src, "automatic-redirect", TRUE, NULL);
|
||||||
|
|
||||||
|
/* set some cookies (shouldn't hurt) */
|
||||||
|
cookies = g_strsplit ("foo=1234,bar=9871615348162523726337x99FB", ",", -1);
|
||||||
|
g_object_set (src, "cookies", cookies, NULL);
|
||||||
|
g_strfreev (cookies);
|
||||||
|
|
||||||
g_object_set (sink, "signal-handoffs", TRUE, NULL);
|
g_object_set (sink, "signal-handoffs", TRUE, NULL);
|
||||||
g_signal_connect (sink, "preroll-handoff", G_CALLBACK (handoff_cb), &buf);
|
g_signal_connect (sink, "preroll-handoff", G_CALLBACK (handoff_cb), &buf);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue