[gvfs] Revert "http: Remove use of SoupSessionSync/SoupSessionAsync"



commit 198873c067452adad337155be84d17c616d22ed5
Author: Ross Lagerwall <rosslagerwall gmail com>
Date:   Thu Jul 17 17:41:37 2014 +0100

    Revert "http: Remove use of SoupSessionSync/SoupSessionAsync"
    
    This reverts commit 4b76a7e10d76b26929425dc8a392bf0cee246b98.
    
    Reverting for now since this has concurrency with libsoup:
    https://bugzilla.gnome.org/show_bug.cgi?id=732783
    https://bugzilla.gnome.org/show_bug.cgi?id=732925

 daemon/gvfsbackenddav.c  |   17 +++++++++++------
 daemon/gvfsbackendhttp.c |   36 ++++++++++++++++++++++++++++++------
 daemon/gvfsbackendhttp.h |    2 ++
 3 files changed, 43 insertions(+), 12 deletions(-)
---
diff --git a/daemon/gvfsbackenddav.c b/daemon/gvfsbackenddav.c
index d88e4fc..42a966a 100644
--- a/daemon/gvfsbackenddav.c
+++ b/daemon/gvfsbackenddav.c
@@ -1939,6 +1939,11 @@ do_mount (GVfsBackend  *backend,
   g_object_unref (msg_opts);
   g_object_unref (msg_stat);
 
+  /* also auth the async session */
+  g_signal_connect (G_VFS_BACKEND_HTTP (backend)->session_async, "authenticate",
+                    G_CALLBACK (soup_authenticate_from_data),
+                    data);
+
   g_vfs_job_succeeded (G_VFS_JOB (job));
   g_debug ("- mount\n");
 }
