From fb337f26c8e58ed0ce0750f7899ccbd5da203dee Mon Sep 17 00:00:00 2001
From: wendyisgr33n <wendyisgr33n@gmail.com>
Date: Mon, 30 Jul 2018 10:43:57 -0700
Subject: [PATCH 1/5] Fixed AFC afc.pxi definitions for Python2/3
 compatibility. Added missing public method 'remove_path_and_contents'

---
 cython/afc.pxi | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/cython/afc.pxi b/cython/afc.pxi
index e34588f9..6bd81824 100644
--- a/cython/afc.pxi
+++ b/cython/afc.pxi
@@ -52,6 +52,7 @@ cdef extern from "libimobiledevice/afc.h":
     afc_error_t afc_read_directory(afc_client_t client, char *dir, char ***list)
     afc_error_t afc_get_file_info(afc_client_t client, char *filename, char ***infolist)
     afc_error_t afc_remove_path(afc_client_t client, char *path)
+    afc_error_t afc_remove_path_and_contents(afc_client_t client, char *path)
     afc_error_t afc_rename_path(afc_client_t client, char *f, char *to)
     afc_error_t afc_make_directory(afc_client_t client, char *dir)
     afc_error_t afc_truncate(afc_client_t client, char *path, uint64_t newsize)
@@ -235,17 +236,17 @@ cdef class AfcClient(BaseService):
             afc_file_mode_t c_mode
             uint64_t handle
             AfcFile f
-        if mode == <bytes>'r':
+        if mode == b'r':
             c_mode = AFC_FOPEN_RDONLY
-        elif mode == <bytes>'r+':
+        elif mode == b'r+':
             c_mode = AFC_FOPEN_RW
-        elif mode == <bytes>'w':
+        elif mode == b'w':
             c_mode = AFC_FOPEN_WRONLY
-        elif mode == <bytes>'w+':
+        elif mode == b'w+':
             c_mode = AFC_FOPEN_WR
-        elif mode == <bytes>'a':
+        elif mode == b'a':
             c_mode = AFC_FOPEN_APPEND
-        elif mode == <bytes>'a+':
+        elif mode == b'a+':
             c_mode = AFC_FOPEN_RDAPPEND
         else:
             raise ValueError("mode string must be 'r', 'r+', 'w', 'w+', 'a', or 'a+'")
@@ -282,6 +283,9 @@ cdef class AfcClient(BaseService):
     cpdef remove_path(self, bytes path):
         self.handle_error(afc_remove_path(self._c_client, path))

+    cpdef remove_path_and_contents(self, bytes path):
+        self.handle_error(afc_remove_path_and_contents(self._c_client, path))
+
     cpdef rename_path(self, bytes f, bytes t):
         self.handle_error(afc_rename_path(self._c_client, f, t))

@@ -308,17 +312,17 @@ cdef class Afc2Client(AfcClient):
             afc_file_mode_t c_mode
             uint64_t handle
             AfcFile f
-        if mode == <bytes>'r':
+        if mode == b'r':
             c_mode = AFC_FOPEN_RDONLY
-        elif mode == <bytes>'r+':
+        elif mode == b'r+':
             c_mode = AFC_FOPEN_RW
-        elif mode == <bytes>'w':
+        elif mode == b'w':
             c_mode = AFC_FOPEN_WRONLY
-        elif mode == <bytes>'w+':
+        elif mode == b'w+':
             c_mode = AFC_FOPEN_WR
-        elif mode == <bytes>'a':
+        elif mode == b'a':
             c_mode = AFC_FOPEN_APPEND
-        elif mode == <bytes>'a+':
+        elif mode == b'a+':
             c_mode = AFC_FOPEN_RDAPPEND
         else:
             raise ValueError("mode string must be 'r', 'r+', 'w', 'w+', 'a', or 'a+'")

From b71e8935949a1d6f419a3f783d804809fb4c309b Mon Sep 17 00:00:00 2001
From: wendyisgr33n <wendyisgr33n@gmail.com>
Date: Mon, 30 Jul 2018 10:44:40 -0700
Subject: [PATCH 2/5] Fixed debugserver.pxi PyString_AsString compatibility
 with Python3

---
 cython/debugserver.pxi | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/cython/debugserver.pxi b/cython/debugserver.pxi
index ddbe0667..c28a40b2 100644
--- a/cython/debugserver.pxi
+++ b/cython/debugserver.pxi
@@ -44,7 +44,12 @@ cdef class DebugServerError(BaseError):


 # from http://stackoverflow.com/a/17511714
