mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-29 12:25:37 +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_PROXY,
|
||||
PROP_USER_AGENT,
|
||||
PROP_COOKIES,
|
||||
PROP_IRADIO_MODE,
|
||||
PROP_IRADIO_NAME,
|
||||
PROP_IRADIO_GENRE,
|
||||
|
@ -173,6 +174,17 @@ gst_neonhttp_src_class_init (GstNeonhttpSrcClass * klass)
|
|||
"Value of the User-Agent HTTP request header field",
|
||||
"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
|
||||
(gobject_class, PROP_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->accept_self_signed = DEFAULT_ACCEPT_SELF_SIGNED;
|
||||
|
||||
src->cookies = NULL;
|
||||
src->session = NULL;
|
||||
src->request = NULL;
|
||||
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_url);
|
||||
|
||||
if (src->cookies) {
|
||||
g_strfreev (src->cookies);
|
||||
src->cookies = NULL;
|
||||
}
|
||||
|
||||
if (src->icy_caps) {
|
||||
gst_caps_unref (src->icy_caps);
|
||||
src->icy_caps = NULL;
|
||||
|
@ -344,6 +362,11 @@ gst_neonhttp_src_set_property (GObject * object, guint prop_id,
|
|||
g_free (src->user_agent);
|
||||
src->user_agent = g_strdup (g_value_get_string (value));
|
||||
break;
|
||||
case PROP_COOKIES:
|
||||
if (src->cookies)
|
||||
g_strfreev (src->cookies);
|
||||
src->cookies = (gchar **) g_value_dup_boxed (value);
|
||||
break;
|
||||
case PROP_IRADIO_MODE:
|
||||
src->iradio_mode = g_value_get_boolean (value);
|
||||
break;
|
||||
|
@ -406,6 +429,9 @@ gst_neonhttp_src_get_property (GObject * object, guint prop_id,
|
|||
case PROP_USER_AGENT:
|
||||
g_value_set_string (value, neonhttpsrc->user_agent);
|
||||
break;
|
||||
case PROP_COOKIES:
|
||||
g_value_set_boxed (value, neonhttpsrc->cookies);
|
||||
break;
|
||||
case PROP_IRADIO_MODE:
|
||||
g_value_set_boolean (value, neonhttpsrc->iradio_mode);
|
||||
break;
|
||||
|
@ -823,6 +849,7 @@ gst_neonhttp_src_send_request_and_redirect (GstNeonhttpSrc * src,
|
|||
{
|
||||
ne_session *session = NULL;
|
||||
ne_request *request = NULL;
|
||||
gchar **c;
|
||||
gint res;
|
||||
gint http_status = 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);
|
||||
}
|
||||
|
||||
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) {
|
||||
ne_add_request_header (request, "icy-metadata", "1");
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ struct _GstNeonhttpSrc {
|
|||
gchar *query_string;
|
||||
ne_uri proxy;
|
||||
gchar *user_agent;
|
||||
gchar **cookies;
|
||||
|
||||
guint64 content_size;
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ GST_START_TEST (test_first_buffer_has_offset)
|
|||
GstStateChangeReturn ret;
|
||||
GstElement *pipe, *src, *sink;
|
||||
GstBuffer *buf = NULL;
|
||||
gchar **cookies;
|
||||
|
||||
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, "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_signal_connect (sink, "preroll-handoff", G_CALLBACK (handoff_cb), &buf);
|
||||
|
||||
|
|
Loading…
Reference in a new issue