@@ -2551,7 +2556,7 @@ try_close_write (GVfsBackend *backend,
 
   soup_message_set_request (msg, "application/octet-stream",
                            SOUP_MEMORY_TAKE, data, length);
-  soup_session_queue_message (G_VFS_BACKEND_HTTP (backend)->session,
+  soup_session_queue_message (G_VFS_BACKEND_HTTP (backend)->session_async,
                              msg, try_close_write_sent, job);
 
   return TRUE;
@@ -2899,7 +2904,7 @@ push_read_cb (GObject *source, GAsyncResult *res, gpointer user_data)
       soup_message_body_append_take (handle->msg->request_body, handle->buf, n);
       handle->buf = NULL;
       handle->n_read += n;
-      soup_session_unpause_message (G_VFS_BACKEND_HTTP (handle->backend)->session,
+      soup_session_unpause_message (G_VFS_BACKEND_HTTP (handle->backend)->session_async,
                                     handle->msg);
     }
   else if (n == 0)
@@ -2914,7 +2919,7 @@ push_read_cb (GObject *source, GAsyncResult *res, gpointer user_data)
                                     G_IO_ERROR_FAILED,
                                     _("File length changed during transfer"));
 
-          soup_session_cancel_message (G_VFS_BACKEND_HTTP (handle->backend)->session,
+          soup_session_cancel_message (G_VFS_BACKEND_HTTP (handle->backend)->session_async,
                                        handle->msg,
                                        SOUP_STATUS_CANCELLED);
         }
@@ -2925,7 +2930,7 @@ push_read_cb (GObject *source, GAsyncResult *res, gpointer user_data)
       handle->buf = NULL;
       g_vfs_job_failed_from_error (handle->job, error);
       g_error_free (error);
-      soup_session_cancel_message (G_VFS_BACKEND_HTTP (handle->backend)->session,
+      soup_session_cancel_message (G_VFS_BACKEND_HTTP (handle->backend)->session_async,
                                    handle->msg,
                                    SOUP_STATUS_CANCELLED);
     }
@@ -2958,7 +2963,7 @@ push_write_next_chunk (SoupMessage *msg, gpointer user_data)
         {
           g_vfs_job_failed_from_error (handle->job, error);
           g_error_free (error);
-          soup_session_cancel_message (G_VFS_BACKEND_HTTP (handle->backend)->session,
+          soup_session_cancel_message (G_VFS_BACKEND_HTTP (handle->backend)->session_async,
                                        handle->msg,
                                        SOUP_STATUS_CANCELLED);
           return;
@@ -3067,7 +3072,7 @@ push_stat_dest_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
   g_signal_connect (handle->msg, "wrote-body-data",
                     G_CALLBACK (push_wrote_body_data), handle);
 
-  soup_session_queue_message (G_VFS_BACKEND_HTTP (handle->backend)->session,
+  soup_session_queue_message (G_VFS_BACKEND_HTTP (handle->backend)->session_async,
                               handle->msg,
                               push_done, handle);
 }
diff --git a/daemon/gvfsbackendhttp.c b/daemon/gvfsbackendhttp.c
index 763b7db..963c78b 100644
--- a/daemon/gvfsbackendhttp.c
+++ b/daemon/gvfsbackendhttp.c
@@ -66,6 +66,9 @@ g_vfs_backend_http_finalize (GObject *object)
   soup_session_abort (backend->session);
   g_object_unref (backend->session);
 
+  soup_session_abort (backend->session_async);
+  g_object_unref (backend->session_async);
+
 
   if (G_OBJECT_CLASS (g_vfs_backend_http_parent_class)->finalize)
     (*G_OBJECT_CLASS (g_vfs_backend_http_parent_class)->finalize) (object);
@@ -77,24 +80,44 @@ static void
 g_vfs_backend_http_init (GVfsBackendHttp *backend)
 {
   const char         *debug;
+  SoupSessionFeature *proxy_resolver;
   SoupSessionFeature *cookie_jar;
+  SoupSessionFeature *content_decoder;
 
   g_vfs_backend_set_user_visible (G_VFS_BACKEND (backend), FALSE);
 
-  backend->session = soup_session_new_with_options ("user-agent",
-                                                    "gvfs/" VERSION,
-                                                    NULL);
+  backend->session = soup_session_sync_new_with_options ("user-agent",
+                                                         "gvfs/" VERSION,
+                                                         NULL);
+
+  backend->session_async = soup_session_async_new_with_options ("user-agent",
+                                                                "gvfs/" VERSION,
+                                                                NULL);
+  /* SoupRequester seems to depend on use-thread-context */
+  g_object_set (G_OBJECT (backend->session_async), "use-thread-context", TRUE, NULL);
 
-  g_object_set (backend->session, "ssl-strict", FALSE, NULL);
+  /* Proxy handling */
+  proxy_resolver = g_object_new (SOUP_TYPE_PROXY_RESOLVER_DEFAULT, NULL);
+  soup_session_add_feature (backend->session, proxy_resolver);
+  soup_session_add_feature (backend->session_async, proxy_resolver);
+  g_object_unref (proxy_resolver);
 
   /* Cookie handling - stored temporarlly in memory, mostly useful for
    * authentication in WebDAV. */
   cookie_jar = g_object_new (SOUP_TYPE_COOKIE_JAR, NULL);
   soup_session_add_feature (backend->session, cookie_jar);
+  soup_session_add_feature (backend->session_async, cookie_jar);
   g_object_unref (cookie_jar);
 
   /* Send Accept-Language header (see bug 166795) */
   g_object_set (backend->session, "accept-language-auto", TRUE, NULL);
+  g_object_set (backend->session_async, "accept-language-auto", TRUE, NULL);
+
+  /* Handle decompression automatically */
+  content_decoder = g_object_new (SOUP_TYPE_CONTENT_DECODER, NULL);
+  soup_session_add_feature (backend->session, content_decoder);
+  soup_session_add_feature (backend->session_async, content_decoder);
+  g_object_unref (content_decoder);
 
   /* Logging */
   debug = g_getenv ("GVFS_HTTP_DEBUG");
@@ -113,6 +136,7 @@ g_vfs_backend_http_init (GVfsBackendHttp *backend)
 
       logger = soup_logger_new (level, DEBUG_MAX_BODY_SIZE);
       soup_session_add_feature (backend->session, SOUP_SESSION_FEATURE (logger));
+      soup_session_add_feature (backend->session_async, SOUP_SESSION_FEATURE (logger));
       g_object_unref (logger);
     }
 
@@ -258,7 +282,7 @@ http_backend_queue_message (GVfsBackend         *backend,
 {
   GVfsBackendHttp *op_backend = G_VFS_BACKEND_HTTP (backend);
 
-  soup_session_queue_message (op_backend->session, msg,
+  soup_session_queue_message (op_backend->session_async, msg,
                               callback, user_data);
 }
 /* ************************************************************************* */
@@ -386,7 +410,7 @@ http_backend_open_for_read (GVfsBackend *backend,
 
   op_backend = G_VFS_BACKEND_HTTP (backend);
 
-  stream = g_vfs_http_input_stream_new (op_backend->session, uri);
+  stream = g_vfs_http_input_stream_new (op_backend->session_async, uri);
 
   g_vfs_http_input_stream_send_async (stream,
                                      G_PRIORITY_DEFAULT,
diff --git a/daemon/gvfsbackendhttp.h b/daemon/gvfsbackendhttp.h
index f132c56..8ff943c 100644
--- a/daemon/gvfsbackendhttp.h
+++ b/daemon/gvfsbackendhttp.h
@@ -51,6 +51,8 @@ struct _GVfsBackendHttp
 
   SoupURI     *mount_base;
   SoupSession *session;
+
+  SoupSession *session_async;
 };
 
 GType         g_vfs_backend_http_get_type    (void) G_GNUC_CONST;


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