[evolution-patches] eds proxy patch



hi,

a proxy (usign gconf) patch for eds http calendar backend
-- 
Jens Reimann <ctron dentrassi de>
http://dentrassi.de
ICQ: 119027938
--- calendar/backends/http/e-cal-backend-http.c.orig	2004-05-16 16:43:42.166997064 +0200
+++ calendar/backends/http/e-cal-backend-http.c	2004-05-16 17:34:13.822115432 +0200
@@ -35,6 +35,7 @@
 #include <libedata-cal/e-cal-backend-sexp.h>
 #include <libsoup/soup-session-async.h>
 #include <libsoup/soup-uri.h>
+#include <gconf/gconf-client.h>
 #include "e-cal-backend-http.h"
 
 
@@ -275,6 +276,101 @@
 static gboolean reload_cb                  (ECalBackendHttp *cbhttp);
 static void     maybe_start_reload_timeout (ECalBackendHttp *cbhttp);
 
+static SoupUri *
+get_proxy_uri ()
+{
+	GConfClient * conf_client = NULL;
+	SoupUri * uri = NULL;
+	gchar * uri_string = NULL;
+
+	conf_client = gconf_client_get_default ();
+
+	if ( !gconf_client_get_bool ( conf_client, "/system/http_proxy/use_http_proxy", NULL ) ) {
+		if ( conf_client )
+			g_object_unref ( conf_client );
+		return NULL;
+	}
+
+	/* create a dummy object */
+	uri = soup_uri_new ( "http://localhost"; );
+
+	if ( uri->host )
+		g_free ( uri->host );
+
+	uri->host = gconf_client_get_string ( conf_client, "/system/http_proxy/host", NULL );
+	uri->port = gconf_client_get_int ( conf_client, "/system/http_proxy/port", NULL );
+
+	if ( gconf_client_get_bool ( conf_client, "/system/http_proxy/use_authentication", NULL ) ) {
+		uri->user = gconf_client_get_string ( conf_client, "/system/http_proxy/authentication_user", NULL );
+		uri->passwd = gconf_client_get_string ( conf_client, "/system/http_proxy/authentication_password", NULL );
+	}
+
+	if ( uri )
+		uri_string = soup_uri_to_string ( uri, FALSE );
+
+	if ( uri_string ) {
+		g_message ( "Proxy URI: %s\n", uri_string );
+		g_free ( uri_string );
+		uri_string = NULL;
+	}
+
+	if ( conf_client )
+		g_object_unref ( conf_client );
+
+	return uri;
+}
+
+static void
+assign_new_proxy ( SoupSession * session, SoupUri * proxy )
+{
+	GValue * value = NULL;
+
+	value = g_value_init ( value, G_TYPE_POINTER );
+	g_value_set_pointer ( value, (gpointer)proxy );
+
+	g_object_set_property ( G_OBJECT(session), SOUP_SESSION_PROXY_URI, value );
+
+	g_value_unset ( value );
+}
+
+static void
+update_proxy ( ECalBackendHttp *cbhttp )
+{
+	if ( !cbhttp ) return;
+	if ( !cbhttp->priv ) return;
+	if ( !cbhttp->priv->soup_session ) return;
+
+	SoupUri * uri = NULL;
+
+	uri = get_proxy_uri ();
+
+	/* Note: also a NULL proxy uri is ok. It simply means: "no proxy" */
+	assign_new_proxy ( cbhttp->priv->soup_session, uri );
+
+	if ( uri )
+		soup_uri_free ( uri );
+}
+
+static SoupSession *
+create_soup_session ()
+{
+	SoupUri * proxy_uri = NULL;
+	SoupSession * soup_session = NULL;
+
+	proxy_uri = get_proxy_uri ();
+
+	if ( proxy_uri ) {
+		soup_session = soup_session_async_new_with_options ( SOUP_SESSION_PROXY_URI, proxy_uri, NULL );
+	} else {
+		soup_session = soup_session_async_new ();
+	}
+
+	if ( proxy_uri )
+		soup_uri_free ( proxy_uri );
+
+	return soup_session;
+}
+
 static gboolean
 begin_retrieval_cb (ECalBackendHttp *cbhttp)
 {
@@ -297,7 +393,12 @@
 
 	/* create the Soup session if not already created */
 	if (!priv->soup_session) {
-		priv->soup_session = soup_session_async_new ();
+		priv->soup_session = create_soup_session ();
+	} else {
+		/* this is a little bit quick and dirty. notification using gconf would
+		 * be a lot nicer. Anyway, it works!
+		 */
+		update_proxy ( cbhttp );
 	}
 
 	if (priv->uri == NULL)

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]