rpms/gvfs/devel 0001-Add-AFC-backend.patch, NONE, 1.1 gvfs.spec, 1.143, 1.144

Bastien Nocera hadess at fedoraproject.org
Tue Aug 11 09:11:04 UTC 2009


Author: hadess

Update of /cvs/pkgs/rpms/gvfs/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10792

Modified Files:
	gvfs.spec 
Added Files:
	0001-Add-AFC-backend.patch 
Log Message:
* Tue Aug 11 2009 Bastien Nocera <bnocera at redhat.com> 1.3.4-2
- Add AFC backend


0001-Add-AFC-backend.patch:
 configure.ac                                            |   26 
 daemon/Makefile.am                                      |   23 
 daemon/afc.mount.in                                     |    7 
 daemon/gvfsbackendafc.c                                 | 1226 ++++++++++++++++
 daemon/gvfsbackendafc.h                                 |   37 
 monitor/Makefile.am                                     |    6 
 monitor/afc/Makefile.am                                 |   49 
 monitor/afc/afc.monitor                                 |    5 
 monitor/afc/afcvolume.c                                 |  336 ++++
 monitor/afc/afcvolume.h                                 |   44 
 monitor/afc/afcvolumemonitor.c                          |  215 ++
 monitor/afc/afcvolumemonitor.h                          |   39 
 monitor/afc/afcvolumemonitordaemon.c                    |   31 
 monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in |    5 
 14 files changed, 2046 insertions(+), 3 deletions(-)

--- NEW FILE 0001-Add-AFC-backend.patch ---
>From 1ba08909cdc395c14116d7cdf0f8f3442ba5e4c0 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Thu, 6 Aug 2009 22:55:47 +0100
Subject: [PATCH] Add AFC backend

Add a backend based on libiphone to access data on Apple's iPhone,
and iPod Touch.

Code by:
Patrick Walton <pcwalton at cs.ucla.edu>
Martin Szulecki <opensuse at sukimashita.com>
Nikias Bassen <nikias at gmx.li>
Bastien Nocera <hadess at hadess.net>
---
 configure.ac                                       |   26 +-
 daemon/Makefile.am                                 |   23 +
 daemon/afc.mount.in                                |    7 +
 daemon/gvfsbackendafc.c                            | 1226 ++++++++++++++++++++
 daemon/gvfsbackendafc.h                            |   37 +
 monitor/Makefile.am                                |    6 +-
 monitor/afc/Makefile.am                            |   49 +
 monitor/afc/afc.monitor                            |    5 +
 monitor/afc/afcvolume.c                            |  336 ++++++
 monitor/afc/afcvolume.h                            |   44 +
 monitor/afc/afcvolumemonitor.c                     |  215 ++++
 monitor/afc/afcvolumemonitor.h                     |   39 +
 monitor/afc/afcvolumemonitordaemon.c               |   31 +
 .../org.gtk.Private.AfcVolumeMonitor.service.in    |    4 +
 14 files changed, 2046 insertions(+), 2 deletions(-)
 create mode 100644 daemon/afc.mount.in
 create mode 100644 daemon/gvfsbackendafc.c
 create mode 100644 daemon/gvfsbackendafc.h
 create mode 100644 monitor/afc/Makefile.am
 create mode 100644 monitor/afc/afc.monitor
 create mode 100644 monitor/afc/afcvolume.c
 create mode 100644 monitor/afc/afcvolume.h
 create mode 100644 monitor/afc/afcvolumemonitor.c
 create mode 100644 monitor/afc/afcvolumemonitor.h
 create mode 100644 monitor/afc/afcvolumemonitordaemon.c
 create mode 100644 monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in

diff --git a/configure.ac b/configure.ac
index 7f1ec16..4675ae9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -324,6 +324,28 @@ AC_SUBST(CDDA_CFLAGS)
 
 AM_CONDITIONAL(USE_CDDA, [test "$msg_cdda" = "yes"])
 
