summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2013-12-11 15:27:23 +0100
committerChristophe Fergeau <cfergeau@redhat.com>2014-09-03 12:17:28 +0200
commit473de29c738089e2df01ab1900c4fb2bfe5e3008 (patch)
treebe56fa08001459a4486167b2c4fde2e917fc8234
parentf655f0702d949149bff2608ab8f8ffe31d840a12 (diff)
Add rest_proxy_add_soup_feature()
This function can be helpful if one wants more control over libsoup features than what librest simple API provide. For example, to get full access to libsoup cookie API (say to be able to add arbitrary cookies to the soup session), one can do: RestProxy *proxy = g_object_new(REST_TYPE_PROXY, "url-format", url, "disable-cookies", TRUE, NULL); SoupSessionFeature *cookie_jar = SOUP_SESSION_FEATURE(soup_cookie_jar_new ()); rest_proxy_add_soup_feature(proxy, cookie_jar); It's then possible to use all the soup_cookie_* methods to deal with cookies. https://bugzilla.gnome.org/show_bug.cgi?id=728340 (cherry picked from commit 68d90e9e315d279aebe04d6b1177e57c075b8f72)
-rw-r--r--docs/reference/rest/rest-sections.txt1
-rw-r--r--rest/rest-proxy.c36
-rw-r--r--rest/rest-proxy.h4
3 files changed, 41 insertions, 0 deletions
diff --git a/docs/reference/rest/rest-sections.txt b/docs/reference/rest/rest-sections.txt
index fbb121b..790b751 100644
--- a/docs/reference/rest/rest-sections.txt
+++ b/docs/reference/rest/rest-sections.txt
@@ -116,6 +116,7 @@ rest_proxy_bind
rest_proxy_bind_valist
rest_proxy_set_user_agent
rest_proxy_get_user_agent
+rest_proxy_add_soup_feature
rest_proxy_new_call
rest_proxy_simple_run
rest_proxy_simple_run_valist
diff --git a/rest/rest-proxy.c b/rest/rest-proxy.c
index ba0d515..a38ed05 100644
--- a/rest/rest-proxy.c
+++ b/rest/rest-proxy.c
@@ -561,6 +561,42 @@ rest_proxy_get_user_agent (RestProxy *proxy)
return priv->user_agent;
}
+/**
+ * rest_proxy_add_soup_feature:
+ * @proxy: The #RestProxy
+ * @feature: A #SoupSessionFeature
+ *
+ * This method can be used to add specific features to the #SoupSession objects
+ * that are used by librest for its HTTP connections. For example, if one needs
+ * extensive control over the cookies which are used for the REST HTTP
+ * communication, it's possible to get full access to libsoup cookie API by
+ * using
+ *
+ * <programlisting>
+ * RestProxy *proxy = g_object_new(REST_TYPE_PROXY,
+ * "url-format", url,
+ * "disable-cookies", TRUE,
+ * NULL);
+ * SoupSessionFeature *cookie_jar = SOUP_SESSION_FEATURE(soup_cookie_jar_new ());
+ * rest_proxy_add_soup_feature(proxy, cookie_jar);
+ * </programlisting>
+ *
+ * Since: 0.7.92
+ */
+void
+rest_proxy_add_soup_feature (RestProxy *proxy, SoupSessionFeature *feature)
+{
+ RestProxyPrivate *priv;
+
+ g_return_if_fail (REST_IS_PROXY(proxy));
+ priv = GET_PRIVATE (proxy);
+ g_return_if_fail (priv->session != NULL);
+ g_return_if_fail (priv->session_sync != NULL);
+
+ soup_session_add_feature (priv->session, feature);
+ soup_session_add_feature (priv->session_sync, feature);
+}
+
static RestProxyCall *
_rest_proxy_new_call (RestProxy *proxy)
{
diff --git a/rest/rest-proxy.h b/rest/rest-proxy.h
index 9c60189..10beb6b 100644
--- a/rest/rest-proxy.h
+++ b/rest/rest-proxy.h
@@ -24,6 +24,7 @@
#define _REST_PROXY
#include <glib-object.h>
+#include <libsoup/soup-session-feature.h>
#include <rest/rest-proxy-auth.h>
#include <rest/rest-proxy-call.h>
@@ -157,6 +158,9 @@ void rest_proxy_set_user_agent (RestProxy *proxy, const char *user_agent);
const gchar *rest_proxy_get_user_agent (RestProxy *proxy);
+void rest_proxy_add_soup_feature (RestProxy *proxy,
+ SoupSessionFeature *feature);
+
RestProxyCall *rest_proxy_new_call (RestProxy *proxy);
G_GNUC_NULL_TERMINATED