-from cpython.string cimport PyString_AsString
+# https://github.com/libimobiledevice/libimobiledevice/pull/198
+from cpython cimport PY_MAJOR_VERSION
+if PY_MAJOR_VERSION <= 2:
+    from cpython.string cimport PyString_AsString
+else:
+    from cpython.bytes cimport PyBytes_AsString as PyString_AsString
 cdef char ** to_cstring_array(list_str):
     if not list_str:
         return NULL

From 44f54cdc0ebb052e4a642023bbf96504e6139ec9 Mon Sep 17 00:00:00 2001
From: wendyisgr33n <wendyisgr33n@gmail.com>
Date: Mon, 30 Jul 2018 10:45:22 -0700
Subject: [PATCH 3/5] Fixed bytes/strings check in imobiledevice.pyx for
 compatibility with Python2/3

---
 cython/imobiledevice.pyx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cython/imobiledevice.pyx b/cython/imobiledevice.pyx
index bc861b33..24a5201f 100644
--- a/cython/imobiledevice.pyx
+++ b/cython/imobiledevice.pyx
@@ -171,7 +171,7 @@ from libc.stdlib cimport *
 cdef class iDevice(Base):
     def __cinit__(self, object udid=None, *args, **kwargs):
         cdef char* c_udid = NULL
-        if isinstance(udid, basestring):
+        if isinstance(udid, (str, bytes)):
             c_udid = <bytes>udid
         elif udid is not None:
             raise TypeError("iDevice's constructor takes a string or None as the udid argument")

From 8908619973e751b778d3fb73dc309cd5cb7f4122 Mon Sep 17 00:00:00 2001
From: wendyisgr33n <wendyisgr33n@gmail.com>
Date: Mon, 30 Jul 2018 10:45:55 -0700
Subject: [PATCH 4/5] Fixed bytes/strings checks in lockdown.pxi for
 compatibility with Python2/3

---
 cython/lockdown.pxi | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cython/lockdown.pxi b/cython/lockdown.pxi
index f2490497..1bf7072e 100644
--- a/cython/lockdown.pxi
+++ b/cython/lockdown.pxi
@@ -230,9 +230,9 @@ cdef class LockdownClient(PropertyListService):

         if issubclass(service, BaseService) and \
             service.__service_name__ is not None \
-            and isinstance(service.__service_name__, basestring):
+            and isinstance(service.__service_name__, (str, bytes)):
             c_service_name = <bytes>service.__service_name__
-        elif isinstance(service, basestring):
+        elif isinstance(service, (str, bytes)):
             c_service_name = <bytes>service
         else:
             raise TypeError("LockdownClient.start_service() takes a BaseService or string as its first argument")
@@ -253,7 +253,7 @@ cdef class LockdownClient(PropertyListService):

         if not hasattr(service_class, '__service_name__') and \
             not service_class.__service_name__ is not None \
-            and not isinstance(service_class.__service_name__, basestring):
+            and not isinstance(service_class.__service_name__, (str, bytes)):
             raise TypeError("LockdownClient.get_service_client() takes a BaseService as its first argument")

         descriptor = self.start_service(service_class)

From e59cbdbf4e7dba98ef57a54e314a89edfea0a3dc Mon Sep 17 00:00:00 2001
From: wendyisgr33n <wendyisgr33n@gmail.com>
Date: Mon, 30 Jul 2018 10:47:48 -0700
Subject: [PATCH 5/5] Fixed method visibility in mobilebackup2.pxi API

---
 cython/mobilebackup2.pxi | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/cython/mobilebackup2.pxi b/cython/mobilebackup2.pxi
index aac53589..56483ced 100644
--- a/cython/mobilebackup2.pxi
+++ b/cython/mobilebackup2.pxi
@@ -54,10 +54,10 @@ cdef class MobileBackup2Client(PropertyListService):
     cdef inline BaseError _error(self, int16_t ret):
         return MobileBackup2Error(ret)

-    cdef send_message(self, bytes message, plist.Node options):
+    cpdef send_message(self, bytes message, plist.Node options):
         self.handle_error(mobilebackup2_send_message(self._c_client, message, options._c_node))

-    cdef tuple receive_message(self):
+    cpdef tuple receive_message(self):
         cdef:
             char* dlmessage = NULL
             plist.plist_t c_node = NULL
@@ -73,29 +73,34 @@ cdef class MobileBackup2Client(PropertyListService):
                 free(dlmessage)
             raise

-    cdef int send_raw(self, bytes data, int length):
+    cpdef int send_raw(self, bytes data, int length):
         cdef:
-            uint32_t bytes = 0
+            uint32_t bytes_recvd = 0
             mobilebackup2_error_t err
-        err = mobilebackup2_send_raw(self._c_client, data, length, &bytes)
+        err = mobilebackup2_send_raw(self._c_client, data, length, &bytes_recvd)
         try:
             self.handle_error(err)