+dnl *************************************************
+dnl *** Check if we should build with AFC backend ***
+dnl *************************************************
+AC_ARG_ENABLE(afc, [  --disable-afc           build without AFC backend])
+msg_afc=no
+AFC_LIBS=
+AFC_CFLAGS=
+
+if test "x$enable_afc" != "xno" -a "x$msg_gudev" = "xyes" ; then
+  PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.2, msg_afc=yes)
+
+  if test "x$msg_afc" = "xyes"; then
+    PKG_CHECK_MODULES(AFC, libiphone-1.0 gudev-1.0)
+    AC_DEFINE(HAVE_AFC, 1, [Define to 1 if AFC is going to be built])
+  fi
+fi
+
+AC_SUBST(AFC_LIBS)
+AC_SUBST(AFC_CFLAGS)
+
+AM_CONDITIONAL(USE_AFC, [test "$msg_afc" = "yes"])
+
 dnl *****************************************************
 dnl *** Check if we should build with obexftp backend ***
 dnl *****************************************************
@@ -695,6 +717,7 @@ monitor/proxy/Makefile
 monitor/hal/Makefile
 monitor/gdu/Makefile
 monitor/gphoto2/Makefile
+monitor/afc/Makefile
 gconf/Makefile
 programs/Makefile
 test/Makefile
@@ -712,7 +735,8 @@ echo "
 	FUSE support:                 $msg_fuse
         CDDA support:                 $msg_cdda
         Gphoto2 support:              $msg_gphoto2
-	archive support:	      $msg_archive
+	archive support:              $msg_archive
+	AFC support:                  $msg_afc
         GConf support:                $msg_gconf
         DNS-SD support:               $msg_avahi
 	Build HAL volume monitor:     $msg_hal (with fast init path: $have_hal_fast_init)
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 733fa41..4c9e4af 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -101,6 +101,12 @@ mount_DATA += archive.mount
 libexec_PROGRAMS += gvfsd-archive
 endif
 
+mount_in_files += afc.mount.in
+if USE_AFC
+mount_DATA += afc.mount
+libexec_PROGRAMS += gvfsd-afc
+endif
+
 EXTRA_DIST = gvfs-daemon.service.in $(mount_in_files) obexftp-marshal.list
 
 DISTCLEANFILES = gvfs-daemon.service $(mount_DATA)
@@ -433,3 +439,20 @@ gvfsd_dav_LDADD = $(libraries) $(HTTP_LIBS)
 if HAVE_AVAHI
 gvfsd_dav_LDADD += $(top_builddir)/common/libgvfscommon-dnssd.la
 endif
