diff --git a/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c b/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c index 0d68fcec2f..ebf9dc0783 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c @@ -49,7 +49,7 @@ struct DownloadHelper gchar *referer; gchar *user_agent; - gchar **cookies; + GSList *cookies; }; struct DownloadHelperTransfer @@ -654,7 +654,7 @@ downloadhelper_free (DownloadHelper * dh) g_free (dh->referer); g_free (dh->user_agent); - g_strfreev (dh->cookies); + _soup_cookies_free (dh->cookies); g_free (dh); } @@ -681,10 +681,25 @@ downloadhelper_set_user_agent (DownloadHelper * dh, const gchar * user_agent) void downloadhelper_set_cookies (DownloadHelper * dh, gchar ** cookies) { + guint i; g_mutex_lock (&dh->transfer_lock); - g_strfreev (dh->cookies); - dh->cookies = cookies; + _soup_cookies_free (dh->cookies); + dh->cookies = NULL; + + for (i = 0; cookies[i]; i++) { + SoupCookie *cookie = _soup_cookie_parse (cookies[i]); + + if (cookie == NULL) { + GST_WARNING ("Couldn't parse cookie, ignoring: %s", cookies[i]); + continue; + } + + dh->cookies = g_slist_append (dh->cookies, cookie); + } + g_mutex_unlock (&dh->transfer_lock); + + g_strfreev (cookies); } /* Called with the transfer lock held */ @@ -902,11 +917,7 @@ downloadhelper_submit_request (DownloadHelper * dh, } if (dh->cookies != NULL) { - gchar **cookie; - - for (cookie = dh->cookies; *cookie != NULL; cookie++) { - _soup_message_headers_append (msg_headers, "Cookie", *cookie); - } + _soup_cookies_to_request (dh->cookies, msg); } transfer_task = transfer_task_new (dh, request, msg, blocking); diff --git a/subprojects/gst-plugins-good/ext/soup/gstsouploader.c b/subprojects/gst-plugins-good/ext/soup/gstsouploader.c index b65cfdab52..85048ce303 100644 --- a/subprojects/gst-plugins-good/ext/soup/gstsouploader.c +++ b/subprojects/gst-plugins-good/ext/soup/gstsouploader.c @@ -137,6 +137,10 @@ typedef struct _GstSoupVTable GAsyncResult * result, GError ** error); GInputStream *(*_soup_session_send) (SoupSession * session, SoupMessage * msg, GCancellable * cancellable, GError ** error); + SoupCookie* (*_soup_cookie_parse) (const char* header, GUri* origin); + void (*_soup_cookies_to_request) (GSList* cookies, SoupMessage* msg); + void (*_soup_cookies_free) (GSList *cookies); + /* *INDENT-ON* */ } GstSoupVTable; @@ -291,6 +295,9 @@ gst_soup_load_library (void) LOAD_SYMBOL (soup_session_get_type); LOAD_SYMBOL (soup_session_send); LOAD_SYMBOL (soup_session_send_finish); + LOAD_SYMBOL (soup_cookie_parse); + LOAD_SYMBOL (soup_cookies_to_request); + LOAD_SYMBOL (soup_cookies_free); vtable->loaded = TRUE; goto beach; @@ -937,3 +944,37 @@ gst_soup_session_cancel_message (SoupSession * session, SoupMessage * msg, } #endif } + +SoupCookie * +_soup_cookie_parse (const char *header) +{ +#ifdef STATIC_SOUP + return soup_cookie_parse (header, NULL); +#else + g_assert (gst_soup_vtable._soup_cookie_parse != NULL); + return gst_soup_vtable._soup_cookie_parse (header, NULL); +#endif +} + + +void +_soup_cookies_to_request (GSList * cookies, SoupMessage * msg) +{ +#ifdef STATIC_SOUP + soup_cookies_to_request (cookies, msg); +#else + g_assert (gst_soup_vtable._soup_cookies_to_request != NULL); + gst_soup_vtable._soup_cookies_to_request (cookies, msg); +#endif +} + +void +_soup_cookies_free (GSList * cookies) +{ +#ifdef STATIC_SOUP + soup_cookies_free (cookies); +#else + g_assert (gst_soup_vtable._soup_cookies_free != NULL); + gst_soup_vtable._soup_cookies_free (cookies); +#endif +} diff --git a/subprojects/gst-plugins-good/ext/soup/gstsouploader.h b/subprojects/gst-plugins-good/ext/soup/gstsouploader.h index 278adff1ac..0cedf70007 100644 --- a/subprojects/gst-plugins-good/ext/soup/gstsouploader.h +++ b/subprojects/gst-plugins-good/ext/soup/gstsouploader.h @@ -66,6 +66,9 @@ #define _soup_session_send_async _ad2_soup_session_send_async #define _soup_session_send_finish _ad2_soup_session_send_finish #define _soup_session_send _ad2_soup_session_send +#define _soup_cookie_parse _ad2_soup_cookie_parse +#define _soup_cookies_to_request _ad2_soup_cookies_to_request +#define _soup_cookies_free _ad2_soup_cookies_free #define gst_soup_session_cancel_message ad2_gst_soup_session_cancel_message #endif @@ -167,6 +170,11 @@ GInputStream *_soup_session_send (SoupSession *session, SoupMessage *msg, void gst_soup_session_cancel_message (SoupSession *session, SoupMessage *msg, GCancellable *cancellable); +SoupCookie *_soup_cookie_parse (const char *header); +void _soup_cookies_to_request (GSList *cookies, SoupMessage *msg); +void _soup_cookies_free (GSList *cookies); + + G_END_DECLS #endif /* __GST_SOUP_LOADER_H__ */ diff --git a/subprojects/gst-plugins-good/ext/soup/stub/soup.h b/subprojects/gst-plugins-good/ext/soup/stub/soup.h index 56ddd6acdf..1f1f5c5914 100644 --- a/subprojects/gst-plugins-good/ext/soup/stub/soup.h +++ b/subprojects/gst-plugins-good/ext/soup/stub/soup.h @@ -209,6 +209,8 @@ static gpointer _SOUP_METHOD_POST; #define SOUP_METHOD_HEAD _SOUP_INTERN_METHOD(HEAD) #define SOUP_METHOD_POST _SOUP_INTERN_METHOD(POST) +typedef struct _SoupCookie SoupCookie; + G_END_DECLS #endif /* __GST_SOUP_STUB_H__ */