summaryrefslogtreecommitdiffstats
path: root/cython/lockdown.pxi
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2013-02-27 15:10:57 +0100
committerGravatar Martin Szulecki2013-02-27 15:10:57 +0100
commit0cac547eb79492e04176ad541fe6fb1d1f576824 (patch)
treec285e1a996233b2829645144bdfb936d64b4fcc1 /cython/lockdown.pxi
parent12754fa1c93d810f408b2de291b44e39eaee7ee5 (diff)
downloadlibimobiledevice-0cac547eb79492e04176ad541fe6fb1d1f576824.tar.gz
libimobiledevice-0cac547eb79492e04176ad541fe6fb1d1f576824.tar.bz2
cython: Port all binding code to latest API and fix broken compilation
Diffstat (limited to 'cython/lockdown.pxi')
-rw-r--r--cython/lockdown.pxi39
1 files changed, 29 insertions, 10 deletions
diff --git a/cython/lockdown.pxi b/cython/lockdown.pxi
index b5207e8..6fbe0e6 100644
--- a/cython/lockdown.pxi
+++ b/cython/lockdown.pxi
@@ -29,7 +29,7 @@ cdef extern from "libimobiledevice/lockdown.h":
29 lockdownd_error_t lockdownd_get_value(lockdownd_client_t client, char *domain, char *key, plist.plist_t *value) 29 lockdownd_error_t lockdownd_get_value(lockdownd_client_t client, char *domain, char *key, plist.plist_t *value)
30 lockdownd_error_t lockdownd_set_value(lockdownd_client_t client, char *domain, char *key, plist.plist_t value) 30 lockdownd_error_t lockdownd_set_value(lockdownd_client_t client, char *domain, char *key, plist.plist_t value)
31 lockdownd_error_t lockdownd_remove_value(lockdownd_client_t client, char *domain, char *key) 31 lockdownd_error_t lockdownd_remove_value(lockdownd_client_t client, char *domain, char *key)
32 lockdownd_error_t lockdownd_start_service(lockdownd_client_t client, char *service, uint16_t *port) 32 lockdownd_error_t lockdownd_start_service(lockdownd_client_t client, char *identifier, lockdownd_service_descriptor_t *service)
33 lockdownd_error_t lockdownd_start_session(lockdownd_client_t client, char *host_id, char **session_id, int *ssl_enabled) 33 lockdownd_error_t lockdownd_start_session(lockdownd_client_t client, char *host_id, char **session_id, int *ssl_enabled)
34 lockdownd_error_t lockdownd_stop_session(lockdownd_client_t client, char *session_id) 34 lockdownd_error_t lockdownd_stop_session(lockdownd_client_t client, char *session_id)
35 lockdownd_error_t lockdownd_send(lockdownd_client_t client, plist.plist_t plist) 35 lockdownd_error_t lockdownd_send(lockdownd_client_t client, plist.plist_t plist)
@@ -43,6 +43,7 @@ cdef extern from "libimobiledevice/lockdown.h":
43 lockdownd_error_t lockdownd_goodbye(lockdownd_client_t client) 43 lockdownd_error_t lockdownd_goodbye(lockdownd_client_t client)
44 lockdownd_error_t lockdownd_get_sync_data_classes(lockdownd_client_t client, char ***classes, int *count) 44 lockdownd_error_t lockdownd_get_sync_data_classes(lockdownd_client_t client, char ***classes, int *count)
45 lockdownd_error_t lockdownd_data_classes_free(char **classes) 45 lockdownd_error_t lockdownd_data_classes_free(char **classes)
46 lockdownd_error_t lockdownd_service_descriptor_free(lockdownd_service_descriptor_t service)
46 47
47cdef class LockdownError(BaseError): 48cdef class LockdownError(BaseError):
48 def __init__(self, *args, **kwargs): 49 def __init__(self, *args, **kwargs):
@@ -89,6 +90,21 @@ cdef class LockdownPairRecord:
89 cdef bytes result = self._c_record.root_certificate 90 cdef bytes result = self._c_record.root_certificate
90 return result 91 return result
91 92
93cdef class LockdownServiceDescriptor:
94 #def __cinit__(self, uint16_t port, uint8_t ssl_enabled, *args, **kwargs):
95 def __dealloc__(self):
96 cdef lockdownd_error_t err
97 if self._c_service_descriptor is not NULL:
98 err = lockdownd_service_descriptor_free(self._c_service_descriptor)
99 self._c_service_descriptor = NULL
100 self.handle_error(err)
101 property port:
102 def __get__(self):
103 return self._c_service_descriptor.port
104 property ssl_enabled:
105 def __get__(self):
106 return self._c_service_descriptor.ssl_enabled
107
92cdef class LockdownClient(PropertyListService): 108cdef class LockdownClient(PropertyListService):
93 def __cinit__(self, iDevice device not None, bytes label=b'', bint handshake=True, *args, **kwargs): 109 def __cinit__(self, iDevice device not None, bytes label=b'', bint handshake=True, *args, **kwargs):
94 cdef: 110 cdef:
@@ -162,10 +178,11 @@ cdef class LockdownClient(PropertyListService):
162 cpdef remove_value(self, bytes domain, bytes key): 178 cpdef remove_value(self, bytes domain, bytes key):
163 self.handle_error(lockdownd_remove_value(self._c_client, domain, key)) 179 self.handle_error(lockdownd_remove_value(self._c_client, domain, key))
164 180
165 cpdef uint16_t start_service(self, object service): 181 cpdef object start_service(self, object service):
166 cdef: 182 cdef:
167 char* c_service_name = NULL 183 char* c_service_name = NULL
168 uint16_t port = 0 184 lockdownd_service_descriptor_t c_descriptor = NULL
185 LockdownServiceDescriptor result
169 186
170 if issubclass(service, BaseService) and \ 187 if issubclass(service, BaseService) and \
171 service.__service_name__ is not None \ 188 service.__service_name__ is not None \
@@ -177,24 +194,26 @@ cdef class LockdownClient(PropertyListService):
177 raise TypeError("LockdownClient.start_service() takes a BaseService or string as its first argument") 194 raise TypeError("LockdownClient.start_service() takes a BaseService or string as its first argument")
178 195
179 try: 196 try:
180 self.handle_error(lockdownd_start_service(self._c_client, c_service_name, &port)) 197 self.handle_error(lockdownd_start_service(self._c_client, c_service_name, &c_descriptor))
181 198
182 return port 199 result = LockdownServiceDescriptor.__new__(LockdownServiceDescriptor)
200 result._c_service_descriptor = c_descriptor
201
202 return result
183 except BaseError, e: 203 except BaseError, e:
184 raise 204 raise
185 205
186 cpdef object get_service_client(self, object service_class): 206 cpdef object get_service_client(self, object service_class):
187 cdef: 207 cdef:
188 uint16_t port = 0 208 LockdownServiceDescriptor descriptor
189 object result
190 209
191 if not hasattr(service_class, '__service_name__') and \ 210 if not hasattr(service_class, '__service_name__') and \
192 not service_class.__service_name__ is not None \ 211 not service_class.__service_name__ is not None \
193 and not isinstance(service_class.__service_name__, basestring): 212 and not isinstance(service_class.__service_name__, basestring):
194 raise TypeError("LockdownClient.get_service_client() takes a BaseService as its first argument") 213 raise TypeError("LockdownClient.get_service_client() takes a BaseService as its first argument")
195 214
196 port = self.start_service(service_class) 215 descriptor = self.start_service(service_class)
197 return service_class(self.device, port) 216 return service_class(self.device, descriptor)
198 217
199 cpdef tuple start_session(self, bytes host_id): 218 cpdef tuple start_session(self, bytes host_id):
200 cdef: 219 cdef: