summaryrefslogtreecommitdiffstats
path: root/cython
diff options
context:
space:
mode:
Diffstat (limited to 'cython')
-rw-r--r--cython/mobile_image_mounter.pxi43
1 files changed, 40 insertions, 3 deletions
diff --git a/cython/mobile_image_mounter.pxi b/cython/mobile_image_mounter.pxi
index a23a59b..d9d40d5 100644
--- a/cython/mobile_image_mounter.pxi
+++ b/cython/mobile_image_mounter.pxi
@@ -13,7 +13,9 @@ cdef extern from "libimobiledevice/mobile_image_mounter.h":
13 mobile_image_mounter_error_t mobile_image_mounter_new(idevice_t device, lockdownd_service_descriptor_t descriptor, mobile_image_mounter_client_t *client) 13 mobile_image_mounter_error_t mobile_image_mounter_new(idevice_t device, lockdownd_service_descriptor_t descriptor, mobile_image_mounter_client_t *client)
14 mobile_image_mounter_error_t mobile_image_mounter_free(mobile_image_mounter_client_t client) 14 mobile_image_mounter_error_t mobile_image_mounter_free(mobile_image_mounter_client_t client)
15 mobile_image_mounter_error_t mobile_image_mounter_lookup_image(mobile_image_mounter_client_t client, char *image_type, plist.plist_t *result) 15 mobile_image_mounter_error_t mobile_image_mounter_lookup_image(mobile_image_mounter_client_t client, char *image_type, plist.plist_t *result)
16 mobile_image_mounter_error_t mobile_image_mounter_mount_image(mobile_image_mounter_client_t client, char *image_path, char *image_signature, uint16_t signature_length, char *image_type, plist.plist_t *result) 16 mobile_image_mounter_error_t mobile_image_mounter_mount_image_with_options(mobile_image_mounter_client_t client, char *image_path, const unsigned char *signature, unsigned int signature_length, char *image_type, plist.plist_t options, plist.plist_t *result)
17 mobile_image_mounter_error_t mobile_image_mounter_mount_image(mobile_image_mounter_client_t client, char *image_path, const unsigned char *signature, unsigned int signature_length, char *image_type, plist.plist_t *result)
18 mobile_image_mounter_error_t mobile_image_mounter_unmount_image(mobile_image_mounter_client_t client, const char *mount_path);
17 mobile_image_mounter_error_t mobile_image_mounter_hangup(mobile_image_mounter_client_t client) 19 mobile_image_mounter_error_t mobile_image_mounter_hangup(mobile_image_mounter_client_t client)
18 20
19cdef class MobileImageMounterError(BaseError): 21cdef class MobileImageMounterError(BaseError):
@@ -57,11 +59,39 @@ cdef class MobileImageMounterClient(PropertyListService):
57 if c_node != NULL: 59 if c_node != NULL:
58 plist.plist_free(c_node) 60 plist.plist_free(c_node)
59 61
60 cpdef plist.Node mount_image(self, bytes image_path, bytes image_signature, bytes image_type): 62 cpdef plist.Node mount_image_with_options(self, bytes image_path, bytes signature, bytes image_type, object options):
61 cdef: 63 cdef:
64 plist.Node n_options
65 plist.plist_t c_options
66 plist.plist_t c_result = NULL
67 bint free_options = False
62 plist.plist_t c_node = NULL 68 plist.plist_t c_node = NULL
63 mobile_image_mounter_error_t err 69 mobile_image_mounter_error_t err
64 err = mobile_image_mounter_mount_image(self._c_client, image_path, image_signature, len(image_signature), 70 if isinstance(options, plist.Dict):
71 n_options = options
72 c_options = n_options._c_node
73 elif isinstance(options, dict):
74 c_options = plist.native_to_plist_t(options)
75 free_options = True
76 else:
77 raise InstallationProxyError(INSTPROXY_E_INVALID_ARG)
78 err = mobile_image_mounter_mount_image_with_options(self._c_client, image_path, signature, len(signature),
79 image_type, c_options, &c_node)
80 if free_options:
81 plist.plist_free(c_options)
82 try:
83 self.handle_error(err)
84
85 return plist.plist_t_to_node(c_node)
86 except Exception, e:
87 if c_node != NULL:
88 plist.plist_free(c_node)
89
90 cpdef plist.Node mount_image(self, bytes image_path, bytes signature, bytes image_type):
91 cdef:
92 plist.plist_t c_node = NULL
93 mobile_image_mounter_error_t err
94 err = mobile_image_mounter_mount_image(self._c_client, image_path, signature, len(signature),
65 image_type, &c_node) 95 image_type, &c_node)
66 96
67 try: 97 try:
@@ -72,6 +102,13 @@ cdef class MobileImageMounterClient(PropertyListService):
72 if c_node != NULL: 102 if c_node != NULL:
73 plist.plist_free(c_node) 103 plist.plist_free(c_node)
74 104
105 cpdef unmount_image(self, bytes mount_path):
106 cdef:
107 mobile_image_mounter_error_t err
108 err = mobile_image_mounter_unmount_image(self._c_client, mount_path)
109
110 self.handle_error(err)
111
75 cpdef hangup(self): 112 cpdef hangup(self):
76 cdef mobile_image_mounter_error_t err 113 cdef mobile_image_mounter_error_t err
77 err = mobile_image_mounter_hangup(self._c_client) 114 err = mobile_image_mounter_hangup(self._c_client)