summaryrefslogtreecommitdiffstats
path: root/swig
diff options
context:
space:
mode:
Diffstat (limited to 'swig')
-rw-r--r--swig/Makefile.am18
-rw-r--r--swig/__init__.py1
-rw-r--r--swig/iphone.i157
3 files changed, 176 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..3ae0999
--- /dev/null
+++ b/swig/iphone.i
@@ -0,0 +1,157 @@
+ /* swig.i */
+ %module(package="libiphone") iPhone
+ %feature("autodoc", "1");
+ %{
+ /* 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 init_device() {
+ if (IPHONE_E_SUCCESS == iphone_get_device ( &($self->dev)))
+ return 1;
+ return 0;
+ }
+
+ Lockdownd* get_lockdown_client() {
+ 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* get_mobile_sync_client() {
+ 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;
+ }
+};
+