From 71eab0c2482825df1aba6cc304cb83aaa232779e Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Tue, 14 Jul 2020 11:04:32 +0900 Subject: [PATCH] souphttpsrc: Remove cookie_jar patch - Cookie jar patch is no longer necessary due to the patch below. souphttpsrc: Implement soup session sharing souphttpsrc: Use a in-memory cookie jar by default in sessions we created Change-Id: I47d9adea66f994e235f80938985ce43f281bb487 --- ext/soup/gstsouphttpsrc.c | 160 ++-------------------------------------- ext/soup/gstsouphttpsrc.h | 6 +- packaging/gst-plugins-good.spec | 2 +- 3 files changed, 8 insertions(+), 160 deletions(-) diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c index 26daa83..09d3828 100644 --- a/ext/soup/gstsouphttpsrc.c +++ b/ext/soup/gstsouphttpsrc.c @@ -534,9 +534,7 @@ gst_soup_http_src_init (GstSoupHTTPSrc * src) "The proxy in the http_proxy env var (\"%s\") cannot be parsed.", proxy); } -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION - src->cookie_jar = NULL; -#endif + gst_base_src_set_automatic_eos (GST_BASE_SRC (src), FALSE); gst_soup_http_src_reset (src); @@ -643,32 +641,8 @@ gst_soup_http_src_set_property (GObject * object, guint prop_id, break; } case PROP_COOKIES: -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION - { - char **array; - SoupURI *base_uri; - SoupCookie *cookie_parsed = NULL; - - g_strfreev (src->cookies); - src->cookies = g_strdupv (g_value_get_boxed (value)); - - if (src->cookie_jar && ((array = src->cookies) != NULL)) { - base_uri = soup_uri_new (src->location); - GST_INFO_OBJECT (src, "request to set cookies..."); - while (*array != NULL) { - cookie_parsed = soup_cookie_parse (*array++, base_uri); - if (cookie_parsed && cookie_parsed->domain) - soup_cookie_jar_add_cookie (src->cookie_jar, cookie_parsed); - } - soup_uri_free (base_uri); - } else { - GST_INFO_OBJECT (src, "set cookies after session creation"); - } - } -#else g_strfreev (src->cookies); src->cookies = g_strdupv (g_value_get_boxed (value)); -#endif break; case PROP_IS_LIVE: gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value)); @@ -764,32 +738,12 @@ gst_soup_http_src_get_property (GObject * object, guint prop_id, g_value_set_static_string (value, ""); else { char *proxy = soup_uri_to_string (src->proxy, FALSE); - g_value_set_string (value, proxy); g_free (proxy); } break; case PROP_COOKIES: -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION - { - GSList *cookie_list, *c; - gchar **cookies, **array; - - cookies = NULL; - if ((src->cookie_jar) && - ((cookie_list = soup_cookie_jar_all_cookies (src->cookie_jar)) != NULL)) { - cookies = g_new0 (gchar *, g_slist_length(cookie_list) + 1); - array = cookies; - for (c = cookie_list; c; c = c->next) { - *array++ = soup_cookie_to_set_cookie_header ((SoupCookie *)(c->data)); - } - soup_cookies_free (cookie_list); - } - g_value_set_boxed (value, cookies); - } -#else - g_value_set_boxed (value, g_strdupv (src->cookies)); -#endif + g_value_set_boxed (value, g_strdupv (src->cookies)); break; case PROP_IS_LIVE: g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src))); @@ -931,35 +885,6 @@ _append_extra_header (GQuark field_id, const GValue * value, gpointer user_data) soup_message_headers_append (src->msg->request_headers, field_name, field_content); -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION - if (!g_ascii_strcasecmp(field_name, "Cookie")) { - SoupURI *uri = NULL; - SoupCookie *cookie_parsed = NULL; - gchar *saveptr = NULL; - - if (strlen(field_content) > 0) { - gchar *tmp_field = NULL; - - uri = soup_uri_new (src->location); - - tmp_field = strtok_r (field_content, ";", &saveptr); - - while (tmp_field != NULL) { - GST_DEBUG_OBJECT (src, "field_content = %s", tmp_field); - - cookie_parsed = soup_cookie_parse(tmp_field, uri); - GST_DEBUG_OBJECT (src, "cookie parsed = %p", cookie_parsed); - - if (src->cookie_jar && cookie_parsed && cookie_parsed->domain) - soup_cookie_jar_add_cookie (src->cookie_jar, cookie_parsed); - - tmp_field = strtok_r (NULL, ";", &saveptr); - } - soup_uri_free (uri); - } - } -#endif - g_free (field_content); return TRUE; @@ -1117,28 +1042,6 @@ gst_soup_http_src_session_open (GstSoupHTTPSrc * src) return FALSE; } -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION - { - char **array = NULL; - SoupURI *base_uri; - SoupCookie *soup_cookie = NULL; - - soup_session_add_feature_by_type (src->session, SOUP_TYPE_COOKIE_JAR); - src->cookie_jar = SOUP_COOKIE_JAR (soup_session_get_feature (src->session, SOUP_TYPE_COOKIE_JAR)); - if ((array = src->cookies) != NULL) { - base_uri = soup_uri_new (src->location); - while (*array != NULL) { - soup_cookie = soup_cookie_parse (*array++, base_uri); - if (soup_cookie && soup_cookie->domain) { - GST_INFO_OBJECT (src, "adding cookies.."); - soup_cookie_jar_add_cookie (src->cookie_jar, soup_cookie); - } - } - soup_uri_free (base_uri); - } - } -#endif - g_signal_connect (src->session, "authenticate", G_CALLBACK (gst_soup_http_src_authenticate_cb), src); @@ -1173,19 +1076,7 @@ gst_soup_http_src_session_close (GstSoupHTTPSrc * src) if (src->session) { if (!src->session_is_shared) -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION -/* When Playback is ongoing and Browser is moved to background ( Pressing Menu or Home Key ), The Session gets destroyed. - But the cookie_jar property remains unfreed. This results in garbage pointer and causes crash. - Removing the cookie_jar feature during close session of browser to handle the issue. */ - { - GST_DEBUG_OBJECT (src, "Removing Cookie Jar instance"); - soup_session_remove_feature_by_type(src->session, SOUP_TYPE_COOKIE_JAR); - src->cookie_jar = NULL; - soup_session_abort (src->session); - } -#else soup_session_abort (src->session); -#endif g_signal_handlers_disconnect_by_func (src->session, G_CALLBACK (gst_soup_http_src_authenticate_cb), src); g_object_unref (src->session); @@ -1259,26 +1150,7 @@ gst_soup_http_src_headers_foreach (const gchar * name, const gchar * val, { GST_INFO_OBJECT (src, " %s: %s", name, val); - if (g_ascii_strcasecmp (name, "Set-Cookie") == 0) { - if (val) { - gboolean bret = FALSE; - GstStructure *s = NULL; - GstSoupHTTPSrc * tmp = src; - SoupURI *uri; - - uri = soup_uri_new (tmp->location); - - /* post current bandwith & uri to application */ - s = gst_structure_new ("cookies", - "updated-cookie", G_TYPE_STRING, val, - "updated-url", G_TYPE_STRING, tmp->location, NULL); - bret = gst_element_post_message (GST_ELEMENT_CAST (src), gst_message_new_element (GST_OBJECT_CAST (src), s)); - soup_cookie_jar_set_cookie (tmp->cookie_jar, uri, val); - soup_uri_free (uri); - - GST_INFO_OBJECT (src, "request url [%s], posted cookies [%s] msg and returned = %d", tmp->location, val, bret); - } - } else if (g_ascii_strcasecmp (name, "Dash-Oldest-Segment") == 0) { + if (g_ascii_strcasecmp (name, "Dash-Oldest-Segment") == 0) { if (val) { GstSoupHTTPSrc * tmp = src; tmp->dash_oldest_segment = g_strdup (val); @@ -1765,33 +1637,12 @@ gst_soup_http_src_build_message (GstSoupHTTPSrc * src, const gchar * method) } #ifdef TIZEN_FEATURE_SOUP_MODIFICATION -/* This changes are needed to enable Seekable Contents from server. + /* This changes are needed to enable Seekable Contents from server. We have observed that , for few specific networks ( VODAFONE ) , without theabove headers , Youtube is sending non-seekable contents to the Client. */ soup_message_headers_append (src->msg->request_headers, "Accept-Ranges","bytes"); +#endif - if (src->cookie_jar) { - GSList *cookie_list, *c; - gchar *header; - - SoupURI *uri = NULL; - SoupCookie *cookie; - uri = soup_uri_new (src->location); - - if ((cookie_list = soup_cookie_jar_all_cookies (src->cookie_jar)) != NULL) { - for (c = cookie_list; c; c = c->next) { - cookie = (SoupCookie *)c->data; - if (soup_cookie_applies_to_uri(cookie, uri)) { - header = soup_cookie_to_cookie_header (cookie); - soup_message_headers_append (src->msg->request_headers, "Cookie", header); - g_free (header); - } - } - } - soup_cookies_free (cookie_list); - soup_uri_free (uri); - } -#else if (src->cookies) { gchar **cookie; @@ -1800,7 +1651,6 @@ gst_soup_http_src_build_message (GstSoupHTTPSrc * src, const gchar * method) *cookie); } } -#endif if (!src->compress) soup_message_disable_feature (src->msg, SOUP_TYPE_CONTENT_DECODER); diff --git a/ext/soup/gstsouphttpsrc.h b/ext/soup/gstsouphttpsrc.h index 458fa2a..74a34bb 100644 --- a/ext/soup/gstsouphttpsrc.h +++ b/ext/soup/gstsouphttpsrc.h @@ -104,9 +104,7 @@ struct _GstSoupHTTPSrc { gchar *iradio_url; GstStructure *extra_headers; -#ifdef TIZEN_FEATURE_SOUP_MODIFICATION - SoupCookieJar *cookie_jar; -#endif + SoupLoggerLogLevel log_level;/* Soup HTTP session logger level */ gboolean compress; @@ -125,7 +123,7 @@ struct _GstSoupHTTPSrc { gchar *dash_newest_segment; guint64 received_total; /* temp: for debugging */ guint dlna_opt; /* DLNA server option */ -#endif +#endif }; struct _GstSoupHTTPSrcClass { diff --git a/packaging/gst-plugins-good.spec b/packaging/gst-plugins-good.spec index 01c1622..f2a7cf0 100644 --- a/packaging/gst-plugins-good.spec +++ b/packaging/gst-plugins-good.spec @@ -3,7 +3,7 @@ Name: gst-plugins-good Version: 1.16.2 -Release: 5 +Release: 6 License: LGPL-2.1+ Summary: GStreamer Streaming-Media Framework Plug-Ins Url: http://gstreamer.freedesktop.org/ -- 2.7.4