+
+gvfsd_afc_SOURCES = \
+	gvfsbackendafc.c gvfsbackendafc.h \
+	daemon-main.c daemon-main.h \
+	daemon-main-generic.c
+
+gvfsd_afc_CPPFLAGS = \
+	-DBACKEND_HEADER=gvfsbackendafc.h \
+	-DDEFAULT_BACKEND_TYPE=afc \
+	-DMAX_JOB_THREADS=1 \
+	$(AFC_CFLAGS) \
+	-DBACKEND_TYPES='"afc", G_VFS_TYPE_BACKEND_AFC,'
+
+gvfsd_afc_LDADD = \
+	$(libraries) \
+	$(AFC_LIBS)
+
diff --git a/daemon/afc.mount.in b/daemon/afc.mount.in
new file mode 100644
index 0000000..727d833
--- /dev/null
+++ b/daemon/afc.mount.in
@@ -0,0 +1,7 @@
+[Mount]
+Type=afc
+Exec=@libexecdir@/gvfsd-afc
+AutoMount=false
+Scheme=afc
+DefaultPort=1
+
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
new file mode 100644
index 0000000..97d0a22
--- /dev/null
+++ b/daemon/gvfsbackendafc.c
@@ -0,0 +1,1226 @@
+/*
+ * gvfs/daemon/gvfsbackendafc.c
+ *
+ * Copyright (c) 2008 Patrick Walton <pcwalton at cs.ucla.edu>
+ */
+
+#include <config.h>
+
+#include <limits.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <glib/gi18n.h>
+#include <errno.h>
+
+#define G_UDEV_API_IS_SUBJECT_TO_CHANGE
+#include <gudev/gudev.h>
+
+#include <libiphone/libiphone.h>
+#include <libiphone/lockdown.h>
+#include <libiphone/afc.h>
+
+#include "gvfsbackendafc.h"
+#include "gvfsjobopenforread.h"
+#include "gvfsjobread.h"
+#include "gvfsjobseekread.h"
+#include "gvfsjobopenforwrite.h"
+#include "gvfsjobwrite.h"
+#include "gvfsjobseekwrite.h"
+#include "gvfsjobsetdisplayname.h"
+#include "gvfsjobqueryinfo.h"
+#include "gvfsjobqueryfsinfo.h"
+#include "gvfsjobqueryattributes.h"
+#include "gvfsjobenumerate.h"
+#include "gvfsdaemonprotocol.h"
+#include "gvfsdaemonutils.h"
+
+#define G_VFS_BACKEND_AFC_MAX_FILE_SIZE G_MAXINT64
+int g_blocksize = 4096; /* assume this is the default block size */
+
+struct _GVfsBackendAfc {
+  GVfsBackend backend;
+
+  GUdevClient *client;
+
+  char uuid[41];
+  char *service;
[...1811 lines suppressed...]
+g_vfs_afc_volume_monitor_constructor (GType type, guint ncps,
+                                      GObjectConstructParam *cps)
+{
+  GVfsAfcVolumeMonitor *self;
+  GList *devices, *l;
+  const gchar * const subsystems[] = { "usb_endpoint", NULL };
+
+  /* Boilerplate code to chain from parent. */
+  self = G_VFS_AFC_VOLUME_MONITOR((*G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->constructor)(type, ncps, cps));
+
+  self->client = g_udev_client_new (subsystems);
+  g_signal_connect (G_OBJECT (self->client), "uevent",
+                    G_CALLBACK (g_vfs_afc_monitor_uevent), self);
+
+  self->volumes = NULL;
+
+  devices = g_udev_client_query_by_subsystem (self->client, subsystems[0]);
+  for (l = devices; l != NULL; l = l->next)
+    {
+      GUdevDevice *device = l->data;
+      g_vfs_afc_monitor_uevent (self->client, "add", device, self);
+      g_object_unref (device);
+    }
+  g_list_free (devices);
+
+  g_print ("Volume monitor alive\n");
+
+  return G_OBJECT(self);
+}
+
+static void
+list_free (GList *objects)
+{
+  g_list_foreach (objects, (GFunc)g_object_unref, NULL);
+  g_list_free (objects);
+}
+
+static void
+g_vfs_afc_volume_monitor_finalize (GObject *_self)
+{
+  GVfsAfcVolumeMonitor *self;
+
+  self = G_VFS_AFC_VOLUME_MONITOR(_self);
+
+  if (self->volumes)
+    list_free (self->volumes);
+
+  if (self->client)
+    {
+      g_object_unref (self->client);
+      self->client = NULL;
+    }
+
+  if (G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)( G_OBJECT(self));
+}
+
+static GList *
+g_vfs_afc_volume_monitor_get_volumes (GVolumeMonitor *_self)
+{
+  GVfsAfcVolumeMonitor *self;
+  GList *l;
+
+  self = G_VFS_AFC_VOLUME_MONITOR (_self);
+
+  l = g_list_copy (self->volumes);
+  g_list_foreach (l, (GFunc)g_object_ref, NULL);
+
+  return l;
+}
+
+static gboolean
+g_vfs_afc_volume_monitor_is_supported (void)
+{
+  return TRUE;
+}
+
+static void
+g_vfs_afc_volume_monitor_class_init (GVfsAfcVolumeMonitorClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+  GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS(klass);
+
+  gobject_class->constructor = g_vfs_afc_volume_monitor_constructor;
+  gobject_class->finalize = g_vfs_afc_volume_monitor_finalize;
+
+  monitor_class->get_volumes = g_vfs_afc_volume_monitor_get_volumes;
+  monitor_class->is_supported = g_vfs_afc_volume_monitor_is_supported;
+}
+
+static void
+g_vfs_afc_volume_monitor_init(GVfsAfcVolumeMonitor *self)
+{
+}
+
+GVolumeMonitor *
+g_vfs_afc_volume_monitor_new (void)
+{
+  return G_VOLUME_MONITOR(g_object_new (G_VFS_TYPE_AFC_VOLUME_MONITOR,
+                                        NULL));
+}
+
+/*
+ * vim: sw=2 ts=8 cindent expandtab cinoptions=f0,>4,n2,{2,(0,^-2,t0 ai
+ */
diff --git a/monitor/afc/afcvolumemonitor.h b/monitor/afc/afcvolumemonitor.h
new file mode 100644
index 0000000..0bd5f32
--- /dev/null
+++ b/monitor/afc/afcvolumemonitor.h
@@ -0,0 +1,39 @@
+/*
+ * gvfs/monitor/afc/afc-volume-monitor.h
+ *
+ * Copyright (c) 2008 Patrick Walton <pcwalton at ucla.edu>
+ */
+
+#ifndef AFC_VOLUME_MONITOR_H
+#define AFC_VOLUME_MONITOR_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define G_VFS_TYPE_AFC_VOLUME_MONITOR   (g_vfs_afc_volume_monitor_get_type())
+#define G_VFS_AFC_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST((o), G_VFS_TYPE_AFC_VOLUME_MONITOR, GVfsAfcVolumeMonitor))
+#define G_VFS_AFC_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_AFC_VOLUME_MONITOR, GVfsAfcVolumeMonitorClass))
+#define G_VFS_IS_AFC_VOLUME_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), G_VFS_TYPE_AFC_VOLUME_MONITOR))
+#define G_VFS_IS_AFC_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), G_VFS_TYPE_AFC_VOLUME_MONITOR))
+#define G_VFS_AFC_VOLUME_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), G_VFS_TYPE_AFC_VOLUME_MONITOR, GVfsAfcVolumeMonitorClass))
+
+typedef struct _GVfsAfcVolumeMonitor GVfsAfcVolumeMonitor;
+typedef struct _GVfsAfcVolumeMonitorClass GVfsAfcVolumeMonitorClass;
+
+struct _GVfsAfcVolumeMonitorClass {
+  GVolumeMonitorClass parent_class;
+};
+
+GType g_vfs_afc_volume_monitor_get_type (void) G_GNUC_CONST;
+
+GVolumeMonitor *g_vfs_afc_volume_monitor_new (void);
+
+G_END_DECLS
+
+#endif /* AFC_VOLUME_MONITOR_H */
+
+/*
+ * vim: sw=2 ts=8 cindent expandtab cinoptions=f0,>4,n2,{2,(0,^-2,t0 ai
+ */
diff --git a/monitor/afc/afcvolumemonitordaemon.c b/monitor/afc/afcvolumemonitordaemon.c
new file mode 100644
index 0000000..9c24a34
--- /dev/null
+++ b/monitor/afc/afcvolumemonitordaemon.c
@@ -0,0 +1,31 @@
+/*
+ * gvfs/monitor/afc/afc-volume-monitor-daemon.c
+ *
+ * Copyright (c) 2008-2009 Patrick Walton <pcwalton at ucla.edu>
+ * Copyright (c) 2009 Martin Szulecki <opensuse at sukimashita.com>
+ */
+
+#include <config.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <gmodule.h>
+#include <gio/gio.h>
+
+#include <gvfsproxyvolumemonitordaemon.h>
+
+#include "afcvolumemonitor.h"
+
+int
+main (int argc, char *argv[])
+{
+  g_vfs_proxy_volume_monitor_daemon_init ();
+  return g_vfs_proxy_volume_monitor_daemon_main (argc,
+                                                 argv,
+                                                 "org.gtk.Private.AfcVolumeMonitor",
+                                                 G_VFS_TYPE_AFC_VOLUME_MONITOR);
+}
+
+/*
+ * vim: sw=2 ts=8 cindent expandtab cinoptions=f0,>4,n2,{2,(0,^-2,t0 ai
+ */
diff --git a/monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in b/monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in
new file mode 100644
index 0000000..4e6bd33
--- /dev/null
+++ b/monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in
@@ -0,0 +1,4 @@
+[D-BUS Service]
+Name=org.gtk.Private.AfcVolumeMonitor
+Exec=@libexecdir@/gvfs-afc-volume-monitor
+
-- 
1.6.2.5



Index: gvfs.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gvfs/devel/gvfs.spec,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -p -r1.143 -r1.144
--- gvfs.spec	10 Aug 2009 17:05:22 -0000	1.143
+++ gvfs.spec	11 Aug 2009 09:11:04 -0000	1.144
@@ -1,7 +1,7 @@
 Summary: Backends for the gio framework in GLib
 Name: gvfs
 Version: 1.3.4
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: LGPLv2+
 Group: System Environment/Libraries
 URL: http://www.gtk.org
@@ -41,7 +41,8 @@ Patch4: gvfs-1.3.4-dont-strip-mount-pref
 Patch8: gvfs-1.2.2-dnssd-deadlock.patch
 # https://bugzilla.redhat.com/show_bug.cgi?id=504339
 Patch9: gvfs-1.2.3-sftp-40sec-timeout.patch
-
+# http://bugzilla.gnome.org/show_bug.cgi?id=591005
+Patch10: 0001-Add-AFC-backend.patch
 
 %description
 The gvfs package provides backend implementations for the gio
@@ -119,7 +120,16 @@ This package provides support for readin
 PTP based cameras (Picture Transfer Protocol) and MTP based
 media players (Media Transfer Protocol) to applications using gvfs.
 
+%package afc
+Summary: AFC support for gvfs
+Group: System Environment/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: usbmuxd
+BuildRequires: libiphone-devel >= 0.9.2 libgudev-devel
 
+%description afc
+This package provides support for reading files on Apple iPhones and
+and iPod Touches to applications using gvfs.
 
 
 %prep
@@ -128,6 +138,7 @@ media players (Media Transfer Protocol) 
 %patch4 -p1 -b .mount-prefix
 %patch8 -p1 -b .dnssd-deadlock
 %patch9 -p1 -b .sftp-timeout
+%patch10 -p1 -b .afc
 
 %build
 
@@ -272,8 +283,18 @@ update-desktop-database &> /dev/null ||:
 %{_datadir}/dbus-1/services/org.gtk.Private.GPhoto2VolumeMonitor.service
 %{_datadir}/gvfs/remote-volume-monitors/gphoto2.monitor
 
+%files afc
+%defattr(-, root, root, -)
+%{_libexecdir}/gvfsd-afc
+%{_datadir}/gvfs/mounts/afc.mount
+%{_libexecdir}/gvfs-afc-volume-monitor
+%{_datadir}/dbus-1/services/org.gtk.Private.AFCVolumeMonitor.service
+%{_datadir}/gvfs/remote-volume-monitors/afc.monitor
 
 %changelog
+* Tue Aug 11 2009 Bastien Nocera <bnocera at redhat.com> 1.3.4-2
+- Add AFC backend
+
 * Mon Aug 10 2009 Matthias Clasen <mclasen at redhat.com> - 1.3.4-1
 - Update to 1.3.4
 




More information about the fedora-extras-commits mailing list