diff options
| author | 2009-01-13 18:57:52 +0100 | |
|---|---|---|
| committer | 2009-01-13 18:57:52 +0100 | |
| commit | d4694679f918750e920a2238d891cd2fbb741a90 (patch) | |
| tree | ea52b9d253993b31ec71cbad35280d7c5eeab957 | |
| parent | 564aebf941f2f0c5fb57d2f86091b37d6331b9d9 (diff) | |
| download | libimobiledevice-d4694679f918750e920a2238d891cd2fbb741a90.tar.gz libimobiledevice-d4694679f918750e920a2238d891cd2fbb741a90.tar.bz2 | |
Add parts of a python binding to libiphone that also include libplist (using SWIG).
| -rw-r--r-- | Makefile.am | 4 | ||||
| -rwxr-xr-x | autogen.sh | 2 | ||||
| -rw-r--r-- | configure.ac | 8 | ||||
| -rw-r--r-- | include/libiphone/libiphone.h | 11 | ||||
| -rw-r--r-- | m4/ac_pkg_swig.m4 | 122 | ||||
| -rw-r--r-- | m4/ac_python_devel.m4 | 265 | ||||
| -rw-r--r-- | m4/swig_python.m4 | 65 | ||||
| -rw-r--r-- | src/MobileSync.c | 4 | ||||
| -rw-r--r-- | src/MobileSync.h | 9 | ||||
| -rw-r--r-- | swig/Makefile.am | 18 | ||||
| -rw-r--r-- | swig/__init__.py | 1 | ||||
| -rw-r--r-- | swig/iphone.i | 123 | 
12 files changed, 618 insertions, 14 deletions
| diff --git a/Makefile.am b/Makefile.am index f103377..982f42b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@  AUTOMAKE_OPTIONS = foreign - -SUBDIRS = src include fdi $(DEV_SUB) +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = src include fdi swig $(DEV_SUB)  pkgconfigdir = $(libdir)/pkgconfig  pkgconfig_DATA = libiphone-1.0.pc @@ -1,5 +1,5 @@  #!/bin/sh -aclocal +aclocal -I m4  libtoolize  autoheader  automake --add-missing diff --git a/configure.ac b/configure.ac index 9516ec4..87ed8dc 100644 --- a/configure.ac +++ b/configure.ac @@ -6,9 +6,15 @@ AC_INIT(libiphone, 0.1.0, nospam@nowhere.com)  AM_INIT_AUTOMAKE(libiphone, 0.1.0)  AC_CONFIG_SRCDIR([src/])  AC_CONFIG_HEADER([config.h]) +AC_CONFIG_MACRO_DIR([m4])  AC_PROG_LIBTOOL +AM_PATH_PYTHON(2.3) +AC_PROG_SWIG(1.3.21) +SWIG_PYTHON + +  # Checks for programs.  AC_PROG_CC  AM_PROG_CC_C_O @@ -60,4 +66,4 @@ if test "$no_debug_code" = true; then  	AC_DEFINE(STRIP_DEBUG_CODE,1,[Strip debug reporting code])  fi -AC_OUTPUT(Makefile src/Makefile include/Makefile fdi/Makefile dev/Makefile libiphone-1.0.pc) +AC_OUTPUT(Makefile src/Makefile include/Makefile fdi/Makefile dev/Makefile swig/Makefile libiphone-1.0.pc) diff --git a/include/libiphone/libiphone.h b/include/libiphone/libiphone.h index aab7fdb..59d2de2 100644 --- a/include/libiphone/libiphone.h +++ b/include/libiphone/libiphone.h @@ -78,6 +78,9 @@ typedef struct iphone_afc_client_int *iphone_afc_client_t;  struct iphone_afc_file_int;  typedef struct iphone_afc_file_int *iphone_afc_file_t; +struct iphone_msync_client_int; +typedef struct iphone_msync_client_int *iphone_msync_client_t; +  //device related functions  void iphone_set_debug(int level);  iphone_error_t iphone_get_device ( iphone_device_t *device ); @@ -120,6 +123,14 @@ iphone_error_t iphone_afc_rename_file ( iphone_afc_client_t client, const char *  iphone_error_t iphone_afc_mkdir ( iphone_afc_client_t client, const char *dir); + +iphone_error_t iphone_msync_new_client(iphone_device_t device, int src_port, int dst_port, +									   iphone_msync_client_t * client); +iphone_error_t iphone_msync_free_client(iphone_msync_client_t client); + +iphone_error_t iphone_msync_recv(iphone_msync_client_t client, plist_t * plist); +iphone_error_t iphone_msync_send(iphone_msync_client_t client, plist_t plist); +  #ifdef __cplusplus  }  #endif diff --git a/m4/ac_pkg_swig.m4 b/m4/ac_pkg_swig.m4 new file mode 100644 index 0000000..738f69d --- /dev/null +++ b/m4/ac_pkg_swig.m4 @@ -0,0 +1,122 @@ +# =========================================================================== +#              http://autoconf-archive.cryp.to/ac_pkg_swig.html +# =========================================================================== +# +# SYNOPSIS +# +#   AC_PROG_SWIG([major.minor.micro]) +# +# DESCRIPTION +# +#   This macro searches for a SWIG installation on your system. If found you +#   should call SWIG via $(SWIG). You can use the optional first argument to +#   check if the version of the available SWIG is greater than or equal to +#   the value of the argument. It should have the format: N[.N[.N]] (N is a +#   number between 0 and 999. Only the first N is mandatory.) +# +#   If the version argument is given (e.g. 1.3.17), AC_PROG_SWIG checks that +#   the swig package is this version number or higher. +# +#   In configure.in, use as: +# +#     AC_PROG_SWIG(1.3.17) +#     SWIG_ENABLE_CXX +#     SWIG_MULTI_MODULE_SUPPORT +#     SWIG_PYTHON +# +# LAST MODIFICATION +# +#   2008-04-12 +# +# COPYLEFT +# +#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de> +#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca> +#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net> +#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za> +# +#   This program is free software; you can redistribute it and/or modify it +#   under the terms of the GNU General Public License as published by the +#   Free Software Foundation; either version 2 of the License, or (at your +#   option) any later version. +# +#   This program is distributed in the hope that it will be useful, but +#   WITHOUT ANY WARRANTY; without even the implied warranty of +#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +#   Public License for more details. +# +#   You should have received a copy of the GNU General Public License along +#   with this program. If not, see <http://www.gnu.org/licenses/>. +# +#   As a special exception, the respective Autoconf Macro's copyright owner +#   gives unlimited permission to copy, distribute and modify the configure +#   scripts that are the output of Autoconf when processing the Macro. You +#   need not follow the terms of the GNU General Public License when using +#   or distributing such scripts, even though portions of the text of the +#   Macro appear in them. The GNU General Public License (GPL) does govern +#   all other use of the material that constitutes the Autoconf Macro. +# +#   This special exception to the GPL applies to versions of the Autoconf +#   Macro released by the Autoconf Macro Archive. When you make and +#   distribute a modified version of the Autoconf Macro, you may extend this +#   special exception to the GPL to apply to your modified version as well. + +AC_DEFUN([AC_PROG_SWIG],[ +        AC_PATH_PROG([SWIG],[swig]) +        if test -z "$SWIG" ; then +                AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org]) +                SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false' +        elif test -n "$1" ; then +                AC_MSG_CHECKING([for SWIG version]) +                [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] +                AC_MSG_RESULT([$swig_version]) +                if test -n "$swig_version" ; then +                        # Calculate the required version number components +                        [required=$1] +                        [required_major=`echo $required | sed 's/[^0-9].*//'`] +                        if test -z "$required_major" ; then +                                [required_major=0] +                        fi +                        [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] +                        [required_minor=`echo $required | sed 's/[^0-9].*//'`] +                        if test -z "$required_minor" ; then +                                [required_minor=0] +                        fi +                        [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] +                        [required_patch=`echo $required | sed 's/[^0-9].*//'`] +                        if test -z "$required_patch" ; then +                                [required_patch=0] +                        fi +                        # Calculate the available version number components +                        [available=$swig_version] +                        [available_major=`echo $available | sed 's/[^0-9].*//'`] +                        if test -z "$available_major" ; then +                                [available_major=0] +                        fi +                        [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] +                        [available_minor=`echo $available | sed 's/[^0-9].*//'`] +                        if test -z "$available_minor" ; then +                                [available_minor=0] +                        fi +                        [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] +                        [available_patch=`echo $available | sed 's/[^0-9].*//'`] +                        if test -z "$available_patch" ; then +                                [available_patch=0] +                        fi +                        if test $available_major -ne $required_major \ +                                -o $available_minor -ne $required_minor \ +                                -o $available_patch -lt $required_patch ; then +                                AC_MSG_WARN([SWIG version >= $1 is required.  You have $swig_version.  You should look at http://www.swig.org]) +                                SWIG='echo "Error: SWIG version >= $1 is required.  You have '"$swig_version"'.  You should look at http://www.swig.org" ; false' +                        else +                                AC_MSG_NOTICE([SWIG executable is '$SWIG']) +                                SWIG_LIB=`$SWIG -swiglib` +                                AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB']) +                        fi +                else +                        AC_MSG_WARN([cannot determine SWIG version]) +                        SWIG='echo "Error: Cannot determine SWIG version.  You should look at http://www.swig.org" ; false' +                fi +        fi +        AC_SUBST([SWIG_LIB]) +]) diff --git a/m4/ac_python_devel.m4 b/m4/ac_python_devel.m4 new file mode 100644 index 0000000..7cec10f --- /dev/null +++ b/m4/ac_python_devel.m4 @@ -0,0 +1,265 @@ +# =========================================================================== +#            http://autoconf-archive.cryp.to/ac_python_devel.html +# =========================================================================== +# +# SYNOPSIS +# +#   AC_PYTHON_DEVEL([version]) +# +# DESCRIPTION +# +#   Note: Defines as a precious variable "PYTHON_VERSION". Don't override it +#   in your configure.ac. +# +#   This macro checks for Python and tries to get the include path to +#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) +#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and +#   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. +# +#   You can search for some particular version of Python by passing a +#   parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please +#   note that you *have* to pass also an operator along with the version to +#   match, and pay special attention to the single quotes surrounding the +#   version number. Don't use "PYTHON_VERSION" for this: that environment +#   variable is declared as precious and thus reserved for the end-user. +# +#   This macro should work for all versions of Python >= 2.1.0. As an end +#   user, you can disable the check for the python version by setting the +#   PYTHON_NOVERSIONCHECK environment variable to something else than the +#   empty string. +# +#   If you need to use this macro for an older Python version, please +#   contact the authors. We're always open for feedback. +# +# LAST MODIFICATION +# +#   2008-04-12 +# +# COPYLEFT +# +#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de> +#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca> +#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net> +#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za> +#   Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org> +#   Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org> +# +#   This program is free software: you can redistribute it and/or modify it +#   under the terms of the GNU General Public License as published by the +#   Free Software Foundation, either version 3 of the License, or (at your +#   option) any later version. +# +#   This program is distributed in the hope that it will be useful, but +#   WITHOUT ANY WARRANTY; without even the implied warranty of +#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +#   Public License for more details. +# +#   You should have received a copy of the GNU General Public License along +#   with this program. If not, see <http://www.gnu.org/licenses/>. +# +#   As a special exception, the respective Autoconf Macro's copyright owner +#   gives unlimited permission to copy, distribute and modify the configure +#   scripts that are the output of Autoconf when processing the Macro. You +#   need not follow the terms of the GNU General Public License when using +#   or distributing such scripts, even though portions of the text of the +#   Macro appear in them. The GNU General Public License (GPL) does govern +#   all other use of the material that constitutes the Autoconf Macro. +# +#   This special exception to the GPL applies to versions of the Autoconf +#   Macro released by the Autoconf Macro Archive. When you make and +#   distribute a modified version of the Autoconf Macro, you may extend this +#   special exception to the GPL to apply to your modified version as well. + +AC_DEFUN([AC_PYTHON_DEVEL],[ +	# +	# Allow the use of a (user set) custom python version +	# +	AC_ARG_VAR([PYTHON_VERSION],[The installed Python +		version to use, for example '2.3'. This string +		will be appended to the Python interpreter +		canonical name.]) + +	AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) +	if test -z "$PYTHON"; then +	   AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) +	   PYTHON_VERSION="" +	fi + +	# +	# Check for a version of Python >= 2.1.0 +	# +	AC_MSG_CHECKING([for a version of Python >= '2.1.0']) +	ac_supports_python_ver=`$PYTHON -c "import sys, string; \ +		ver = string.split(sys.version)[[0]]; \ +		print ver >= '2.1.0'"` +	if test "$ac_supports_python_ver" != "True"; then +		if test -z "$PYTHON_NOVERSIONCHECK"; then +			AC_MSG_RESULT([no]) +			AC_MSG_FAILURE([ +This version of the AC@&t@_PYTHON_DEVEL macro +doesn't work properly with versions of Python before +2.1.0. You may need to re-run configure, setting the +variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, +PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. +Moreover, to disable this check, set PYTHON_NOVERSIONCHECK +to something else than an empty string. +]) +		else +			AC_MSG_RESULT([skip at user request]) +		fi +	else +		AC_MSG_RESULT([yes]) +	fi + +	# +	# if the macro parameter ``version'' is set, honour it +	# +	if test -n "$1"; then +		AC_MSG_CHECKING([for a version of Python $1]) +		ac_supports_python_ver=`$PYTHON -c "import sys, string; \ +			ver = string.split(sys.version)[[0]]; \ +			print ver $1"` +		if test "$ac_supports_python_ver" = "True"; then +	   	   AC_MSG_RESULT([yes]) +		else +			AC_MSG_RESULT([no]) +			AC_MSG_ERROR([this package requires Python $1. +If you have it installed, but it isn't the default Python +interpreter in your system path, please pass the PYTHON_VERSION +variable to configure. See ``configure --help'' for reference. +]) +			PYTHON_VERSION="" +		fi +	fi + +	# +	# Check if you have distutils, else fail +	# +	AC_MSG_CHECKING([for the distutils Python package]) +	ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +	if test -z "$ac_distutils_result"; then +		AC_MSG_RESULT([yes]) +	else +		AC_MSG_RESULT([no]) +		AC_MSG_ERROR([cannot import Python module "distutils". +Please check your Python installation. The error was: +$ac_distutils_result]) +		PYTHON_VERSION="" +	fi + +	# +	# Check for Python include path +	# +	AC_MSG_CHECKING([for Python include path]) +	if test -z "$PYTHON_CPPFLAGS"; then +		python_path=`$PYTHON -c "import distutils.sysconfig; \ +           		print distutils.sysconfig.get_python_inc();"` +		if test -n "${python_path}"; then +		   	python_path="-I$python_path" +		fi +		PYTHON_CPPFLAGS=$python_path +	fi +	AC_MSG_RESULT([$PYTHON_CPPFLAGS]) +	AC_SUBST([PYTHON_CPPFLAGS]) + +	# +	# Check for Python library path +	# +	AC_MSG_CHECKING([for Python library path]) +	if test -z "$PYTHON_LDFLAGS"; then +		# (makes two attempts to ensure we've got a version number +		# from the interpreter) +		py_version=`$PYTHON -c "from distutils.sysconfig import *; \ +			from string import join; \ +			print join(get_config_vars('VERSION'))"` +		if test "$py_version" == "[None]"; then +			if test -n "$PYTHON_VERSION"; then +				py_version=$PYTHON_VERSION +			else +				py_version=`$PYTHON -c "import sys; \ +					print sys.version[[:3]]"` +			fi +		fi + +		PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \ +			from string import join; \ +			print '-L' + get_python_lib(0,1), \ +		      	'-lpython';"`$py_version +	fi +	AC_MSG_RESULT([$PYTHON_LDFLAGS]) +	AC_SUBST([PYTHON_LDFLAGS]) + +	# +	# Check for site packages +	# +	AC_MSG_CHECKING([for Python site-packages path]) +	if test -z "$PYTHON_SITE_PKG"; then +		PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ +		        print distutils.sysconfig.get_python_lib(0,0);"` +	fi +	AC_MSG_RESULT([$PYTHON_SITE_PKG]) +	AC_SUBST([PYTHON_SITE_PKG]) + +	# +	# libraries which must be linked in when embedding +	# +	AC_MSG_CHECKING(python extra libraries) +	if test -z "$PYTHON_EXTRA_LIBS"; then +	   PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ +                conf = distutils.sysconfig.get_config_var; \ +                print conf('LOCALMODLIBS'), conf('LIBS')"` +	fi +	AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) +	AC_SUBST(PYTHON_EXTRA_LIBS) + +	# +	# linking flags needed when embedding +	# +	AC_MSG_CHECKING(python extra linking flags) +	if test -z "$PYTHON_EXTRA_LDFLAGS"; then +		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ +			conf = distutils.sysconfig.get_config_var; \ +			print conf('LINKFORSHARED')"` +	fi +	AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) +	AC_SUBST(PYTHON_EXTRA_LDFLAGS) + +	# +	# final check to see if everything compiles alright +	# +	AC_MSG_CHECKING([consistency of all components of python development environment]) +	AC_LANG_PUSH([C]) +	# save current global flags +	LIBS="$ac_save_LIBS $PYTHON_LDFLAGS" +	CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" +	AC_TRY_LINK([ +		#include <Python.h> +	],[ +		Py_Initialize(); +	],[pythonexists=yes],[pythonexists=no]) + +	AC_MSG_RESULT([$pythonexists]) + +        if test ! "$pythonexists" = "yes"; then +	   AC_MSG_ERROR([ +  Could not link test program to Python. Maybe the main Python library has been +  installed in some non-standard library path. If so, pass it to configure, +  via the LDFLAGS environment variable. +  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" +  ============================================================================ +   ERROR! +   You probably have to install the development version of the Python package +   for your distribution.  The exact name of this package varies among them. +  ============================================================================ +	   ]) +	  PYTHON_VERSION="" +	fi +	AC_LANG_POP +	# turn back to default flags +	CPPFLAGS="$ac_save_CPPFLAGS" +	LIBS="$ac_save_LIBS" + +	# +	# all done! +	# +]) diff --git a/m4/swig_python.m4 b/m4/swig_python.m4 new file mode 100644 index 0000000..2496976 --- /dev/null +++ b/m4/swig_python.m4 @@ -0,0 +1,65 @@ +# =========================================================================== +#              http://autoconf-archive.cryp.to/swig_python.html +# =========================================================================== +# +# SYNOPSIS +# +#   SWIG_PYTHON([use-shadow-classes = {no, yes}]) +# +# DESCRIPTION +# +#   Checks for Python and provides the $(SWIG_PYTHON_CPPFLAGS), and +#   $(SWIG_PYTHON_OPT) output variables. +# +#   $(SWIG_PYTHON_OPT) contains all necessary SWIG options to generate code +#   for Python. Shadow classes are enabled unless the value of the optional +#   first argument is exactly 'no'. If you need multi module support +#   (provided by the SWIG_MULTI_MODULE_SUPPORT macro) use +#   $(SWIG_PYTHON_LIBS) to link against the appropriate library. It contains +#   the SWIG Python runtime library that is needed by the type check system +#   for example. +# +# LAST MODIFICATION +# +#   2008-04-12 +# +# COPYLEFT +# +#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de> +#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca> +#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net> +#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za> +# +#   This program is free software; you can redistribute it and/or modify it +#   under the terms of the GNU General Public License as published by the +#   Free Software Foundation; either version 2 of the License, or (at your +#   option) any later version. +# +#   This program is distributed in the hope that it will be useful, but +#   WITHOUT ANY WARRANTY; without even the implied warranty of +#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +#   Public License for more details. +# +#   You should have received a copy of the GNU General Public License along +#   with this program. If not, see <http://www.gnu.org/licenses/>. +# +#   As a special exception, the respective Autoconf Macro's copyright owner +#   gives unlimited permission to copy, distribute and modify the configure +#   scripts that are the output of Autoconf when processing the Macro. You +#   need not follow the terms of the GNU General Public License when using +#   or distributing such scripts, even though portions of the text of the +#   Macro appear in them. The GNU General Public License (GPL) does govern +#   all other use of the material that constitutes the Autoconf Macro. +# +#   This special exception to the GPL applies to versions of the Autoconf +#   Macro released by the Autoconf Macro Archive. When you make and +#   distribute a modified version of the Autoconf Macro, you may extend this +#   special exception to the GPL to apply to your modified version as well. + +AC_DEFUN([SWIG_PYTHON],[ +        AC_REQUIRE([AC_PROG_SWIG]) +        AC_REQUIRE([AC_PYTHON_DEVEL]) +        test "x$1" != "xno" || swig_shadow=" -noproxy" +        AC_SUBST([SWIG_PYTHON_OPT],[-python$swig_shadow]) +        AC_SUBST([SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS]) +]) diff --git a/src/MobileSync.c b/src/MobileSync.c index ae22f4b..a2a361e 100644 --- a/src/MobileSync.c +++ b/src/MobileSync.c @@ -115,11 +115,11 @@ static void iphone_msync_stop_session(iphone_msync_client_t client)  	array = NULL;  } -void iphone_msync_free_client(iphone_msync_client_t client) +iphone_error_t iphone_msync_free_client(iphone_msync_client_t client)  {  	iphone_msync_stop_session(client); -	iphone_mux_free_client(client->connection); +	return iphone_mux_free_client(client->connection);  }  /** Polls the iPhone for MobileSync data. diff --git a/src/MobileSync.h b/src/MobileSync.h index b59547c..7655b59 100644 --- a/src/MobileSync.h +++ b/src/MobileSync.h @@ -27,19 +27,12 @@  #include <plist/plist.h> -struct iphone_msync_client_int; -typedef struct iphone_msync_client_int *iphone_msync_client_t; +  struct iphone_msync_client_int {  	iphone_umux_client_t connection;  }; -iphone_error_t iphone_msync_new_client(iphone_device_t device, int src_port, int dst_port, -									   iphone_msync_client_t * client); -void iphone_msync_free_client(iphone_msync_client_t client); - -iphone_error_t iphone_msync_recv(iphone_msync_client_t client, plist_t * plist); -iphone_error_t iphone_msync_send(iphone_msync_client_t client, plist_t plist);  iphone_error_t iphone_msync_get_all_contacts(iphone_msync_client_t client); diff --git a/swig/Makefile.am b/swig/Makefile.am new file mode 100644 index 0000000..e47356b --- /dev/null +++ b/swig/Makefile.am @@ -0,0 +1,18 @@ +INCLUDES = -I$(top_srcdir)/include  $(libplist_CFLAGS) + +BUILT_SOURCES = $(srcdir)/iphone_wrap.c +SWIG_SOURCES = iphone.i + +swigincludedir =$(includedir)/libiphone/swig +swiginclude_HEADERS = $(SWIG_SOURCES) + +pkgpython_PYTHON = iPhone.py __init__.py +pkgpyexec_LTLIBRARIES = _iPhone.la +_iPhone_la_SOURCES = $(srcdir)/iphone_wrap.c $(SWIG_SOURCES) +_iPhone_la_CFLAGS = $(PYTHON_CPPFLAGS) -I$(top_srcdir)/src +_iPhone_la_LDFLAGS = -module $(PYTHON_LDFLAGS) +_iPhone_la_LIBADD = ../src/libiphone.la + +$(srcdir)/iphone_wrap.c : $(SWIG_SOURCES) +	$(SWIG) $(SWIG_PYTHON_OPT) $(INCLUDES) -I$(top_srcdir)/src -o $@ $< + diff --git a/swig/__init__.py b/swig/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/swig/__init__.py @@ -0,0 +1 @@ +  diff --git a/swig/iphone.i b/swig/iphone.i new file mode 100644 index 0000000..fb16208 --- /dev/null +++ b/swig/iphone.i @@ -0,0 +1,123 @@ + /* swig.i */ + %module(package="libiphone") iPhone + %{ + /* Includes the header in the wrapper code */ + #include <libiphone/libiphone.h> + #include <plist/plist.h> + + typedef struct { +	iphone_device_t dev; + } iPhone; + + typedef struct { +	iphone_device_t dev; +	iphone_lckd_client_t client; + } Lockdownd; + + typedef struct { +	iphone_msync_client_t client; + } MobileSync; +//typedef struct { +//	plist_t node; +//} PListNode; + %} +/* Parse the header file to generate wrappers */ +%include "plist/swig/plist.i" + //(module="libplist.PList")override module name until package path gets fixed in swig (1.3.37) + +typedef struct { +	iphone_device_t dev; +} iPhone; + +typedef struct { +	iphone_device_t dev; +	iphone_lckd_client_t client; +} Lockdownd; + +typedef struct { +	iphone_msync_client_t client; +} MobileSync; + +%extend iPhone {             // Attach these functions to struct iPhone +	iPhone() { +		iPhone* phone = (iPhone*) malloc(sizeof(iPhone)); +		if (IPHONE_E_SUCCESS == iphone_get_device ( &phone->dev )) +			return phone; +		free(phone); +		return NULL; +	} + +	~iPhone() { +		iphone_free_device ( $self->dev ); +		free($self); +	} + +	Lockdownd* GetLockdownClient() { +		Lockdownd* client = (Lockdownd*) malloc(sizeof(Lockdownd)); +		client->client = NULL; +		if (IPHONE_E_SUCCESS == iphone_lckd_new_client ( $self->dev , &(client->client)) ) { +			client->dev = $self->dev; +			return client; +		} +		free(client); +		return NULL; +	} +}; + +%extend Lockdownd {             // Attach these functions to struct Lockdownd +	Lockdownd(iPhone* phone) { +		if (!phone) return NULL; +		Lockdownd* client = (Lockdownd*) malloc(sizeof(Lockdownd)); +		client->client = NULL; +		if (IPHONE_E_SUCCESS == iphone_lckd_new_client ( phone->dev , &client->client)) { +			client->dev = phone->dev; +			return client; +		} +		else { +			free(client); +			return NULL; +		} +	} + +	~Lockdownd() { +		iphone_lckd_free_client ( $self->client ); +		free($self); +	} + +	MobileSync* GetMobileSyncClient() { +		int port = 0; +		if (IPHONE_E_SUCCESS == iphone_lckd_start_service ( $self->client, "com.apple.mobilesync", &port )) { +			MobileSync* client = (MobileSync*) malloc(sizeof(MobileSync)); +			client->client = NULL; +			if (IPHONE_E_SUCCESS == iphone_msync_new_client ( $self->dev, 3432, port, &(client->client))) +				return client; +		} +		return NULL; +	} +}; + +%extend MobileSync {             // Attach these functions to struct MobileSync +	MobileSync(iPhone* phone, int src_port, int dst_port) { +		if (!phone) return NULL; +		MobileSync* client = (MobileSync*) malloc(sizeof(MobileSync)); +		client->client = NULL; +		iphone_msync_new_client ( phone->dev, src_port, dst_port, &client->client); +		return client; +	} + +	~MobileSync() { +		iphone_msync_free_client ( $self->client ); +		free($self); +	} + +	void Send(PListNode* node) { +		iphone_msync_send($self->client, node->node); +	} + +	PListNode* Receive() { +		PListNode* node = NULL; +		iphone_msync_recv($self->client, &(node->node)); +		return node; +	} +}; + | 
