From c99b95d8cb9f95cd0cec8ad736f139b6029d13c9 Mon Sep 17 00:00:00 2001 From: Wouter Cloetens Date: Tue, 26 Feb 2008 05:36:17 +0000 Subject: Add support for specifying a list of cookies to be passed in the HTTP request. Fixes bug #518722. Original commit message from CVS: Patch by: Wouter Cloetens * ext/soup/gstsouphttpsrc.c: (gst_soup_http_src_class_init), (gst_soup_http_src_init), (gst_soup_http_src_dispose), (gst_soup_http_src_set_property), (gst_soup_http_src_get_property), (gst_soup_http_src_create): * ext/soup/gstsouphttpsrc.h: * tests/check/elements/souphttpsrc.c: (run_test), (GST_START_TEST), (souphttpsrc_suite): Add support for specifying a list of cookies to be passed in the HTTP request. Fixes bug #518722. --- ext/soup/gstsouphttpsrc.c | 21 +++++++++++++++++++++ ext/soup/gstsouphttpsrc.h | 1 + 2 files changed, 22 insertions(+) (limited to 'ext/soup') diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c index af50eaa2..3e2326de 100644 --- a/ext/soup/gstsouphttpsrc.c +++ b/ext/soup/gstsouphttpsrc.c @@ -117,6 +117,7 @@ enum PROP_USER_AGENT, PROP_AUTOMATIC_REDIRECT, PROP_PROXY, + PROP_COOKIES, PROP_IRADIO_MODE, PROP_IRADIO_NAME, PROP_IRADIO_GENRE, @@ -240,6 +241,9 @@ gst_soup_http_src_class_init (GstSoupHTTPSrcClass * klass) PROP_PROXY, g_param_spec_string ("proxy", "Proxy", "HTTP proxy server URI", "", G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_COOKIES, g_param_spec_boxed ("cookies", "Cookies", + "HTTP request cookies", G_TYPE_STRV, G_PARAM_READWRITE)); /* icecast stuff */ g_object_class_install_property (gobject_class, @@ -291,6 +295,7 @@ gst_soup_http_src_init (GstSoupHTTPSrc * src, GstSoupHTTPSrcClass * g_class) src->location = NULL; src->automatic_redirect = TRUE; src->user_agent = g_strdup (DEFAULT_USER_AGENT); + src->cookies = NULL; src->icy_caps = NULL; src->iradio_mode = FALSE; src->iradio_name = NULL; @@ -328,6 +333,7 @@ gst_soup_http_src_dispose (GObject * gobject) soup_uri_free (src->proxy); src->proxy = NULL; } + g_strfreev (src->cookies); g_free (src->iradio_name); src->iradio_name = NULL; g_free (src->iradio_genre); @@ -397,6 +403,10 @@ gst_soup_http_src_set_property (GObject * object, guint prop_id, } break; } + case PROP_COOKIES: + g_strfreev (src->cookies); + src->cookies = g_strdupv (g_value_get_boxed (value)); + break; } done: return; @@ -428,6 +438,9 @@ gst_soup_http_src_get_property (GObject * object, guint prop_id, free (proxy); } break; + case PROP_COOKIES: + g_value_set_boxed (value, g_strdupv (src->cookies)); + break; case PROP_IRADIO_MODE: g_value_set_boolean (value, src->iradio_mode); break; @@ -860,6 +873,14 @@ gst_soup_http_src_create (GstPushSrc * psrc, GstBuffer ** outbuf) soup_message_headers_append (src->msg->request_headers, "icy-metadata", "1"); } + if (src->cookies) { + gchar **cookie; + + for (cookie = src->cookies; *cookie != NULL; cookie++) { + soup_message_headers_append (src->msg->request_headers, "Cookie", + *cookie); + } + } g_signal_connect (src->msg, "got_headers", G_CALLBACK (gst_soup_http_src_got_headers_cb), src); diff --git a/ext/soup/gstsouphttpsrc.h b/ext/soup/gstsouphttpsrc.h index 9e7d81cb..5bad737d 100644 --- a/ext/soup/gstsouphttpsrc.h +++ b/ext/soup/gstsouphttpsrc.h @@ -51,6 +51,7 @@ struct _GstSoupHTTPSrc { gchar *user_agent; /* User-Agent HTTP header. */ gboolean automatic_redirect; /* Follow redirects. */ SoupURI *proxy; /* HTTP proxy URI. */ + gchar **cookies; /* HTTP request cookies. */ GMainContext *context; /* I/O context. */ GMainLoop *loop; /* Event loop. */ SoupSession *session; /* Async context. */ -- cgit