diff options
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | daemon/Makefile.am | 3 | ||||
-rw-r--r-- | daemon/gvfsdaemon.c | 36 | ||||
-rw-r--r-- | daemon/gvfsdaemon.h | 8 | ||||
-rw-r--r-- | daemon/gvfsdaemonbackend.c | 38 | ||||
-rw-r--r-- | daemon/gvfsdaemonbackend.h | 58 | ||||
-rw-r--r-- | daemon/gvfsdaemonbackendtest.c | 42 | ||||
-rw-r--r-- | daemon/gvfsdaemonbackendtest.h | 34 | ||||
-rw-r--r-- | daemon/gvfsdaemonoperation.c | 85 | ||||
-rw-r--r-- | daemon/gvfsdaemonoperation.h | 54 | ||||
-rw-r--r-- | daemon/gvfsdaemonprotocol.h | 2 | ||||
-rw-r--r-- | daemon/gvfsdaemontest.c | 69 | ||||
-rw-r--r-- | daemon/gvfsdaemontest.h | 34 | ||||
-rw-r--r-- | daemon/gvfsreadrequest.c | 6 | ||||
-rw-r--r-- | daemon/gvfsreadrequest.h | 4 | ||||
-rw-r--r-- | daemon/main.c | 13 | ||||
-rw-r--r-- | gvfs/gunixfileinputstream.c | 2 |
17 files changed, 366 insertions, 124 deletions
@@ -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); |