[evolution-data-server] Add camel_session_ref_proxy_resolver().



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]