[gvfs] dav: kill SoupOutputStream



commit ed7fd5313ca8759e162c640b3de293489e359162
Author: Dan Winship <danw gnome org>
Date:   Tue Dec 18 13:59:03 2012 +0100

    dav: kill SoupOutputStream
    
    SoupOutputStream was never particularly useful, since we ended up not
    doing chunked requests (since server support for them is mostly
    nonexistent). So kill SoupOutputStream off and just use a
    GMemoryOutputStream instead.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=687757
    
    Signed-off-by: Tomas Bzatek <tbzatek redhat com>

 daemon/Makefile.am          |    1 -
 daemon/gvfsbackenddav.c     |   64 +++----
 daemon/soup-output-stream.c |  420 -------------------------------------------
 daemon/soup-output-stream.h |   63 -------
 4 files changed, 28 insertions(+), 520 deletions(-)
---
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 52684fc..3a1f684 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -466,7 +466,6 @@ gvfsd_http_LDADD = $(libraries) $(HTTP_LIBS)
 
 gvfsd_dav_SOURCES = \
 	gvfshttpinputstream.c gvfshttpinputstream.h \
-	soup-output-stream.c soup-output-stream.h \
 	gvfsbackendhttp.c gvfsbackendhttp.h \
 	gvfsbackenddav.c gvfsbackenddav.h \
 	daemon-main.c daemon-main.h \
diff --git a/daemon/gvfsbackenddav.c b/daemon/gvfsbackenddav.c
index aa71a6d..e46536f 100644
--- a/daemon/gvfsbackenddav.c
+++ b/daemon/gvfsbackenddav.c
@@ -58,8 +58,6 @@
 #include "gvfsjobenumerate.h"
 #include "gvfsdaemonprotocol.h"
 
-#include "soup-output-stream.h"
-
 #ifdef HAVE_AVAHI
 #include "gvfsdnssdutils.h"
 #include "gvfsdnssdresolver.h"
@@ -2308,8 +2306,8 @@ try_create_tested_existence (SoupSession *session, SoupMessage *msg,
    * Doesn't work with apache > 2.2.9
    * soup_message_headers_append (put_msg->request_headers, "If-None-Match", "*");
    */
-  stream = soup_output_stream_new (op_backend->session, put_msg, -1);
-  g_object_unref (put_msg);
+  stream = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+  g_object_set_data_full (G_OBJECT (stream), "-gvfs-stream-msg", put_msg, g_object_unref);
 
   g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (job), stream);
   g_vfs_job_succeeded (job);
@@ -2324,7 +2322,7 @@ try_create (GVfsBackend *backend,
   SoupMessage *msg;
   SoupURI     *uri;
 
-  /* TODO: if SoupOutputStream supported chunked requests, we could
+  /* TODO: if we supported chunked requests, we could
    * use a PUT with "If-None-Match: *" and "Expect: 100-continue"
    */
   uri = g_vfs_backend_dav_uri_for_path (backend, filename, FALSE);
@@ -2350,8 +2348,8 @@ open_for_replace_succeeded (GVfsBackendHttp *op_backend, GVfsJob *job,
   if (etag)
     soup_message_headers_append (put_msg->request_headers, "If-Match", etag);
 
-  stream = soup_output_stream_new (op_backend->session, put_msg, -1);
-  g_object_unref (put_msg);
+  stream = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+  g_object_set_data_full (G_OBJECT (stream), "-gvfs-stream-msg", put_msg, g_object_unref);
 
   g_vfs_job_open_for_write_set_handle (G_VFS_JOB_OPEN_FOR_WRITE (job), stream);
   g_vfs_job_succeeded (job);
@@ -2482,34 +2480,17 @@ try_write (GVfsBackend *backend,
 
 /* *** close_write () *** */
 static void
-close_write_ready (GObject      *source_object,
-                   GAsyncResult *result,
-                   gpointer      user_data)
+try_close_write_sent (SoupSession *session,
+		      SoupMessage *msg,
+		      gpointer     user_data)
 {
-  GOutputStream *stream;
-  GVfsJob       *job;
-  GError        *error;
-  gboolean       res;
+  GVfsJob *job;
 
-  error = NULL;
   job = G_VFS_JOB (user_data);
-  stream = G_OUTPUT_STREAM (source_object);
-  res = g_output_stream_close_finish (stream,
-                                      result,
-                                      &error);
-  if (res == FALSE)
-    {
-      g_vfs_job_failed_literal (G_VFS_JOB (job),
-                                error->domain,
-                                error->code,
-                                error->message);
-
-      g_error_free (error);
-    }
+  if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
+    http_job_failed (job, msg);
   else
     g_vfs_job_succeeded (job);
-
-  g_object_unref (stream);
 }
 
 static gboolean
@@ -2517,15 +2498,26 @@ try_close_write (GVfsBackend *backend,
                  GVfsJobCloseWrite *job,
                  GVfsBackendHandle handle)
 {
-  GOutputStream   *stream;
+  GOutputStream *stream;
+  SoupMessage *msg;
+  gsize length;
+  gchar *data;
 
   stream = G_OUTPUT_STREAM (handle);
 
-  g_output_stream_close_async (stream,
-                               G_PRIORITY_DEFAULT,
-                               G_VFS_JOB (job)->cancellable,
-                               close_write_ready,
-                               job);
+  msg = g_object_get_data (G_OBJECT (stream), "-gvfs-stream-msg");
+  g_object_ref (msg);
+  g_object_set_data (G_OBJECT (stream), "-gvfs-stream-msg", NULL);
+
+  g_output_stream_close (stream, NULL, NULL);
+  length = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (stream));
+  data = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (stream));
+  g_object_unref (stream);
+
+  soup_message_set_request (msg, NULL,
+			    SOUP_MEMORY_TAKE, data, length);
+  soup_session_queue_message (G_VFS_BACKEND_HTTP (backend)->session_async,
+			      msg, try_close_write_sent, job);
 
   return TRUE;
 }



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