gvfs r1106 - in trunk: . daemon



Author: danw
Date: Fri Jan 11 20:07:49 2008
New Revision: 1106
URL: http://svn.gnome.org/viewvc/gvfs?rev=1106&view=rev

Log:
	* daemon/gvfsbackendhttp.c (g_vfs_backend_http_finalize): cleanup
	(g_vfs_backend_http_init): move session creation here. Don't
	explicitly set ASYNC_CONTEXT to g_main_context_default() because
	that trips up SoupInputStream.
	(uri_for_filename): create a SoupUri corresponding to a filename.
	In particular, "/" corresponds to mount_base, not the result of
	combining mount_base with "/".
	(try_open_for_read): use uri_for_filename, free the result.


Modified:
   trunk/ChangeLog
   trunk/daemon/gvfsbackendhttp.c

Modified: trunk/daemon/gvfsbackendhttp.c
==============================================================================
--- trunk/daemon/gvfsbackendhttp.c	(original)
+++ trunk/daemon/gvfsbackendhttp.c	Fri Jan 11 20:07:49 2008
@@ -70,6 +70,12 @@
 
   backend = G_VFS_BACKEND_HTTP (object);
 
+  if (backend->mount_base)
+    soup_uri_free (backend->mount_base);
+
+  soup_session_abort (backend->session);
+  g_object_unref (backend->session);
+
   if (G_OBJECT_CLASS (g_vfs_backend_http_parent_class)->finalize)
     (*G_OBJECT_CLASS (g_vfs_backend_http_parent_class)->finalize) (object);
 }
@@ -77,7 +83,9 @@
 static void
 g_vfs_backend_http_init (GVfsBackendHttp *backend)
 {
-  g_vfs_backend_set_user_visible (backend, FALSE);  
+  g_vfs_backend_set_user_visible (G_VFS_BACKEND (backend), FALSE);  
+
+  backend->session = soup_session_async_new ();
 }
 
 static gboolean
@@ -90,7 +98,7 @@
   GVfsBackendHttp *op_backend;
   const char      *uri_str;
   SoupUri         *uri;
-  GMountSpec *real_mount_spec;
+  GMountSpec      *real_mount_spec;
 
   op_backend = G_VFS_BACKEND_HTTP (backend);
 
@@ -116,9 +124,6 @@
   
   op_backend->mount_base = uri;
 
-  op_backend->session = soup_session_async_new_with_options (SOUP_SESSION_ASYNC_CONTEXT,
-                                                             g_main_context_default (),
-                                                             NULL);
   g_vfs_job_succeeded (G_VFS_JOB (job));
   return TRUE;
 }
@@ -161,6 +166,28 @@
   g_vfs_job_succeeded (job);
 }
 
+static SoupUri *
+uri_for_filename (GVfsBackendHttp *op_backend, const char *filename)
+{
+  SoupUri *uri;
+  char *path;
+
+  uri = soup_uri_copy (op_backend->mount_base);
+
+  /* "/" means "whatever mount_base is" */
+  if (!strcmp (filename, "/"))
+    return uri;
+
+  /* Otherwise, we append filename to mount_base (which is assumed to
+   * be a directory in this case).
+   */
+  path = g_build_filename (uri->path, filename, NULL);
+  g_free (uri->path);
+  uri->path = path;
+
+  return uri;
+}
+
 static gboolean 
 try_open_for_read (GVfsBackend        *backend,
                    GVfsJobOpenForRead *job,
@@ -172,9 +199,10 @@
   SoupMessage     *msg;
 
   op_backend = G_VFS_BACKEND_HTTP (backend);
-  uri = soup_uri_new_with_base (op_backend->mount_base, filename);
+  uri = uri_for_filename (op_backend, filename);
 
   msg = soup_message_new_from_uri (SOUP_METHOD_GET, uri);
+  soup_uri_free (uri);
   soup_message_add_header (msg->request_headers, "User-Agent", "gvfs/" VERSION);
 
   stream = soup_input_stream_new (op_backend->session, msg);



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