summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--daemon/Makefile.am3
-rw-r--r--daemon/gvfsdaemon.c36
-rw-r--r--daemon/gvfsdaemon.h8
-rw-r--r--daemon/gvfsdaemonbackend.c38
-rw-r--r--daemon/gvfsdaemonbackend.h58
-rw-r--r--daemon/gvfsdaemonbackendtest.c42
-rw-r--r--daemon/gvfsdaemonbackendtest.h34
-rw-r--r--daemon/gvfsdaemonoperation.c85
-rw-r--r--daemon/gvfsdaemonoperation.h54
-rw-r--r--daemon/gvfsdaemonprotocol.h2
-rw-r--r--daemon/gvfsdaemontest.c69
-rw-r--r--daemon/gvfsdaemontest.h34
-rw-r--r--daemon/gvfsreadrequest.c6
-rw-r--r--daemon/gvfsreadrequest.h4
-rw-r--r--daemon/main.c13
-rw-r--r--gvfs/gunixfileinputstream.c2
17 files changed, 366 insertions, 124 deletions
diff --git a/TODO b/TODO
index 7b26d442..47a31d72 100644
--- a/TODO
+++ b/TODO
@@ -18,3 +18,5 @@ getting selinux attrs is a bit slow, it does all sort of weird ops.
Add GFilterOutput/InputStream and derivates (buffered, data, charset conversion, etc)
Make backend pluggable
+
+local file access through the daemon for remote X clients?
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index b0265c7a..eddd6491 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -17,7 +17,8 @@ noinst_PROGRAMS = \
gvfs_daemon_SOURCES = \
gvfsdaemon.c gvfsdaemon.h \
- gvfsdaemontest.c gvfsdaemontest.h \
+ gvfsdaemonbackend.c gvfsdaemonbackend.h \
+ gvfsdaemonbackendtest.c gvfsdaemonbackendtest.h \
gvfsreadrequest.c gvfsreadrequest.h \
gvfsdaemonutils.c gvfsdaemonutils.h \
dbus-gmain.h dbus-gmain.c \
diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c
index bd9a317c..5819fd1e 100644
--- a/daemon/gvfsdaemon.c
+++ b/daemon/gvfsdaemon.c
@@ -21,6 +21,7 @@ enum {
struct _GVfsDaemonPrivate
{
+ GVfsDaemonBackend *backend;
char *mountpoint;
gboolean active;
};
@@ -60,6 +61,7 @@ g_vfs_daemon_finalize (GObject *object)
daemon = G_VFS_DAEMON (object);
g_free (daemon->priv->mountpoint);
+ g_object_ref (daemon->priv->backend);
if (G_OBJECT_CLASS (g_vfs_daemon_parent_class)->finalize)
(*G_OBJECT_CLASS (g_vfs_daemon_parent_class)->finalize) (object);
@@ -188,6 +190,20 @@ g_vfs_daemon_get_property (GObject *object,
}
}
+GVfsDaemon *
+g_vfs_daemon_new (const char *mountpoint,
+ GVfsDaemonBackend *backend)
+{
+ GVfsDaemon *daemon;
+
+ daemon = g_object_new (G_TYPE_VFS_DAEMON,
+ "mountpoint", mountpoint,
+ NULL);
+ daemon->priv->backend = g_object_ref (backend);
+
+ return daemon;
+}
+
static int
send_fd (int connection_fd,
int fd)
@@ -222,9 +238,9 @@ send_fd (int connection_fd,
}
static void
-daemon_handle_read_file (GVfsDaemon *daemon,
- DBusConnection *conn,
- DBusMessage *message)
+daemon_handle_open_for_read (GVfsDaemon *daemon,
+ DBusConnection *conn,
+ DBusMessage *message)
{
GVfsDaemonClass *class;
DBusMessage *reply;
@@ -254,12 +270,8 @@ daemon_handle_read_file (GVfsDaemon *daemon,
goto reply;
}
- path = g_strndup (path_data, path_len);
-
error = NULL;
- read_request = class->read_file (daemon, path, &error);
- g_free (path);
-
+ read_request = g_vfs_read_request_new (&error);
if (read_request == NULL)
{
reply = dbus_message_new_error_from_gerror (message, error);
@@ -267,6 +279,10 @@ daemon_handle_read_file (GVfsDaemon *daemon,
}
else
{
+ path = g_strndup (path_data, path_len);
+ g_vfs_read_request_set_filename (read_request, path);
+ g_free (path);
+
reply = dbus_message_new_method_return (message);
}
@@ -647,8 +663,8 @@ daemon_message_func (DBusConnection *conn,
daemon_handle_get_connection (conn, message, daemon);
else if (dbus_message_is_method_call (message,
G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_READ_FILE))
- daemon_handle_read_file (daemon, conn, message);
+ G_VFS_DBUS_OP_OPEN_FOR_READ))
+ daemon_handle_open_for_read (daemon, conn, message);
else
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
diff --git a/daemon/gvfsdaemon.h b/daemon/gvfsdaemon.h
index f43d4224..6cae46d4 100644
--- a/daemon/gvfsdaemon.h
+++ b/daemon/gvfsdaemon.h
@@ -2,7 +2,7 @@
#define __G_VFS_DAEMON_H__
#include <glib-object.h>
-#include <gvfsreadrequest.h>
+#include <gvfsdaemonbackend.h>
G_BEGIN_DECLS
@@ -30,13 +30,13 @@ struct _GVfsDaemonClass
/* vtable */
- GVfsReadRequest * (*read_file) (GVfsDaemon *daemon,
- const char *path,
- GError **error);
};
GType g_vfs_daemon_get_type (void) G_GNUC_CONST;
+GVfsDaemon *g_vfs_daemon_new (const char *mountpoint,
+ GVfsDaemonBackend *backend);
+
gboolean g_vfs_daemon_is_active (GVfsDaemon *daemon);
G_END_DECLS
diff --git a/daemon/gvfsdaemonbackend.c b/daemon/gvfsdaemonbackend.c
new file mode 100644
index 00000000..114e115a
--- /dev/null
+++ b/daemon/gvfsdaemonbackend.c
@@ -0,0 +1,38 @@
+#include <config.h>
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <glib.h>
+#include <dbus/dbus.h>
+#include <glib/gi18n.h>
+#include "gvfsdaemonbackend.h"
+
+G_DEFINE_TYPE (GVfsDaemonBackend, g_vfs_daemon_backend, G_TYPE_OBJECT);
+
+static void
+g_vfs_daemon_backend_finalize (GObject *object)
+{
+ GVfsDaemonBackend *daemon;
+
+ daemon = G_VFS_DAEMON_BACKEND (object);
+
+ if (G_OBJECT_CLASS (g_vfs_daemon_backend_parent_class)->finalize)
+ (*G_OBJECT_CLASS (g_vfs_daemon_backend_parent_class)->finalize) (object);
+}
+
+static void
+g_vfs_daemon_backend_class_init (GVfsDaemonBackendClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = g_vfs_daemon_backend_finalize;
+}
+
+static void
+g_vfs_daemon_backend_init (GVfsDaemonBackend *daemon)
+{
+}
+
diff --git a/daemon/gvfsdaemonbackend.h b/daemon/gvfsdaemonbackend.h
new file mode 100644
index 00000000..c5608bf8
--- /dev/null
+++ b/daemon/gvfsdaemonbackend.h
@@ -0,0 +1,58 @@
+#ifndef __G_VFS_DAEMON_BACKEND_H__
+#define __G_VFS_DAEMON_BACKEND_H__
+
+#include <gvfsdaemonoperation.h>
+#include <gvfs/gvfstypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_VFS_DAEMON_BACKEND (g_vfs_daemon_backend_get_type ())
+#define G_VFS_DAEMON_BACKEND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS_DAEMON_BACKEND, GVfsDaemonBackend))
+#define G_VFS_DAEMON_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS_DAEMON_BACKEND, GVfsDaemonBackendClass))
+#define G_IS_VFS_DAEMON_BACKEND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS_DAEMON_BACKEND))
+#define G_IS_VFS_DAEMON_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS_DAEMON_BACKEND))
+#define G_VFS_DAEMON_BACKEND_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS_DAEMON_BACKEND, GVfsDaemonBackendClass))
+
+typedef struct _GVfsDaemonBackend GVfsDaemonBackend;
+typedef struct _GVfsDaemonBackendClass GVfsDaemonBackendClass;
+
+typedef gpointer GVfsHandle;
+
+struct _GVfsDaemonBackend
+{
+ GObject parent_instance;
+};
+
+struct _GVfsDaemonBackendClass
+{
+ GObjectClass parent_class;
+
+ /* vtable */
+
+ /* These should all be fast and non-blocking, scheduling the i/o
+ * operations async (or on a thread).
+ * Returning FALSE means "Can't do this right now, try later"
+ * Returning TRUE means you started the job and will set the
+ * result (or error) on the opernation object when done.
+ * A NULL here means operation not supported
+ */
+
+ gboolean (*open_for_read) (GVfsDaemonBackend *backend,
+ GVfsDaemonOperationOpenForRead *op,
+ char *filename);
+ gboolean (*read) (GVfsDaemonBackend *backend,
+ GVfsDaemonOperationRead *op,
+ GVfsHandle *handle,
+ gsize count);
+ gboolean (*seek_on_read) (GVfsDaemonBackend *backend,
+ GVfsDaemonOperationReadSeek *op,
+ GVfsHandle *handle,
+ goffset offset,
+ GSeekType type);
+};
+
+GType g_vfs_daemon_backend_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __G_VFS_DAEMON_BACKEND_H__ */
diff --git a/daemon/gvfsdaemonbackendtest.c b/daemon/gvfsdaemonbackendtest.c
new file mode 100644
index 00000000..3205c945
--- /dev/null
+++ b/daemon/gvfsdaemonbackendtest.c
@@ -0,0 +1,42 @@
+#include <config.h>
+
+#include "gvfsdaemonbackendtest.h"
+
+G_DEFINE_TYPE (GVfsDaemonBackendTest, g_vfs_daemon_backend_test, G_TYPE_VFS_DAEMON_BACKEND);
+
+static void
+g_vfs_daemon_backend_test_finalize (GObject *object)
+{
+ GVfsDaemonBackendTest *daemon;
+
+ daemon = G_VFS_DAEMON_BACKEND_TEST (object);
+
+ if (G_OBJECT_CLASS (g_vfs_daemon_backend_test_parent_class)->finalize)
+ (*G_OBJECT_CLASS (g_vfs_daemon_backend_test_parent_class)->finalize) (object);
+}
+
+static void
+g_vfs_daemon_backend_test_class_init (GVfsDaemonBackendTestClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ //GVfsDaemonBackendClass *backend_class = G_VFS_DAEMON_BACKEND_CLASS (klass);
+
+ gobject_class->finalize = g_vfs_daemon_backend_test_finalize;
+
+ //backend_class->open_for_read = open_for_read;
+}
+
+static void
+g_vfs_daemon_backend_test_init (GVfsDaemonBackendTest *daemon)
+{
+}
+
+GVfsDaemonBackendTest *
+g_vfs_daemon_backend_test_new (void)
+{
+ GVfsDaemonBackendTest *backend;
+ backend = g_object_new (G_TYPE_VFS_DAEMON_BACKEND_TEST,
+ NULL);
+ return backend;
+}
+
diff --git a/daemon/gvfsdaemonbackendtest.h b/daemon/gvfsdaemonbackendtest.h
new file mode 100644
index 00000000..4210f2d9
--- /dev/null
+++ b/daemon/gvfsdaemonbackendtest.h
@@ -0,0 +1,34 @@
+#ifndef __G_VFS_DAEMON_BACKEND_TEST_H__
+#define __G_VFS_DAEMON_BACKEND_TEST_H__
+
+#include <gvfsdaemonbackend.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_VFS_DAEMON_BACKEND_TEST (g_vfs_daemon_backend_test_get_type ())
+#define G_VFS_DAEMON_BACKEND_TEST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS_DAEMON_BACKEND_TEST, GVfsDaemonBackendTest))
+#define G_VFS_DAEMON_BACKEND_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS_DAEMON_BACKEND_TEST, GVfsDaemonBackendTestClass))
+#define G_IS_VFS_DAEMON_BACKEND_TEST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS_DAEMON_BACKEND_TEST))
+#define G_IS_VFS_DAEMON_BACKEND_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS_DAEMON_BACKEND_TEST))
+#define G_VFS_DAEMON_BACKEND_TEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS_DAEMON_BACKEND_TEST, GVfsDaemonBackendTestClass))
+
+typedef struct _GVfsDaemonBackendTest GVfsDaemonBackendTest;
+typedef struct _GVfsDaemonBackendTestClass GVfsDaemonBackendTestClass;
+
+struct _GVfsDaemonBackendTest
+{
+ GVfsDaemonBackend parent_instance;
+};
+
+struct _GVfsDaemonBackendTestClass
+{
+ GVfsDaemonBackendClass parent_class;
+};
+
+GType g_vfs_daemon_backend_test_get_type (void) G_GNUC_CONST;
+
+GVfsDaemonBackendTest *g_vfs_daemon_backend_test_new (void);
+
+G_END_DECLS
+
+#endif /* __G_VFS_DAEMON_BACKEND_TEST_H__ */
diff --git a/daemon/gvfsdaemonoperation.c b/daemon/gvfsdaemonoperation.c
new file mode 100644
index 00000000..8fb1bb40
--- /dev/null
+++ b/daemon/gvfsdaemonoperation.c
@@ -0,0 +1,85 @@
+#include <config.h>
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <glib.h>
+#include <dbus/dbus.h>
+#include <glib/gi18n.h>
+#include "gvfsdaemonoperation.h"
+
+G_DEFINE_TYPE (GVfsDaemonOperation, g_vfs_daemon_operation, G_TYPE_VFS_DAEMON);
+
+enum {
+ CANCEL,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void
+g_vfs_daemon_operation_finalize (GObject *object)
+{
+ GVfsDaemonOperation *daemon;
+
+ daemon = G_VFS_DAEMON_OPERATION (object);
+
+ if (daemon->error)
+ g_error_free (daemon->error);
+
+ if (G_OBJECT_CLASS (g_vfs_daemon_operation_parent_class)->finalize)
+ (*G_OBJECT_CLASS (g_vfs_daemon_operation_parent_class)->finalize) (object);
+}
+
+static void
+g_vfs_daemon_operation_class_init (GVfsDaemonOperationClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GVfsDaemonClass *daemon_class = G_VFS_DAEMON_CLASS (klass);
+
+ gobject_class->finalize = g_vfs_daemon_operation_finalize;
+
+ signals[CANCEL] =
+ g_signal_new (I_("done"),
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GVfsDaemonOperation, cancel),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+}
+
+static void
+g_vfs_daemon_operation_init (GVfsDaemonOperation *daemon)
+{
+}
+
+GVfsDaemonOperationKind
+g_vfs_daemon_operation_get_kind (GVfsDaemonOperation *op)
+{
+ return op->kind;
+}
+
+void
+g_vfs_daemon_operation_cancel (GVfsDaemonOperation *op)
+{
+ if (op->cancelled)
+ return;
+
+ op->cancelled = TRUE;
+ g_signal_emit (op, signals[CANCEL], 0);
+}
+
+void
+g_vfs_daemon_operation_set_failed (GVfsDaemonOperation *op,
+ GError *error)
+{
+ if (op->failed)
+ return;
+
+ op->failed = TRUE;
+ op->error = g_error_copy (error);
+}
diff --git a/daemon/gvfsdaemonoperation.h b/daemon/gvfsdaemonoperation.h
new file mode 100644
index 00000000..2a92c93d
--- /dev/null
+++ b/daemon/gvfsdaemonoperation.h
@@ -0,0 +1,54 @@
+#ifndef __G_VFS_DAEMON_OPERATION_H__
+#define __G_VFS_DAEMON_OPERATION_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_VFS_DAEMON_OPERATION (g_vfs_daemon_operation_get_type ())
+#define G_VFS_DAEMON_OPERATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS_DAEMON_OPERATION, GVfsDaemonOperation))
+#define G_VFS_DAEMON_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS_DAEMON_OPERATION, GVfsDaemonOperationClass))
+#define G_IS_VFS_DAEMON_OPERATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS_DAEMON_OPERATION))
+#define G_IS_VFS_DAEMON_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS_DAEMON_OPERATION))
+#define G_VFS_DAEMON_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS_DAEMON_OPERATION, GVfsDaemonOperationClass))
+
+typedef struct _GVfsDaemonOperation GVfsDaemonOperation;
+typedef struct _GVfsDaemonOperationClass GVfsDaemonOperationClass;
+
+/* Temp typedefs */
+typedef GVfsDaemonOperation GVfsDaemonOperationOpenForRead;
+typedef GVfsDaemonOperation GVfsDaemonOperationRead;
+typedef GVfsDaemonOperation GVfsDaemonOperationReadSeek;
+
+struct _GVfsDaemonOperation
+{
+ GObject parent_instance;
+
+ guint failed : 1;
+ guint cancelled : 1;
+ GError *error;
+};
+
+struct _GVfsDaemonOperationClass
+{
+ GObjectClass parent_class;
+
+ /* signals */
+ void (*cancel) (GVfsDaemonOperation *op);
+ void (*finished) (GVfsDaemonOperation *op);
+
+ /* vtable */
+
+ gboolean (*start) (GVfsDaemonOperation *op);
+
+};
+
+GType g_vfs_daemon_operation_get_type (void) G_GNUC_CONST;
+
+void g_vfs_daemon_operation_cancel (GVfsDaemonOperation *op);
+void g_vfs_daemon_operation_set_failed (GVfsDaemonOperation *op,
+ GError *error);
+
+G_END_DECLS
+
+#endif /* __G_VFS_DAEMON_OPERATION_H__ */
diff --git a/daemon/gvfsdaemonprotocol.h b/daemon/gvfsdaemonprotocol.h
index c766b9cb..6232db82 100644
--- a/daemon/gvfsdaemonprotocol.h
+++ b/daemon/gvfsdaemonprotocol.h
@@ -9,7 +9,7 @@ G_BEGIN_DECLS
#define G_VFS_DBUS_DAEMON_PATH "/org/gtk/vfs/Daemon"
#define G_VFS_DBUS_DAEMON_INTERFACE "org.gtk.vfs.Daemon"
#define G_VFS_DBUS_OP_GET_CONNECTION "GetConnection"
-#define G_VFS_DBUS_OP_READ_FILE "ReadFile"
+#define G_VFS_DBUS_OP_OPEN_FOR_READ "OpenForRead"
G_END_DECLS
diff --git a/daemon/gvfsdaemontest.c b/daemon/gvfsdaemontest.c
deleted file mode 100644
index 46e867ef..00000000
--- a/daemon/gvfsdaemontest.c
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <config.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <glib.h>
-#include <dbus/dbus.h>
-#include "gvfsdaemontest.h"
-
-G_DEFINE_TYPE (GVfsDaemonTest, g_vfs_daemon_test, G_TYPE_VFS_DAEMON);
-
-static GVfsReadRequest * read_file (GVfsDaemon *daemon,
- const char *path,
- GError **error);
-
-
-static void
-g_vfs_daemon_test_finalize (GObject *object)
-{
- GVfsDaemonTest *daemon;
-
- daemon = G_VFS_DAEMON_TEST (object);
-
- if (G_OBJECT_CLASS (g_vfs_daemon_test_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_daemon_test_parent_class)->finalize) (object);
-}
-
-static void
-g_vfs_daemon_test_class_init (GVfsDaemonTestClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GVfsDaemonClass *daemon_class = G_VFS_DAEMON_CLASS (klass);
-
- gobject_class->finalize = g_vfs_daemon_test_finalize;
-
- daemon_class->read_file = read_file;
-}
-
-static void
-g_vfs_daemon_test_init (GVfsDaemonTest *daemon)
-{
-}
-
-GVfsDaemonTest *
-g_vfs_daemon_test_new (const char *mountpoint)
-{
- GVfsDaemonTest *daemon;
-
- daemon = g_object_new (G_TYPE_VFS_DAEMON_TEST,
- "mountpoint", mountpoint,
- NULL);
-
- return daemon;
-}
-
-static GVfsReadRequest *
-read_file (GVfsDaemon *daemon,
- const char *path,
- GError **error)
-{
- GVfsReadRequest *read_request;
-
- g_print ("read_file: %s\n", path);
-
- read_request = g_vfs_read_request_new (error);
- return read_request;
-}
diff --git a/daemon/gvfsdaemontest.h b/daemon/gvfsdaemontest.h
deleted file mode 100644
index 19e601c3..00000000
--- a/daemon/gvfsdaemontest.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __G_VFS_DAEMON_TEST_H__
-#define __G_VFS_DAEMON_TEST_H__
-
-#include <gvfsdaemon.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_VFS_DAEMON_TEST (g_vfs_daemon_test_get_type ())
-#define G_VFS_DAEMON_TEST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS_DAEMON_TEST, GVfsDaemonTest))
-#define G_VFS_DAEMON_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS_DAEMON_TEST, GVfsDaemonTestClass))
-#define G_IS_VFS_DAEMON_TEST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS_DAEMON_TEST))
-#define G_IS_VFS_DAEMON_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS_DAEMON_TEST))
-#define G_VFS_DAEMON_TEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS_DAEMON_TEST, GVfsDaemonTestClass))
-
-typedef struct _GVfsDaemonTest GVfsDaemonTest;
-typedef struct _GVfsDaemonTestClass GVfsDaemonTestClass;
-
-struct _GVfsDaemonTest
-{
- GVfsDaemon parent_instance;
-};
-
-struct _GVfsDaemonTestClass
-{
- GVfsDaemonClass parent_class;
-};
-
-GType g_vfs_daemon_test_get_type (void) G_GNUC_CONST;
-
-GVfsDaemonTest *g_vfs_daemon_test_new (const char *mountpoint);
-
-G_END_DECLS
-
-#endif /* __G_VFS_DAEMON_TEST_H__ */
diff --git a/daemon/gvfsreadrequest.c b/daemon/gvfsreadrequest.c
index 5fd0a773..eb3ca67a 100644
--- a/daemon/gvfsreadrequest.c
+++ b/daemon/gvfsreadrequest.c
@@ -103,3 +103,9 @@ void
request->priv->remote_fd = -1;
}
+void
+g_vfs_read_request_set_filename (GVfsReadRequest *request,
+ const char *filename)
+{
+ g_error ("TODO");
+}
diff --git a/daemon/gvfsreadrequest.h b/daemon/gvfsreadrequest.h
index 185b33fc..3187bc97 100644
--- a/daemon/gvfsreadrequest.h
+++ b/daemon/gvfsreadrequest.h
@@ -28,6 +28,8 @@ struct _GVfsReadRequestClass
GObjectClass parent_class;
/* vtable */
+
+ void (*wants_data) (GVfsReadRequest *request);
};
GType g_vfs_read_request_get_type (void) G_GNUC_CONST;
@@ -36,6 +38,8 @@ GVfsReadRequest *g_vfs_read_request_new (GError **error);
int g_vfs_read_request_get_fd (GVfsReadRequest *read_request);
int g_vfs_read_request_get_remote_fd (GVfsReadRequest *read_request);
void g_vfs_read_request_close_remote_fd (GVfsReadRequest *read_request);
+void g_vfs_read_request_set_filename (GVfsReadRequest *read_request,
+ const char *filename);
gboolean g_vfs_read_request_wants_data (GVfsReadRequest *read_request);
gsize g_vfs_read_request_get_requested_size (GVfsReadRequest *read_request);
diff --git a/daemon/main.c b/daemon/main.c
index 1133532c..55f7f579 100644
--- a/daemon/main.c
+++ b/daemon/main.c
@@ -3,7 +3,8 @@
#include <glib.h>
#include <dbus/dbus.h>
#include <dbus-gmain.h>
-#include "gvfsdaemontest.h"
+#include "gvfsdaemon.h"
+#include "gvfsdaemonbackendtest.h"
#include <gvfsdaemonprotocol.h>
static gboolean
@@ -34,16 +35,20 @@ int
main (int argc, char *argv[])
{
GMainLoop *loop;
- GVfsDaemonTest *daemon;
+ GVfsDaemon *daemon;
+ GVfsDaemonBackendTest *backend;
g_type_init ();
if (!init_dbus ())
return 1;
- daemon = g_vfs_daemon_test_new (G_VFS_DBUS_MOUNTPOINT_NAME "foo_3A_2F_2F");
+ backend = g_vfs_daemon_backend_test_new ();
+ daemon = g_vfs_daemon_new (G_VFS_DBUS_MOUNTPOINT_NAME "foo_3A_2F_2F",
+ G_VFS_DAEMON_BACKEND (backend));
+ g_object_unref (backend);
- if (!g_vfs_daemon_is_active (G_VFS_DAEMON (daemon)))
+ if (!g_vfs_daemon_is_active (daemon))
return 1;
loop = g_main_loop_new (NULL, FALSE);
diff --git a/gvfs/gunixfileinputstream.c b/gvfs/gunixfileinputstream.c
index 75e011b5..9a7d639f 100644
--- a/gvfs/gunixfileinputstream.c
+++ b/gvfs/gunixfileinputstream.c
@@ -155,7 +155,7 @@ g_unix_file_input_stream_open (GUnixFileInputStream *file,
message = dbus_message_new_method_call ("org.gtk.vfs.Daemon",
G_VFS_DBUS_DAEMON_PATH,
G_VFS_DBUS_DAEMON_INTERFACE,
- G_VFS_DBUS_OP_READ_FILE);
+ G_VFS_DBUS_OP_OPEN_FOR_READ);
dbus_message_iter_init_append (message, &iter);