diff options
Diffstat (limited to 'swig')
-rw-r--r-- | swig/Makefile.am | 18 | ||||
-rw-r--r-- | swig/__init__.py | 1 | ||||
-rw-r--r-- | swig/iphone.i | 156 |
3 files changed, 175 insertions, 0 deletions
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..e970e89 --- /dev/null +++ b/swig/iphone.i @@ -0,0 +1,156 @@ + /* swig.i */ + %module(package="libiphone") iPhone + %{ + /* Includes the header in the wrapper code */ + #include <libiphone/libiphone.h> + #include <plist/plist.h> +#include "../src/utils.h" + typedef struct { + iphone_device_t dev; + } iPhone; + + typedef struct { + iPhone* dev; + iphone_lckd_client_t client; + } Lockdownd; + + typedef struct { + Lockdownd* lckd; + iphone_msync_client_t client; + } MobileSync; + +//now declare funtions to handle creation and deletion of objects +void my_delete_iPhone(iPhone* dev); +Lockdownd* my_new_Lockdownd(iPhone* phone); +void my_delete_Lockdownd(Lockdownd* lckd); +MobileSync* my_new_MobileSync(Lockdownd* lckd); + + %} +/* Parse the header file to generate wrappers */ +%include "stdint.i" +%include "plist/swig/plist.i" + +typedef struct { + iphone_device_t dev; +} iPhone; + +typedef struct { + iPhone* dev; + iphone_lckd_client_t client; +} Lockdownd; + +typedef struct { + Lockdownd* lckd; + iphone_msync_client_t client; +} MobileSync; + +%inline %{ +//now define funtions to handle creation and deletion of objects + + +void my_delete_iPhone(iPhone* dev) { + if (dev) { + iphone_free_device ( dev->dev ); + free(dev); + } +} + +Lockdownd* my_new_Lockdownd(iPhone* phone) { + if (!phone) return NULL; + Lockdownd* client = (Lockdownd*) malloc(sizeof(Lockdownd)); + client->dev = phone; + client->client = NULL; + if (IPHONE_E_SUCCESS == iphone_lckd_new_client ( phone->dev , &(client->client))) { + return client; + } + else { + free(client); + return NULL; + } +} + +void my_delete_Lockdownd(Lockdownd* lckd) { + if (lckd) { + my_delete_iPhone(lckd->dev); + iphone_lckd_free_client ( lckd->client ); + free(lckd); + } +} + +MobileSync* my_new_MobileSync(Lockdownd* lckd) { + if (!lckd || !lckd->dev) return NULL; + MobileSync* client = NULL; + int port = 0; + if (IPHONE_E_SUCCESS == iphone_lckd_start_service ( lckd->client, "com.apple.mobilesync", &port )) { + client = (MobileSync*) malloc(sizeof(MobileSync)); + client->lckd = lckd; + client->client = NULL; + iphone_msync_new_client ( lckd->dev->dev, 3432, port, &(client->client)); + } + return client; +} + +%} + + +%extend iPhone { // Attach these functions to struct iPhone + iPhone() { + iPhone* phone = (iPhone*) malloc(sizeof(iPhone)); + phone->dev = NULL; + iphone_set_debug_mask(DBGMASK_LOCKDOWND | DBGMASK_MOBILESYNC); + return phone; + } + + ~iPhone() { + my_delete_iPhone($self); + } + + int InitDevice() { + if (IPHONE_E_SUCCESS == iphone_get_device ( &($self->dev))) + return 1; + return 0; + } + + Lockdownd* GetLockdownClient() { + return my_new_Lockdownd($self); + } +}; + + +%extend Lockdownd { // Attach these functions to struct Lockdownd + Lockdownd(iPhone* phone) { + return my_new_Lockdownd(phone); + } + + ~Lockdownd() { + my_delete_Lockdownd($self); + } + + MobileSync* GetMobileSyncClient() { + return my_new_MobileSync($self); + } +}; + +%extend MobileSync { // Attach these functions to struct MobileSync + MobileSync(Lockdownd* lckd) { + return my_new_MobileSync(lckd); + } + + ~MobileSync() { + my_delete_Lockdownd($self->lckd); + iphone_msync_free_client ( $self->client ); + free($self); + } + + void Send(PListNode* node) { + iphone_msync_send($self->client, node->node); + } + + PListNode* Receive() { + PListNode* node = (PListNode*)malloc(sizeof(PListNode)); + node->node = NULL; + iphone_msync_recv($self->client, &(node->node)); + return node; + } +}; + |