[evolution-data-server] Add camel_session_ref_proxy_resolver().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add camel_session_ref_proxy_resolver().
- Date: Fri, 27 Sep 2013 17:33:51 +0000 (UTC)
commit a33c28d8de103bd65e33b266f273d151328f3ac1
Author: Matthew Barnes <mbarnes redhat com>
Date: Fri Sep 27 12:45:06 2013 -0400
Add camel_session_ref_proxy_resolver().
Replaces camel_session_get_socks_proxy().
Returns a GProxyResolver for the given CamelService.
camel_network_connect_sync() now calls this and hands the returned
GProxyResolver off to its GSocketClient just prior to connecting.
camel/camel-network-service.c | 31 +++++-------
camel/camel-session.c | 81 ++++++++++++++++---------------
camel/camel-session.h | 15 +++---
docs/reference/camel/camel-sections.txt | 2 +-
4 files changed, 62 insertions(+), 67 deletions(-)
---
diff --git a/camel/camel-network-service.c b/camel/camel-network-service.c
index fc80fb8..7582e08 100644
--- a/camel/camel-network-service.c
+++ b/camel/camel-network-service.c
@@ -600,23 +600,19 @@ network_service_connect_sync (CamelNetworkService *service,
GSocketClient *client;
GSocketConnection *connection;
GSocketConnectable *connectable;
+ GProxyResolver *proxy_resolver;
CamelNetworkSecurityMethod method;
CamelNetworkSettings *network_settings;
+ CamelSession *session;
CamelSettings *settings;
CamelStream *stream = NULL;
-#if 0
- gchar *socks_host;
- gint socks_port;
-#endif
+ session = camel_service_ref_session (CAMEL_SERVICE (service));
settings = camel_service_ref_settings (CAMEL_SERVICE (service));
- g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
method = camel_network_settings_get_security_method (network_settings);
- g_object_unref (settings);
-
connectable = camel_network_service_ref_connectable (service);
g_return_val_if_fail (connectable != NULL, NULL);
@@ -629,6 +625,13 @@ network_service_connect_sync (CamelNetworkService *service,
if (method == CAMEL_NETWORK_SECURITY_METHOD_SSL_ON_ALTERNATE_PORT)
g_socket_client_set_tls (client, TRUE);
+ proxy_resolver = camel_session_ref_proxy_resolver (
+ session, CAMEL_SERVICE (service));
+ if (proxy_resolver != NULL) {
+ g_socket_client_set_proxy_resolver (client, proxy_resolver);
+ g_object_unref (proxy_resolver);
+ }
+
connection = g_socket_client_connect (
client, connectable, cancellable, error);
@@ -637,20 +640,12 @@ network_service_connect_sync (CamelNetworkService *service,
g_object_unref (connection);
}
-#if 0
- camel_session_get_socks_proxy (session, host, &socks_host, &socks_port);
-
- if (socks_host != NULL) {
- camel_tcp_stream_set_socks_proxy (
- CAMEL_TCP_STREAM (stream),
- socks_host, socks_port);
- g_free (socks_host);
- }
-#endif
-
g_object_unref (connectable);
g_object_unref (client);
+ g_object_unref (session);
+ g_object_unref (settings);
+
return stream;
}
diff --git a/camel/camel-session.c b/camel/camel-session.c
index 2bba415..91ab755 100644
--- a/camel/camel-session.c
+++ b/camel/camel-session.c
@@ -450,14 +450,18 @@ session_remove_service (CamelSession *session,
g_mutex_unlock (&session->priv->services_lock);
}
-static void
-session_get_socks_proxy (CamelSession *session,
- const gchar *for_host,
- gchar **host_ret,
- gint *port_ret)
+static GProxyResolver *
+session_ref_proxy_resolver (CamelSession *session,
+ CamelService *service)
{
- *host_ret = NULL;
- *port_ret = 0;
+ GProxyResolver *proxy_resolver;
+
+ proxy_resolver = g_proxy_resolver_get_default ();
+
+ if (proxy_resolver != NULL)
+ g_object_ref (proxy_resolver);
+
+ return proxy_resolver;
}
static gboolean
@@ -732,7 +736,7 @@ camel_session_class_init (CamelSessionClass *class)
class->add_service = session_add_service;
class->remove_service = session_remove_service;
- class->get_socks_proxy = session_get_socks_proxy;
+ class->ref_proxy_resolver = session_ref_proxy_resolver;
class->authenticate_sync = session_authenticate_sync;
class->forward_to_sync = session_forward_to_sync;
@@ -1363,6 +1367,35 @@ camel_session_trust_prompt (CamelSession *session,
}
/**
+ * camel_session_ref_proxy_resolver:
+ * @session: a #CamelSession
+ * @service: a #CamelService
+ *
+ * Returns the #GProxyResolver for @service.
+ *
+ * The returned #GProxyResolver is referenced for thread-safety and should
+ * be unreferenced with g_object_unref() when finished with it.
+ *
+ * Returns: a #GProxyResolver
+ *
+ * Since: 3.12
+ **/
+GProxyResolver *
+camel_session_ref_proxy_resolver (CamelSession *session,
+ CamelService *service)
+{
+ CamelSessionClass *class;
+
+ g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
+ g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
+
+ class = CAMEL_SESSION_GET_CLASS (session);
+ g_return_val_if_fail (class->ref_proxy_resolver != NULL, NULL);
+
+ return class->ref_proxy_resolver (session, service);
+}
+
+/**
* camel_session_lookup_addressbook:
*
* Since: 2.22
@@ -1760,38 +1793,6 @@ camel_session_get_junk_headers (CamelSession *session)
}
/**
- * camel_session_get_socks_proxy:
- * @session: A #CamelSession
- * @for_host: Host name to which the connection will be requested
- * @host_ret: Location to return the SOCKS proxy hostname
- * @port_ret: Location to return the SOCKS proxy port
- *
- * Queries the SOCKS proxy that is configured for a @session. This will
- * put %NULL in @hosts_ret if there is no proxy configured or when
- * the @for_host is listed in proxy ignore list.
- *
- * Since: 2.32
- */
-void
-camel_session_get_socks_proxy (CamelSession *session,
- const gchar *for_host,
- gchar **host_ret,
- gint *port_ret)
-{
- CamelSessionClass *class;
-
- g_return_if_fail (CAMEL_IS_SESSION (session));
- g_return_if_fail (for_host != NULL);
- g_return_if_fail (host_ret != NULL);
- g_return_if_fail (port_ret != NULL);
-
- class = CAMEL_SESSION_GET_CLASS (session);
- g_return_if_fail (class->get_socks_proxy != NULL);
-
- class->get_socks_proxy (session, for_host, host_ret, port_ret);
-}
-
-/**
* camel_session_authenticate_sync:
* @session: a #CamelSession
* @service: a #CamelService
diff --git a/camel/camel-session.h b/camel/camel-session.h
index 62172ba..5ef18a5 100644
--- a/camel/camel-session.h
+++ b/camel/camel-session.h
@@ -122,16 +122,15 @@ struct _CamelSessionClass {
CamelService *service,
GTlsCertificate *certificate,
GTlsCertificateFlags errors);
+ GProxyResolver *
+ (*ref_proxy_resolver) (CamelSession *session,
+ CamelService *service);
CamelFilterDriver *
(*get_filter_driver) (CamelSession *session,
const gchar *type,
GError **error);
gboolean (*lookup_addressbook) (CamelSession *session,
const gchar *name);
- void (*get_socks_proxy) (CamelSession *session,
- const gchar *for_host,
- gchar **host_ret,
- gint *port_ret);
/* Synchronous I/O Methods */
gboolean (*authenticate_sync) (CamelSession *session,
@@ -182,10 +181,6 @@ GMainContext * camel_session_ref_main_context (CamelSession *session);
const gchar * camel_session_get_user_data_dir (CamelSession *session);
const gchar * camel_session_get_user_cache_dir
(CamelSession *session);
-void camel_session_get_socks_proxy (CamelSession *session,
- const gchar *for_host,
- gchar **host_ret,
- gint *port_ret);
CamelService * camel_session_add_service (CamelSession *session,
const gchar *uid,
const gchar *protocol,
@@ -220,6 +215,10 @@ CamelCertTrust camel_session_trust_prompt (CamelSession *session,
CamelService *service,
GTlsCertificate *certificate,
GTlsCertificateFlags errors);
+GProxyResolver *
+ camel_session_ref_proxy_resolver
+ (CamelSession *session,
+ CamelService *service);
gchar * camel_session_build_password_prompt
(const gchar *type,
const gchar *user,
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index 2bf3582..ab9d63b 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -2316,7 +2316,6 @@ CamelSessionAlertType
camel_session_ref_main_context
camel_session_get_user_data_dir
camel_session_get_user_cache_dir
-camel_session_get_socks_proxy
camel_session_add_service
camel_session_remove_service
camel_session_ref_service
@@ -2327,6 +2326,7 @@ camel_session_get_password
camel_session_forget_password
camel_session_alert_user
camel_session_trust_prompt
+camel_session_ref_proxy_resolver
camel_session_build_password_prompt
camel_session_get_online
camel_session_set_online
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]