diff options
Diffstat (limited to 'include/libimobiledevice/notification_proxy.h')
-rw-r--r-- | include/libimobiledevice/notification_proxy.h | 150 |
1 files changed, 124 insertions, 26 deletions
diff --git a/include/libimobiledevice/notification_proxy.h b/include/libimobiledevice/notification_proxy.h index 43c479d..f4f090b 100644 --- a/include/libimobiledevice/notification_proxy.h +++ b/include/libimobiledevice/notification_proxy.h | |||
@@ -3,7 +3,8 @@ | |||
3 | * @brief Observe and post notifications. | 3 | * @brief Observe and post notifications. |
4 | * \internal | 4 | * \internal |
5 | * | 5 | * |
6 | * Copyright (c) 2009 Nikias Bassen All Rights Reserved. | 6 | * Copyright (c) 2010-2014 Martin Szulecki All Rights Reserved. |
7 | * Copyright (c) 2009-2010 Nikias Bassen All Rights Reserved. | ||
7 | * | 8 | * |
8 | * This library is free software; you can redistribute it and/or | 9 | * This library is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU Lesser General Public | 10 | * modify it under the terms of the GNU Lesser General Public |
@@ -20,45 +21,49 @@ | |||
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | */ | 22 | */ |
22 | 23 | ||
23 | #ifndef NOTIFICATION_PROXY_H | 24 | #ifndef INOTIFICATION_PROXY_H |
24 | #define NOTIFICATION_PROXY_H | 25 | #define INOTIFICATION_PROXY_H |
25 | 26 | ||
26 | #ifdef __cplusplus | 27 | #ifdef __cplusplus |
27 | extern "C" { | 28 | extern "C" { |
28 | #endif | 29 | #endif |
29 | 30 | ||
30 | #include <libimobiledevice/libimobiledevice.h> | 31 | #include <libimobiledevice/libimobiledevice.h> |
32 | #include <libimobiledevice/lockdown.h> | ||
31 | 33 | ||
32 | /** @name Error Codes */ | 34 | /** Service identifier passed to lockdownd_start_service() to start the notification proxy service */ |
33 | /*@{*/ | 35 | #define NP_SERVICE_NAME "com.apple.mobile.notification_proxy" |
34 | #define NP_E_SUCCESS 0 | ||
35 | #define NP_E_INVALID_ARG -1 | ||
36 | #define NP_E_PLIST_ERROR -2 | ||
37 | #define NP_E_CONN_FAILED -3 | ||
38 | 36 | ||
39 | #define NP_E_UNKNOWN_ERROR -256 | 37 | /** Error Codes */ |
40 | /*@}*/ | 38 | typedef enum { |
41 | 39 | NP_E_SUCCESS = 0, | |
42 | /** Represents an error code. */ | 40 | NP_E_INVALID_ARG = -1, |
43 | typedef int16_t np_error_t; | 41 | NP_E_PLIST_ERROR = -2, |
42 | NP_E_CONN_FAILED = -3, | ||
43 | NP_E_UNKNOWN_ERROR = -256 | ||
44 | } np_error_t; | ||
44 | 45 | ||
45 | /** | 46 | /** |
46 | * @name Notifications that can be send | 47 | * @name Notifications that can be sent |
47 | * | 48 | * |
48 | * For use with np_post_notification() (client --> device) | 49 | * For use with np_post_notification() (client --> device) |
49 | */ | 50 | */ |
51 | /**@{*/ | ||
52 | //! @cond | ||
50 | #define NP_SYNC_WILL_START "com.apple.itunes-mobdev.syncWillStart" | 53 | #define NP_SYNC_WILL_START "com.apple.itunes-mobdev.syncWillStart" |
51 | #define NP_SYNC_DID_START "com.apple.itunes-mobdev.syncDidStart" | 54 | #define NP_SYNC_DID_START "com.apple.itunes-mobdev.syncDidStart" |
52 | #define NP_SYNC_DID_FINISH "com.apple.itunes-mobdev.syncDidFinish" | 55 | #define NP_SYNC_DID_FINISH "com.apple.itunes-mobdev.syncDidFinish" |
53 | #define NP_SYNC_LOCK_REQUEST "com.apple.itunes-mobdev.syncLockRequest" | 56 | #define NP_SYNC_LOCK_REQUEST "com.apple.itunes-mobdev.syncLockRequest" |
54 | /*@}*/ | 57 | //! @endcond |
58 | /**@}*/ | ||
55 | 59 | ||
56 | /** | 60 | /** |
57 | * @name Notifications that can be received | 61 | * @name Notifications that can be received |
58 | * | 62 | * |
59 | * For use with np_observe_notification() (device --> client) | 63 | * For use with np_observe_notification() (device --> client) |
60 | */ | 64 | */ |
61 | /*@{*/ | 65 | /**@{*/ |
66 | //! @cond | ||
62 | #define NP_SYNC_CANCEL_REQUEST "com.apple.itunes-client.syncCancelRequest" | 67 | #define NP_SYNC_CANCEL_REQUEST "com.apple.itunes-client.syncCancelRequest" |
63 | #define NP_SYNC_SUSPEND_REQUEST "com.apple.itunes-client.syncSuspendRequest" | 68 | #define NP_SYNC_SUSPEND_REQUEST "com.apple.itunes-client.syncSuspendRequest" |
64 | #define NP_SYNC_RESUME_REQUEST "com.apple.itunes-client.syncResumeRequest" | 69 | #define NP_SYNC_RESUME_REQUEST "com.apple.itunes-client.syncResumeRequest" |
@@ -81,21 +86,114 @@ typedef int16_t np_error_t; | |||
81 | #define NP_ITDBPREP_DID_END "com.apple.itdbprep.notification.didEnd" | 86 | #define NP_ITDBPREP_DID_END "com.apple.itdbprep.notification.didEnd" |
82 | #define NP_LANGUAGE_CHANGED "com.apple.language.changed" | 87 | #define NP_LANGUAGE_CHANGED "com.apple.language.changed" |
83 | #define NP_ADDRESS_BOOK_PREF_CHANGED "com.apple.AddressBook.PreferenceChanged" | 88 | #define NP_ADDRESS_BOOK_PREF_CHANGED "com.apple.AddressBook.PreferenceChanged" |
84 | /*@}*/ | 89 | //! @endcond |
90 | /**@}*/ | ||
85 | 91 | ||
86 | typedef struct np_client_private np_client_private; | 92 | typedef struct np_client_private np_client_private; /**< \private */ |
87 | typedef np_client_private *np_client_t; /**< The client handle. */ | 93 | typedef np_client_private *np_client_t; /**< The client handle. */ |
88 | 94 | ||
89 | /** Reports which notification was received. */ | 95 | /** Callback function that reports which notification was received. */ |
90 | typedef void (*np_notify_cb_t) (const char *notification, void *user_data); | 96 | typedef void (*np_notify_cb_t) (const char *notification, void *user_data); |
91 | 97 | ||
92 | /* Interface */ | 98 | /* Interface */ |
93 | np_error_t np_client_new(idevice_t device, uint16_t port, np_client_t *client); | 99 | |
94 | np_error_t np_client_free(np_client_t client); | 100 | /** |
95 | np_error_t np_post_notification(np_client_t client, const char *notification); | 101 | * Connects to the notification_proxy on the specified device. |
96 | np_error_t np_observe_notification(np_client_t client, const char *notification); | 102 | * |
97 | np_error_t np_observe_notifications(np_client_t client, const char **notification_spec); | 103 | * @param device The device to connect to. |
98 | np_error_t np_set_notify_callback(np_client_t client, np_notify_cb_t notify_cb, void *userdata); | 104 | * @param service The service descriptor returned by lockdownd_start_service. |
105 | * @param client Pointer that will be set to a newly allocated np_client_t | ||
106 | * upon successful return. | ||
107 | * | ||
108 | * @return NP_E_SUCCESS on success, NP_E_INVALID_ARG when device is NULL, | ||
109 | * or NP_E_CONN_FAILED when the connection to the device could not be | ||
110 | * established. | ||
111 | */ | ||
112 | LIBIMOBILEDEVICE_API np_error_t np_client_new(idevice_t device, lockdownd_service_descriptor_t service, np_client_t *client); | ||
113 | |||
114 | /** | ||
115 | * Starts a new notification proxy service on the specified device and connects to it. | ||
116 | * | ||
117 | * @param device The device to connect to. | ||
118 | * @param client Pointer that will point to a newly allocated | ||
119 | * np_client_t upon successful return. Must be freed using | ||
120 | * np_client_free() after use. | ||
121 | * @param label The label to use for communication. Usually the program name. | ||
122 | * Pass NULL to disable sending the label in requests to lockdownd. | ||
123 | * | ||
124 | * @return NP_E_SUCCESS on success, or an NP_E_* error | ||
125 | * code otherwise. | ||
126 | */ | ||
127 | LIBIMOBILEDEVICE_API np_error_t np_client_start_service(idevice_t device, np_client_t* client, const char* label); | ||
128 | |||
129 | /** | ||
130 | * Disconnects a notification_proxy client from the device and frees up the | ||
131 | * notification_proxy client data. | ||
132 | * | ||
133 | * @param client The notification_proxy client to disconnect and free. | ||
134 | * | ||
135 | * @return NP_E_SUCCESS on success, or NP_E_INVALID_ARG when client is NULL. | ||
136 | */ | ||
137 | LIBIMOBILEDEVICE_API np_error_t np_client_free(np_client_t client); | ||
138 | |||
139 | |||
140 | /** | ||
141 | * Sends a notification to the device's notification_proxy. | ||
142 | * | ||
143 | * @param client The client to send to | ||
144 | * @param notification The notification message to send | ||
145 | * | ||
146 | * @return NP_E_SUCCESS on success, or an error returned by np_plist_send | ||
147 | */ | ||
148 | LIBIMOBILEDEVICE_API np_error_t np_post_notification(np_client_t client, const char *notification); | ||
149 | |||
150 | /** | ||
151 | * Tells the device to send a notification on the specified event. | ||
152 | * | ||
153 | * @param client The client to send to | ||
154 | * @param notification The notifications that should be observed. | ||
155 | * | ||
156 | * @return NP_E_SUCCESS on success, NP_E_INVALID_ARG when client or | ||
157 | * notification are NULL, or an error returned by np_plist_send. | ||
158 | */ | ||
159 | LIBIMOBILEDEVICE_API np_error_t np_observe_notification(np_client_t client, const char *notification); | ||
160 | |||
161 | /** | ||
162 | * Tells the device to send a notification on specified events. | ||
163 | * | ||
164 | * @param client The client to send to | ||
165 | * @param notification_spec Specification of the notifications that should be | ||
166 | * observed. This is expected to be an array of const char* that MUST have a | ||
167 | * terminating NULL entry. | ||
168 | * | ||
169 | * @return NP_E_SUCCESS on success, NP_E_INVALID_ARG when client is null, | ||
170 | * or an error returned by np_observe_notification. | ||
171 | */ | ||
172 | LIBIMOBILEDEVICE_API np_error_t np_observe_notifications(np_client_t client, const char **notification_spec); | ||
173 | |||
174 | /** | ||
175 | * This function allows an application to define a callback function that will | ||
176 | * be called when a notification has been received. | ||
177 | * It will start a thread that polls for notifications and calls the callback | ||
178 | * function if a notification has been received. | ||
179 | * In case of an error condition when polling for notifications - e.g. device | ||
180 | * disconnect - the thread will call the callback function with an empty | ||
181 | * notification "" and terminate itself. | ||
182 | * | ||
183 | * @param client the NP client | ||
184 | * @param notify_cb pointer to a callback function or NULL to de-register a | ||
185 | * previously set callback function. | ||
186 | * @param user_data Pointer that will be passed to the callback function as | ||
187 | * user data. If notify_cb is NULL, this parameter is ignored. | ||
188 | * | ||
189 | * @note Only one callback function can be registered at the same time; | ||
190 | * any previously set callback function will be removed automatically. | ||
191 | * | ||
192 | * @return NP_E_SUCCESS when the callback was successfully registered, | ||
193 | * NP_E_INVALID_ARG when client is NULL, or NP_E_UNKNOWN_ERROR when | ||
194 | * the callback thread could no be created. | ||
195 | */ | ||
196 | LIBIMOBILEDEVICE_API np_error_t np_set_notify_callback(np_client_t client, np_notify_cb_t notify_cb, void *user_data); | ||
99 | 197 | ||
100 | #ifdef __cplusplus | 198 | #ifdef __cplusplus |
101 | } | 199 | } |