-            return <bint>bytes
+            return <bint>bytes_recvd
         except BaseError, e:
             raise

-    cdef int receive_raw(self, bytes data, int length):
+    cpdef int receive_raw(self, bytearray data, int length):
         cdef:
-            uint32_t bytes = 0
+            uint32_t bytes_recvd = 0
             mobilebackup2_error_t err
-        err = mobilebackup2_receive_raw(self._c_client, data, length, &bytes)
+        err = mobilebackup2_receive_raw(self._c_client, data, length, &bytes_recvd)
+
+        # Throwing an exception when we test if theres more data to read is excessive
+        if err == -1 and bytes_recvd == 0:
+            return 0
+
         try:
             self.handle_error(err)
-            return <bint>bytes
+            return <bint>bytes_recvd
         except BaseError, e:
             raise

-    cdef float version_exchange(self, double[::1] local_versions):
+    cpdef float version_exchange(self, double[::1] local_versions):
         cdef:
             double[::1] temp = None
             double remote_version = 0.0
@@ -107,8 +112,8 @@ cdef class MobileBackup2Client(PropertyListService):
         except BaseError, e:
             raise

-    cdef send_request(self, bytes request, bytes target_identifier, bytes source_identifier, plist.Node options):
+    cpdef send_request(self, bytes request, bytes target_identifier, bytes source_identifier, plist.Node options):
         self.handle_error(mobilebackup2_send_request(self._c_client, request, target_identifier, source_identifier, options._c_node))

-    cdef send_status_response(self, int status_code, bytes status1, plist.Node status2):
+    cpdef send_status_response(self, int status_code, bytes status1, plist.Node status2):
         self.handle_error(mobilebackup2_send_status_response(self._c_client, status_code, status1, status2._c_node))
From 900cc8c1d6cba31cd574a9b71d333fc21bdac1f4 Mon Sep 17 00:00:00 2001
From: aymenim <aymen_ibrahim@hotmail.com>
Date: Tue, 15 Mar 2016 23:56:08 +0300
Subject: [PATCH 1/2] cython: fixed notification_proxy callback gil lock

cython notification proxy bug segmentation fault when callback called
without gil
---
 cython/notification_proxy.pxi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cython/notification_proxy.pxi b/cython/notification_proxy.pxi
index 4ffbf074..203c7835 100644
--- a/cython/notification_proxy.pxi
+++ b/cython/notification_proxy.pxi
@@ -70,7 +70,7 @@ NP_ITDBPREP_DID_END = C_NP_ITDBPREP_DID_END
 NP_LANGUAGE_CHANGED = C_NP_LANGUAGE_CHANGED
 NP_ADDRESS_BOOK_PREF_CHANGED = C_NP_ADDRESS_BOOK_PREF_CHANGED

-cdef void np_notify_cb(const_char_ptr notification, void *py_callback):
+cdef void np_notify_cb(const_char_ptr notification, void *py_callback) with gil:
     (<object>py_callback)(notification)

 cdef class NotificationProxyError(BaseError):

From 62f8903a024f96040d0f7f0658ba4722389b3169 Mon Sep 17 00:00:00 2001
From: aymenim <aymen_ibrahim@hotmail.com>
Date: Mon, 21 Mar 2016 11:27:26 +0300
Subject: [PATCH 2/2] cython binding passing null to lockdown set value

* added code to handle passing null values to lockdown_set_value,
needed for  example setting  device name .
---
 cython/lockdown.pxi | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/cython/lockdown.pxi b/cython/lockdown.pxi
index c8d511eb..e4f76084 100644
--- a/cython/lockdown.pxi
+++ b/cython/lockdown.pxi
@@ -210,14 +210,23 @@ cdef class LockdownClient(PropertyListService):
             raise

     cpdef set_value(self, bytes domain, bytes key, object value):
-        cdef plist.plist_t c_node = plist.native_to_plist_t(value)
+        cdef:
+            plist.plist_t c_node = NULL
+            char* c_domain = NULL
+            char* c_key = NULL
+
+        c_node = plist.native_to_plist_t(value)
+        if domain is not None:
+            c_domain = domain
+        if key is not None:
+            c_key = key
         try:
-            self.handle_error(lockdownd_set_value(self._c_client, domain, key, c_node))
+            self.handle_error(lockdownd_set_value(self._c_client, c_domain, c_key, c_node))
         except BaseError, e:
             raise
         finally:
             if c_node != NULL:
-                plist.plist_free(c_node)
+                c_node = NULL

     cpdef remove_value(self, bytes domain, bytes key):
         self.handle_error(lockdownd_remove_value(self._c_client, domain, key))