diff options
Diffstat (limited to 'cython/notification_proxy.pxi')
-rw-r--r-- | cython/notification_proxy.pxi | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/cython/notification_proxy.pxi b/cython/notification_proxy.pxi new file mode 100644 index 0000000..261200e --- /dev/null +++ b/cython/notification_proxy.pxi | |||
@@ -0,0 +1,110 @@ | |||
1 | cdef extern from "libimobiledevice/notification_proxy.h": | ||
2 | cdef struct np_client_private: | ||
3 | pass | ||
4 | ctypedef np_client_private *np_client_t | ||
5 | ctypedef enum np_error_t: | ||
6 | NP_E_SUCCESS = 0 | ||
7 | NP_E_INVALID_ARG = -1 | ||
8 | NP_E_PLIST_ERROR = -2 | ||
9 | NP_E_CONN_FAILED = -3 | ||
10 | NP_E_UNKNOWN_ERROR = -256 | ||
11 | ctypedef void (*np_notify_cb_t) (const_char_ptr notification, void *userdata) | ||
12 | np_error_t np_client_new(idevice_t device, lockdownd_service_descriptor_t descriptor, np_client_t *client) | ||
13 | np_error_t np_client_free(np_client_t client) | ||
14 | np_error_t np_post_notification(np_client_t client, char *notification) | ||
15 | np_error_t np_observe_notification(np_client_t client, char *notification) | ||
16 | np_error_t np_observe_notifications(np_client_t client, char **notification_spec) | ||
17 | np_error_t np_set_notify_callback(np_client_t client, np_notify_cb_t notify_cb, void *userdata) | ||
18 | |||
19 | cdef char* C_NP_SYNC_WILL_START "NP_SYNC_WILL_START" | ||
20 | cdef char* C_NP_SYNC_DID_START "NP_SYNC_DID_START" | ||
21 | cdef char* C_NP_SYNC_DID_FINISH "NP_SYNC_DID_FINISH" | ||
22 | cdef char* C_NP_SYNC_LOCK_REQUEST "NP_SYNC_LOCK_REQUEST" | ||
23 | |||
24 | cdef char* C_NP_SYNC_CANCEL_REQUEST "NP_SYNC_CANCEL_REQUEST" | ||
25 | cdef char* C_NP_SYNC_SUSPEND_REQUEST "NP_SYNC_SUSPEND_REQUEST" | ||
26 | cdef char* C_NP_SYNC_RESUME_REQUEST "NP_SYNC_RESUME_REQUEST" | ||
27 | cdef char* C_NP_PHONE_NUMBER_CHANGED "NP_PHONE_NUMBER_CHANGED" | ||
28 | cdef char* C_NP_DEVICE_NAME_CHANGED "NP_DEVICE_NAME_CHANGED" | ||
29 | cdef char* C_NP_TIMEZONE_CHANGED "NP_TIMEZONE_CHANGED" | ||
30 | cdef char* C_NP_TRUSTED_HOST_ATTACHED "NP_TRUSTED_HOST_ATTACHED" | ||
31 | cdef char* C_NP_HOST_DETACHED "NP_HOST_DETACHED" | ||
32 | cdef char* C_NP_HOST_ATTACHED "NP_HOST_ATTACHED" | ||
33 | cdef char* C_NP_REGISTRATION_FAILED "NP_REGISTRATION_FAILED" | ||
34 | cdef char* C_NP_ACTIVATION_STATE "NP_ACTIVATION_STATE" | ||
35 | cdef char* C_NP_BRICK_STATE "NP_BRICK_STATE" | ||
36 | cdef char* C_NP_DS_DOMAIN_CHANGED "NP_DS_DOMAIN_CHANGED" | ||
37 | cdef char* C_NP_BACKUP_DOMAIN_CHANGED "NP_BACKUP_DOMAIN_CHANGED" | ||
38 | cdef char* C_NP_APP_INSTALLED "NP_APP_INSTALLED" | ||
39 | cdef char* C_NP_APP_UNINSTALLED "NP_APP_UNINSTALLED" | ||
40 | cdef char* C_NP_DEV_IMAGE_MOUNTED "NP_DEV_IMAGE_MOUNTED" | ||
41 | cdef char* C_NP_ATTEMPTACTIVATION "NP_ATTEMPTACTIVATION" | ||
42 | cdef char* C_NP_ITDBPREP_DID_END "NP_ITDBPREP_DID_END" | ||
43 | cdef char* C_NP_LANGUAGE_CHANGED "NP_LANGUAGE_CHANGED" | ||
44 | cdef char* C_NP_ADDRESS_BOOK_PREF_CHANGED "NP_ADDRESS_BOOK_PREF_CHANGED" | ||
45 | |||
46 | NP_SYNC_WILL_START = C_NP_SYNC_WILL_START | ||
47 | NP_SYNC_DID_START = C_NP_SYNC_DID_START | ||
48 | NP_SYNC_DID_FINISH = C_NP_SYNC_DID_FINISH | ||
49 | NP_SYNC_LOCK_REQUEST = C_NP_SYNC_LOCK_REQUEST | ||
50 | |||
51 | NP_SYNC_CANCEL_REQUEST = C_NP_SYNC_CANCEL_REQUEST | ||
52 | NP_SYNC_SUSPEND_REQUEST = C_NP_SYNC_SUSPEND_REQUEST | ||
53 | NP_SYNC_RESUME_REQUEST = C_NP_SYNC_RESUME_REQUEST | ||
54 | NP_PHONE_NUMBER_CHANGED = C_NP_PHONE_NUMBER_CHANGED | ||
55 | NP_DEVICE_NAME_CHANGED = C_NP_DEVICE_NAME_CHANGED | ||
56 | NP_TIMEZONE_CHANGED = C_NP_TIMEZONE_CHANGED | ||
57 | NP_TRUSTED_HOST_ATTACHED = C_NP_TRUSTED_HOST_ATTACHED | ||
58 | NP_HOST_DETACHED = C_NP_HOST_DETACHED | ||
59 | NP_HOST_ATTACHED = C_NP_HOST_ATTACHED | ||
60 | NP_REGISTRATION_FAILED = C_NP_REGISTRATION_FAILED | ||
61 | NP_ACTIVATION_STATE = C_NP_ACTIVATION_STATE | ||
62 | NP_BRICK_STATE = C_NP_BRICK_STATE | ||
63 | NP_DS_DOMAIN_CHANGED = C_NP_DS_DOMAIN_CHANGED | ||
64 | NP_BACKUP_DOMAIN_CHANGED = C_NP_BACKUP_DOMAIN_CHANGED | ||
65 | NP_APP_INSTALLED = C_NP_APP_INSTALLED | ||
66 | NP_APP_UNINSTALLED = C_NP_APP_UNINSTALLED | ||
67 | NP_DEV_IMAGE_MOUNTED = C_NP_DEV_IMAGE_MOUNTED | ||
68 | NP_ATTEMPTACTIVATION = C_NP_ATTEMPTACTIVATION | ||
69 | NP_ITDBPREP_DID_END = C_NP_ITDBPREP_DID_END | ||
70 | NP_LANGUAGE_CHANGED = C_NP_LANGUAGE_CHANGED | ||
71 | NP_ADDRESS_BOOK_PREF_CHANGED = C_NP_ADDRESS_BOOK_PREF_CHANGED | ||
72 | |||
73 | cdef void np_notify_cb(const_char_ptr notification, void *py_callback) noexcept: | ||
74 | (<object>py_callback)(notification) | ||
75 | |||
76 | cdef class NotificationProxyError(BaseError): | ||
77 | def __init__(self, *args, **kwargs): | ||
78 | self._lookup_table = { | ||
79 | NP_E_SUCCESS: "Success", | ||
80 | NP_E_INVALID_ARG: "Invalid argument", | ||
81 | NP_E_PLIST_ERROR: "Property list error", | ||
82 | NP_E_CONN_FAILED: "Connection failed", | ||
83 | NP_E_UNKNOWN_ERROR: "Unknown error" | ||
84 | } | ||
85 | BaseError.__init__(self, *args, **kwargs) | ||
86 | |||
87 | cdef class NotificationProxyClient(PropertyListService): | ||
88 | __service_name__ = "com.apple.mobile.notification_proxy" | ||
89 | cdef np_client_t _c_client | ||
90 | |||
91 | def __cinit__(self, iDevice device not None, LockdownServiceDescriptor descriptor, *args, **kwargs): | ||
92 | self.handle_error(np_client_new(device._c_dev, descriptor._c_service_descriptor, &self._c_client)) | ||
93 | |||
94 | def __dealloc__(self): | ||
95 | cdef np_error_t err | ||
96 | if self._c_client is not NULL: | ||
97 | err = np_client_free(self._c_client) | ||
98 | self.handle_error(err) | ||
99 | |||
100 | cdef inline BaseError _error(self, int16_t ret): | ||
101 | return NotificationProxyError(ret) | ||
102 | |||
103 | cpdef set_notify_callback(self, object callback): | ||
104 | self.handle_error(np_set_notify_callback(self._c_client, np_notify_cb, <void*>callback)) | ||
105 | |||
106 | cpdef observe_notification(self, bytes notification): | ||
107 | self.handle_error(np_observe_notification(self._c_client, notification)) | ||
108 | |||
109 | cpdef post_notification(self, bytes notification): | ||
110 | self.handle_error(np_post_notification(self._c_client, notification)) | ||