summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--addressbook/ChangeLog12
-rw-r--r--addressbook/backends/google/google-book.c45
-rw-r--r--addressbook/backends/webdav/e-book-backend-webdav.c24
-rw-r--r--calendar/ChangeLog14
-rw-r--r--calendar/backends/caldav/e-cal-backend-caldav.c95
-rw-r--r--calendar/backends/google/e-cal-backend-google.c9
-rw-r--r--calendar/backends/http/e-cal-backend-http.c60
-rw-r--r--libedataserver/e-proxy.c404
-rw-r--r--libedataserver/e-proxy.h2
-rw-r--r--servers/exchange/ChangeLog7
-rw-r--r--servers/exchange/lib/e2k-context.c4
-rw-r--r--servers/groupwise/ChangeLog7
-rw-r--r--servers/groupwise/e-gw-connection.c2
14 files changed, 441 insertions, 253 deletions
diff --git a/ChangeLog b/ChangeLog
index fa0a5c01d..1d4bae805 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-02-09 Milan Crha <mcrha@redhat.com>
+
+ ** Fix for bug #555888
+
+ * libedataserver/e-proxy.h:
+ * libedataserver/e-proxy.c:
+ Read system proxy setting directly and listen to their changes.
+ EProxy API changed, use e_proxy_peek_uri_for now.
+
2009-02-05 Suman Manjunath <msuman@novell.com>
* configure.in: Expose the right CFLAGS for libical headers. We want
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index e739f58ee..b9d7dc70e 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,15 @@
+2009-02-09 Milan Crha <mcrha@redhat.com>
+
+ ** Part of fix for bug #555888
+
+ * backends/webdav/e-book-backend-webdav.c:
+ (struct _EBookBackendWebdavPrivate), (proxy_settings_changed),
+ (e_book_backend_webdav_load_source), (e_book_backend_webdav_dispose):
+ * backends/google/google-book.c (struct _GoogleBookPrivate),
+ (google_book_dispose), (proxy_settings_changed),
+ (google_book_connect_to_google), (google_book_set_offline_mode):
+ Use proxy configurable within Evolution.
+
2009-01-11 Matthew Barnes <mbarnes@redhat.com>
** Fixes part of bug #567384
diff --git a/addressbook/backends/google/google-book.c b/addressbook/backends/google/google-book.c
index 41c3cddc7..26cf4cc27 100644
--- a/addressbook/backends/google/google-book.c
+++ b/addressbook/backends/google/google-book.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <libedata-book/e-book-backend-cache.h>
+#include <libedataserver/e-proxy.h>
#include <gdata-service-iface.h>
#include <gdata-google-service.h>
@@ -79,6 +80,7 @@ struct _GoogleBookPrivate
gboolean offline;
GDataService *service;
+ EProxy *proxy;
guint refresh_interval;
char *base_uri;
/* FIXME - this one should not be needed */
@@ -533,6 +535,10 @@ google_book_dispose (GObject *object)
g_object_unref (priv->service);
priv->service = NULL;
}
+ if (priv->proxy) {
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
+ }
google_book_cache_destroy (GOOGLE_BOOK (object));
if (G_OBJECT_CLASS (google_book_parent_class)->dispose)
@@ -726,6 +732,22 @@ google_book_new (const char *username, gboolean use_cache)
NULL);
}
+static void
+proxy_settings_changed (EProxy *proxy, gpointer user_data)
+{
+ SoupURI *proxy_uri = NULL;
+
+ GoogleBookPrivate *priv = (GoogleBookPrivate*) user_data;
+ if (!priv || !priv->base_uri)
+ return;
+
+ /* use proxy if necessary */
+ if (e_proxy_require_proxy_for_uri (proxy, priv->base_uri)) {
+ proxy_uri = e_proxy_peek_uri_for (proxy, priv->base_uri);
+ }
+ gdata_service_set_proxy (GDATA_SERVICE (priv->service), proxy_uri);
+}
+
gboolean
google_book_connect_to_google (GoogleBook *book, const char *password, GError **error)
{
@@ -745,6 +767,12 @@ google_book_connect_to_google (GoogleBook *book, const char *password, GError **
}
service = (GDataService*)gdata_google_service_new ("cp", "evolution-client-0.0.1");
+ priv->proxy = e_proxy_new ();
+ e_proxy_setup_proxy (priv->proxy);
+ priv->service = service;
+ proxy_settings_changed (priv->proxy, priv);
+ priv->service = NULL;
+
gdata_service_set_credentials (GDATA_SERVICE (service), priv->username, password);
gdata_google_service_authenticate (GDATA_GOOGLE_SERVICE (service), &soup_error);
@@ -752,8 +780,13 @@ google_book_connect_to_google (GoogleBook *book, const char *password, GError **
google_book_error_from_soup_error (soup_error, error,
"Connecting to google failed");
priv->service = NULL;
+ g_object_unref (service);
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
return FALSE;
}
+
+ g_signal_connect (priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), priv);
priv->service = service;
return google_book_cache_refresh_if_needed (book, error);
@@ -770,9 +803,15 @@ google_book_set_offline_mode (GoogleBook *book, gboolean offline)
priv = GET_PRIVATE (book);
priv->offline = offline;
- if (offline && priv->service) {
- g_object_unref (priv->service);
- priv->service = NULL;
+ if (offline) {
+ if (priv->service) {
+ g_object_unref (priv->service);
+ priv->service = NULL;
+ }
+ if (priv->proxy) {
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
+ }
}
if (offline == FALSE) {
if (priv->service) {
diff --git a/addressbook/backends/webdav/e-book-backend-webdav.c b/addressbook/backends/webdav/e-book-backend-webdav.c
index 75cd134cd..7902057f7 100644
--- a/addressbook/backends/webdav/e-book-backend-webdav.c
+++ b/addressbook/backends/webdav/e-book-backend-webdav.c
@@ -34,6 +34,7 @@
#include <libedataserver/e-url.h>
#include <libedataserver/e-flag.h>
+#include <libedataserver/e-proxy.h>
#include <libebook/e-contact.h>
#include <libebook/e-address-western.h>
@@ -60,6 +61,7 @@ struct _EBookBackendWebdavPrivate {
int mode;
gboolean marked_for_offline;
SoupSession *session;
+ EProxy *proxy;
gchar *uri;
char *username;
char *password;
@@ -960,6 +962,23 @@ static void soup_authenticate(SoupSession *session, SoupMessage *message,
}
}
+static void
+proxy_settings_changed (EProxy *proxy, gpointer user_data)
+{
+ SoupURI *proxy_uri = NULL;
+ EBookBackendWebdavPrivate *priv = (EBookBackendWebdavPrivate *) user_data;
+
+ if (!priv || !priv->uri || !priv->session)
+ return;
+
+ /* use proxy if necessary */
+ if (e_proxy_require_proxy_for_uri (proxy, priv->uri)) {
+ proxy_uri = e_proxy_peek_uri_for (proxy, priv->uri);
+ }
+
+ g_object_set (priv->session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
+}
+
static GNOME_Evolution_Addressbook_CallStatus
e_book_backend_webdav_load_source(EBookBackend *backend,
ESource *source, gboolean only_if_exists)
@@ -1017,6 +1036,10 @@ e_book_backend_webdav_load_source(EBookBackend *backend,
webdav);
priv->session = session;
+ priv->proxy = e_proxy_new ();
+ e_proxy_setup_proxy (priv->proxy);
+ g_signal_connect (priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), priv);
+ proxy_settings_changed (priv->proxy, priv);
e_book_backend_notify_auth_required(backend);
e_book_backend_set_is_loaded(backend, TRUE);
@@ -1092,6 +1115,7 @@ e_book_backend_webdav_dispose(GObject *object)
EBookBackendWebdavPrivate *priv = webdav->priv;
g_object_unref(priv->session);
+ g_object_unref (priv->proxy);
g_object_unref(priv->cache);
g_free(priv->uri);
g_free(priv->username);
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 7ec250236..e67371e37 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,17 @@
+2009-02-09 Milan Crha <mcrha@redhat.com>
+
+ ** Part of fix for bug #555888
+
+ * backends/http/e-cal-backend-http.c: (begin_retrieval_cb):
+ * backends/caldav/e-cal-backend-caldav.c: (proxy_settings_changed),
+ (caldav_do_open), (e_cal_backend_caldav_dispose),
+ (e_cal_backend_caldav_init):
+ Use proxy configurable within Evolution.
+
+ * backends/google/e-cal-backend-google.c: (proxy_settings_changed),
+ (e_cal_backend_google_set_uri):
+ EProxy API changed, use e_proxy_peek_uri_for now.
+
2009-02-05 Suman Manjunath <msuman@novell.com>
** Fix for bug #569459
diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c
index 45a82f725..2fe886b58 100644
--- a/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -28,6 +28,7 @@
#include <gconf/gconf-client.h>
#include <glib/gi18n-lib.h>
#include "libedataserver/e-xml-hash-utils.h"
+#include "libedataserver/e-proxy.h"
#include <libecal/e-cal-recur.h>
#include <libecal/e-cal-util.h>
#include <libecal/e-cal-time-util.h>
@@ -91,6 +92,7 @@ struct _ECalBackendCalDAVPrivate {
/* The main soup session */
SoupSession *session;
+ EProxy *proxy;
/* well, guess what */
gboolean read_only;
@@ -790,75 +792,6 @@ soup_authenticate (SoupSession *session,
soup_auth_authenticate (auth, priv->username, priv->password);
}
-static gint
-caldav_ignore_host(gconstpointer a, gconstpointer b)
-{
- gchar *hostname = (gchar*)a,
- *ignore = (gchar*)b;
-
- if (hostname && ignore)
- return strcmp(hostname, ignore);
- return -1;
-}
-
-static void
-caldav_set_session_proxy(ECalBackendCalDAVPrivate *priv)
-{
- GConfClient *conf_client;
- SoupURI *uri_base;
-
- if (priv->session == NULL)
- return;
-
- uri_base = soup_uri_new (priv->uri);
- if (uri_base == NULL)
- return;
-
- /* set the outbound HTTP proxy, if configuration is set to do so */
- conf_client = gconf_client_get_default ();
- if (gconf_client_get_bool (conf_client, "/system/http_proxy/use_http_proxy", NULL)) {
- char *server, *proxy_uri;
- int port;
- GSList *ignore = gconf_client_get_list (conf_client,
- "/system/http_proxy/ignore_hosts",
- GCONF_VALUE_STRING, NULL);
- if (ignore == NULL ||
- g_slist_find_custom(ignore, uri_base->host, caldav_ignore_host) == NULL) {
- server = gconf_client_get_string (conf_client, "/system/http_proxy/host", NULL);
- port = gconf_client_get_int (conf_client, "/system/http_proxy/port", NULL);
-
- if (server && server[0]) {
- SoupURI *suri;
- if (gconf_client_get_bool (conf_client, "/system/http_proxy/use_authentication", NULL)) {
- char *user, *password;
- user = gconf_client_get_string (conf_client,
- "/system/http_proxy/authentication_user",
- NULL);
- password = gconf_client_get_string (conf_client,
- "/system/http_proxy/authentication_password",
- NULL);
-
- proxy_uri = g_strdup_printf("http://%s:%s@%s:%d", user, password, server, port);
- g_free (user);
- g_free (password);
- } else
- proxy_uri = g_strdup_printf ("http://%s:%d", server, port);
-
- suri = soup_uri_new (proxy_uri);
- g_object_set (G_OBJECT (priv->session), SOUP_SESSION_PROXY_URI, suri, NULL);
-
- soup_uri_free (suri);
- g_free (server);
- g_free (proxy_uri);
- }
- }
- g_slist_foreach(ignore, (GFunc) g_free, NULL);
- g_slist_free(ignore);
- }
- soup_uri_free (uri_base);
-}
-
-
/* ************************************************************************* */
/* direct CalDAV server access functions */
@@ -1833,6 +1766,23 @@ out:
return result;
}
+static void
+proxy_settings_changed (EProxy *proxy, gpointer user_data)
+{
+ SoupURI *proxy_uri = NULL;
+ ECalBackendCalDAVPrivate *priv = (ECalBackendCalDAVPrivate *) user_data;
+
+ if (!priv || !priv->uri || !priv->session)
+ return;
+
+ /* use proxy if necessary */
+ if (e_proxy_require_proxy_for_uri (proxy, priv->uri)) {
+ proxy_uri = e_proxy_peek_uri_for (proxy, priv->uri);
+ }
+
+ g_object_set (priv->session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
+}
+
static ECalBackendSyncStatus
caldav_do_open (ECalBackendSync *backend,
EDataCal *cal,
@@ -1886,7 +1836,7 @@ caldav_do_open (ECalBackendSync *backend,
if (priv->mode == CAL_MODE_REMOTE) {
/* set forward proxy */
- caldav_set_session_proxy (priv);
+ proxy_settings_changed (priv->proxy, priv);
status = caldav_server_open_calendar (cbdav);
@@ -3057,6 +3007,7 @@ e_cal_backend_caldav_dispose (GObject *object)
}
g_object_unref (priv->session);
+ g_object_unref (priv->proxy);
g_free (priv->username);
g_free (priv->password);
@@ -3098,7 +3049,6 @@ e_cal_backend_caldav_finalize (GObject *object)
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
}
-
static void
e_cal_backend_caldav_init (ECalBackendCalDAV *cbdav)
{
@@ -3106,6 +3056,9 @@ e_cal_backend_caldav_init (ECalBackendCalDAV *cbdav)
priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav);
priv->session = soup_session_sync_new ();
+ priv->proxy = e_proxy_new ();
+ e_proxy_setup_proxy (priv->proxy);
+ g_signal_connect (priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), priv);
if (G_UNLIKELY (caldav_debug_show (DEBUG_MESSAGE)))
caldav_debug_setup (priv->session);
diff --git a/calendar/backends/google/e-cal-backend-google.c b/calendar/backends/google/e-cal-backend-google.c
index f92355ae6..ab98dbcfb 100644
--- a/calendar/backends/google/e-cal-backend-google.c
+++ b/calendar/backends/google/e-cal-backend-google.c
@@ -1318,7 +1318,7 @@ proxy_settings_changed (EProxy *proxy, gpointer user_data)
/* use proxy if necessary */
if (e_proxy_require_proxy_for_uri (proxy, priv->uri)) {
- proxy_uri = e_proxy_peek_uri (proxy);
+ proxy_uri = e_proxy_peek_uri_for (proxy, priv->uri);
}
gdata_service_set_proxy (GDATA_SERVICE (priv->service), proxy_uri);
}
@@ -1500,6 +1500,7 @@ void
e_cal_backend_google_set_uri (ECalBackendGoogle *cbgo, gchar *uri)
{
ECalBackendGooglePrivate *priv;
+ SoupURI *proxy_uri = NULL;
g_return_if_fail (cbgo != NULL);
g_return_if_fail (E_IS_CAL_BACKEND_GOOGLE(cbgo));
@@ -1509,10 +1510,10 @@ e_cal_backend_google_set_uri (ECalBackendGoogle *cbgo, gchar *uri)
/* use proxy if necessary */
if (e_proxy_require_proxy_for_uri (priv->proxy, priv->uri)) {
- SoupURI *proxy_uri = e_proxy_peek_uri (priv->proxy);
-
- gdata_service_set_proxy (GDATA_SERVICE (priv->service), proxy_uri);
+ proxy_uri = e_proxy_peek_uri_for (priv->proxy, priv->uri);
}
+
+ gdata_service_set_proxy (GDATA_SERVICE (priv->service), proxy_uri);
}
/**
diff --git a/calendar/backends/http/e-cal-backend-http.c b/calendar/backends/http/e-cal-backend-http.c
index 402b327c9..c88fa0937 100644
--- a/calendar/backends/http/e-cal-backend-http.c
+++ b/calendar/backends/http/e-cal-backend-http.c
@@ -27,6 +27,7 @@
#include <gconf/gconf-client.h>
#include <glib/gi18n-lib.h>
#include "libedataserver/e-xml-hash-utils.h"
+#include "libedataserver/e-proxy.h"
#include <libecal/e-cal-recur.h>
#include <libecal/e-cal-util.h>
#include <libecal/e-cal-time-util.h>
@@ -424,9 +425,18 @@ begin_retrieval_cb (ECalBackendHttp *cbhttp)
priv->is_loading = TRUE;
+ if (priv->uri == NULL) {
+ ESource *source = e_cal_backend_get_source (E_CAL_BACKEND (cbhttp));
+ const char *secure_prop = e_source_get_property (source, "use_ssl");
+
+ priv->uri = webcal_to_http_method (e_cal_backend_get_uri (E_CAL_BACKEND (cbhttp)),
+ (secure_prop && g_str_equal(secure_prop, "1")));
+ }
+
/* create the Soup session if not already created */
if (!priv->soup_session) {
- GConfClient *conf_client;
+ EProxy *proxy;
+ SoupURI *proxy_uri = NULL;
priv->soup_session = soup_session_async_new ();
@@ -434,51 +444,15 @@ begin_retrieval_cb (ECalBackendHttp *cbhttp)
G_CALLBACK (soup_authenticate), cbhttp);
/* set the HTTP proxy, if configuration is set to do so */
- conf_client = gconf_client_get_default ();
- if (gconf_client_get_bool (conf_client, "/system/http_proxy/use_http_proxy", NULL)) {
- char *server, *proxy_uri;
- int port;
-
- server = gconf_client_get_string (conf_client, "/system/http_proxy/host", NULL);
- port = gconf_client_get_int (conf_client, "/system/http_proxy/port", NULL);
-
- if (server && server[0]) {
- SoupURI *suri;
- if (gconf_client_get_bool (conf_client, "/system/http_proxy/use_authentication", NULL)) {
- char *user, *password;
-
- user = gconf_client_get_string (conf_client,
- "/system/http_proxy/authentication_user",
- NULL);
- password = gconf_client_get_string (conf_client,
- "/system/http_proxy/authentication_password",
- NULL);
-
- proxy_uri = g_strdup_printf("http://%s:%s@%s:%d", user, password, server, port);
-
- g_free (user);
- g_free (password);
- } else
- proxy_uri = g_strdup_printf ("http://%s:%d", server, port);
-
- suri = soup_uri_new (proxy_uri);
- g_object_set (G_OBJECT (priv->soup_session), SOUP_SESSION_PROXY_URI, suri, NULL);
-
- soup_uri_free (suri);
- g_free (server);
- g_free (proxy_uri);
- }
+ proxy = e_proxy_new ();
+ e_proxy_setup_proxy (proxy);
+ if (e_proxy_require_proxy_for_uri (proxy, priv->uri)) {
+ proxy_uri = e_proxy_peek_uri_for (proxy, priv->uri);
}
- g_object_unref (conf_client);
- }
-
- if (priv->uri == NULL) {
- ESource *source = e_cal_backend_get_source (E_CAL_BACKEND (cbhttp));
- const char *secure_prop = e_source_get_property (source, "use_ssl");
+ g_object_set (G_OBJECT (priv->soup_session), SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
- priv->uri = webcal_to_http_method (e_cal_backend_get_uri (E_CAL_BACKEND (cbhttp)),
- (secure_prop && g_str_equal(secure_prop, "1")));
+ g_object_unref (proxy);
}
/* create message to be sent to server */
diff --git a/libedataserver/e-proxy.c b/libedataserver/e-proxy.c
index 2dd49eaf0..839810a24 100644
--- a/libedataserver/e-proxy.c
+++ b/libedataserver/e-proxy.c
@@ -48,27 +48,55 @@
/* Debug */
#define d(x)
+enum ProxyType {
+ PROXY_TYPE_SYSTEM = 0,
+ PROXY_TYPE_NO_PROXY,
+ PROXY_TYPE_MANUAL,
+ PROXY_TYPE_AUTO_URL /* no auto-proxy at the moment */
+};
+
/* GConf paths and keys */
-#define PATH_GCONF_NETWORK_CONFIG "/apps/evolution/shell/network_config"
-#define KEY_GCONF_HTTP_PROXY_PORT (PATH_GCONF_NETWORK_CONFIG "/" "http_port")
-#define KEY_GCONF_HTTP_PROXY_HOST (PATH_GCONF_NETWORK_CONFIG "/" "http_host")
-#define KEY_GCONF_HTTPS_PROXY_PORT (PATH_GCONF_NETWORK_CONFIG "/" "secure_port")
-#define KEY_GCONF_HTTPS_PROXY_HOST (PATH_GCONF_NETWORK_CONFIG "/" "secure_host")
-#define KEY_GCONF_SOCKS_PROXY_PORT (PATH_GCONF_NETWORK_CONFIG "/" "socks_port")
-#define KEY_GCONF_SOCKS_PROXY_HOST (PATH_GCONF_NETWORK_CONFIG "/" "socks_host")
-#define KEY_GCONF_USE_HTTP_PROXY (PATH_GCONF_NETWORK_CONFIG "/" "use_http_proxy")
-#define KEY_GCONF_HTTP_AUTH_USER (PATH_GCONF_NETWORK_CONFIG "/" "authentication_user")
-#define KEY_GCONF_HTTP_AUTH_PW (PATH_GCONF_NETWORK_CONFIG "/" "authentication_password")
-#define KEY_GCONF_HTTP_USE_AUTH (PATH_GCONF_NETWORK_CONFIG "/" "use_authentication")
-
-#define KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS (PATH_GCONF_NETWORK_CONFIG "/" "ignore_hosts")
+#define PATH_GCONF_EVO_NETWORK_CONFIG "/apps/evolution/shell/network_config"
+#define KEY_GCONF_EVO_PROXY_TYPE PATH_GCONF_EVO_NETWORK_CONFIG "/proxy_type"
+
+#define KEY_GCONF_EVO_USE_HTTP_PROXY PATH_GCONF_EVO_NETWORK_CONFIG "/use_http_proxy"
+#define KEY_GCONF_EVO_HTTP_HOST PATH_GCONF_EVO_NETWORK_CONFIG "/http_host"
+#define KEY_GCONF_EVO_HTTP_PORT PATH_GCONF_EVO_NETWORK_CONFIG "/http_port"
+#define KEY_GCONF_EVO_HTTP_USE_AUTH PATH_GCONF_EVO_NETWORK_CONFIG "/use_authentication"
+#define KEY_GCONF_EVO_HTTP_AUTH_USER PATH_GCONF_EVO_NETWORK_CONFIG "/authentication_user"
+#define KEY_GCONF_EVO_HTTP_AUTH_PWD PATH_GCONF_EVO_NETWORK_CONFIG "/authentication_password"
+#define KEY_GCONF_EVO_HTTP_IGNORE_HOSTS PATH_GCONF_EVO_NETWORK_CONFIG "/ignore_hosts"
+#define KEY_GCONF_EVO_HTTPS_HOST PATH_GCONF_EVO_NETWORK_CONFIG "/secure_host"
+#define KEY_GCONF_EVO_HTTPS_PORT PATH_GCONF_EVO_NETWORK_CONFIG "/secure_port"
+#define KEY_GCONF_EVO_SOCKS_HOST PATH_GCONF_EVO_NETWORK_CONFIG "/socks_host"
+#define KEY_GCONF_EVO_SOCKS_PORT PATH_GCONF_EVO_NETWORK_CONFIG "/socks_port"
+#define KEY_GCONF_EVO_AUTOCONFIG_URL PATH_GCONF_EVO_NETWORK_CONFIG "/autoconfig_url"
+
+#define PATH_GCONF_SYS_PROXY "/system/proxy"
+#define PATH_GCONF_SYS_HTTP_PROXY "/system/http_proxy"
+
+#define KEY_GCONF_SYS_USE_HTTP_PROXY PATH_GCONF_SYS_HTTP_PROXY "/use_http_proxy"
+#define KEY_GCONF_SYS_HTTP_HOST PATH_GCONF_SYS_HTTP_PROXY "/host"
+#define KEY_GCONF_SYS_HTTP_PORT PATH_GCONF_SYS_HTTP_PROXY "/port"
+#define KEY_GCONF_SYS_HTTP_USE_AUTH PATH_GCONF_SYS_HTTP_PROXY "/use_authentication"
+#define KEY_GCONF_SYS_HTTP_AUTH_USER PATH_GCONF_SYS_HTTP_PROXY "/authentication_user"
+#define KEY_GCONF_SYS_HTTP_AUTH_PWD PATH_GCONF_SYS_HTTP_PROXY "/authentication_password"
+#define KEY_GCONF_SYS_HTTP_IGNORE_HOSTS PATH_GCONF_SYS_HTTP_PROXY "/ignore_hosts"
+#define KEY_GCONF_SYS_HTTPS_HOST PATH_GCONF_SYS_PROXY "/secure_host"
+#define KEY_GCONF_SYS_HTTPS_PORT PATH_GCONF_SYS_PROXY "/secure_port"
+#define KEY_GCONF_SYS_SOCKS_HOST PATH_GCONF_SYS_PROXY "/socks_host"
+#define KEY_GCONF_SYS_SOCKS_PORT PATH_GCONF_SYS_PROXY "/socks_port"
+#define KEY_GCONF_SYS_AUTOCONFIG_URL PATH_GCONF_SYS_PROXY "/autoconfig_url"
+
+#define RIGHT_KEY(sufix) (priv->type == PROXY_TYPE_SYSTEM ? KEY_GCONF_SYS_ ## sufix : KEY_GCONF_EVO_ ## sufix)
struct _EProxyPrivate {
- SoupURI* uri;
- guint notify_id; /* conxn id of gconf_client_notify_add */
+ SoupURI *uri_http, *uri_https;
+ guint notify_id_evo, notify_id_sys, notify_id_sys_http; /* conxn id of gconf_client_notify_add */
GSList* ign_hosts; /* List of hostnames. (Strings) */
GSList* ign_addrs; /* List of hostaddrs. (ProxyHostAddrs) */
- gboolean use_proxy; /* Is system-proxy enabled? */
+ gboolean use_proxy; /* Is our-proxy enabled? */
+ enum ProxyType type;
};
/* Enum definition is copied from gnome-vfs/modules/http-proxy.c */
@@ -158,9 +186,13 @@ e_proxy_init (EProxy *pxy, EProxyClass *klass)
pxy->priv = priv;
priv->ign_hosts = NULL;
priv->ign_addrs = NULL;
- priv->uri = NULL;
- priv->notify_id = 0;
+ priv->uri_http = NULL;
+ priv->uri_https = NULL;
+ priv->notify_id_evo = 0;
+ priv->notify_id_sys = 0;
+ priv->notify_id_sys_http = 0;
priv->use_proxy = FALSE;
+ priv->type = PROXY_TYPE_SYSTEM;
}
static void
@@ -178,13 +210,19 @@ e_proxy_dispose (GObject *object)
GConfClient* client = NULL;
if ((client = gconf_client_get_default ())) {
- if (priv->notify_id > 0)
- gconf_client_notify_remove (client, priv->notify_id);
+ if (priv->notify_id_evo > 0)
+ gconf_client_notify_remove (client, priv->notify_id_evo);
+ if (priv->notify_id_sys > 0)
+ gconf_client_notify_remove (client, priv->notify_id_sys);
+ if (priv->notify_id_sys_http > 0)
+ gconf_client_notify_remove (client, priv->notify_id_sys_http);
g_object_unref (client);
}
- if (priv->uri)
- soup_uri_free (priv->uri);
+ if (priv->uri_http)
+ soup_uri_free (priv->uri_http);
+ if (priv->uri_https)
+ soup_uri_free (priv->uri_https);
if (priv->ign_hosts) {
g_slist_foreach (priv->ign_hosts, (GFunc) ep_free_proxy_host_addr, NULL);
@@ -196,7 +234,9 @@ e_proxy_dispose (GObject *object)
g_slist_free (priv->ign_addrs);
}
- priv->notify_id = 0;
+ priv->notify_id_evo = 0;
+ priv->notify_id_sys = 0;
+ priv->notify_id_sys_http = 0;
g_free (priv);
priv = NULL;
@@ -226,7 +266,39 @@ e_proxy_get_type (void)
}
static gboolean
-ep_need_proxy (EProxy* proxy, const char* host)
+ep_is_in_ignored (EProxy *proxy, const char *host)
+{
+ EProxyPrivate *priv;
+ GSList* l;
+ gchar *hn;
+
+ g_return_val_if_fail (proxy != NULL, FALSE);
+ g_return_val_if_fail (host != NULL, FALSE);
+
+ priv = proxy->priv;
+ if (!priv->ign_hosts)
+ return FALSE;
+
+ hn = g_ascii_strdown (host, -1);
+
+ for (l = priv->ign_hosts; l; l = l->next) {
+ if (*((gchar *)l->data) == '*') {
+ if (g_str_has_suffix (hn, ((gchar *)l->data)+1)) {
+ g_free (hn);
+ return TRUE;
+ }
+ } else if (strcmp (hn, l->data) == 0) {
+ g_free (hn);
+ return TRUE;
+ }
+ }
+ g_free (hn);
+
+ return FALSE;
+}
+
+static gboolean
+ep_need_proxy_http (EProxy* proxy, const char* host)
{
SoupAddress *addr = NULL;
EProxyPrivate *priv = proxy->priv;
@@ -234,6 +306,10 @@ ep_need_proxy (EProxy* proxy, const char* host)
GSList *l;
guint status;
+ /* check for ignored first */
+ if (ep_is_in_ignored (proxy, host))
+ return FALSE;
+
addr = soup_address_new (host, 0);
status = soup_address_resolve_sync (addr, NULL);
if (status == SOUP_STATUS_OK) {
@@ -296,29 +372,20 @@ ep_need_proxy (EProxy* proxy, const char* host)
}
}
}
- } else {
- GSList* l;
- gchar* hn = g_ascii_strdown (host, -1);
-
- for (l = priv->ign_hosts; l; l = l->next) {
- if (*((gchar *)l->data) == '*') {
- if (g_str_has_suffix (hn, ((gchar *)l->data)+1)) {
- g_free (hn);
- return FALSE;
- }
- } else if (strcmp (hn, l->data) == 0) {
- g_free (hn);
- return FALSE;
- }
- }
- g_free (hn);
}
-
+
d(g_print ("%s needs a proxy to connect to internet\n", host));
return TRUE;
}
static gboolean
+ep_need_proxy_https (EProxy* proxy, const char* host)
+{
+ /* Can we share ignore list from HTTP at all? */
+ return !ep_is_in_ignored (proxy, host);
+}
+
+static gboolean
ep_manipulate_ipv4 (ProxyHostAddr *host_addr,
struct in_addr *addr_in,
gchar* netmask)
@@ -475,112 +542,169 @@ ep_parse_ignore_host (gpointer data, gpointer user_data)
g_object_unref (addr);
}
+static gboolean
+ep_change_uri (SoupURI **soup_uri, const char *uri)
+{
+ gboolean changed = FALSE;
+
+ g_return_val_if_fail (soup_uri != NULL, FALSE);
+
+ if (!uri || !*uri) {
+ if (*soup_uri) {
+ soup_uri_free (*soup_uri);
+ *soup_uri = NULL;
+ changed = TRUE;
+ }
+ } else if (*soup_uri) {
+ char *old = soup_uri_to_string (*soup_uri, FALSE);
+
+ changed = old && uri && g_ascii_strcasecmp (old, uri) != 0;
+ if (changed) {
+ soup_uri_free (*soup_uri);
+ *soup_uri = soup_uri_new (uri);
+ }
+
+ g_free (old);
+ } else {
+ *soup_uri = soup_uri_new (uri);
+ changed = TRUE;
+ }
+
+ return changed;
+}
+
static void
ep_set_proxy (GConfClient *client,
gpointer user_data,
- gboolean regen_ign_host_list,
- gboolean set_auth)
+ gboolean regen_ign_host_list)
{
- char *proxy_server = NULL, *proxy_user = NULL, *proxy_pw = NULL, *uri = NULL;
- gboolean use_auth;
- int proxy_port;
+ char *proxy_server, *uri_http = NULL, *uri_https = NULL;
+ int proxy_port, old_type;
EProxy* proxy = (EProxy *)user_data;
EProxyPrivate* priv = proxy->priv;
GSList *ignore;
-
- priv->use_proxy = gconf_client_get_bool (client, KEY_GCONF_USE_HTTP_PROXY, NULL);
- if (priv->use_proxy == FALSE) {
- if (priv->uri) {
- soup_uri_free (priv->uri);
- priv->uri = NULL;
- }
+ gboolean changed = FALSE;
+
+ old_type = priv->type;
+ priv->type = gconf_client_get_int (client, KEY_GCONF_EVO_PROXY_TYPE, NULL);
+ if (priv->type < PROXY_TYPE_SYSTEM || priv->type > PROXY_TYPE_AUTO_URL)
+ priv->type = PROXY_TYPE_SYSTEM;
+ changed = priv->type != old_type;
+
+ priv->use_proxy = gconf_client_get_bool (client, RIGHT_KEY (USE_HTTP_PROXY), NULL);
+ if (!priv->use_proxy || priv->type == PROXY_TYPE_NO_PROXY) {
+ changed = ep_change_uri (&priv->uri_http, NULL) || changed;
+ changed = ep_change_uri (&priv->uri_https, NULL) || changed;
goto emit_signal;
}
-
- proxy_server = gconf_client_get_string (client, KEY_GCONF_HTTP_PROXY_HOST, NULL);
- proxy_port = gconf_client_get_int (client, KEY_GCONF_HTTP_PROXY_PORT, NULL);
- uri = g_strdup_printf ("http://%s:%d", proxy_server, proxy_port);
- d(g_print ("ep_set_proxy: uri: %s\n", uri));
- if (regen_ign_host_list) {
+ proxy_server = gconf_client_get_string (client, RIGHT_KEY (HTTP_HOST), NULL);
+ proxy_port = gconf_client_get_int (client, RIGHT_KEY (HTTP_PORT), NULL);
+ uri_http = g_strdup_printf ("http://%s:%d", proxy_server, proxy_port);
+ g_free (proxy_server);
+ d(g_print ("ep_set_proxy: uri_http: %s\n", uri_http));
+
+ proxy_server = gconf_client_get_string (client, RIGHT_KEY (HTTPS_HOST), NULL);
+ proxy_port = gconf_client_get_int (client, RIGHT_KEY (HTTPS_PORT), NULL);
+ uri_https = g_strdup_printf ("https://%s:%d", proxy_server, proxy_port);
+ g_free (proxy_server);
+ d(g_print ("ep_set_proxy: uri_http: %s\n", uri_http));
+
+ if (regen_ign_host_list) {
if (priv->ign_hosts) {
g_slist_foreach (priv->ign_hosts, (GFunc) g_free, NULL);
g_slist_free (priv->ign_hosts);
priv->ign_hosts = NULL;
}
-
+
if (priv->ign_addrs) {
g_slist_foreach (priv->ign_addrs, (GFunc) g_free, NULL);
g_slist_free (priv->ign_addrs);
priv->ign_addrs = NULL;
}
- ignore = gconf_client_get_list (client, KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS,
- GCONF_VALUE_STRING, NULL);
+ ignore = gconf_client_get_list (client, RIGHT_KEY (HTTP_IGNORE_HOSTS), GCONF_VALUE_STRING, NULL);
if (ignore) {
g_slist_foreach (ignore, (GFunc) ep_parse_ignore_host, proxy);
- g_slist_foreach (ignore, (GFunc) g_free, NULL);
+ g_slist_foreach (ignore, (GFunc) g_free, NULL);
g_slist_free (ignore);
}
- } else if (set_auth) {
-
- use_auth = gconf_client_get_bool (client, KEY_GCONF_HTTP_USE_AUTH, NULL);
- if (use_auth == TRUE) {
- proxy_user = gconf_client_get_string (client, KEY_GCONF_HTTP_AUTH_USER, NULL);
- proxy_pw = gconf_client_get_string (client, KEY_GCONF_HTTP_AUTH_PW, NULL);
-
- if (uri)
- g_free (uri);
-
- uri = g_strdup_printf ("http://%s:%s@%s:%d", proxy_user, proxy_pw, proxy_server, proxy_port);
- }
}
- if (priv->uri) {
- soup_uri_free (priv->uri);
- priv->uri = NULL;
+ if (gconf_client_get_bool (client, RIGHT_KEY (HTTP_USE_AUTH), NULL)) {
+ char *proxy_user, *proxy_pw, *tmp;
+
+ proxy_user = gconf_client_get_string (client, RIGHT_KEY (HTTP_AUTH_USER), NULL);
+ proxy_pw = gconf_client_get_string (client, RIGHT_KEY (HTTP_AUTH_PWD), NULL);
+
+ tmp = uri_http;
+
+ uri_http = g_strdup_printf ("http://%s:%s@%s", proxy_user, proxy_pw, tmp + strlen ("http://"));
+
+ g_free (proxy_user);
+ g_free (proxy_pw);
+ g_free (tmp);
}
-
- if (uri)
- priv->uri = soup_uri_new (uri);
- d(g_print ("system-proxy: uri: %s\n", uri));
- emit_signal:
- g_signal_emit (proxy, signals[CHANGED], 0);
+ changed = ep_change_uri (&priv->uri_http, uri_http) || changed;
+ changed = ep_change_uri (&priv->uri_https, uri_https) || changed;
+ d(g_print ("system-proxy: uri_http: %s; uri_https: %s\n", uri_http ? uri_http : "[null]", uri_https ? uri_https : "[null]"));
+
+ emit_signal:
+ if (changed)
+ g_signal_emit (proxy, signals[CHANGED], 0);
- g_free (uri);
+ g_free (uri_http);
+ g_free (uri_https);
return;
}
static void
-ep_setting_changed (GConfClient *client, guint32 cnxn_id,
- GConfEntry *entry, gpointer user_data)
+ep_setting_changed (GConfClient *client, guint32 cnxn_id, GConfEntry *entry, gpointer user_data)
{
- const char *key;
- EProxy* proxy = (EProxy *)user_data;
-
- if (!proxy || !proxy->priv)
- return;
-
- key = gconf_entry_get_key(entry);
-
- if (strcmp(key, KEY_GCONF_USE_HTTP_PROXY) == 0
- || strcmp(key, KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS) == 0
- || strcmp(key, KEY_GCONF_HTTP_PROXY_HOST) == 0
- || strcmp(key, KEY_GCONF_HTTP_PROXY_PORT) == 0) {
- gboolean regen_ign_host_list = FALSE;
-
- if (strcmp(key, KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS) == 0)
- regen_ign_host_list = TRUE;
- ep_set_proxy (client, user_data, regen_ign_host_list, FALSE);
- d(g_print ("e-proxy.c:ep_settings_changed: proxy settings changed\n"));
- } else if (strcmp(key, KEY_GCONF_HTTP_AUTH_USER) == 0
- || strcmp(key, KEY_GCONF_HTTP_AUTH_PW) == 0
- || strcmp(key, KEY_GCONF_HTTP_USE_AUTH) == 0) {
- ep_set_proxy (client, user_data, FALSE, TRUE);
- d(g_print ("e-proxy.c:ep_settings_changed: auth settings changed\n"));
- }
+ const char *key;
+ EProxy* proxy = (EProxy *)user_data;
+ EProxyPrivate *priv;
+
+ if (!proxy || !proxy->priv)
+ return;
+
+ priv = proxy->priv;
+ key = gconf_entry_get_key (entry);
+
+ if (g_str_equal (key, KEY_GCONF_EVO_PROXY_TYPE)) {
+ ep_set_proxy (client, user_data, FALSE);
+ d(g_print ("e-proxy.c:ep_settings_changed: proxy type changed\n"));
+ } else if (g_str_equal (key, RIGHT_KEY (USE_HTTP_PROXY)) ||
+ g_str_equal (key, RIGHT_KEY (HTTP_IGNORE_HOSTS)) ||
+ g_str_equal (key, RIGHT_KEY (HTTP_HOST)) ||
+ g_str_equal (key, RIGHT_KEY (HTTP_PORT))) {
+ gboolean regen_ign_host_list = FALSE;
+
+ if (g_str_equal (key, RIGHT_KEY (HTTP_IGNORE_HOSTS)))
+ regen_ign_host_list = TRUE;
+
+ ep_set_proxy (client, user_data, regen_ign_host_list);
+ d(g_print ("e-proxy.c:ep_settings_changed: proxy settings changed\n"));
+ } else if (g_str_equal (key, RIGHT_KEY (HTTP_AUTH_USER)) ||
+ g_str_equal (key, RIGHT_KEY (HTTP_AUTH_PWD)) ||
+ g_str_equal (key, RIGHT_KEY (HTTP_USE_AUTH))) {
+
+ ep_set_proxy (client, user_data, FALSE);
+ d(g_print ("e-proxy.c:ep_settings_changed: auth settings changed\n"));
+ } else if (g_str_equal (key, RIGHT_KEY (HTTPS_HOST)) ||
+ g_str_equal (key, RIGHT_KEY (HTTPS_PORT))) {
+
+ ep_set_proxy (client, user_data, FALSE);
+ d(g_print ("e-proxy.c:ep_settings_changed: https\n"));
+ } else if (g_str_equal (key, RIGHT_KEY (SOCKS_HOST)) ||
+ g_str_equal (key, RIGHT_KEY (SOCKS_PORT)) ||
+ g_str_equal (key, RIGHT_KEY (AUTOCONFIG_URL))) {
+
+ /* ep_set_proxy (client, user_data, FALSE); */
+ d(g_print ("e-proxy.c:ep_settings_changed: socks/autoconf-url changed\n"));
+ }
}
EProxy*
@@ -608,27 +732,45 @@ e_proxy_setup_proxy (EProxy* proxy)
if (!proxy || !proxy->priv)
return;
- /* Listen to the changes in the evolution-shell path */
- gconf_client_add_dir (client, PATH_GCONF_NETWORK_CONFIG,
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+ if (proxy->priv->notify_id_evo == 0) {
+ /* Listen to the changes in the evolution-shell path */
+ gconf_client_add_dir (client, PATH_GCONF_EVO_NETWORK_CONFIG, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+ /* and system proxy setup changes */
+ gconf_client_add_dir (client, PATH_GCONF_SYS_PROXY, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+ gconf_client_add_dir (client, PATH_GCONF_SYS_HTTP_PROXY, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ proxy->priv->notify_id_evo = gconf_client_notify_add (client, PATH_GCONF_EVO_NETWORK_CONFIG,
+ ep_setting_changed, (gpointer)proxy,
+ NULL, NULL);
+ proxy->priv->notify_id_sys = gconf_client_notify_add (client, PATH_GCONF_SYS_PROXY,
+ ep_setting_changed, (gpointer)proxy,
+ NULL, NULL);
+ proxy->priv->notify_id_sys_http = gconf_client_notify_add (client, PATH_GCONF_SYS_HTTP_PROXY,
+ ep_setting_changed, (gpointer)proxy,
+ NULL, NULL);
+ }
- if (proxy->priv->notify_id == 0)
- proxy->priv->notify_id = gconf_client_notify_add (client, PATH_GCONF_NETWORK_CONFIG,
- ep_setting_changed, (gpointer)proxy,
- NULL, NULL);
-
- ep_set_proxy (client, proxy, TRUE, TRUE);
+ ep_set_proxy (client, proxy, TRUE);
g_object_unref (client);
}
SoupURI*
-e_proxy_peek_uri (EProxy* proxy)
+e_proxy_peek_uri_for (EProxy* proxy, const char *uri)
{
- if (!proxy || !proxy->priv)
+ SoupURI *suri;
+
+ if (!proxy || !proxy->priv || !uri || !*uri)
return NULL;
-
- return proxy->priv->uri;
+
+ suri = soup_uri_new (uri);
+ g_return_val_if_fail (suri != NULL, NULL);
+
+ if (suri->scheme == SOUP_URI_SCHEME_HTTPS) {
+ return proxy->priv->uri_https;
+ }
+
+ return proxy->priv->uri_http;
}
gboolean
@@ -640,16 +782,22 @@ e_proxy_require_proxy_for_uri (EProxy* proxy, const char* uri)
if (!uri || !proxy || !proxy->priv)
return ret;
- if (!proxy->priv->use_proxy) {
+ if (!proxy->priv->use_proxy || proxy->priv->type == PROXY_TYPE_NO_PROXY) {
d(g_print ("[%s] don't need a proxy to connect to internet\n", uri));
return ret;
}
srv_uri = soup_uri_new (uri);
-
- ret = ep_need_proxy (proxy, srv_uri->host);
- soup_uri_free (srv_uri);
+ if (srv_uri) {
+ if (srv_uri->scheme == SOUP_URI_SCHEME_HTTPS) {
+ ret = ep_need_proxy_https (proxy, srv_uri->host);
+ } else {
+ ret = ep_need_proxy_http (proxy, srv_uri->host);
+ }
+
+ soup_uri_free (srv_uri);
+ }
return ret;
}
diff --git a/libedataserver/e-proxy.h b/libedataserver/e-proxy.h
index cc137d32d..e292bede5 100644
--- a/libedataserver/e-proxy.h
+++ b/libedataserver/e-proxy.h
@@ -51,7 +51,7 @@ struct _EProxyClass {
};
EProxy* e_proxy_new (void);
-SoupURI* e_proxy_peek_uri (EProxy* proxy);
+SoupURI* e_proxy_peek_uri_for (EProxy* proxy, const char *uri);
void e_proxy_setup_proxy (EProxy* proxy);
GType e_proxy_get_type (void);
gboolean e_proxy_require_proxy_for_uri (EProxy *proxy,
diff --git a/servers/exchange/ChangeLog b/servers/exchange/ChangeLog
index 31093e25b..46cb211c7 100644
--- a/servers/exchange/ChangeLog
+++ b/servers/exchange/ChangeLog
@@ -1,3 +1,10 @@
+2009-02-09 Milan Crha <mcrha@redhat.com>
+
+ ** Part of fix for bug #555888
+
+ * lib/e2k-context.c: (proxy_settings_changed), (e2k_context_set_auth):
+ EProxy API changed, use e_proxy_peek_uri_for now.
+
2009-01-14 Matthew Barnes <mbarnes@redhat.com>
** Fixes part of bug #564543
diff --git a/servers/exchange/lib/e2k-context.c b/servers/exchange/lib/e2k-context.c
index cfc78d9a4..4b595106a 100644
--- a/servers/exchange/lib/e2k-context.c
+++ b/servers/exchange/lib/e2k-context.c
@@ -145,7 +145,7 @@ proxy_settings_changed (EProxy *proxy, gpointer user_data)
if (!e_proxy_require_proxy_for_uri (proxy, ctx->priv->owa_uri))
proxy_uri = NULL;
else
- proxy_uri = e_proxy_peek_uri (proxy);
+ proxy_uri = e_proxy_peek_uri_for (proxy, ctx->priv->owa_uri);
if (ctx->priv->session)
g_object_set (ctx->priv->session, SOUP_SESSION_PROXY_URI,
@@ -436,7 +436,7 @@ e2k_context_set_auth (E2kContext *ctx, const char *username,
/* Check do we need a proxy to contact the server? */
if (e_proxy_require_proxy_for_uri (ctx->priv->proxy, ctx->priv->owa_uri))
- uri = e_proxy_peek_uri (ctx->priv->proxy);
+ uri = e_proxy_peek_uri_for (ctx->priv->proxy, ctx->priv->owa_uri);
ctx->priv->session = soup_session_sync_new_with_options (
SOUP_SESSION_USE_NTLM, !authmech || !strcmp (authmech, "NTLM"),
diff --git a/servers/groupwise/ChangeLog b/servers/groupwise/ChangeLog
index cf9e54cee..0c395e679 100644
--- a/servers/groupwise/ChangeLog
+++ b/servers/groupwise/ChangeLog
@@ -1,3 +1,10 @@
+2009-02-09 Milan Crha <mcrha@redhat.com>
+
+ ** Part of fix for bug #555888
+
+ * e-gw-connection.c: (update_soup_session_proxy_settings):
+ EProxy API changed, use e_proxy_peek_uri_for now.
+
2009-02-04 Sankar P <psankar@novell.com>
* servers/groupwise/e-gw-connection.c:
diff --git a/servers/groupwise/e-gw-connection.c b/servers/groupwise/e-gw-connection.c
index 1fb0c8409..acd93144a 100644
--- a/servers/groupwise/e-gw-connection.c
+++ b/servers/groupwise/e-gw-connection.c
@@ -75,7 +75,7 @@ update_soup_session_proxy_settings (EProxy *proxy, SoupSession* session,
return;
if (e_proxy_require_proxy_for_uri (proxy, uri))
- proxy_uri = e_proxy_peek_uri (proxy);
+ proxy_uri = e_proxy_peek_uri_for (proxy, uri);
g_object_set (session, SOUP_SESSION_PROXY_URI,
proxy_uri, NULL);