1 /* GIO - GLib Input, Output and Streaming Library
2  *
3  * Copyright (C) 2006-2007 Red Hat, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General
16  * Public License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  *
20  * Author: Alexander Larsson <alexl@redhat.com>
21  */
22 
23 #ifndef __G_VFS_BACKEND_H__
24 #define __G_VFS_BACKEND_H__
25 
26 #include <gio/gio.h>
27 #include <gvfsdaemon.h>
28 #include <gvfsjob.h>
29 #include <gmountspec.h>
30 
31 G_BEGIN_DECLS
32 
33 #define G_VFS_TYPE_BACKEND         (g_vfs_backend_get_type ())
34 #define G_VFS_BACKEND(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND, GVfsBackend))
35 #define G_VFS_BACKEND_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND, GVfsBackendClass))
36 #define G_VFS_IS_BACKEND(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND))
37 #define G_VFS_IS_BACKEND_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND))
38 #define G_VFS_BACKEND_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND, GVfsBackendClass))
39 
40 typedef struct _GVfsBackendPrivate GVfsBackendPrivate;
41 typedef struct _GVfsBackendClass   GVfsBackendClass;
42 
43 typedef struct _GVfsJobMount            GVfsJobMount;
44 typedef struct _GVfsJobUnmount          GVfsJobUnmount;
45 typedef struct _GVfsJobMountMountable   GVfsJobMountMountable;
46 typedef struct _GVfsJobUnmountMountable GVfsJobUnmountMountable;
47 typedef struct _GVfsJobStartMountable   GVfsJobStartMountable;
48 typedef struct _GVfsJobStopMountable    GVfsJobStopMountable;
49 typedef struct _GVfsJobPollMountable    GVfsJobPollMountable;
50 typedef struct _GVfsJobOpenForRead      GVfsJobOpenForRead;
51 typedef struct _GVfsJobOpenIconForRead  GVfsJobOpenIconForRead;
52 typedef struct _GVfsJobSeekRead         GVfsJobSeekRead;
53 typedef struct _GVfsJobCloseRead        GVfsJobCloseRead;
54 typedef struct _GVfsJobRead             GVfsJobRead;
55 typedef struct _GVfsJobOpenForWrite     GVfsJobOpenForWrite;
56 typedef struct _GVfsJobWrite            GVfsJobWrite;
57 typedef struct _GVfsJobSeekWrite        GVfsJobSeekWrite;
58 typedef struct _GVfsJobTruncate         GVfsJobTruncate;
59 typedef struct _GVfsJobCloseWrite       GVfsJobCloseWrite;
60 typedef struct _GVfsJobQueryInfo        GVfsJobQueryInfo;
61 typedef struct _GVfsJobQueryInfoRead    GVfsJobQueryInfoRead;
62 typedef struct _GVfsJobQueryInfoWrite   GVfsJobQueryInfoWrite;
63 typedef struct _GVfsJobQueryFsInfo      GVfsJobQueryFsInfo;
64 typedef struct _GVfsJobEnumerate        GVfsJobEnumerate;
65 typedef struct _GVfsJobSetDisplayName   GVfsJobSetDisplayName;
66 typedef struct _GVfsJobTrash            GVfsJobTrash;
67 typedef struct _GVfsJobDelete           GVfsJobDelete;
68 typedef struct _GVfsJobMakeDirectory    GVfsJobMakeDirectory;
69 typedef struct _GVfsJobMakeSymlink      GVfsJobMakeSymlink;
70 typedef struct _GVfsJobCopy             GVfsJobCopy;
71 typedef struct _GVfsJobMove             GVfsJobMove;
72 typedef struct _GVfsJobPush             GVfsJobPush;
73 typedef struct _GVfsJobPull             GVfsJobPull;
74 typedef struct _GVfsJobSetAttribute     GVfsJobSetAttribute;
75 typedef struct _GVfsJobQueryAttributes  GVfsJobQueryAttributes;
76 typedef struct _GVfsJobCreateMonitor    GVfsJobCreateMonitor;
77 typedef struct _GVfsJobError            GVfsJobError;
78 
79 typedef gpointer GVfsBackendHandle;
80 
81 struct _GVfsBackend
82 {
83   GObject parent_instance;
84 
85   GVfsBackendPrivate *priv;
86 };
87 
88 struct _GVfsBackendClass
89 {
90   GObjectClass parent_class;
91 
92   /* vtable */
93 
94   /* These try_ calls should be fast and non-blocking, scheduling the i/o
95    * operations async (or on a thread) or reading from cache.
96    * Returning FALSE means "Can't do this now or async", which
97    * means the non-try_ version will be scheduled in a worker
98    * thread.
99    * A NULL here means operation not supported
100    */
101 
102   void     (*unmount)           (GVfsBackend *backend,
103 				 GVfsJobUnmount *job,
104 				 GMountUnmountFlags flags,
105                                  GMountSource *mount_source);
106   gboolean (*try_unmount)       (GVfsBackend *backend,
107 				 GVfsJobUnmount *job,
108 				 GMountUnmountFlags flags,
109                                  GMountSource *mount_source);
110   void     (*mount)             (GVfsBackend *backend,
111 				 GVfsJobMount *job,
112 				 GMountSpec *mount_spec,
113 				 GMountSource *mount_source,
114 				 gboolean is_automount);
115   gboolean (*try_mount)         (GVfsBackend *backend,
116 				 GVfsJobMount *job,
117 				 GMountSpec *mount_spec,
118 				 GMountSource *mount_source,
119 				 gboolean is_automount);
120   void     (*mount_mountable)   (GVfsBackend *backend,
121 				 GVfsJobMountMountable *job,
122 				 const char *filename,
123 				 GMountSource *mount_source);
124   gboolean (*try_mount_mountable)(GVfsBackend *backend,
125 				 GVfsJobMountMountable *job,
126 				 const char *filename,
127 				 GMountSource *mount_source);
128   void     (*unmount_mountable) (GVfsBackend *backend,
129 				 GVfsJobUnmountMountable *job,
130 				 const char *filename,
131 				 GMountUnmountFlags flags,
132                                  GMountSource *mount_source);
133   gboolean (*try_unmount_mountable)(GVfsBackend *backend,
134 				    GVfsJobUnmountMountable *job,
135 				    const char *filename,
136 				    GMountUnmountFlags flags,
137                                     GMountSource *mount_source);
138   void     (*eject_mountable)   (GVfsBackend *backend,
139 				 GVfsJobUnmountMountable *job,
140 				 const char *filename,
141 				 GMountUnmountFlags flags,
142                                  GMountSource *mount_source);
143   gboolean (*try_eject_mountable)(GVfsBackend *backend,
144 				  GVfsJobUnmountMountable *job,
145 				  const char *filename,
146 				  GMountUnmountFlags flags,
147                                   GMountSource *mount_source);
148   void     (*open_for_read)     (GVfsBackend *backend,
149 				 GVfsJobOpenForRead *job,
150 				 const char *filename);
151   gboolean (*try_open_for_read) (GVfsBackend *backend,
152 				 GVfsJobOpenForRead *job,
153 				 const char *filename);
154   void     (*open_icon_for_read) (GVfsBackend *backend,
155                                   GVfsJobOpenIconForRead *job,
156                                   const char *icon_id);
157   gboolean (*try_open_icon_for_read) (GVfsBackend *backend,
158                                       GVfsJobOpenIconForRead *job,
159                                       const char *icon_id);
160   void     (*close_read)        (GVfsBackend *backend,
161 				 GVfsJobCloseRead *job,
162 				 GVfsBackendHandle handle);
163   gboolean (*try_close_read)    (GVfsBackend *backend,
164 				 GVfsJobCloseRead *job,
165 				 GVfsBackendHandle handle);
166   void     (*read)              (GVfsBackend *backend,
167 				 GVfsJobRead *job,
168 				 GVfsBackendHandle handle,
169 				 char *buffer,
170 				 gsize bytes_requested);
171   gboolean (*try_read)          (GVfsBackend *backend,
172 				 GVfsJobRead *job,
173 				 GVfsBackendHandle handle,
174 				 char *buffer,
175 				 gsize bytes_requested);
176   void     (*seek_on_read)      (GVfsBackend *backend,
177 				 GVfsJobSeekRead *job,
178 				 GVfsBackendHandle handle,
179 				 goffset    offset,
180 				 GSeekType  type);
181   gboolean (*try_seek_on_read)  (GVfsBackend *backend,
182 				 GVfsJobSeekRead *job,
183 				 GVfsBackendHandle handle,
184 				 goffset    offset,
185 				 GSeekType  type);
186   gboolean (*try_create)        (GVfsBackend *backend,
187 				 GVfsJobOpenForWrite *job,
188 				 const char *filename,
189 				 GFileCreateFlags flags);
190   void     (*create)            (GVfsBackend *backend,
191 				 GVfsJobOpenForWrite *job,
192 				 const char *filename,
193 				 GFileCreateFlags flags);
194   gboolean (*try_append_to)     (GVfsBackend *backend,
195 				 GVfsJobOpenForWrite *job,
196 				 const char *filename,
197 				 GFileCreateFlags flags);
198   void     (*append_to)         (GVfsBackend *backend,
199 				 GVfsJobOpenForWrite *job,
200 				 const char *filename,
201 				 GFileCreateFlags flags);
202   gboolean (*try_replace)       (GVfsBackend *backend,
203 				 GVfsJobOpenForWrite *job,
204 				 const char *filename,
205 				 const char *etag,
206 				 gboolean make_backup,
207 				 GFileCreateFlags flags);
208   void     (*replace)           (GVfsBackend *backend,
209 				 GVfsJobOpenForWrite *job,
210 				 const char *filename,
211 				 const char *etag,
212 				 gboolean make_backup,
213 				 GFileCreateFlags flags);
214   void     (*close_write)       (GVfsBackend *backend,
215 				 GVfsJobCloseWrite *job,
216 				 GVfsBackendHandle handle);
217   gboolean (*try_close_write)   (GVfsBackend *backend,
218 				 GVfsJobCloseWrite *job,
219 				 GVfsBackendHandle handle);
220   void     (*write)             (GVfsBackend *backend,
221 				 GVfsJobWrite *job,
222 				 GVfsBackendHandle handle,
223 				 char *buffer,
224 				 gsize buffer_size);
225   gboolean (*try_write)         (GVfsBackend *backend,
226 				 GVfsJobWrite *job,
227 				 GVfsBackendHandle handle,
228 				 char *buffer,
229 				 gsize buffer_size);
230   void     (*seek_on_write)     (GVfsBackend *backend,
231 				 GVfsJobSeekWrite *job,
232 				 GVfsBackendHandle handle,
233 				 goffset    offset,
234 				 GSeekType  type);
235   gboolean (*try_seek_on_write) (GVfsBackend *backend,
236 				 GVfsJobSeekWrite *job,
237 				 GVfsBackendHandle handle,
238 				 goffset    offset,
239 				 GSeekType  type);
240   void     (*truncate)          (GVfsBackend *backend,
241 				 GVfsJobTruncate *job,
242 				 GVfsBackendHandle handle,
243 				 goffset size);
244   gboolean (*try_truncate)      (GVfsBackend *backend,
245 				 GVfsJobTruncate *job,
246 				 GVfsBackendHandle handle,
247 				 goffset size);
248   void     (*query_info)        (GVfsBackend *backend,
249 				 GVfsJobQueryInfo *job,
250 				 const char *filename,
251 				 GFileQueryInfoFlags flags,
252 				 GFileInfo *info,
253 				 GFileAttributeMatcher *attribute_matcher);
254   gboolean (*try_query_info)    (GVfsBackend *backend,
255 				 GVfsJobQueryInfo *job,
256 				 const char *filename,
257 				 GFileQueryInfoFlags flags,
258 				 GFileInfo *info,
259 				 GFileAttributeMatcher *attribute_matcher);
260   void     (*query_info_on_read)(GVfsBackend *backend,
261 				 GVfsJobQueryInfoRead *job,
262 				 GVfsBackendHandle handle,
263 				 GFileInfo *info,
264 				 GFileAttributeMatcher *attribute_matcher);
265   gboolean (*try_query_info_on_read)(GVfsBackend *backend,
266 				 GVfsJobQueryInfoRead *job,
267 				 GVfsBackendHandle handle,
268 				 GFileInfo *info,
269 				 GFileAttributeMatcher *attribute_matcher);
270   void     (*query_info_on_write)(GVfsBackend *backend,
271 				 GVfsJobQueryInfoWrite *job,
272 				 GVfsBackendHandle handle,
273 				 GFileInfo *info,
274 				 GFileAttributeMatcher *attribute_matcher);
275   gboolean (*try_query_info_on_write)(GVfsBackend *backend,
276 				 GVfsJobQueryInfoWrite *job,
277 				 GVfsBackendHandle handle,
278 				 GFileInfo *info,
279 				 GFileAttributeMatcher *attribute_matcher);
280   void     (*query_fs_info)     (GVfsBackend *backend,
281 				 GVfsJobQueryFsInfo *job,
282 				 const char *filename,
283 				 GFileInfo *info,
284 				 GFileAttributeMatcher *attribute_matcher);
285   gboolean (*try_query_fs_info) (GVfsBackend *backend,
286 				 GVfsJobQueryFsInfo *job,
287 				 const char *filename,
288 				 GFileInfo *info,
289 				 GFileAttributeMatcher *attribute_matcher);
290   void     (*enumerate)         (GVfsBackend *backend,
291 				 GVfsJobEnumerate *job,
292 				 const char *filename,
293 				 GFileAttributeMatcher *attribute_matcher,
294 				 GFileQueryInfoFlags flags);
295   gboolean (*try_enumerate)     (GVfsBackend *backend,
296 				 GVfsJobEnumerate *job,
297 				 const char *filename,
298 				 GFileAttributeMatcher *attribute_matcher,
299 				 GFileQueryInfoFlags flags);
300   void     (*set_display_name)  (GVfsBackend *backend,
301 				 GVfsJobSetDisplayName *job,
302 				 const char *filename,
303 				 const char *display_name);
304   gboolean (*try_set_display_name) (GVfsBackend *backend,
305 				    GVfsJobSetDisplayName *job,
306 				    const char *filename,
307 				    const char *display_name);
308   void     (*delete)            (GVfsBackend *backend,
309 				 GVfsJobDelete *job,
310 				 const char *filename);
311   gboolean (*try_delete)        (GVfsBackend *backend,
312 				 GVfsJobDelete *job,
313 				 const char *filename);
314   void     (*trash)             (GVfsBackend *backend,
315 				 GVfsJobTrash *job,
316 				 const char *filename);
317   gboolean (*try_trash)         (GVfsBackend *backend,
318 				 GVfsJobTrash *job,
319 				 const char *filename);
320   void     (*make_directory)    (GVfsBackend *backend,
321 				 GVfsJobMakeDirectory *job,
322 				 const char *filename);
323   gboolean (*try_make_directory)(GVfsBackend *backend,
324 				 GVfsJobMakeDirectory *job,
325 				 const char *filename);
326   void     (*make_symlink)      (GVfsBackend *backend,
327 				 GVfsJobMakeSymlink *make_symlink,
328 				 const char *filename,
329 				 const char *symlink_value);
330   gboolean (*try_make_symlink)  (GVfsBackend *backend,
331 				 GVfsJobMakeSymlink *make_symlink,
332 				 const char *filename,
333 				 const char *symlink_value);
334   void     (*copy)              (GVfsBackend *backend,
335 				 GVfsJobCopy *job,
336 				 const char *source,
337 				 const char *destination,
338 				 GFileCopyFlags flags,
339 				 GFileProgressCallback progress_callback,
340 				 gpointer progress_callback_data);
341   gboolean (*try_copy)          (GVfsBackend *backend,
342 				 GVfsJobCopy *job,
343 				 const char *source,
344 				 const char *destination,
345 				 GFileCopyFlags flags,
346 				 GFileProgressCallback progress_callback,
347 				 gpointer progress_callback_data);
348    void     (*move)              (GVfsBackend *backend,
349 				 GVfsJobMove *job,
350 				 const char *source,
351 				 const char *destination,
352 				 GFileCopyFlags flags,
353 				 GFileProgressCallback progress_callback,
354 				 gpointer progress_callback_data);
355   gboolean (*try_move)          (GVfsBackend *backend,
356 				 GVfsJobMove *job,
357 				 const char *source,
358 				 const char *destination,
359 				 GFileCopyFlags flags,
360 				 GFileProgressCallback progress_callback,
361 				 gpointer progress_callback_data);
362   void     (*push)             (GVfsBackend *backend,
363                                 GVfsJobPush *job,
364                                 const char *destination,
365                                 const char *local_path,
366                                 GFileCopyFlags flags,
367                                 gboolean remove_source,
368                                 GFileProgressCallback progress_callback,
369                                 gpointer progress_callback_data);
370   gboolean (*try_push)         (GVfsBackend *backend,
371                                 GVfsJobPush *job,
372                                 const char *destination,
373                                 const char *local_path,
374                                 GFileCopyFlags flags,
375                                 gboolean remove_source,
376                                 GFileProgressCallback progress_callback,
377                                 gpointer progress_callback_data);
378   void     (*pull)             (GVfsBackend *backend,
379                                 GVfsJobPull *job,
380                                 const char *source,
381                                 const char *local_path,
382                                 GFileCopyFlags flags,
383                                 gboolean remove_source,
384                                 GFileProgressCallback progress_callback,
385                                 gpointer progress_callback_data);
386   gboolean (*try_pull)         (GVfsBackend *backend,
387                                 GVfsJobPull *job,
388                                 const char *source,
389                                 const char *local_path,
390                                 GFileCopyFlags flags,
391                                 gboolean remove_source,
392                                 GFileProgressCallback progress_callback,
393                                 gpointer progress_callback_data);
394   void     (*set_attribute)     (GVfsBackend *backend,
395 				 GVfsJobSetAttribute *set_attribute,
396 				 const char *filename,
397 				 const char *attribute,
398 				 GFileAttributeType type,
399 				 gpointer value_p,
400 				 GFileQueryInfoFlags flags);
401   gboolean (*try_set_attribute) (GVfsBackend *backend,
402 				 GVfsJobSetAttribute *set_attribute,
403 				 const char *filename,
404 				 const char *attribute,
405 				 GFileAttributeType type,
406 				 gpointer value_p,
407 				 GFileQueryInfoFlags flags);
408   void     (*create_dir_monitor)(GVfsBackend *backend,
409 				 GVfsJobCreateMonitor *job,
410 				 const char *filename,
411 				 GFileMonitorFlags flags);
412   gboolean (*try_create_dir_monitor) (GVfsBackend *backend,
413 				      GVfsJobCreateMonitor *job,
414 				      const char *filename,
415 				      GFileMonitorFlags flags);
416   void     (*create_file_monitor)(GVfsBackend *backend,
417 				  GVfsJobCreateMonitor *job,
418 				  const char *filename,
419 				  GFileMonitorFlags flags);
420   gboolean (*try_create_file_monitor) (GVfsBackend *backend,
421 				       GVfsJobCreateMonitor *job,
422 				       const char *filename,
423 				       GFileMonitorFlags flags);
424   void (*query_settable_attributes)         (GVfsBackend *backend,
425 					     GVfsJobQueryAttributes *job,
426 					     const char *filename);
427   gboolean (*try_query_settable_attributes) (GVfsBackend *backend,
428 					     GVfsJobQueryAttributes *job,
429 					     const char *filename);
430   void (*query_writable_namespaces)         (GVfsBackend *backend,
431 					     GVfsJobQueryAttributes *job,
432 					     const char *filename);
433   gboolean (*try_query_writable_namespaces) (GVfsBackend *backend,
434 					     GVfsJobQueryAttributes *job,
435 					     const char *filename);
436 
437   void     (*start_mountable)   (GVfsBackend *backend,
438 				 GVfsJobStartMountable *job,
439 				 const char *filename,
440 				 GMountSource *mount_source);
441   gboolean (*try_start_mountable) (GVfsBackend *backend,
442                                    GVfsJobStartMountable *job,
443                                    const char *filename,
444                                    GMountSource *mount_source);
445   void     (*stop_mountable) (GVfsBackend *backend,
446                               GVfsJobStopMountable *job,
447                               const char *filename,
448                               GMountUnmountFlags flags,
449                               GMountSource *mount_source);
450   gboolean (*try_stop_mountable)   (GVfsBackend *backend,
451 				    GVfsJobStopMountable *job,
452 				    const char *filename,
453 				    GMountUnmountFlags flags,
454                                     GMountSource *mount_source);
455   void     (*poll_mountable) (GVfsBackend *backend,
456                               GVfsJobPollMountable *job,
457                               const char *filename);
458   gboolean (*try_poll_mountable)   (GVfsBackend *backend,
459 				    GVfsJobPollMountable *job,
460 				    const char *filename);
461 };
462 
463 GType g_vfs_backend_get_type (void) G_GNUC_CONST;
464 
465 void  g_vfs_register_backend       (GType               backend_type,
466 				    const char         *type);
467 GType g_vfs_lookup_backend         (const char         *type);
468 
469 void        g_vfs_backend_set_display_name               (GVfsBackend        *backend,
470 							  const char         *display_name);
471 void        g_vfs_backend_set_stable_name                (GVfsBackend        *backend,
472 							  const char         *stable_name);
473 void        g_vfs_backend_set_x_content_types            (GVfsBackend        *backend,
474 							  char              **x_content_types);
475 void        g_vfs_backend_set_icon_name                  (GVfsBackend        *backend,
476 							  const char         *icon_name);
477 void        g_vfs_backend_set_icon                       (GVfsBackend        *backend,
478 							  GIcon              *icon);
479 void        g_vfs_backend_set_symbolic_icon_name         (GVfsBackend        *backend,
480 							  const char         *icon_name);
481 void        g_vfs_backend_set_symbolic_icon              (GVfsBackend        *backend,
482 							  GIcon              *icon);
483 void        g_vfs_backend_set_prefered_filename_encoding (GVfsBackend        *backend,
484 							  const char         *prefered_filename_encoding);
485 void        g_vfs_backend_set_user_visible               (GVfsBackend        *backend,
486 							  gboolean            user_visible);
487 void        g_vfs_backend_set_default_location           (GVfsBackend        *backend,
488 							  const char         *location);
489 void        g_vfs_backend_set_mount_spec                 (GVfsBackend        *backend,
490 							  GMountSpec         *mount_spec);
491 void        g_vfs_backend_register_mount                 (GVfsBackend        *backend,
492                                                           GAsyncReadyCallback callback,
493 							  gpointer            user_data);
494 gboolean    g_vfs_backend_register_mount_finish          (GVfsBackend        *backend,
495                                                           GAsyncResult       *res,
496                                                           GError            **error);
497 void        g_vfs_backend_unregister_mount               (GVfsBackend        *backend,
498                                                           GAsyncReadyCallback callback,
499 							  gpointer            user_data);
500 gboolean    g_vfs_backend_unregister_mount_finish        (GVfsBackend        *backend,
501                                                           GAsyncResult       *res,
502                                                           GError            **error);
503 const char *g_vfs_backend_get_backend_type               (GVfsBackend        *backend);
504 const char *g_vfs_backend_get_display_name               (GVfsBackend        *backend);
505 const char *g_vfs_backend_get_stable_name                (GVfsBackend        *backend);
506 char      **g_vfs_backend_get_x_content_types            (GVfsBackend        *backend);
507 GIcon      *g_vfs_backend_get_icon                       (GVfsBackend        *backend);
508 GIcon      *g_vfs_backend_get_symbolic_icon              (GVfsBackend        *backend);
509 const char *g_vfs_backend_get_default_location           (GVfsBackend        *backend);
510 GMountSpec *g_vfs_backend_get_mount_spec                 (GVfsBackend        *backend);
511 GVfsDaemon *g_vfs_backend_get_daemon                     (GVfsBackend        *backend);
512 gboolean    g_vfs_backend_is_mounted                     (GVfsBackend        *backend);
513 void        g_vfs_backend_force_unmount                  (GVfsBackend        *backend);
514 
515 void        g_vfs_backend_add_auto_info                  (GVfsBackend           *backend,
516 							  GFileAttributeMatcher *matcher,
517 							  GFileInfo             *info,
518 							  const char            *uri);
519 void        g_vfs_backend_add_auto_fs_info               (GVfsBackend           *backend,
520                                                           GFileAttributeMatcher *matcher,
521                                                           GFileInfo             *info);
522 
523 void        g_vfs_backend_set_block_requests             (GVfsBackend           *backend,
524                                                           gboolean               value);
525 gboolean    g_vfs_backend_get_block_requests             (GVfsBackend           *backend);
526 
527 gboolean    g_vfs_backend_unmount_with_operation_finish (GVfsBackend  *backend,
528                                                          GAsyncResult *res,
529                                                          GError      **error);
530 
531 void        g_vfs_backend_unmount_with_operation (GVfsBackend        *backend,
532                                                   GMountSource       *mount_source,
533                                                   GAsyncReadyCallback callback,
534                                                   gpointer            user_data);
535 
536 gboolean    g_vfs_backend_invocation_first_handler       (GVfsDBusMount *object,
537                                                           GDBusMethodInvocation *invocation,
538                                                           GVfsBackend *backend);
539 
540 void        g_vfs_backend_handle_readonly_lockdown       (GVfsBackend *backend);
541 gboolean    g_vfs_backend_get_readonly_lockdown          (GVfsBackend *backend);
542 
543 G_END_DECLS
544 
545 #endif /* __G_VFS_BACKEND_H__ */
546