diff options
Diffstat (limited to 'include')
29 files changed, 702 insertions, 316 deletions
| diff --git a/include/Makefile.am b/include/Makefile.am index 2abaf49..a41f53d 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -23,9 +23,11 @@ nobase_include_HEADERS = \  	libimobiledevice/diagnostics_relay.h \  	libimobiledevice/debugserver.h \  	libimobiledevice/syslog_relay.h \ +	libimobiledevice/ostrace.h \  	libimobiledevice/mobileactivation.h \  	libimobiledevice/preboard.h \  	libimobiledevice/companion_proxy.h \  	libimobiledevice/reverse_proxy.h \ +	libimobiledevice/bt_packet_logger.h \  	libimobiledevice/property_list_service.h \  	libimobiledevice/service.h diff --git a/include/libimobiledevice/afc.h b/include/libimobiledevice/afc.h index a2d70d3..3dcb5da 100644 --- a/include/libimobiledevice/afc.h +++ b/include/libimobiledevice/afc.h @@ -107,7 +107,7 @@ typedef afc_client_private *afc_client_t; /**< The client handle. */   *         invalid, AFC_E_MUX_ERROR if the connection cannot be established,   *         or AFC_E_NO_MEM if there is a memory allocation problem.   */ -afc_error_t afc_client_new(idevice_t device, lockdownd_service_descriptor_t service, afc_client_t *client); +LIBIMOBILEDEVICE_API afc_error_t afc_client_new(idevice_t device, lockdownd_service_descriptor_t service, afc_client_t *client);  /**   * Starts a new AFC service on the specified device and connects to it. @@ -120,7 +120,7 @@ afc_error_t afc_client_new(idevice_t device, lockdownd_service_descriptor_t serv   *   * @return AFC_E_SUCCESS on success, or an AFC_E_* error code otherwise.   */ -afc_error_t afc_client_start_service(idevice_t device, afc_client_t* client, const char* label); +LIBIMOBILEDEVICE_API afc_error_t afc_client_start_service(idevice_t device, afc_client_t* client, const char* label);  /**   * Frees up an AFC client. If the connection was created by the client itself, @@ -128,7 +128,7 @@ afc_error_t afc_client_start_service(idevice_t device, afc_client_t* client, con   *   * @param client The client to free.   */ -afc_error_t afc_client_free(afc_client_t client); +LIBIMOBILEDEVICE_API afc_error_t afc_client_free(afc_client_t client);  /**   * Get device information for a connected client. The device information @@ -142,7 +142,21 @@ afc_error_t afc_client_free(afc_client_t client);   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_get_device_info(afc_client_t client, char ***device_information); +LIBIMOBILEDEVICE_API afc_error_t afc_get_device_info(afc_client_t client, char ***device_information); + +/** + * Get device information for a connected client. The device information + * returned is the device model as well as the free space, the total capacity + * and blocksize on the accessed disk partition. + * + * @param client The client to get device info for. + * @param device_information A pointer to a plist_t that will be populated + *        with key-value pairs (dictionary) representing the device’s + *        storage and model information. Free with plist_free(). + * + * @return AFC_E_SUCCESS on success or an AFC_E_* error value. + */ +LIBIMOBILEDEVICE_API afc_error_t afc_get_device_info_plist(afc_client_t client, plist_t *device_information);  /**   * Gets a directory listing of the directory requested. @@ -155,7 +169,7 @@ afc_error_t afc_get_device_info(afc_client_t client, char ***device_information)   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_read_directory(afc_client_t client, const char *path, char ***directory_information); +LIBIMOBILEDEVICE_API afc_error_t afc_read_directory(afc_client_t client, const char *path, char ***directory_information);  /**   * Gets information about a specific file. @@ -163,12 +177,25 @@ afc_error_t afc_read_directory(afc_client_t client, const char *path, char ***di   * @param client The client to use to get the information of the file.   * @param path The fully-qualified path to the file.   * @param file_information Pointer to a buffer that will be filled with a - *        NULL-terminated list of strings with the file information. Set to NULL + *        NULL-terminated list of strings with the file attributes. Set to NULL   *        before calling this function. Free with afc_dictionary_free().   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_get_file_info(afc_client_t client, const char *path, char ***file_information); +LIBIMOBILEDEVICE_API afc_error_t afc_get_file_info(afc_client_t client, const char *path, char ***file_information); + +/** + * Gets information about a specific file. + * + * @param client The client to use to get the information of the file. + * @param path The fully-qualified path to the file. + * @param file_information A pointer to a plist_t that will be populated + *        with key-value pairs (dictionary) representing the file attributes. + *        Free with plist_free(). + * + * @return AFC_E_SUCCESS on success or an AFC_E_* error value. + */ +LIBIMOBILEDEVICE_API afc_error_t afc_get_file_info_plist(afc_client_t client, const char *path, plist_t *file_information);  /**   * Opens a file on the device. @@ -180,7 +207,7 @@ afc_error_t afc_get_file_info(afc_client_t client, const char *path, char ***fil   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_file_open(afc_client_t client, const char *filename, afc_file_mode_t file_mode, uint64_t *handle); +LIBIMOBILEDEVICE_API afc_error_t afc_file_open(afc_client_t client, const char *filename, afc_file_mode_t file_mode, uint64_t *handle);  /**   * Closes a file on the device. @@ -188,7 +215,7 @@ afc_error_t afc_file_open(afc_client_t client, const char *filename, afc_file_mo   * @param client The client to close the file with.   * @param handle File handle of a previously opened file.   */ -afc_error_t afc_file_close(afc_client_t client, uint64_t handle); +LIBIMOBILEDEVICE_API afc_error_t afc_file_close(afc_client_t client, uint64_t handle);  /**   * Locks or unlocks a file on the device. @@ -202,7 +229,7 @@ afc_error_t afc_file_close(afc_client_t client, uint64_t handle);   *        AFC_LOCK_SH (shared lock), AFC_LOCK_EX (exclusive lock), or   *        AFC_LOCK_UN (unlock).   */ -afc_error_t afc_file_lock(afc_client_t client, uint64_t handle, afc_lock_op_t operation); +LIBIMOBILEDEVICE_API afc_error_t afc_file_lock(afc_client_t client, uint64_t handle, afc_lock_op_t operation);  /**   * Attempts to the read the given number of bytes from the given file. @@ -215,7 +242,7 @@ afc_error_t afc_file_lock(afc_client_t client, uint64_t handle, afc_lock_op_t op   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_file_read(afc_client_t client, uint64_t handle, char *data, uint32_t length, uint32_t *bytes_read); +LIBIMOBILEDEVICE_API afc_error_t afc_file_read(afc_client_t client, uint64_t handle, char *data, uint32_t length, uint32_t *bytes_read);  /**   * Writes a given number of bytes to a file. @@ -228,7 +255,7 @@ afc_error_t afc_file_read(afc_client_t client, uint64_t handle, char *data, uint   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_file_write(afc_client_t client, uint64_t handle, const char *data, uint32_t length, uint32_t *bytes_written); +LIBIMOBILEDEVICE_API afc_error_t afc_file_write(afc_client_t client, uint64_t handle, const char *data, uint32_t length, uint32_t *bytes_written);  /**   * Seeks to a given position of a pre-opened file on the device. @@ -240,7 +267,7 @@ afc_error_t afc_file_write(afc_client_t client, uint64_t handle, const char *dat   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_file_seek(afc_client_t client, uint64_t handle, int64_t offset, int whence); +LIBIMOBILEDEVICE_API afc_error_t afc_file_seek(afc_client_t client, uint64_t handle, int64_t offset, int whence);  /**   * Returns current position in a pre-opened file on the device. @@ -251,7 +278,7 @@ afc_error_t afc_file_seek(afc_client_t client, uint64_t handle, int64_t offset,   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_file_tell(afc_client_t client, uint64_t handle, uint64_t *position); +LIBIMOBILEDEVICE_API afc_error_t afc_file_tell(afc_client_t client, uint64_t handle, uint64_t *position);  /**   * Sets the size of a file on the device. @@ -265,7 +292,7 @@ afc_error_t afc_file_tell(afc_client_t client, uint64_t handle, uint64_t *positi   * @note This function is more akin to ftruncate than truncate, and truncate   *       calls would have to open the file before calling this, sadly.   */ -afc_error_t afc_file_truncate(afc_client_t client, uint64_t handle, uint64_t newsize); +LIBIMOBILEDEVICE_API afc_error_t afc_file_truncate(afc_client_t client, uint64_t handle, uint64_t newsize);  /**   * Deletes a file or directory. @@ -275,7 +302,7 @@ afc_error_t afc_file_truncate(afc_client_t client, uint64_t handle, uint64_t new   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_remove_path(afc_client_t client, const char *path); +LIBIMOBILEDEVICE_API afc_error_t afc_remove_path(afc_client_t client, const char *path);  /**   * Renames a file or directory on the device. @@ -286,7 +313,7 @@ afc_error_t afc_remove_path(afc_client_t client, const char *path);   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_rename_path(afc_client_t client, const char *from, const char *to); +LIBIMOBILEDEVICE_API afc_error_t afc_rename_path(afc_client_t client, const char *from, const char *to);  /**   * Creates a directory on the device. @@ -297,7 +324,7 @@ afc_error_t afc_rename_path(afc_client_t client, const char *from, const char *t   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_make_directory(afc_client_t client, const char *path); +LIBIMOBILEDEVICE_API afc_error_t afc_make_directory(afc_client_t client, const char *path);  /**   * Sets the size of a file on the device without prior opening it. @@ -308,7 +335,7 @@ afc_error_t afc_make_directory(afc_client_t client, const char *path);   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_truncate(afc_client_t client, const char *path, uint64_t newsize); +LIBIMOBILEDEVICE_API afc_error_t afc_truncate(afc_client_t client, const char *path, uint64_t newsize);  /**   * Creates a hard link or symbolic link on the device. @@ -320,7 +347,7 @@ afc_error_t afc_truncate(afc_client_t client, const char *path, uint64_t newsize   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, const char *target, const char *linkname); +LIBIMOBILEDEVICE_API afc_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, const char *target, const char *linkname);  /**   * Sets the modification time of a file on the device. @@ -331,7 +358,7 @@ afc_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, const c   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_set_file_time(afc_client_t client, const char *path, uint64_t mtime); +LIBIMOBILEDEVICE_API afc_error_t afc_set_file_time(afc_client_t client, const char *path, uint64_t mtime);  /**   * Deletes a file or directory including possible contents. @@ -343,7 +370,7 @@ afc_error_t afc_set_file_time(afc_client_t client, const char *path, uint64_t mt   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_remove_path_and_contents(afc_client_t client, const char *path); +LIBIMOBILEDEVICE_API afc_error_t afc_remove_path_and_contents(afc_client_t client, const char *path);  /* Helper functions */ @@ -358,7 +385,7 @@ afc_error_t afc_remove_path_and_contents(afc_client_t client, const char *path);   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_get_device_info_key(afc_client_t client, const char *key, char **value); +LIBIMOBILEDEVICE_API afc_error_t afc_get_device_info_key(afc_client_t client, const char *key, char **value);  /**   * Frees up a char dictionary as returned by some AFC functions. @@ -367,7 +394,16 @@ afc_error_t afc_get_device_info_key(afc_client_t client, const char *key, char *   *   * @return AFC_E_SUCCESS on success or an AFC_E_* error value.   */ -afc_error_t afc_dictionary_free(char **dictionary); +LIBIMOBILEDEVICE_API afc_error_t afc_dictionary_free(char **dictionary); + +/** + * Gets a readable error string for a given AFC error code. + * + * @param err An AFC error code + * + * @returns A readable error string + */ +LIBIMOBILEDEVICE_API const char* afc_strerror(afc_error_t err);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/bt_packet_logger.h b/include/libimobiledevice/bt_packet_logger.h index 230040a..590e5c1 100644 --- a/include/libimobiledevice/bt_packet_logger.h +++ b/include/libimobiledevice/bt_packet_logger.h @@ -70,7 +70,7 @@ typedef void (*bt_packet_logger_receive_cb_t)(uint8_t * data, uint16_t len, void   * @return BT_PACKET_LOGGER_E_SUCCESS on success, BT_PACKET_LOGGER_E_INVALID_ARG when   *     client is NULL, or an BT_PACKET_LOGGER_E_* error code otherwise.   */ -bt_packet_logger_error_t bt_packet_logger_client_new(idevice_t device, lockdownd_service_descriptor_t service, bt_packet_logger_client_t * client); +LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_client_new(idevice_t device, lockdownd_service_descriptor_t service, bt_packet_logger_client_t * client);  /**   * Starts a new bt_packet_logger service on the specified device and connects to it. @@ -85,7 +85,7 @@ bt_packet_logger_error_t bt_packet_logger_client_new(idevice_t device, lockdownd   * @return BT_PACKET_LOGGER_E_SUCCESS on success, or an BT_PACKET_LOGGER_E_* error   *     code otherwise.   */ -bt_packet_logger_error_t bt_packet_logger_client_start_service(idevice_t device, bt_packet_logger_client_t * client, const char* label); +LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_client_start_service(idevice_t device, bt_packet_logger_client_t * client, const char* label);  /**   * Disconnects a bt_packet_logger client from the device and frees up the @@ -96,7 +96,7 @@ bt_packet_logger_error_t bt_packet_logger_client_start_service(idevice_t device,   * @return BT_PACKET_LOGGER_E_SUCCESS on success, BT_PACKET_LOGGER_E_INVALID_ARG when   *     client is NULL, or an BT_PACKET_LOGGER_E_* error code otherwise.   */ -bt_packet_logger_error_t bt_packet_logger_client_free(bt_packet_logger_client_t client); +LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_client_free(bt_packet_logger_client_t client);  /** @@ -113,7 +113,7 @@ bt_packet_logger_error_t bt_packet_logger_client_free(bt_packet_logger_client_t   *      invalid or BT_PACKET_LOGGER_E_UNKNOWN_ERROR when an unspecified   *      error occurs or an hci capture has already been started.   */ -bt_packet_logger_error_t bt_packet_logger_start_capture(bt_packet_logger_client_t client, bt_packet_logger_receive_cb_t callback, void* user_data); +LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_start_capture(bt_packet_logger_client_t client, bt_packet_logger_receive_cb_t callback, void* user_data);  /**   * Stops capturing the hci interface from the device. @@ -127,7 +127,7 @@ bt_packet_logger_error_t bt_packet_logger_start_capture(bt_packet_logger_client_   *      invalid or BT_PACKET_LOGGER_E_UNKNOWN_ERROR when an unspecified   *      error occurs or an hci capture has already been started.   */ -bt_packet_logger_error_t bt_packet_logger_stop_capture(bt_packet_logger_client_t client); +LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_stop_capture(bt_packet_logger_client_t client);  /* Receiving */ @@ -146,7 +146,7 @@ bt_packet_logger_error_t bt_packet_logger_stop_capture(bt_packet_logger_client_t   *      occurs, or BT_PACKET_LOGGER_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -bt_packet_logger_error_t bt_packet_logger_receive_with_timeout(bt_packet_logger_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout); +LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_receive_with_timeout(bt_packet_logger_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout);  #ifdef __cplusplus diff --git a/include/libimobiledevice/companion_proxy.h b/include/libimobiledevice/companion_proxy.h index d786766..544322a 100644 --- a/include/libimobiledevice/companion_proxy.h +++ b/include/libimobiledevice/companion_proxy.h @@ -67,7 +67,7 @@ typedef void (*companion_proxy_device_event_cb_t) (plist_t event, void* userdata   * @return COMPANION_PROXY_E_SUCCESS on success, COMPANION_PROXY_E_INVALID_ARG when   *     the arguments are invalid, or an COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_client_new(idevice_t device, lockdownd_service_descriptor_t service, companion_proxy_client_t* client); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_client_new(idevice_t device, lockdownd_service_descriptor_t service, companion_proxy_client_t* client);  /**   * Starts a new companion_proxy service on the specified device and connects to it. @@ -82,7 +82,7 @@ companion_proxy_error_t companion_proxy_client_new(idevice_t device, lockdownd_s   * @return COMPANION_PROXY_E_SUCCESS on success, or an COMPANION_PROXY_E_* error   *     code otherwise.   */ -companion_proxy_error_t companion_proxy_client_start_service(idevice_t device, companion_proxy_client_t* client, const char* label); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_client_start_service(idevice_t device, companion_proxy_client_t* client, const char* label);  /**   * Disconnects a companion_proxy client from the device and frees up the @@ -93,7 +93,7 @@ companion_proxy_error_t companion_proxy_client_start_service(idevice_t device, c   * @return COMPANION_PROXY_E_SUCCESS on success, COMPANION_PROXY_E_INVALID_ARG when   *     client is NULL, or an COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_client_free(companion_proxy_client_t client); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_client_free(companion_proxy_client_t client);  /**   * Sends a plist to the service. @@ -104,7 +104,7 @@ companion_proxy_error_t companion_proxy_client_free(companion_proxy_client_t cli   * @return COMPANION_PROXY_E_SUCCESS on success,   *  COMPANION_PROXY_E_INVALID_ARG when client or plist is NULL   */ -companion_proxy_error_t companion_proxy_send(companion_proxy_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_send(companion_proxy_client_t client, plist_t plist);  /**   * Receives a plist from the service. @@ -115,7 +115,7 @@ companion_proxy_error_t companion_proxy_send(companion_proxy_client_t client, pl   * @return COMPANION_PROXY_E_SUCCESS on success,   *  COMPANION_PROXY_E_INVALID_ARG when client or plist is NULL   */ -companion_proxy_error_t companion_proxy_receive(companion_proxy_client_t client, plist_t * plist); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_receive(companion_proxy_client_t client, plist_t * plist);  /**   * Retrieves a list of paired devices. @@ -129,7 +129,7 @@ companion_proxy_error_t companion_proxy_receive(companion_proxy_client_t client,   *  COMPANION_PROXY_E_NO_DEVICES if no devices are paired,   *  or a COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_get_device_registry(companion_proxy_client_t client, plist_t* paired_devices); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_get_device_registry(companion_proxy_client_t client, plist_t* paired_devices);  /**   * Starts listening for paired devices. @@ -145,7 +145,7 @@ companion_proxy_error_t companion_proxy_get_device_registry(companion_proxy_clie   * @return COMPANION_PROXY_E_SUCCESS on success,   *  or a COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_start_listening_for_devices(companion_proxy_client_t client, companion_proxy_device_event_cb_t callback, void* userdata); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_start_listening_for_devices(companion_proxy_client_t client, companion_proxy_device_event_cb_t callback, void* userdata);  /**   * Stops listening for paired devices @@ -155,7 +155,7 @@ companion_proxy_error_t companion_proxy_start_listening_for_devices(companion_pr   * @return COMPANION_PROXY_E_SUCCESS on success,   *  or a COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_stop_listening_for_devices(companion_proxy_client_t client); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_stop_listening_for_devices(companion_proxy_client_t client);  /**   * Returns a value for the given key. @@ -173,7 +173,7 @@ companion_proxy_error_t companion_proxy_stop_listening_for_devices(companion_pro   *  COMPANION_PROXY_E_UNSUPPORTED_KEY if the companion device doesn't support the given key,   *  or a COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_get_value_from_registry(companion_proxy_client_t client, const char* companion_udid, const char* key, plist_t* value); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_get_value_from_registry(companion_proxy_client_t client, const char* companion_udid, const char* key, plist_t* value);  /**   * Start forwarding a service port on the companion device to a port on the idevice. @@ -190,7 +190,7 @@ companion_proxy_error_t companion_proxy_get_value_from_registry(companion_proxy_   * @return COMPANION_PROXY_E_SUCCESS on success,   *  or a COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_start_forwarding_service_port(companion_proxy_client_t client, uint16_t remote_port, const char* service_name, uint16_t* forward_port, plist_t options); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_start_forwarding_service_port(companion_proxy_client_t client, uint16_t remote_port, const char* service_name, uint16_t* forward_port, plist_t options);  /**   * Stop forwarding a service port between companion device and idevice. @@ -203,7 +203,7 @@ companion_proxy_error_t companion_proxy_start_forwarding_service_port(companion_   * @return COMPANION_PROXY_E_SUCCESS on success,   *  or a COMPANION_PROXY_E_* error code otherwise.   */ -companion_proxy_error_t companion_proxy_stop_forwarding_service_port(companion_proxy_client_t client, uint16_t remote_port); +LIBIMOBILEDEVICE_API companion_proxy_error_t companion_proxy_stop_forwarding_service_port(companion_proxy_client_t client, uint16_t remote_port);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/debugserver.h b/include/libimobiledevice/debugserver.h index eaa7c48..809b97f 100644 --- a/include/libimobiledevice/debugserver.h +++ b/include/libimobiledevice/debugserver.h @@ -66,7 +66,7 @@ typedef debugserver_command_private *debugserver_command_t; /**< The command han   * @return DEBUGSERVER_E_SUCCESS on success, DEBUGSERVER_E_INVALID_ARG when   *     client is NULL, or an DEBUGSERVER_E_* error code otherwise.   */ -debugserver_error_t debugserver_client_new(idevice_t device, lockdownd_service_descriptor_t service, debugserver_client_t * client); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_new(idevice_t device, lockdownd_service_descriptor_t service, debugserver_client_t * client);  /**   * Starts a new debugserver service on the specified device and connects to it. @@ -81,7 +81,7 @@ debugserver_error_t debugserver_client_new(idevice_t device, lockdownd_service_d   * @return DEBUGSERVER_E_SUCCESS on success, or an DEBUGSERVER_E_* error   *     code otherwise.   */ -debugserver_error_t debugserver_client_start_service(idevice_t device, debugserver_client_t * client, const char* label); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_start_service(idevice_t device, debugserver_client_t * client, const char* label);  /**   * Disconnects a debugserver client from the device and frees up the @@ -92,7 +92,7 @@ debugserver_error_t debugserver_client_start_service(idevice_t device, debugserv   * @return DEBUGSERVER_E_SUCCESS on success, DEBUGSERVER_E_INVALID_ARG when   *     client is NULL, or an DEBUGSERVER_E_* error code otherwise.   */ -debugserver_error_t debugserver_client_free(debugserver_client_t client); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_free(debugserver_client_t client);  /**   * Sends raw data using the given debugserver service client. @@ -107,7 +107,7 @@ debugserver_error_t debugserver_client_free(debugserver_client_t client);   *      invalid, or DEBUGSERVER_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -debugserver_error_t debugserver_client_send(debugserver_client_t client, const char* data, uint32_t size, uint32_t *sent); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_send(debugserver_client_t client, const char* data, uint32_t size, uint32_t *sent);  /**   * Receives raw data using the given debugserver client with specified timeout. @@ -125,7 +125,7 @@ debugserver_error_t debugserver_client_send(debugserver_client_t client, const c   *      or DEBUGSERVER_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -debugserver_error_t debugserver_client_receive_with_timeout(debugserver_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_receive_with_timeout(debugserver_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout);  /**   * Receives raw data from the debugserver service. @@ -139,7 +139,7 @@ debugserver_error_t debugserver_client_receive_with_timeout(debugserver_client_t   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when client or plist is NULL   */ -debugserver_error_t debugserver_client_receive(debugserver_client_t client, char *data, uint32_t size, uint32_t *received); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_receive(debugserver_client_t client, char *data, uint32_t size, uint32_t *received);  /**   * Sends a command to the debugserver service. @@ -152,7 +152,7 @@ debugserver_error_t debugserver_client_receive(debugserver_client_t client, char   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when client or command is NULL   */ -debugserver_error_t debugserver_client_send_command(debugserver_client_t client, debugserver_command_t command, char** response, size_t* response_size); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_send_command(debugserver_client_t client, debugserver_command_t command, char** response, size_t* response_size);  /**   * Receives and parses response of debugserver service. @@ -164,7 +164,7 @@ debugserver_error_t debugserver_client_send_command(debugserver_client_t client,   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when client is NULL   */ -debugserver_error_t debugserver_client_receive_response(debugserver_client_t client, char** response, size_t* response_size); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_receive_response(debugserver_client_t client, char** response, size_t* response_size);  /**   * Controls status of ACK mode when sending commands or receiving responses. @@ -178,7 +178,7 @@ debugserver_error_t debugserver_client_receive_response(debugserver_client_t cli   * @return DEBUGSERVER_E_SUCCESS on success, or an DEBUGSERVER_E_* error   *     code otherwise.   */ -debugserver_error_t debugserver_client_set_ack_mode(debugserver_client_t client, int enabled); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_set_ack_mode(debugserver_client_t client, int enabled);  /**   * Sets behavior when awaiting a response from the server. @@ -197,7 +197,7 @@ debugserver_error_t debugserver_client_set_ack_mode(debugserver_client_t client,   * @return DEBUGSERVER_E_SUCCESS on success, or an DEBUGSERVER_E_* error   *     code otherwise.   */ -debugserver_error_t debugserver_client_set_receive_params(debugserver_client_t client, int (*cancel_receive)(), int receive_loop_timeout); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_set_receive_params(debugserver_client_t client, int (*cancel_receive)(), int receive_loop_timeout);  /**   * Sets the argv which launches an app. @@ -210,7 +210,7 @@ debugserver_error_t debugserver_client_set_receive_params(debugserver_client_t c   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when client is NULL   */ -debugserver_error_t debugserver_client_set_argv(debugserver_client_t client, int argc, char* argv[], char** response); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_set_argv(debugserver_client_t client, int argc, char* argv[], char** response);  /**   * Adds or sets an environment variable. @@ -222,7 +222,7 @@ debugserver_error_t debugserver_client_set_argv(debugserver_client_t client, int   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when client is NULL   */ -debugserver_error_t debugserver_client_set_environment_hex_encoded(debugserver_client_t client, const char* env, char** response); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_client_set_environment_hex_encoded(debugserver_client_t client, const char* env, char** response);  /**   * Creates and initializes a new command object. @@ -235,7 +235,7 @@ debugserver_error_t debugserver_client_set_environment_hex_encoded(debugserver_c   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when name or command is NULL   */ -debugserver_error_t debugserver_command_new(const char* name, int argc, char* argv[], debugserver_command_t* command); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_command_new(const char* name, int argc, char* argv[], debugserver_command_t* command);  /**   * Frees memory of command object. @@ -245,7 +245,7 @@ debugserver_error_t debugserver_command_new(const char* name, int argc, char* ar   * @return DEBUGSERVER_E_SUCCESS on success,   *  DEBUGSERVER_E_INVALID_ARG when command is NULL   */ -debugserver_error_t debugserver_command_free(debugserver_command_t command); +LIBIMOBILEDEVICE_API debugserver_error_t debugserver_command_free(debugserver_command_t command);  /**   * Encodes a string into hex notation. @@ -254,7 +254,7 @@ debugserver_error_t debugserver_command_free(debugserver_command_t command);   * @param encoded_buffer The buffer receives a hex encoded string   * @param encoded_length Length of the hex encoded string   */ -void debugserver_encode_string(const char* buffer, char** encoded_buffer, uint32_t* encoded_length); +LIBIMOBILEDEVICE_API void debugserver_encode_string(const char* buffer, char** encoded_buffer, uint32_t* encoded_length);  /**   * Decodes a hex encoded string. @@ -263,7 +263,7 @@ void debugserver_encode_string(const char* buffer, char** encoded_buffer, uint32   * @param encoded_length Length of the encoded buffer   * @param buffer Decoded string to be freed by the caller   */ -void debugserver_decode_string(const char *encoded_buffer, size_t encoded_length, char** buffer); +LIBIMOBILEDEVICE_API void debugserver_decode_string(const char *encoded_buffer, size_t encoded_length, char** buffer);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/diagnostics_relay.h b/include/libimobiledevice/diagnostics_relay.h index f80a86b..6ab47a9 100644 --- a/include/libimobiledevice/diagnostics_relay.h +++ b/include/libimobiledevice/diagnostics_relay.h @@ -70,7 +70,7 @@ typedef diagnostics_relay_client_private *diagnostics_relay_client_t; /**< The c   *     DIAGNOSTICS_RELAY_E_INVALID_ARG when one of the parameters is invalid,   *     or DIAGNOSTICS_RELAY_E_MUX_ERROR when the connection failed.   */ -diagnostics_relay_error_t diagnostics_relay_client_new(idevice_t device, lockdownd_service_descriptor_t service, diagnostics_relay_client_t *client); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_client_new(idevice_t device, lockdownd_service_descriptor_t service, diagnostics_relay_client_t *client);  /**   * Starts a new diagnostics_relay service on the specified device and connects to it. @@ -85,7 +85,7 @@ diagnostics_relay_error_t diagnostics_relay_client_new(idevice_t device, lockdow   * @return DIAGNOSTICS_RELAY_E_SUCCESS on success, or an DIAGNOSTICS_RELAY_E_* error   *     code otherwise.   */ -diagnostics_relay_error_t diagnostics_relay_client_start_service(idevice_t device, diagnostics_relay_client_t* client, const char* label); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_client_start_service(idevice_t device, diagnostics_relay_client_t* client, const char* label);  /**   * Disconnects a diagnostics_relay client from the device and frees up the @@ -98,7 +98,7 @@ diagnostics_relay_error_t diagnostics_relay_client_start_service(idevice_t devic   *     is invalid, or DIAGNOSTICS_RELAY_E_UNKNOWN_ERROR when the was an   *     error freeing the parent property_list_service client.   */ -diagnostics_relay_error_t diagnostics_relay_client_free(diagnostics_relay_client_t client); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_client_free(diagnostics_relay_client_t client);  /** @@ -111,7 +111,7 @@ diagnostics_relay_error_t diagnostics_relay_client_free(diagnostics_relay_client   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_goodbye(diagnostics_relay_client_t client); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_goodbye(diagnostics_relay_client_t client);  /**   * Puts the device into deep sleep mode and disconnects from host. @@ -123,7 +123,7 @@ diagnostics_relay_error_t diagnostics_relay_goodbye(diagnostics_relay_client_t c   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_sleep(diagnostics_relay_client_t client); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_sleep(diagnostics_relay_client_t client);  /**   * Restart the device and optionally show a user notification. @@ -140,7 +140,7 @@ diagnostics_relay_error_t diagnostics_relay_sleep(diagnostics_relay_client_t cli   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_restart(diagnostics_relay_client_t client, diagnostics_relay_action_t flags); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_restart(diagnostics_relay_client_t client, diagnostics_relay_action_t flags);  /**   * Shutdown of the device and optionally show a user notification. @@ -157,7 +157,7 @@ diagnostics_relay_error_t diagnostics_relay_restart(diagnostics_relay_client_t c   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_shutdown(diagnostics_relay_client_t client, diagnostics_relay_action_t flags); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_shutdown(diagnostics_relay_client_t client, diagnostics_relay_action_t flags);  /**   * Request diagnostics information for a given type. @@ -173,7 +173,7 @@ diagnostics_relay_error_t diagnostics_relay_shutdown(diagnostics_relay_client_t   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_request_diagnostics(diagnostics_relay_client_t client, const char* type, plist_t* diagnostics); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_request_diagnostics(diagnostics_relay_client_t client, const char* type, plist_t* diagnostics);  /**   * Query one or multiple MobileGestalt keys. @@ -188,7 +188,7 @@ diagnostics_relay_error_t diagnostics_relay_request_diagnostics(diagnostics_rela   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_query_mobilegestalt(diagnostics_relay_client_t client, plist_t keys, plist_t* result); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_query_mobilegestalt(diagnostics_relay_client_t client, plist_t keys, plist_t* result);  /**   * Query an IORegistry entry of a given class. @@ -204,7 +204,7 @@ diagnostics_relay_error_t diagnostics_relay_query_mobilegestalt(diagnostics_rela   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_query_ioregistry_entry(diagnostics_relay_client_t client, const char* entry_name, const char* entry_class, plist_t* result); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_query_ioregistry_entry(diagnostics_relay_client_t client, const char* entry_name, const char* entry_class, plist_t* result);  /**   * Query an IORegistry plane. @@ -219,7 +219,7 @@ diagnostics_relay_error_t diagnostics_relay_query_ioregistry_entry(diagnostics_r   *  DIAGNOSTICS_RELAY_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -diagnostics_relay_error_t diagnostics_relay_query_ioregistry_plane(diagnostics_relay_client_t client, const char* plane, plist_t* result); +LIBIMOBILEDEVICE_API diagnostics_relay_error_t diagnostics_relay_query_ioregistry_plane(diagnostics_relay_client_t client, const char* plane, plist_t* result);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/file_relay.h b/include/libimobiledevice/file_relay.h index 6b30e65..00773b8 100644 --- a/include/libimobiledevice/file_relay.h +++ b/include/libimobiledevice/file_relay.h @@ -62,7 +62,7 @@ typedef file_relay_client_private *file_relay_client_t; /**< The client handle.   *     FILE_RELAY_E_INVALID_ARG when one of the parameters is invalid,   *     or FILE_RELAY_E_MUX_ERROR when the connection failed.   */ -file_relay_error_t file_relay_client_new(idevice_t device, lockdownd_service_descriptor_t service, file_relay_client_t *client); +LIBIMOBILEDEVICE_API file_relay_error_t file_relay_client_new(idevice_t device, lockdownd_service_descriptor_t service, file_relay_client_t *client);  /**   * Starts a new file_relay service on the specified device and connects to it. @@ -77,7 +77,7 @@ file_relay_error_t file_relay_client_new(idevice_t device, lockdownd_service_des   * @return FILE_RELAY_E_SUCCESS on success, or an FILE_RELAY_E_* error   *     code otherwise.   */ -file_relay_error_t file_relay_client_start_service(idevice_t device, file_relay_client_t* client, const char* label); +LIBIMOBILEDEVICE_API file_relay_error_t file_relay_client_start_service(idevice_t device, file_relay_client_t* client, const char* label);  /**   * Disconnects a file_relay client from the device and frees up the file_relay @@ -90,7 +90,7 @@ file_relay_error_t file_relay_client_start_service(idevice_t device, file_relay_   *     is invalid, or FILE_RELAY_E_UNKNOWN_ERROR when the was an error   *     freeing the parent property_list_service client.   */ -file_relay_error_t file_relay_client_free(file_relay_client_t client); +LIBIMOBILEDEVICE_API file_relay_error_t file_relay_client_free(file_relay_client_t client);  /** @@ -123,7 +123,7 @@ file_relay_error_t file_relay_client_free(file_relay_client_t client);   *     sources are invalid, FILE_RELAY_E_STAGING_EMPTY if no data is available   *     for the given sources, or FILE_RELAY_E_UNKNOWN_ERROR otherwise.   */ -file_relay_error_t file_relay_request_sources(file_relay_client_t client, const char **sources, idevice_connection_t *connection); +LIBIMOBILEDEVICE_API file_relay_error_t file_relay_request_sources(file_relay_client_t client, const char **sources, idevice_connection_t *connection);  /**   * Request data for the given sources. Calls file_relay_request_sources_timeout() with @@ -157,7 +157,7 @@ file_relay_error_t file_relay_request_sources(file_relay_client_t client, const   *     sources are invalid, FILE_RELAY_E_STAGING_EMPTY if no data is available   *     for the given sources, or FILE_RELAY_E_UNKNOWN_ERROR otherwise.   */ -file_relay_error_t file_relay_request_sources_timeout(file_relay_client_t client, const char **sources, idevice_connection_t *connection, unsigned int timeout); +LIBIMOBILEDEVICE_API file_relay_error_t file_relay_request_sources_timeout(file_relay_client_t client, const char **sources, idevice_connection_t *connection, unsigned int timeout);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/heartbeat.h b/include/libimobiledevice/heartbeat.h index 42b318d..4074b8b 100644 --- a/include/libimobiledevice/heartbeat.h +++ b/include/libimobiledevice/heartbeat.h @@ -60,7 +60,7 @@ typedef heartbeat_client_private *heartbeat_client_t; /**< The client handle. */   * @return HEARTBEAT_E_SUCCESS on success, HEARTBEAT_E_INVALID_ARG when   *     client is NULL, or an HEARTBEAT_E_* error code otherwise.   */ -heartbeat_error_t heartbeat_client_new(idevice_t device, lockdownd_service_descriptor_t service, heartbeat_client_t * client); +LIBIMOBILEDEVICE_API heartbeat_error_t heartbeat_client_new(idevice_t device, lockdownd_service_descriptor_t service, heartbeat_client_t * client);  /**   * Starts a new heartbeat service on the specified device and connects to it. @@ -75,7 +75,7 @@ heartbeat_error_t heartbeat_client_new(idevice_t device, lockdownd_service_descr   * @return HEARTBEAT_E_SUCCESS on success, or an HEARTBEAT_E_* error   *     code otherwise.   */ -heartbeat_error_t heartbeat_client_start_service(idevice_t device, heartbeat_client_t * client, const char* label); +LIBIMOBILEDEVICE_API heartbeat_error_t heartbeat_client_start_service(idevice_t device, heartbeat_client_t * client, const char* label);  /**   * Disconnects a heartbeat client from the device and frees up the @@ -86,7 +86,7 @@ heartbeat_error_t heartbeat_client_start_service(idevice_t device, heartbeat_cli   * @return HEARTBEAT_E_SUCCESS on success, HEARTBEAT_E_INVALID_ARG when   *     client is NULL, or an HEARTBEAT_E_* error code otherwise.   */ -heartbeat_error_t heartbeat_client_free(heartbeat_client_t client); +LIBIMOBILEDEVICE_API heartbeat_error_t heartbeat_client_free(heartbeat_client_t client);  /** @@ -98,7 +98,7 @@ heartbeat_error_t heartbeat_client_free(heartbeat_client_t client);   * @return HEARTBEAT_E_SUCCESS on success,   *  HEARTBEAT_E_INVALID_ARG when client or plist is NULL   */ -heartbeat_error_t heartbeat_send(heartbeat_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API heartbeat_error_t heartbeat_send(heartbeat_client_t client, plist_t plist);  /**   * Receives a plist from the service. @@ -109,7 +109,7 @@ heartbeat_error_t heartbeat_send(heartbeat_client_t client, plist_t plist);   * @return HEARTBEAT_E_SUCCESS on success,   *  HEARTBEAT_E_INVALID_ARG when client or plist is NULL   */ -heartbeat_error_t heartbeat_receive(heartbeat_client_t client, plist_t * plist); +LIBIMOBILEDEVICE_API heartbeat_error_t heartbeat_receive(heartbeat_client_t client, plist_t * plist);  /**   * Receives a plist using the given heartbeat client. @@ -128,7 +128,7 @@ heartbeat_error_t heartbeat_receive(heartbeat_client_t client, plist_t * plist);   *      communication error occurs, or HEARTBEAT_E_UNKNOWN_ERROR   *      when an unspecified error occurs.   */ -heartbeat_error_t heartbeat_receive_with_timeout(heartbeat_client_t client, plist_t * plist, uint32_t timeout_ms); +LIBIMOBILEDEVICE_API heartbeat_error_t heartbeat_receive_with_timeout(heartbeat_client_t client, plist_t * plist, uint32_t timeout_ms);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/house_arrest.h b/include/libimobiledevice/house_arrest.h index 3785847..f9ba68a 100644 --- a/include/libimobiledevice/house_arrest.h +++ b/include/libimobiledevice/house_arrest.h @@ -61,7 +61,7 @@ typedef house_arrest_client_private *house_arrest_client_t; /**< The client hand   * @return HOUSE_ARREST_E_SUCCESS on success, HOUSE_ARREST_E_INVALID_ARG when   *     client is NULL, or an HOUSE_ARREST_E_* error code otherwise.   */ -house_arrest_error_t house_arrest_client_new(idevice_t device, lockdownd_service_descriptor_t service, house_arrest_client_t *client); +LIBIMOBILEDEVICE_API house_arrest_error_t house_arrest_client_new(idevice_t device, lockdownd_service_descriptor_t service, house_arrest_client_t *client);  /**   * Starts a new house_arrest service on the specified device and connects to it. @@ -76,7 +76,7 @@ house_arrest_error_t house_arrest_client_new(idevice_t device, lockdownd_service   * @return HOUSE_ARREST_E_SUCCESS on success, or an HOUSE_ARREST_E_* error   *     code otherwise.   */ -house_arrest_error_t house_arrest_client_start_service(idevice_t device, house_arrest_client_t* client, const char* label); +LIBIMOBILEDEVICE_API house_arrest_error_t house_arrest_client_start_service(idevice_t device, house_arrest_client_t* client, const char* label);  /**   * Disconnects an house_arrest client from the device and frees up the @@ -92,7 +92,7 @@ house_arrest_error_t house_arrest_client_start_service(idevice_t device, house_a   * @return HOUSE_ARREST_E_SUCCESS on success, HOUSE_ARREST_E_INVALID_ARG when   *     client is NULL, or an HOUSE_ARREST_E_* error code otherwise.   */ -house_arrest_error_t house_arrest_client_free(house_arrest_client_t client); +LIBIMOBILEDEVICE_API house_arrest_error_t house_arrest_client_free(house_arrest_client_t client);  /** @@ -112,7 +112,7 @@ house_arrest_error_t house_arrest_client_free(house_arrest_client_t client);   *     HOUSE_ARREST_E_INVALID_MODE if the client is not in the correct mode,   *     or HOUSE_ARREST_E_CONN_FAILED if a connection error occurred.   */ -house_arrest_error_t house_arrest_send_request(house_arrest_client_t client, plist_t dict); +LIBIMOBILEDEVICE_API house_arrest_error_t house_arrest_send_request(house_arrest_client_t client, plist_t dict);  /**   * Send a command to the connected house_arrest service. @@ -133,7 +133,7 @@ house_arrest_error_t house_arrest_send_request(house_arrest_client_t client, pli   *     HOUSE_ARREST_E_INVALID_MODE if the client is not in the correct mode,   *     or HOUSE_ARREST_E_CONN_FAILED if a connection error occurred.   */ -house_arrest_error_t house_arrest_send_command(house_arrest_client_t client, const char *command, const char *appid); +LIBIMOBILEDEVICE_API house_arrest_error_t house_arrest_send_command(house_arrest_client_t client, const char *command, const char *appid);  /**   * Retrieves the result of a previously sent house_arrest_request_* request. @@ -149,7 +149,7 @@ house_arrest_error_t house_arrest_send_command(house_arrest_client_t client, con   *     HOUSE_ARREST_E_INVALID_MODE if the client is not in the correct mode,   *     or HOUSE_ARREST_E_CONN_FAILED if a connection error occurred.   */ -house_arrest_error_t house_arrest_get_result(house_arrest_client_t client, plist_t *dict); +LIBIMOBILEDEVICE_API house_arrest_error_t house_arrest_get_result(house_arrest_client_t client, plist_t *dict);  /** @@ -171,7 +171,7 @@ house_arrest_error_t house_arrest_get_result(house_arrest_client_t client, plist   *     an afc client, or an AFC_E_* error code returned by   *     afc_client_new_with_service_client().   */ -afc_error_t afc_client_new_from_house_arrest_client(house_arrest_client_t client, afc_client_t *afc_client); +LIBIMOBILEDEVICE_API afc_error_t afc_client_new_from_house_arrest_client(house_arrest_client_t client, afc_client_t *afc_client);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/installation_proxy.h b/include/libimobiledevice/installation_proxy.h index 87132b9..44331aa 100644 --- a/include/libimobiledevice/installation_proxy.h +++ b/include/libimobiledevice/installation_proxy.h @@ -127,7 +127,7 @@ typedef void (*instproxy_status_cb_t) (plist_t command, plist_t status, void *us   * @return INSTPROXY_E_SUCCESS on success, or an INSTPROXY_E_* error value   *         when an error occurred.   */ -instproxy_error_t instproxy_client_new(idevice_t device, lockdownd_service_descriptor_t service, instproxy_client_t *client); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_client_new(idevice_t device, lockdownd_service_descriptor_t service, instproxy_client_t *client);  /**   * Starts a new installation_proxy service on the specified device and connects to it. @@ -142,7 +142,7 @@ instproxy_error_t instproxy_client_new(idevice_t device, lockdownd_service_descr   * @return INSTPROXY_E_SUCCESS on success, or an INSTPROXY_E_* error   *         code otherwise.   */ -instproxy_error_t instproxy_client_start_service(idevice_t device, instproxy_client_t * client, const char* label); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_client_start_service(idevice_t device, instproxy_client_t * client, const char* label);  /**   * Disconnects an installation_proxy client from the device and frees up the @@ -153,7 +153,7 @@ instproxy_error_t instproxy_client_start_service(idevice_t device, instproxy_cli   * @return INSTPROXY_E_SUCCESS on success   *         or INSTPROXY_E_INVALID_ARG if client is NULL.   */ -instproxy_error_t instproxy_client_free(instproxy_client_t client); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_client_free(instproxy_client_t client);  /**   * List installed applications. This function runs synchronously. @@ -171,7 +171,7 @@ instproxy_error_t instproxy_client_free(instproxy_client_t client);   * @return INSTPROXY_E_SUCCESS on success or an INSTPROXY_E_* error value if   *         an error occurred.   */ -instproxy_error_t instproxy_browse(instproxy_client_t client, plist_t client_options, plist_t *result); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_browse(instproxy_client_t client, plist_t client_options, plist_t *result);  /**   * List pages of installed applications in a callback. @@ -190,7 +190,7 @@ instproxy_error_t instproxy_browse(instproxy_client_t client, plist_t client_opt   * @return INSTPROXY_E_SUCCESS on success or an INSTPROXY_E_* error value if   *         an error occurred.   */ -instproxy_error_t instproxy_browse_with_callback(instproxy_client_t client, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_browse_with_callback(instproxy_client_t client, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * Lookup information about specific applications from the device. @@ -206,7 +206,7 @@ instproxy_error_t instproxy_browse_with_callback(instproxy_client_t client, plis   * @return INSTPROXY_E_SUCCESS on success or an INSTPROXY_E_* error value if   *         an error occurred.   */ -instproxy_error_t instproxy_lookup(instproxy_client_t client, const char** appids, plist_t client_options, plist_t *result); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_lookup(instproxy_client_t client, const char** appids, plist_t client_options, plist_t *result);  /**   * Install an application on the device. @@ -232,7 +232,7 @@ instproxy_error_t instproxy_lookup(instproxy_client_t client, const char** appid   *       created successfully; any error occurring during the command has to be   *       handled inside the specified callback function.   */ -instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * Upgrade an application on the device. This function is nearly the same as @@ -260,7 +260,7 @@ instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_p   *       created successfully; any error occurring during the command has to be   *       handled inside the specified callback function.   */ -instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * Uninstall an application from the device. @@ -281,7 +281,7 @@ instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_p   *       created successfully; any error occurring during the command has to be   *       handled inside the specified callback function.   */ -instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * List archived applications. This function runs synchronously. @@ -297,7 +297,7 @@ instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *app   * @return INSTPROXY_E_SUCCESS on success or an INSTPROXY_E_* error value if   *         an error occurred.   */ -instproxy_error_t instproxy_lookup_archives(instproxy_client_t client, plist_t client_options, plist_t *result); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_lookup_archives(instproxy_client_t client, plist_t client_options, plist_t *result);  /**   * Archive an application on the device. @@ -323,7 +323,7 @@ instproxy_error_t instproxy_lookup_archives(instproxy_client_t client, plist_t c   *       created successfully; any error occurring during the command has to be   *       handled inside the specified callback function.   */ -instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * Restore a previously archived application on the device. @@ -347,7 +347,7 @@ instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid   *       created successfully; any error occurring during the command has to be   *       handled inside the specified callback function.   */ -instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * Removes a previously archived application from the device. @@ -370,7 +370,7 @@ instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid   *       created successfully; any error occurring during the command has to be   *       handled inside the specified callback function.   */ -instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);  /**   * Checks a device for certain capabilities. @@ -386,7 +386,7 @@ instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char   * @return INSTPROXY_E_SUCCESS on success or an INSTPROXY_E_* error value if   *         an error occurred.   */ -instproxy_error_t instproxy_check_capabilities_match(instproxy_client_t client, const char** capabilities, plist_t client_options, plist_t *result); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_check_capabilities_match(instproxy_client_t client, const char** capabilities, plist_t client_options, plist_t *result);  /* Helper */ @@ -396,7 +396,7 @@ instproxy_error_t instproxy_check_capabilities_match(instproxy_client_t client,   * @param command The dictionary describing the command.   * @param name Pointer to store the name of the command.   */ -void instproxy_command_get_name(plist_t command, char** name); +LIBIMOBILEDEVICE_API void instproxy_command_get_name(plist_t command, char** name);  /**   * Gets the name of a status. @@ -404,7 +404,7 @@ void instproxy_command_get_name(plist_t command, char** name);   * @param status The dictionary status response to use.   * @param name Pointer to store the name of the status.   */ -void instproxy_status_get_name(plist_t status, char **name); +LIBIMOBILEDEVICE_API void instproxy_status_get_name(plist_t status, char **name);  /**   * Gets error name, code and description from a response if available. @@ -420,7 +420,7 @@ void instproxy_status_get_name(plist_t status, char **name);   * @return INSTPROXY_E_SUCCESS if no error is found or an INSTPROXY_E_* error   *   value matching the error that ẃas found in the status.   */ -instproxy_error_t instproxy_status_get_error(plist_t status, char **name, char** description, uint64_t* code); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_status_get_error(plist_t status, char **name, char** description, uint64_t* code);  /**   * Gets total and current item information from a browse response if available. @@ -435,7 +435,7 @@ instproxy_error_t instproxy_status_get_error(plist_t status, char **name, char**   *        If NULL is passed no list will be returned. If NULL is returned no   *        list was found in the status.   */ -void instproxy_status_get_current_list(plist_t status, uint64_t* total, uint64_t* current_index, uint64_t* current_amount, plist_t* list); +LIBIMOBILEDEVICE_API void instproxy_status_get_current_list(plist_t status, uint64_t* total, uint64_t* current_index, uint64_t* current_amount, plist_t* list);  /** @@ -445,14 +445,14 @@ void instproxy_status_get_current_list(plist_t status, uint64_t* total, uint64_t   * @param percent Pointer to an int to store the progress in percent (0-100)   *        or -1 if no progress was found in the status.   */ -void instproxy_status_get_percent_complete(plist_t status, int *percent); +LIBIMOBILEDEVICE_API void instproxy_status_get_percent_complete(plist_t status, int *percent);  /**   * Creates a new client_options plist.   *   * @return A new plist_t of type PLIST_DICT.   */ -plist_t instproxy_client_options_new(void); +LIBIMOBILEDEVICE_API plist_t instproxy_client_options_new(void);  /**   * Adds one or more new key:value pairs to the given client_options. @@ -464,7 +464,7 @@ plist_t instproxy_client_options_new(void);   *       keys "ApplicationSINF", "iTunesMetadata", "ReturnAttributes" which are   *       expecting a plist_t node as value and "SkipUninstall" expects int.   */ -void instproxy_client_options_add(plist_t client_options, ...); +LIBIMOBILEDEVICE_API void instproxy_client_options_add(plist_t client_options, ...);  /**   * Adds attributes to the given client_options to filter browse results. @@ -474,7 +474,7 @@ void instproxy_client_options_add(plist_t client_options, ...);   *   * @note The values passed are expected to be strings.   */ -void instproxy_client_options_set_return_attributes(plist_t client_options, ...); +LIBIMOBILEDEVICE_API void instproxy_client_options_set_return_attributes(plist_t client_options, ...);  /**   * Frees client_options plist. @@ -482,7 +482,7 @@ void instproxy_client_options_set_return_attributes(plist_t client_options, ...)   * @param client_options The client options plist to free. Does nothing if NULL   *        is passed.   */ -void instproxy_client_options_free(plist_t client_options); +LIBIMOBILEDEVICE_API void instproxy_client_options_free(plist_t client_options);  /**   * Queries the device for the path of an application. @@ -496,7 +496,7 @@ void instproxy_client_options_free(plist_t client_options);   *         the path could not be determined or an INSTPROXY_E_* error   *         value if an error occurred.   */ -instproxy_error_t instproxy_client_get_path_for_bundle_identifier(instproxy_client_t client, const char* bundle_id, char** path); +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_client_get_path_for_bundle_identifier(instproxy_client_t client, const char* bundle_id, char** path);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/libimobiledevice.h b/include/libimobiledevice/libimobiledevice.h index 6851145..bc57778 100644 --- a/include/libimobiledevice/libimobiledevice.h +++ b/include/libimobiledevice/libimobiledevice.h @@ -31,10 +31,23 @@ extern "C" {  #endif  #include <stdint.h> -#include <sys/types.h> -#include <sys/stat.h>  #include <plist/plist.h> +#if defined(_MSC_VER) +#include <basetsd.h> +typedef SSIZE_T ssize_t; +#endif + +#ifndef LIBIMOBILEDEVICE_API +  #ifdef LIBIMOBILEDEVICE_STATIC +    #define LIBIMOBILEDEVICE_API +  #elif defined(_WIN32) +    #define LIBIMOBILEDEVICE_API __declspec(dllimport) +  #else +    #define LIBIMOBILEDEVICE_API +  #endif +#endif +  /** Error Codes */  typedef enum {  	IDEVICE_E_SUCCESS         =  0, @@ -104,7 +117,7 @@ typedef struct idevice_subscription_context* idevice_subscription_context_t;   *   * @param level Set to 0 for no debug output or 1 to enable debug output.   */ -void idevice_set_debug_level(int level); +LIBIMOBILEDEVICE_API void idevice_set_debug_level(int level);  /**   * Subscribe a callback function that will be called when device add/remove @@ -119,7 +132,7 @@ void idevice_set_debug_level(int level);   *   * @return IDEVICE_E_SUCCESS on success or an error value when an error occurred.   */ -idevice_error_t idevice_events_subscribe(idevice_subscription_context_t *context, idevice_event_cb_t callback, void *user_data); +LIBIMOBILEDEVICE_API idevice_error_t idevice_events_subscribe(idevice_subscription_context_t *context, idevice_event_cb_t callback, void *user_data);  /**   * Unsubscribe the event callback function that has been registered with @@ -129,7 +142,7 @@ idevice_error_t idevice_events_subscribe(idevice_subscription_context_t *context   *   * @return IDEVICE_E_SUCCESS on success or an error value when an error occurred.   */ -idevice_error_t idevice_events_unsubscribe(idevice_subscription_context_t context); +LIBIMOBILEDEVICE_API idevice_error_t idevice_events_unsubscribe(idevice_subscription_context_t context);  /**   * (DEPRECATED) Register a callback function that will be called when device add/remove @@ -143,7 +156,7 @@ idevice_error_t idevice_events_unsubscribe(idevice_subscription_context_t contex   *   * @return IDEVICE_E_SUCCESS on success or an error value when an error occurred.   */ -idevice_error_t idevice_event_subscribe(idevice_event_cb_t callback, void *user_data); +LIBIMOBILEDEVICE_API idevice_error_t idevice_event_subscribe(idevice_event_cb_t callback, void *user_data);  /**   * (DEPRECATED) Release the event callback function that has been registered with @@ -153,7 +166,7 @@ idevice_error_t idevice_event_subscribe(idevice_event_cb_t callback, void *user_   *   * @return IDEVICE_E_SUCCESS on success or an error value when an error occurred.   */ -idevice_error_t idevice_event_unsubscribe(void); +LIBIMOBILEDEVICE_API idevice_error_t idevice_event_unsubscribe(void);  /* discovery (synchronous) */ @@ -170,7 +183,7 @@ idevice_error_t idevice_event_unsubscribe(void);   *   network devices in the list, use idevice_get_device_list_extended().   * @see idevice_get_device_list_extended   */ -idevice_error_t idevice_get_device_list(char ***devices, int *count); +LIBIMOBILEDEVICE_API idevice_error_t idevice_get_device_list(char ***devices, int *count);  /**   * Free a list of device UDIDs. @@ -179,7 +192,7 @@ idevice_error_t idevice_get_device_list(char ***devices, int *count);   *   * @return Always returnes IDEVICE_E_SUCCESS.   */ -idevice_error_t idevice_device_list_free(char **devices); +LIBIMOBILEDEVICE_API idevice_error_t idevice_device_list_free(char **devices);  /**   * Get a list of currently available devices @@ -190,7 +203,7 @@ idevice_error_t idevice_device_list_free(char **devices);   *   * @return IDEVICE_E_SUCCESS on success or an error value when an error occurred.   */ -idevice_error_t idevice_get_device_list_extended(idevice_info_t **devices, int *count); +LIBIMOBILEDEVICE_API idevice_error_t idevice_get_device_list_extended(idevice_info_t **devices, int *count);  /**   * Free an extended device list retrieved through idevice_get_device_list_extended(). @@ -199,7 +212,7 @@ idevice_error_t idevice_get_device_list_extended(idevice_info_t **devices, int *   *   * @return IDEVICE_E_SUCCESS on success or an error value when an error occurred.   */ -idevice_error_t idevice_device_list_extended_free(idevice_info_t *devices); +LIBIMOBILEDEVICE_API idevice_error_t idevice_device_list_extended_free(idevice_info_t *devices);  /* device structure creation and destruction */ @@ -220,7 +233,7 @@ idevice_error_t idevice_device_list_extended_free(idevice_info_t *devices);   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_new(idevice_t *device, const char *udid); +LIBIMOBILEDEVICE_API idevice_error_t idevice_new(idevice_t *device, const char *udid);  /**   * Creates an idevice_t structure for the device specified by UDID, @@ -243,14 +256,14 @@ idevice_error_t idevice_new(idevice_t *device, const char *udid);   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_new_with_options(idevice_t *device, const char *udid, enum idevice_options options); +LIBIMOBILEDEVICE_API idevice_error_t idevice_new_with_options(idevice_t *device, const char *udid, enum idevice_options options);  /**   * Cleans up an idevice structure, then frees the structure itself.   *   * @param device idevice_t to free.   */ -idevice_error_t idevice_free(idevice_t device); +LIBIMOBILEDEVICE_API idevice_error_t idevice_free(idevice_t device);  /* connection/disconnection */ @@ -264,7 +277,7 @@ idevice_error_t idevice_free(idevice_t device);   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_connect(idevice_t device, uint16_t port, idevice_connection_t *connection); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connect(idevice_t device, uint16_t port, idevice_connection_t *connection);  /**   * Disconnect from the device and clean up the connection structure. @@ -273,7 +286,7 @@ idevice_error_t idevice_connect(idevice_t device, uint16_t port, idevice_connect   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_disconnect(idevice_connection_t connection); +LIBIMOBILEDEVICE_API idevice_error_t idevice_disconnect(idevice_connection_t connection);  /* communication */ @@ -288,7 +301,7 @@ idevice_error_t idevice_disconnect(idevice_connection_t connection);   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_connection_send(idevice_connection_t connection, const char *data, uint32_t len, uint32_t *sent_bytes); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_send(idevice_connection_t connection, const char *data, uint32_t len, uint32_t *sent_bytes);  /**   * Receive data from a device via the given connection. @@ -305,7 +318,7 @@ idevice_error_t idevice_connection_send(idevice_connection_t connection, const c   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_connection_receive_timeout(idevice_connection_t connection, char *data, uint32_t len, uint32_t *recv_bytes, unsigned int timeout); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_receive_timeout(idevice_connection_t connection, char *data, uint32_t len, uint32_t *recv_bytes, unsigned int timeout);  /**   * Receive data from a device via the given connection. @@ -320,7 +333,7 @@ idevice_error_t idevice_connection_receive_timeout(idevice_connection_t connecti   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_connection_receive(idevice_connection_t connection, char *data, uint32_t len, uint32_t *recv_bytes); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_receive(idevice_connection_t connection, char *data, uint32_t len, uint32_t *recv_bytes);  /**   * Enables SSL for the given connection. @@ -331,7 +344,7 @@ idevice_error_t idevice_connection_receive(idevice_connection_t connection, char   *     is NULL or connection->ssl_data is non-NULL, or IDEVICE_E_SSL_ERROR when   *     SSL initialization, setup, or handshake fails.   */ -idevice_error_t idevice_connection_enable_ssl(idevice_connection_t connection); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_enable_ssl(idevice_connection_t connection);  /**   * Disable SSL for the given connection. @@ -342,7 +355,7 @@ idevice_error_t idevice_connection_enable_ssl(idevice_connection_t connection);   *     is NULL. This function also returns IDEVICE_E_SUCCESS when SSL is not   *     enabled and does no further error checking on cleanup.   */ -idevice_error_t idevice_connection_disable_ssl(idevice_connection_t connection); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_disable_ssl(idevice_connection_t connection);  /**   * Disable bypass SSL for the given connection without sending out terminate messages. @@ -355,7 +368,7 @@ idevice_error_t idevice_connection_disable_ssl(idevice_connection_t connection);   *     is NULL. This function also returns IDEVICE_E_SUCCESS when SSL is not   *     enabled and does no further error checking on cleanup.   */ -idevice_error_t idevice_connection_disable_bypass_ssl(idevice_connection_t connection, uint8_t sslBypass); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_disable_bypass_ssl(idevice_connection_t connection, uint8_t sslBypass);  /** @@ -366,7 +379,7 @@ idevice_error_t idevice_connection_disable_bypass_ssl(idevice_connection_t conne   *   * @return IDEVICE_E_SUCCESS if ok, otherwise an error code.   */ -idevice_error_t idevice_connection_get_fd(idevice_connection_t connection, int *fd); +LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_get_fd(idevice_connection_t connection, int *fd);  /* misc */ @@ -378,7 +391,7 @@ idevice_error_t idevice_connection_get_fd(idevice_connection_t connection, int *   *   * @return IDEVICE_E_SUCCESS on success, otherwise an error code.   */ -idevice_error_t idevice_get_handle(idevice_t device, uint32_t *handle); +LIBIMOBILEDEVICE_API idevice_error_t idevice_get_handle(idevice_t device, uint32_t *handle);  /**   * Gets the Unique Device ID for the device. @@ -388,7 +401,40 @@ idevice_error_t idevice_get_handle(idevice_t device, uint32_t *handle);   *   * @return IDEVICE_E_SUCCESS on success, otherwise an error code.   */ -idevice_error_t idevice_get_udid(idevice_t device, char **udid); +LIBIMOBILEDEVICE_API idevice_error_t idevice_get_udid(idevice_t device, char **udid); + +/** + * Returns the device ProductVersion in numerical form, where "X.Y.Z" + * will be returned as (X << 16) | (Y << 8) | Z . + * Use IDEVICE_DEVICE_VERSION macro for easy version comparison. + * @see IDEVICE_DEVICE_VERSION + * + * @param client Initialized device client + * + * @return A numerical representation of the X.Y.Z ProductVersion string + *         or 0 if the version cannot be retrieved. + */ +LIBIMOBILEDEVICE_API unsigned int idevice_get_device_version(idevice_t device); + +/** + * Gets a readable error string for a given idevice error code. + * + * @param err An idevice error code + * + * @return A readable error string + */ +LIBIMOBILEDEVICE_API const char* idevice_strerror(idevice_error_t err); + +/** + * Returns a static string of the libimobiledevice version. + * + * @return The libimobiledevice version as static ascii string + */ +LIBIMOBILEDEVICE_API const char* libimobiledevice_version(); + +/* macros */ +/** Helper macro to get a numerical representation of a product version tuple */ +#define IDEVICE_DEVICE_VERSION(maj, min, patch) ((((maj) & 0xFF) << 16) | (((min) & 0xFF) << 8) | ((patch) & 0xFF))  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/lockdown.h b/include/libimobiledevice/lockdown.h index 6d390fd..21669ef 100644 --- a/include/libimobiledevice/lockdown.h +++ b/include/libimobiledevice/lockdown.h @@ -130,7 +130,7 @@ typedef void (*lockdownd_cu_pairing_cb_t) (lockdownd_cu_pairing_cb_type_t cb_typ   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_client_new(idevice_t device, lockdownd_client_t *client, const char *label); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new(idevice_t device, lockdownd_client_t *client, const char *label);  /**   * Creates a new lockdownd client for the device and starts initial handshake. @@ -149,7 +149,7 @@ lockdownd_error_t lockdownd_client_new(idevice_t device, lockdownd_client_t *cli   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL,   *  LOCKDOWN_E_INVALID_CONF if configuration data is wrong   */ -lockdownd_error_t lockdownd_client_new_with_handshake(idevice_t device, lockdownd_client_t *client, const char *label); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new_with_handshake(idevice_t device, lockdownd_client_t *client, const char *label);  /**   * Closes the lockdownd client session if one is running and frees up the @@ -159,7 +159,7 @@ lockdownd_error_t lockdownd_client_new_with_handshake(idevice_t device, lockdown   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_client_free(lockdownd_client_t client); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_free(lockdownd_client_t client);  /** @@ -171,7 +171,7 @@ lockdownd_error_t lockdownd_client_free(lockdownd_client_t client);   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_query_type(lockdownd_client_t client, char **type); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_query_type(lockdownd_client_t client, char **type);  /**   * Retrieves a preferences plist using an optional domain and/or key name. @@ -183,7 +183,7 @@ lockdownd_error_t lockdownd_query_type(lockdownd_client_t client, char **type);   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_get_value(lockdownd_client_t client, const char *domain, const char *key, plist_t *value); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_get_value(lockdownd_client_t client, const char *domain, const char *key, plist_t *value);  /**   * Sets a preferences value using a plist and optional by domain and/or key name. @@ -196,7 +196,7 @@ lockdownd_error_t lockdownd_get_value(lockdownd_client_t client, const char *dom   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client or   *  value is NULL   */ -lockdownd_error_t lockdownd_set_value(lockdownd_client_t client, const char *domain, const char *key, plist_t value); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_set_value(lockdownd_client_t client, const char *domain, const char *key, plist_t value);  /**   * Removes a preference node by domain and/or key name. @@ -209,7 +209,7 @@ lockdownd_error_t lockdownd_set_value(lockdownd_client_t client, const char *dom   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_remove_value(lockdownd_client_t client, const char *domain, const char *key); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_remove_value(lockdownd_client_t client, const char *domain, const char *key);  /**   * Requests to start a service and retrieve it's port on success. @@ -223,7 +223,7 @@ lockdownd_error_t lockdownd_remove_value(lockdownd_client_t client, const char *   *  by the device, LOCKDOWN_E_START_SERVICE_FAILED if the service could not be   *  started by the device   */ -lockdownd_error_t lockdownd_start_service(lockdownd_client_t client, const char *identifier, lockdownd_service_descriptor_t *service); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_start_service(lockdownd_client_t client, const char *identifier, lockdownd_service_descriptor_t *service);  /**   * Requests to start a service and retrieve it's port on success. @@ -239,7 +239,7 @@ lockdownd_error_t lockdownd_start_service(lockdownd_client_t client, const char   *  started by the device, LOCKDOWN_E_INVALID_CONF if the host id or escrow bag are   *  missing from the device record.   */ -lockdownd_error_t lockdownd_start_service_with_escrow_bag(lockdownd_client_t client, const char *identifier, lockdownd_service_descriptor_t *service); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_start_service_with_escrow_bag(lockdownd_client_t client, const char *identifier, lockdownd_service_descriptor_t *service);  /**   * Opens a session with lockdownd and switches to SSL mode if device wants it. @@ -254,7 +254,7 @@ lockdownd_error_t lockdownd_start_service_with_escrow_bag(lockdownd_client_t cli   *  LOCKDOWN_E_INVALID_HOST_ID if the device does not know the supplied HostID,   *  LOCKDOWN_E_SSL_ERROR if enabling SSL communication failed   */ -lockdownd_error_t lockdownd_start_session(lockdownd_client_t client, const char *host_id, char **session_id, int *ssl_enabled); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_start_session(lockdownd_client_t client, const char *host_id, char **session_id, int *ssl_enabled);  /**   * Closes the lockdownd session by sending the StopSession request. @@ -266,7 +266,7 @@ lockdownd_error_t lockdownd_start_session(lockdownd_client_t client, const char   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_stop_session(lockdownd_client_t client, const char *session_id); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_stop_session(lockdownd_client_t client, const char *session_id);  /**   * Sends a plist to lockdownd. @@ -280,7 +280,7 @@ lockdownd_error_t lockdownd_stop_session(lockdownd_client_t client, const char *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client or   *  plist is NULL   */ -lockdownd_error_t lockdownd_send(lockdownd_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_send(lockdownd_client_t client, plist_t plist);  /**   * Receives a plist from lockdownd. @@ -291,7 +291,7 @@ lockdownd_error_t lockdownd_send(lockdownd_client_t client, plist_t plist);   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client or   *  plist is NULL   */ -lockdownd_error_t lockdownd_receive(lockdownd_client_t client, plist_t *plist); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_receive(lockdownd_client_t client, plist_t *plist);  /**   * Pairs the device using the supplied pair record. @@ -307,7 +307,7 @@ lockdownd_error_t lockdownd_receive(lockdownd_client_t client, plist_t *plist);   *  LOCKDOWN_E_PASSWORD_PROTECTED if the device is password protected,   *  LOCKDOWN_E_INVALID_HOST_ID if the device does not know the caller's host id   */ -lockdownd_error_t lockdownd_pair(lockdownd_client_t client, lockdownd_pair_record_t pair_record); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_pair(lockdownd_client_t client, lockdownd_pair_record_t pair_record);   /**   * Pairs the device using the supplied pair record and passing the given options. @@ -326,7 +326,7 @@ lockdownd_error_t lockdownd_pair(lockdownd_client_t client, lockdownd_pair_recor   *  LOCKDOWN_E_PASSWORD_PROTECTED if the device is password protected,   *  LOCKDOWN_E_INVALID_HOST_ID if the device does not know the caller's host id   */ -lockdownd_error_t lockdownd_pair_with_options(lockdownd_client_t client, lockdownd_pair_record_t pair_record, plist_t options, plist_t *response); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_pair_with_options(lockdownd_client_t client, lockdownd_pair_record_t pair_record, plist_t options, plist_t *response);  /**   * Validates if the device is paired with the given HostID. If successful the @@ -345,7 +345,7 @@ lockdownd_error_t lockdownd_pair_with_options(lockdownd_client_t client, lockdow   *  LOCKDOWN_E_PASSWORD_PROTECTED if the device is password protected,   *  LOCKDOWN_E_INVALID_HOST_ID if the device does not know the caller's host id   */ -lockdownd_error_t lockdownd_validate_pair(lockdownd_client_t client, lockdownd_pair_record_t pair_record); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_validate_pair(lockdownd_client_t client, lockdownd_pair_record_t pair_record);  /**   * Unpairs the device with the given HostID and removes the pairing records @@ -361,7 +361,7 @@ lockdownd_error_t lockdownd_validate_pair(lockdownd_client_t client, lockdownd_p   *  LOCKDOWN_E_PASSWORD_PROTECTED if the device is password protected,   *  LOCKDOWN_E_INVALID_HOST_ID if the device does not know the caller's host id   */ -lockdownd_error_t lockdownd_unpair(lockdownd_client_t client, lockdownd_pair_record_t pair_record); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_unpair(lockdownd_client_t client, lockdownd_pair_record_t pair_record);  /**   * Activates the device. Only works within an open session. @@ -378,7 +378,7 @@ lockdownd_error_t lockdownd_unpair(lockdownd_client_t client, lockdownd_pair_rec   *  LOCKDOWN_E_INVALID_ACTIVATION_RECORD if the device reports that the   *  activation_record is invalid   */ -lockdownd_error_t lockdownd_activate(lockdownd_client_t client, plist_t activation_record); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_activate(lockdownd_client_t client, plist_t activation_record);  /**   * Deactivates the device, returning it to the locked “Activate with iTunes” @@ -390,7 +390,7 @@ lockdownd_error_t lockdownd_activate(lockdownd_client_t client, plist_t activati   *  LOCKDOWN_E_NO_RUNNING_SESSION if no session is open,   *  LOCKDOWN_E_PLIST_ERROR if the received plist is broken   */ -lockdownd_error_t lockdownd_deactivate(lockdownd_client_t client); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_deactivate(lockdownd_client_t client);  /**   * Tells the device to immediately enter recovery mode. @@ -399,7 +399,7 @@ lockdownd_error_t lockdownd_deactivate(lockdownd_client_t client);   *   * @return LOCKDOWN_E_SUCCESS on success, LOCKDOWN_E_INVALID_ARG when client is NULL   */ -lockdownd_error_t lockdownd_enter_recovery(lockdownd_client_t client); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_enter_recovery(lockdownd_client_t client);  /**   * Sends the Goodbye request to lockdownd signaling the end of communication. @@ -410,7 +410,7 @@ lockdownd_error_t lockdownd_enter_recovery(lockdownd_client_t client);   *  is NULL, LOCKDOWN_E_PLIST_ERROR if the device did not acknowledge the   *  request   */ -lockdownd_error_t lockdownd_goodbye(lockdownd_client_t client); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_goodbye(lockdownd_client_t client);  /**   * Creates a CU pairing session for the current lockdown client. @@ -439,7 +439,7 @@ lockdownd_error_t lockdownd_goodbye(lockdownd_client_t client);   *   parameters is invalid, LOCKDOWN_E_PAIRING_FAILED if the pairing failed,   *   or a LOCKDOWN_E_* error code otherwise.   */ -lockdownd_error_t lockdownd_cu_pairing_create(lockdownd_client_t client, lockdownd_cu_pairing_cb_t pairing_callback, void* cb_user_data, plist_t host_info, plist_t acl); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_cu_pairing_create(lockdownd_client_t client, lockdownd_cu_pairing_cb_t pairing_callback, void* cb_user_data, plist_t host_info, plist_t acl);  /**   * Sends a request via lockdown client with established CU pairing session @@ -459,7 +459,7 @@ lockdownd_error_t lockdownd_cu_pairing_create(lockdownd_client_t client, lockdow   *   lockdown client does not have an established CU pairing session,   *   or a LOCKDOWN_E_* error code otherwise.   */ -lockdownd_error_t lockdownd_cu_send_request_and_get_reply(lockdownd_client_t client, const char* request, plist_t request_payload, plist_t* reply); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_cu_send_request_and_get_reply(lockdownd_client_t client, const char* request, plist_t request_payload, plist_t* reply);  /**   * Retrieves a value using an optional domain and/or key name from a lockdown @@ -479,7 +479,7 @@ lockdownd_error_t lockdownd_cu_send_request_and_get_reply(lockdownd_client_t cli   *   lockdown client does not have an established CU pairing session,   *   or a LOCKDOWN_E_* error code otherwise.   */ -lockdownd_error_t lockdownd_get_value_cu(lockdownd_client_t client, const char* domain, const char* key, plist_t* value); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_get_value_cu(lockdownd_client_t client, const char* domain, const char* key, plist_t* value);  /**   * Perform a device pairing with a lockdown client that has an established @@ -492,7 +492,7 @@ lockdownd_error_t lockdownd_get_value_cu(lockdownd_client_t client, const char*   *   does not have an established CU pairing session, or a LOCKDOWN_E_* error   *   code otherwise.   */ -lockdownd_error_t lockdownd_pair_cu(lockdownd_client_t client); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_pair_cu(lockdownd_client_t client);  /* Helper */ @@ -504,7 +504,7 @@ lockdownd_error_t lockdownd_pair_cu(lockdownd_client_t client);   * @param label The label to set or NULL to disable sending a label   *   */ -void lockdownd_client_set_label(lockdownd_client_t client, const char *label); +LIBIMOBILEDEVICE_API void lockdownd_client_set_label(lockdownd_client_t client, const char *label);  /**   * Returns the unique id of the device from lockdownd. @@ -515,7 +515,7 @@ void lockdownd_client_set_label(lockdownd_client_t client, const char *label);   *   * @return LOCKDOWN_E_SUCCESS on success   */ -lockdownd_error_t lockdownd_get_device_udid(lockdownd_client_t client, char **udid); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_get_device_udid(lockdownd_client_t client, char **udid);  /**   * Retrieves the name of the device from lockdownd set by the user. @@ -526,7 +526,7 @@ lockdownd_error_t lockdownd_get_device_udid(lockdownd_client_t client, char **ud   *   * @return LOCKDOWN_E_SUCCESS on success   */ -lockdownd_error_t lockdownd_get_device_name(lockdownd_client_t client, char **device_name); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_get_device_name(lockdownd_client_t client, char **device_name);  /**   * Calculates and returns the data classes the device supports from lockdownd. @@ -541,7 +541,7 @@ lockdownd_error_t lockdownd_get_device_name(lockdownd_client_t client, char **de   *  LOCKDOWN_E_NO_RUNNING_SESSION if no session is open,   *  LOCKDOWN_E_PLIST_ERROR if the received plist is broken   */ -lockdownd_error_t lockdownd_get_sync_data_classes(lockdownd_client_t client, char ***classes, int *count); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_get_sync_data_classes(lockdownd_client_t client, char ***classes, int *count);  /**   * Frees memory of an allocated array of data classes as returned by lockdownd_get_sync_data_classes() @@ -550,7 +550,7 @@ lockdownd_error_t lockdownd_get_sync_data_classes(lockdownd_client_t client, cha   *   * @return LOCKDOWN_E_SUCCESS on success   */ -lockdownd_error_t lockdownd_data_classes_free(char **classes); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_data_classes_free(char **classes);  /**   * Frees memory of a service descriptor as returned by lockdownd_start_service() @@ -559,7 +559,7 @@ lockdownd_error_t lockdownd_data_classes_free(char **classes);   *   * @return LOCKDOWN_E_SUCCESS on success   */ -lockdownd_error_t lockdownd_service_descriptor_free(lockdownd_service_descriptor_t service); +LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_service_descriptor_free(lockdownd_service_descriptor_t service);  /**   * Gets a readable error string for a given lockdown error code. @@ -568,7 +568,7 @@ lockdownd_error_t lockdownd_service_descriptor_free(lockdownd_service_descriptor   *   * @returns A readable error string   */ -const char* lockdownd_strerror(lockdownd_error_t err); +LIBIMOBILEDEVICE_API const char* lockdownd_strerror(lockdownd_error_t err);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/misagent.h b/include/libimobiledevice/misagent.h index 394f5ce..7981a8b 100644 --- a/include/libimobiledevice/misagent.h +++ b/include/libimobiledevice/misagent.h @@ -60,7 +60,7 @@ typedef misagent_client_private *misagent_client_t; /**< The client handle. */   * @return MISAGENT_E_SUCCESS on success, MISAGENT_E_INVALID_ARG when   *     client is NULL, or an MISAGENT_E_* error code otherwise.   */ -misagent_error_t misagent_client_new(idevice_t device, lockdownd_service_descriptor_t service, misagent_client_t *client); +LIBIMOBILEDEVICE_API misagent_error_t misagent_client_new(idevice_t device, lockdownd_service_descriptor_t service, misagent_client_t *client);  /**   * Starts a new misagent service on the specified device and connects to it. @@ -75,7 +75,7 @@ misagent_error_t misagent_client_new(idevice_t device, lockdownd_service_descrip   * @return MISAGENT_E_SUCCESS on success, or an MISAGENT_E_* error   *     code otherwise.   */ -misagent_error_t misagent_client_start_service(idevice_t device, misagent_client_t* client, const char* label); +LIBIMOBILEDEVICE_API misagent_error_t misagent_client_start_service(idevice_t device, misagent_client_t* client, const char* label);  /**   * Disconnects an misagent client from the device and frees up the @@ -86,7 +86,7 @@ misagent_error_t misagent_client_start_service(idevice_t device, misagent_client   * @return MISAGENT_E_SUCCESS on success, MISAGENT_E_INVALID_ARG when   *     client is NULL, or an MISAGENT_E_* error code otherwise.   */ -misagent_error_t misagent_client_free(misagent_client_t client); +LIBIMOBILEDEVICE_API misagent_error_t misagent_client_free(misagent_client_t client);  /** @@ -99,7 +99,7 @@ misagent_error_t misagent_client_free(misagent_client_t client);   * @return MISAGENT_E_SUCCESS on success, MISAGENT_E_INVALID_ARG when   *     client is invalid, or an MISAGENT_E_* error code otherwise.   */ -misagent_error_t misagent_install(misagent_client_t client, plist_t profile); +LIBIMOBILEDEVICE_API misagent_error_t misagent_install(misagent_client_t client, plist_t profile);  /**   * Retrieves all installed provisioning profiles (iOS 9.2.1 or below). @@ -118,7 +118,7 @@ misagent_error_t misagent_install(misagent_client_t client, plist_t profile);   *     still returns MISAGENT_E_SUCCESS and profiles will just point to an   *     empty array.   */ -misagent_error_t misagent_copy(misagent_client_t client, plist_t* profiles); +LIBIMOBILEDEVICE_API misagent_error_t misagent_copy(misagent_client_t client, plist_t* profiles);  /**   * Retrieves all installed provisioning profiles (iOS 9.3 or higher). @@ -137,7 +137,7 @@ misagent_error_t misagent_copy(misagent_client_t client, plist_t* profiles);   *     still returns MISAGENT_E_SUCCESS and profiles will just point to an   *     empty array.   */ -misagent_error_t misagent_copy_all(misagent_client_t client, plist_t* profiles); +LIBIMOBILEDEVICE_API misagent_error_t misagent_copy_all(misagent_client_t client, plist_t* profiles);  /**   * Removes a given provisioning profile. @@ -150,7 +150,7 @@ misagent_error_t misagent_copy_all(misagent_client_t client, plist_t* profiles);   * @return MISAGENT_E_SUCCESS on success, MISAGENT_E_INVALID_ARG when   *     client is invalid, or an MISAGENT_E_* error code otherwise.   */ -misagent_error_t misagent_remove(misagent_client_t client, const char* profileID); +LIBIMOBILEDEVICE_API misagent_error_t misagent_remove(misagent_client_t client, const char* profileID);  /**   * Retrieves the status code from the last operation. @@ -159,7 +159,7 @@ misagent_error_t misagent_remove(misagent_client_t client, const char* profileID   *   * @return -1 if client is invalid, or the status code from the last operation   */ -int misagent_get_status_code(misagent_client_t client); +LIBIMOBILEDEVICE_API int misagent_get_status_code(misagent_client_t client);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/mobile_image_mounter.h b/include/libimobiledevice/mobile_image_mounter.h index 891df40..76bb61a 100644 --- a/include/libimobiledevice/mobile_image_mounter.h +++ b/include/libimobiledevice/mobile_image_mounter.h @@ -42,6 +42,7 @@ typedef enum {  	MOBILE_IMAGE_MOUNTER_E_CONN_FAILED    = -3,  	MOBILE_IMAGE_MOUNTER_E_COMMAND_FAILED = -4,  	MOBILE_IMAGE_MOUNTER_E_DEVICE_LOCKED  = -5, +	MOBILE_IMAGE_MOUNTER_E_NOT_SUPPORTED  = -6,  	MOBILE_IMAGE_MOUNTER_E_UNKNOWN_ERROR  = -256  } mobile_image_mounter_error_t; @@ -66,7 +67,7 @@ typedef ssize_t (*mobile_image_mounter_upload_cb_t) (void* buffer, size_t length   *    or MOBILE_IMAGE_MOUNTER_E_CONN_FAILED if the connection to the   *    device could not be established.   */ -mobile_image_mounter_error_t mobile_image_mounter_new(idevice_t device, lockdownd_service_descriptor_t service, mobile_image_mounter_client_t *client); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_new(idevice_t device, lockdownd_service_descriptor_t service, mobile_image_mounter_client_t *client);  /**   * Starts a new mobile_image_mounter service on the specified device and connects to it. @@ -81,7 +82,7 @@ mobile_image_mounter_error_t mobile_image_mounter_new(idevice_t device, lockdown   * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, or an MOBILE_IMAGE_MOUNTER_E_* error   *     code otherwise.   */ -mobile_image_mounter_error_t mobile_image_mounter_start_service(idevice_t device, mobile_image_mounter_client_t* client, const char* label); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_start_service(idevice_t device, mobile_image_mounter_client_t* client, const char* label);  /**   * Disconnects a mobile_image_mounter client from the device and frees up the @@ -92,7 +93,7 @@ mobile_image_mounter_error_t mobile_image_mounter_start_service(idevice_t device   * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success,   *    or MOBILE_IMAGE_MOUNTER_E_INVALID_ARG if client is NULL.   */ -mobile_image_mounter_error_t mobile_image_mounter_free(mobile_image_mounter_client_t client); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_free(mobile_image_mounter_client_t client);  /** @@ -108,7 +109,7 @@ mobile_image_mounter_error_t mobile_image_mounter_free(mobile_image_mounter_clie   *   * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, or an error code on error   */ -mobile_image_mounter_error_t mobile_image_mounter_lookup_image(mobile_image_mounter_client_t client, const char *image_type, plist_t *result); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_lookup_image(mobile_image_mounter_client_t client, const char *image_type, plist_t *result);  /**   * Uploads an image with an optional signature to the device. @@ -127,7 +128,7 @@ mobile_image_mounter_error_t mobile_image_mounter_lookup_image(mobile_image_moun   * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on succes, or a   *    MOBILE_IMAGE_MOUNTER_E_* error code otherwise.   */ -mobile_image_mounter_error_t mobile_image_mounter_upload_image(mobile_image_mounter_client_t client, const char *image_type, size_t image_size, const char *signature, uint16_t signature_size, mobile_image_mounter_upload_cb_t upload_cb, void* userdata); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_upload_image(mobile_image_mounter_client_t client, const char *image_type, size_t image_size, const unsigned char *signature, unsigned int signature_size, mobile_image_mounter_upload_cb_t upload_cb, void* userdata);  /**   * Mounts an image on the device. @@ -138,19 +139,50 @@ mobile_image_mounter_error_t mobile_image_mounter_upload_image(mobile_image_moun   * @param signature Pointer to a buffer holding the images' signature   * @param signature_size Length of the signature image_signature points to   * @param image_type Type of image to mount + * @param options A dictionary containing additional key/value pairs to add   * @param result Pointer to a plist that will receive the result of the   *    operation.   *   * @note This function may return MOBILE_IMAGE_MOUNTER_E_SUCCESS even if the   *    operation has failed. Check the resulting plist for further information. - *    Note that there is no unmounting function. The mount persists until the - *    device is rebooted.   *   * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success,   *    MOBILE_IMAGE_MOUNTER_E_INVALID_ARG if on ore more parameters are   *    invalid, or another error code otherwise.   */ -mobile_image_mounter_error_t mobile_image_mounter_mount_image(mobile_image_mounter_client_t client, const char *image_path, const char *signature, uint16_t signature_size, const char *image_type, plist_t *result); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_mount_image_with_options(mobile_image_mounter_client_t client, const char *image_path, const unsigned char *signature, unsigned int signature_size, const char *image_type, plist_t options, plist_t *result); + +/** + * Mounts an image on the device. + * + * @param client The connected mobile_image_mounter client. + * @param image_path The absolute path of the image to mount. The image must + *    be present before calling this function. + * @param signature Pointer to a buffer holding the images' signature + * @param signature_size Length of the signature image_signature points to + * @param image_type Type of image to mount + * @param result Pointer to a plist that will receive the result of the + *    operation. + * + * @note This function may return MOBILE_IMAGE_MOUNTER_E_SUCCESS even if the + *    operation has failed. Check the resulting plist for further information. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    MOBILE_IMAGE_MOUNTER_E_INVALID_ARG if on ore more parameters are + *    invalid, or another error code otherwise. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_mount_image(mobile_image_mounter_client_t client, const char *image_path, const unsigned char *signature, unsigned int signature_size, const char *image_type, plist_t *result); + +/** + * Unmount a mounted image at given path on the device. + * + * @param client The connected mobile_image_mounter client. + * @param mount_path The mount path of the mounted image on the device. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_unmount_image(mobile_image_mounter_client_t client, const char *mount_path);  /**   * Hangs up the connection to the mobile_image_mounter service. @@ -163,7 +195,78 @@ mobile_image_mounter_error_t mobile_image_mounter_mount_image(mobile_image_mount   *     MOBILE_IMAGE_MOUNTER_E_INVALID_ARG if client is invalid,   *     or another error code otherwise.   */ -mobile_image_mounter_error_t mobile_image_mounter_hangup(mobile_image_mounter_client_t client); +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_hangup(mobile_image_mounter_client_t client); + +/** + * Query the developer mode status of the given device. + * + * @param client The connected mobile_image_mounter client. + * @param result A pointer to a plist_t that will be set to the resulting developer mode status dictionary. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_query_developer_mode_status(mobile_image_mounter_client_t client, plist_t *result); + +/** + * Query a personalization nonce for the given image type, used for personalized disk images (iOS 17+). + * This nonce is supposed to be added to the TSS request for the corresponding image. + * + * @param client The connected mobile_image_mounter client. + * @param image_type The image_type to get the personalization nonce for, usually `DeveloperDiskImage`. + * @param nonce Pointer that will be set to an allocated buffer with the nonce value. + * @param nonce_size Pointer to an unsigned int that will receive the size of the nonce value. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_query_nonce(mobile_image_mounter_client_t client, const char* image_type, unsigned char** nonce, unsigned int* nonce_size); + +/** + * Query personalization identitifers for the given image_type. + * + * @param client The connected mobile_image_mounter client. + * @param image_type The image_type to get the personalization identifiers for. Can be NULL. + * @param result A pointer to a plist_t that will be set to the resulting identifier dictionary. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_query_personalization_identifiers(mobile_image_mounter_client_t client, const char* image_type, plist_t *result); + +/** + * + * @param client The connected mobile_image_mounter client. + * @param image_type The image_type to get the personalization identifiers for. Can be NULL. + * @param signature The signature of the corresponding personalized image. + * @param signature_size The size of signature. + * @param manifest Pointer that will be set to an allocated buffer with the manifest data. + * @param manifest_size Pointer to an unsigned int that will be set to the size of the manifest data. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_query_personalization_manifest(mobile_image_mounter_client_t client, const char* image_type, const unsigned char* signature, unsigned int signature_size, unsigned char** manifest, unsigned int* manifest_size); + +/** + * Roll the personalization nonce. + * + * @param client The connected mobile_image_mounter client. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_roll_personalization_nonce(mobile_image_mounter_client_t client); + +/** + * Roll the Cryptex nonce. + * + * @param client The connected mobile_image_mounter client. + * + * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, + *    or a MOBILE_IMAGE_MOUNTER_E_* error code on error. + */ +LIBIMOBILEDEVICE_API mobile_image_mounter_error_t mobile_image_mounter_roll_cryptex_nonce(mobile_image_mounter_client_t client);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/mobileactivation.h b/include/libimobiledevice/mobileactivation.h index 774c116..8e036a8 100644 --- a/include/libimobiledevice/mobileactivation.h +++ b/include/libimobiledevice/mobileactivation.h @@ -59,7 +59,7 @@ typedef mobileactivation_client_private *mobileactivation_client_t; /**< The cli   *     MOBILEACTIVATION_E_INVALID_ARG when one of the parameters is invalid,   *     or MOBILEACTIVATION_E_MUX_ERROR when the connection failed.   */ -mobileactivation_error_t mobileactivation_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobileactivation_client_t *client); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobileactivation_client_t *client);  /**   * Starts a new mobileactivation service on the specified device and connects to it. @@ -74,7 +74,7 @@ mobileactivation_error_t mobileactivation_client_new(idevice_t device, lockdownd   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_client_start_service(idevice_t device, mobileactivation_client_t* client, const char* label); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_client_start_service(idevice_t device, mobileactivation_client_t* client, const char* label);  /**   * Disconnects a mobileactivation client from the device and frees up the @@ -87,7 +87,7 @@ mobileactivation_error_t mobileactivation_client_start_service(idevice_t device,   *     is invalid, or MOBILEACTIVATION_E_UNKNOWN_ERROR when the was an   *     error freeing the parent property_list_service client.   */ -mobileactivation_error_t mobileactivation_client_free(mobileactivation_client_t client); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_client_free(mobileactivation_client_t client);  /** @@ -102,7 +102,7 @@ mobileactivation_error_t mobileactivation_client_free(mobileactivation_client_t   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_get_activation_state(mobileactivation_client_t client, plist_t *state); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_get_activation_state(mobileactivation_client_t client, plist_t *state);  /**   * Retrieves a session blob required for 'drmHandshake' via albert.apple.com. @@ -116,7 +116,7 @@ mobileactivation_error_t mobileactivation_get_activation_state(mobileactivation_   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_create_activation_session_info(mobileactivation_client_t client, plist_t *blob); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_create_activation_session_info(mobileactivation_client_t client, plist_t *blob);  /**   * Retrieves the activation info required for device activation. @@ -130,7 +130,7 @@ mobileactivation_error_t mobileactivation_create_activation_session_info(mobilea   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_create_activation_info(mobileactivation_client_t client, plist_t *info); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_create_activation_info(mobileactivation_client_t client, plist_t *info);  /**   * Retrieves the activation info required for device activation in 'session' @@ -148,7 +148,7 @@ mobileactivation_error_t mobileactivation_create_activation_info(mobileactivatio   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_create_activation_info_with_session(mobileactivation_client_t client, plist_t handshake_response, plist_t *info); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_create_activation_info_with_session(mobileactivation_client_t client, plist_t handshake_response, plist_t *info);  /**   * Activates the device with the given activation record. @@ -161,7 +161,7 @@ mobileactivation_error_t mobileactivation_create_activation_info_with_session(mo   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_activate(mobileactivation_client_t client, plist_t activation_record); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_activate(mobileactivation_client_t client, plist_t activation_record);  /**   * Activates the device with the given activation record in 'session' mode. @@ -176,14 +176,14 @@ mobileactivation_error_t mobileactivation_activate(mobileactivation_client_t cli   * @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_*   *     error code otherwise.   */ -mobileactivation_error_t mobileactivation_activate_with_session(mobileactivation_client_t client, plist_t activation_record, plist_t headers); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_activate_with_session(mobileactivation_client_t client, plist_t activation_record, plist_t headers);  /**   * Deactivates the device.   *   * @param client The mobileactivation client   */ -mobileactivation_error_t mobileactivation_deactivate(mobileactivation_client_t client); +LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_deactivate(mobileactivation_client_t client);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/mobilebackup.h b/include/libimobiledevice/mobilebackup.h index d4c042e..2ecb60c 100644 --- a/include/libimobiledevice/mobilebackup.h +++ b/include/libimobiledevice/mobilebackup.h @@ -69,7 +69,7 @@ typedef enum {   *     or more parameters are invalid, or DEVICE_LINK_SERVICE_E_BAD_VERSION if   *     the mobilebackup version on the device is newer.   */ -mobilebackup_error_t mobilebackup_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobilebackup_client_t * client); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobilebackup_client_t * client);  /**   * Starts a new mobilebackup service on the specified device and connects to it. @@ -84,7 +84,7 @@ mobilebackup_error_t mobilebackup_client_new(idevice_t device, lockdownd_service   * @return MOBILEBACKUP_E_SUCCESS on success, or an MOBILEBACKUP_E_* error   *     code otherwise.   */ -mobilebackup_error_t mobilebackup_client_start_service(idevice_t device, mobilebackup_client_t* client, const char* label); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_client_start_service(idevice_t device, mobilebackup_client_t* client, const char* label);  /**   * Disconnects a mobilebackup client from the device and frees up the @@ -95,7 +95,7 @@ mobilebackup_error_t mobilebackup_client_start_service(idevice_t device, mobileb   * @return MOBILEBACKUP_E_SUCCESS on success, or MOBILEBACKUP_E_INVALID_ARG   *     if client is NULL.   */ -mobilebackup_error_t mobilebackup_client_free(mobilebackup_client_t client); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_client_free(mobilebackup_client_t client);  /** @@ -106,7 +106,7 @@ mobilebackup_error_t mobilebackup_client_free(mobilebackup_client_t client);   *   * @return an error code   */ -mobilebackup_error_t mobilebackup_receive(mobilebackup_client_t client, plist_t *plist); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_receive(mobilebackup_client_t client, plist_t *plist);  /**   * Sends mobilebackup data to the device @@ -119,7 +119,7 @@ mobilebackup_error_t mobilebackup_receive(mobilebackup_client_t client, plist_t   *   * @return an error code   */ -mobilebackup_error_t mobilebackup_send(mobilebackup_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_send(mobilebackup_client_t client, plist_t plist);  /**   * Request a backup from the connected device. @@ -138,7 +138,7 @@ mobilebackup_error_t mobilebackup_send(mobilebackup_client_t client, plist_t pli   *    backup_manifest is not of type PLIST_DICT, MOBILEBACKUP_E_MUX_ERROR   *    if a communication error occurs, MOBILEBACKUP_E_REPLY_NOT_OK   */ -mobilebackup_error_t mobilebackup_request_backup(mobilebackup_client_t client, plist_t backup_manifest, const char *base_path, const char *proto_version); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_request_backup(mobilebackup_client_t client, plist_t backup_manifest, const char *base_path, const char *proto_version);  /**   * Sends a confirmation to the device that a backup file has been received. @@ -149,7 +149,7 @@ mobilebackup_error_t mobilebackup_request_backup(mobilebackup_client_t client, p   *    client is invalid, or MOBILEBACKUP_E_MUX_ERROR if a communication error   *    occurs.   */ -mobilebackup_error_t mobilebackup_send_backup_file_received(mobilebackup_client_t client); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_send_backup_file_received(mobilebackup_client_t client);  /**   * Request that a backup should be restored to the connected device. @@ -172,7 +172,7 @@ mobilebackup_error_t mobilebackup_send_backup_file_received(mobilebackup_client_   *    if a communication error occurs, or MOBILEBACKUP_E_REPLY_NOT_OK   *    if the device did not accept the request.   */ -mobilebackup_error_t mobilebackup_request_restore(mobilebackup_client_t client, plist_t backup_manifest, mobilebackup_flags_t flags, const char *proto_version); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_request_restore(mobilebackup_client_t client, plist_t backup_manifest, mobilebackup_flags_t flags, const char *proto_version);  /**   * Receive a confirmation from the device that it successfully received @@ -192,7 +192,7 @@ mobilebackup_error_t mobilebackup_request_restore(mobilebackup_client_t client,   *    message plist, or MOBILEBACKUP_E_MUX_ERROR if a communication error   *    occurs.   */ -mobilebackup_error_t mobilebackup_receive_restore_file_received(mobilebackup_client_t client, plist_t *result); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_receive_restore_file_received(mobilebackup_client_t client, plist_t *result);  /**   * Receive a confirmation from the device that it successfully received @@ -212,7 +212,7 @@ mobilebackup_error_t mobilebackup_receive_restore_file_received(mobilebackup_cli   *    message plist, or MOBILEBACKUP_E_MUX_ERROR if a communication error   *    occurs.   */ -mobilebackup_error_t mobilebackup_receive_restore_application_received(mobilebackup_client_t client, plist_t *result); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_receive_restore_application_received(mobilebackup_client_t client, plist_t *result);  /**   * Tells the device that the restore process is complete and waits for the @@ -225,7 +225,7 @@ mobilebackup_error_t mobilebackup_receive_restore_application_received(mobilebac   *    message plist is invalid, or MOBILEBACKUP_E_MUX_ERROR if a communication   *    error occurs.   */ -mobilebackup_error_t mobilebackup_send_restore_complete(mobilebackup_client_t client); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_send_restore_complete(mobilebackup_client_t client);  /**   * Sends a backup error message to the device. @@ -237,7 +237,7 @@ mobilebackup_error_t mobilebackup_send_restore_complete(mobilebackup_client_t cl   *    one of the parameters is invalid, or MOBILEBACKUP_E_MUX_ERROR if a   *    communication error occurs.   */ -mobilebackup_error_t mobilebackup_send_error(mobilebackup_client_t client, const char *reason); +LIBIMOBILEDEVICE_API mobilebackup_error_t mobilebackup_send_error(mobilebackup_client_t client, const char *reason);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/mobilebackup2.h b/include/libimobiledevice/mobilebackup2.h index 1af4141..2e9222d 100644 --- a/include/libimobiledevice/mobilebackup2.h +++ b/include/libimobiledevice/mobilebackup2.h @@ -64,7 +64,7 @@ typedef mobilebackup2_client_private *mobilebackup2_client_t; /**< The client ha   *     if one or more parameter is invalid, or MOBILEBACKUP2_E_BAD_VERSION   *     if the mobilebackup2 version on the device is newer.   */ -mobilebackup2_error_t mobilebackup2_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobilebackup2_client_t * client); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobilebackup2_client_t * client);  /**   * Starts a new mobilebackup2 service on the specified device and connects to it. @@ -79,7 +79,7 @@ mobilebackup2_error_t mobilebackup2_client_new(idevice_t device, lockdownd_servi   * @return MOBILEBACKUP2_E_SUCCESS on success, or an MOBILEBACKUP2_E_* error   *     code otherwise.   */ -mobilebackup2_error_t mobilebackup2_client_start_service(idevice_t device, mobilebackup2_client_t* client, const char* label); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_client_start_service(idevice_t device, mobilebackup2_client_t* client, const char* label);  /**   * Disconnects a mobilebackup2 client from the device and frees up the @@ -90,7 +90,7 @@ mobilebackup2_error_t mobilebackup2_client_start_service(idevice_t device, mobil   * @return MOBILEBACKUP2_E_SUCCESS on success, or MOBILEBACKUP2_E_INVALID_ARG   *     if client is NULL.   */ -mobilebackup2_error_t mobilebackup2_client_free(mobilebackup2_client_t client); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_client_free(mobilebackup2_client_t client);  /** @@ -105,7 +105,7 @@ mobilebackup2_error_t mobilebackup2_client_free(mobilebackup2_client_t client);   *     will be inserted into this plist before sending it. This parameter   *     can be NULL if message is not NULL.   */ -mobilebackup2_error_t mobilebackup2_send_message(mobilebackup2_client_t client, const char *message, plist_t options); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_send_message(mobilebackup2_client_t client, const char *message, plist_t options);  /**   * Receives a DL* message plist from the device. @@ -125,7 +125,7 @@ mobilebackup2_error_t mobilebackup2_send_message(mobilebackup2_client_t client,   *    or is not a DL* message plist, or MOBILEBACKUP2_E_MUX_ERROR if   *    receiving from the device failed.   */ -mobilebackup2_error_t mobilebackup2_receive_message(mobilebackup2_client_t client, plist_t *msg_plist, char **dlmessage); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_receive_message(mobilebackup2_client_t client, plist_t *msg_plist, char **dlmessage);  /**   * Send binary data to the device. @@ -143,7 +143,7 @@ mobilebackup2_error_t mobilebackup2_receive_message(mobilebackup2_client_t clien   *     MOBILEBACKUP2_E_INVALID_ARG if one of the parameters is invalid,   *     or MOBILEBACKUP2_E_MUX_ERROR if sending of the data failed.   */ -mobilebackup2_error_t mobilebackup2_send_raw(mobilebackup2_client_t client, const char *data, uint32_t length, uint32_t *bytes); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_send_raw(mobilebackup2_client_t client, const char *data, uint32_t length, uint32_t *bytes);  /**   * Receive binary from the device. @@ -163,7 +163,7 @@ mobilebackup2_error_t mobilebackup2_send_raw(mobilebackup2_client_t client, cons   *     MOBILEBACKUP2_E_INVALID_ARG if one of the parameters is invalid,   *     or MOBILEBACKUP2_E_MUX_ERROR if receiving the data failed.   */ -mobilebackup2_error_t mobilebackup2_receive_raw(mobilebackup2_client_t client, char *data, uint32_t length, uint32_t *bytes); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_receive_raw(mobilebackup2_client_t client, char *data, uint32_t length, uint32_t *bytes);  /**   * Performs the mobilebackup2 protocol version exchange. @@ -176,7 +176,7 @@ mobilebackup2_error_t mobilebackup2_receive_raw(mobilebackup2_client_t client, c   * @return MOBILEBACKUP2_E_SUCCESS on success, or a MOBILEBACKUP2_E_* error   *     code otherwise.   */ -mobilebackup2_error_t mobilebackup2_version_exchange(mobilebackup2_client_t client, double local_versions[], char count, double *remote_version); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_version_exchange(mobilebackup2_client_t client, double local_versions[], char count, double *remote_version);  /**   * Send a request to the connected mobilebackup2 service. @@ -191,7 +191,7 @@ mobilebackup2_error_t mobilebackup2_version_exchange(mobilebackup2_client_t clie   * @return MOBILEBACKUP2_E_SUCCESS if the request was successfully sent,   *     or a MOBILEBACKUP2_E_* error value otherwise.   */ -mobilebackup2_error_t mobilebackup2_send_request(mobilebackup2_client_t client, const char *request, const char *target_identifier, const char *source_identifier, plist_t options); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_send_request(mobilebackup2_client_t client, const char *request, const char *target_identifier, const char *source_identifier, plist_t options);  /**   * Sends a DLMessageStatusResponse to the device. @@ -205,7 +205,7 @@ mobilebackup2_error_t mobilebackup2_send_request(mobilebackup2_client_t client,   * @return MOBILEBACKUP2_E_SUCCESS on success, MOBILEBACKUP2_E_INVALID_ARG   *     if client is invalid, or another MOBILEBACKUP2_E_* otherwise.   */ -mobilebackup2_error_t mobilebackup2_send_status_response(mobilebackup2_client_t client, int status_code, const char *status1, plist_t status2); +LIBIMOBILEDEVICE_API mobilebackup2_error_t mobilebackup2_send_status_response(mobilebackup2_client_t client, int status_code, const char *status1, plist_t status2);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/mobilesync.h b/include/libimobiledevice/mobilesync.h index 6b1af18..c3bc53d 100644 --- a/include/libimobiledevice/mobilesync.h +++ b/include/libimobiledevice/mobilesync.h @@ -86,7 +86,7 @@ typedef mobilesync_anchors *mobilesync_anchors_t;   * @retval DEVICE_LINK_SERVICE_E_BAD_VERSION if the mobilesync version on   * the device is newer.   */ -mobilesync_error_t mobilesync_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobilesync_client_t * client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_client_new(idevice_t device, lockdownd_service_descriptor_t service, mobilesync_client_t * client);  /**   * Starts a new mobilesync service on the specified device and connects to it. @@ -101,7 +101,7 @@ mobilesync_error_t mobilesync_client_new(idevice_t device, lockdownd_service_des   * @return MOBILESYNC_E_SUCCESS on success, or an MOBILESYNC_E_* error   *     code otherwise.   */ -mobilesync_error_t mobilesync_client_start_service(idevice_t device, mobilesync_client_t* client, const char* label); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_client_start_service(idevice_t device, mobilesync_client_t* client, const char* label);  /**   * Disconnects a mobilesync client from the device and frees up the @@ -112,7 +112,7 @@ mobilesync_error_t mobilesync_client_start_service(idevice_t device, mobilesync_   * @retval MOBILESYNC_E_SUCCESS on success   * @retval MOBILESYNC_E_INVALID_ARG if \a client is NULL.   */ -mobilesync_error_t mobilesync_client_free(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_client_free(mobilesync_client_t client);  /** @@ -123,7 +123,7 @@ mobilesync_error_t mobilesync_client_free(mobilesync_client_t client);   *   * @return an error code   */ -mobilesync_error_t mobilesync_receive(mobilesync_client_t client, plist_t *plist); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_receive(mobilesync_client_t client, plist_t *plist);  /**   * Sends mobilesync data to the device @@ -136,7 +136,7 @@ mobilesync_error_t mobilesync_receive(mobilesync_client_t client, plist_t *plist   *   * @return an error code   */ -mobilesync_error_t mobilesync_send(mobilesync_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_send(mobilesync_client_t client, plist_t plist);  /** @@ -159,7 +159,7 @@ mobilesync_error_t mobilesync_send(mobilesync_client_t client, plist_t plist);   * @retval MOBILESYNC_E_CANCELLED if the device explicitly cancelled the   * sync request   */ -mobilesync_error_t mobilesync_start(mobilesync_client_t client, const char *data_class, mobilesync_anchors_t anchors, uint64_t computer_data_class_version, mobilesync_sync_type_t *sync_type, uint64_t *device_data_class_version, char** error_description); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_start(mobilesync_client_t client, const char *data_class, mobilesync_anchors_t anchors, uint64_t computer_data_class_version, mobilesync_sync_type_t *sync_type, uint64_t *device_data_class_version, char** error_description);  /**   * Cancels a running synchronization session with a device at any time. @@ -170,7 +170,7 @@ mobilesync_error_t mobilesync_start(mobilesync_client_t client, const char *data   * @retval MOBILESYNC_E_SUCCESS on success   * @retval MOBILESYNC_E_INVALID_ARG if one of the parameters is invalid   */ -mobilesync_error_t mobilesync_cancel(mobilesync_client_t client, const char* reason); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_cancel(mobilesync_client_t client, const char* reason);  /**   * Finish a synchronization session of a data class on the device. @@ -183,7 +183,7 @@ mobilesync_error_t mobilesync_cancel(mobilesync_client_t client, const char* rea   * @retval MOBILESYNC_E_PLIST_ERROR if the received plist is not of valid   * form   */ -mobilesync_error_t mobilesync_finish(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_finish(mobilesync_client_t client);  /** @@ -196,7 +196,7 @@ mobilesync_error_t mobilesync_finish(mobilesync_client_t client);   * @retval MOBILESYNC_E_SUCCESS on success   * @retval MOBILESYNC_E_INVALID_ARG if one of the parameters is invalid   */ -mobilesync_error_t mobilesync_get_all_records_from_device(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_get_all_records_from_device(mobilesync_client_t client);  /**   * Requests to receive only changed records of the currently set data class from the device. @@ -208,7 +208,7 @@ mobilesync_error_t mobilesync_get_all_records_from_device(mobilesync_client_t cl   * @retval MOBILESYNC_E_SUCCESS on success   * @retval MOBILESYNC_E_INVALID_ARG if one of the parameters is invalid   */ -mobilesync_error_t mobilesync_get_changes_from_device(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_get_changes_from_device(mobilesync_client_t client);  /**   * Requests the device to delete all records of the current data class @@ -221,7 +221,7 @@ mobilesync_error_t mobilesync_get_changes_from_device(mobilesync_client_t client   * @retval MOBILESYNC_E_INVALID_ARG if one of the parameters is invalid   * @retval MOBILESYNC_E_PLIST_ERROR if the received plist is not of valid form   */ -mobilesync_error_t mobilesync_clear_all_records_on_device(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_clear_all_records_on_device(mobilesync_client_t client);  /** @@ -237,7 +237,7 @@ mobilesync_error_t mobilesync_clear_all_records_on_device(mobilesync_client_t cl   * @retval MOBILESYNC_E_CANCELLED if the device explicitly cancelled the   * session   */ -mobilesync_error_t mobilesync_receive_changes(mobilesync_client_t client, plist_t *entities, uint8_t *is_last_record, plist_t *actions); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_receive_changes(mobilesync_client_t client, plist_t *entities, uint8_t *is_last_record, plist_t *actions);  /**   * Acknowledges to the device that the changes have been merged on the computer @@ -247,7 +247,7 @@ mobilesync_error_t mobilesync_receive_changes(mobilesync_client_t client, plist_   * @retval MOBILESYNC_E_SUCCESS on success   * @retval MOBILESYNC_E_INVALID_ARG if one of the parameters is invalid   */ -mobilesync_error_t mobilesync_acknowledge_changes_from_device(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_acknowledge_changes_from_device(mobilesync_client_t client);  /** @@ -267,7 +267,7 @@ mobilesync_error_t mobilesync_acknowledge_changes_from_device(mobilesync_client_   * @retval MOBILESYNC_E_NOT_READY if the device is not ready to start   * receiving any changes   */ -mobilesync_error_t mobilesync_ready_to_send_changes_from_computer(mobilesync_client_t client); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_ready_to_send_changes_from_computer(mobilesync_client_t client);  /** @@ -284,7 +284,7 @@ mobilesync_error_t mobilesync_ready_to_send_changes_from_computer(mobilesync_cli   * @retval MOBILESYNC_E_WRONG_DIRECTION if the current sync direction does   * not permit this call   */ -mobilesync_error_t mobilesync_send_changes(mobilesync_client_t client, plist_t entities, uint8_t is_last_record, plist_t actions); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_send_changes(mobilesync_client_t client, plist_t entities, uint8_t is_last_record, plist_t actions);  /**   * Receives any remapped identifiers reported after the device merged submitted changes. @@ -301,7 +301,7 @@ mobilesync_error_t mobilesync_send_changes(mobilesync_client_t client, plist_t e   * @retval MOBILESYNC_E_CANCELLED if the device explicitly cancelled the   * session   */ -mobilesync_error_t mobilesync_remap_identifiers(mobilesync_client_t client, plist_t *mapping); +LIBIMOBILEDEVICE_API mobilesync_error_t mobilesync_remap_identifiers(mobilesync_client_t client, plist_t *mapping);  /* Helper */ @@ -314,14 +314,14 @@ mobilesync_error_t mobilesync_remap_identifiers(mobilesync_client_t client, plis   *   * @return A new #mobilesync_anchors_t struct. Must be freed using mobilesync_anchors_free().   */ -mobilesync_anchors_t mobilesync_anchors_new(const char *device_anchor, const char *computer_anchor); +LIBIMOBILEDEVICE_API mobilesync_anchors_t mobilesync_anchors_new(const char *device_anchor, const char *computer_anchor);  /**   * Free memory used by anchors.   *   * @param anchors The anchors to free.   */ -void mobilesync_anchors_free(mobilesync_anchors_t anchors); +LIBIMOBILEDEVICE_API void mobilesync_anchors_free(mobilesync_anchors_t anchors);  /** @@ -329,7 +329,7 @@ void mobilesync_anchors_free(mobilesync_anchors_t anchors);   *   * @return A new plist_t of type PLIST_DICT.   */ -plist_t mobilesync_actions_new(void); +LIBIMOBILEDEVICE_API plist_t mobilesync_actions_new(void);  /**   * Add one or more new key:value pairs to the given actions plist. @@ -343,14 +343,14 @@ plist_t mobilesync_actions_new(void);   *       integer to use as a boolean value indicating that the device should   *       link submitted changes and report remapped identifiers.   */ -void mobilesync_actions_add(plist_t actions, ...); +LIBIMOBILEDEVICE_API void mobilesync_actions_add(plist_t actions, ...);  /**   * Free actions plist.   *   * @param actions The actions plist to free. Does nothing if NULL is passed.   */ -void mobilesync_actions_free(plist_t actions); +LIBIMOBILEDEVICE_API void mobilesync_actions_free(plist_t actions);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/notification_proxy.h b/include/libimobiledevice/notification_proxy.h index 4eccf20..f4f090b 100644 --- a/include/libimobiledevice/notification_proxy.h +++ b/include/libimobiledevice/notification_proxy.h @@ -109,7 +109,7 @@ typedef void (*np_notify_cb_t) (const char *notification, void *user_data);   *   or NP_E_CONN_FAILED when the connection to the device could not be   *   established.   */ -np_error_t np_client_new(idevice_t device, lockdownd_service_descriptor_t service, np_client_t *client); +LIBIMOBILEDEVICE_API np_error_t np_client_new(idevice_t device, lockdownd_service_descriptor_t service, np_client_t *client);  /**   * Starts a new notification proxy service on the specified device and connects to it. @@ -124,7 +124,7 @@ np_error_t np_client_new(idevice_t device, lockdownd_service_descriptor_t servic   * @return NP_E_SUCCESS on success, or an NP_E_* error   *     code otherwise.   */ -np_error_t np_client_start_service(idevice_t device, np_client_t* client, const char* label); +LIBIMOBILEDEVICE_API np_error_t np_client_start_service(idevice_t device, np_client_t* client, const char* label);  /**   * Disconnects a notification_proxy client from the device and frees up the @@ -134,7 +134,7 @@ np_error_t np_client_start_service(idevice_t device, np_client_t* client, const   *   * @return NP_E_SUCCESS on success, or NP_E_INVALID_ARG when client is NULL.   */ -np_error_t np_client_free(np_client_t client); +LIBIMOBILEDEVICE_API np_error_t np_client_free(np_client_t client);  /** @@ -145,7 +145,7 @@ np_error_t np_client_free(np_client_t client);   *   * @return NP_E_SUCCESS on success, or an error returned by np_plist_send   */ -np_error_t np_post_notification(np_client_t client, const char *notification); +LIBIMOBILEDEVICE_API np_error_t np_post_notification(np_client_t client, const char *notification);  /**   * Tells the device to send a notification on the specified event. @@ -156,7 +156,7 @@ np_error_t np_post_notification(np_client_t client, const char *notification);   * @return NP_E_SUCCESS on success, NP_E_INVALID_ARG when client or   *    notification are NULL, or an error returned by np_plist_send.   */ -np_error_t np_observe_notification(np_client_t client, const char *notification); +LIBIMOBILEDEVICE_API np_error_t np_observe_notification(np_client_t client, const char *notification);  /**   * Tells the device to send a notification on specified events. @@ -169,7 +169,7 @@ np_error_t np_observe_notification(np_client_t client, const char *notification)   * @return NP_E_SUCCESS on success, NP_E_INVALID_ARG when client is null,   *   or an error returned by np_observe_notification.   */ -np_error_t np_observe_notifications(np_client_t client, const char **notification_spec); +LIBIMOBILEDEVICE_API np_error_t np_observe_notifications(np_client_t client, const char **notification_spec);  /**   * This function allows an application to define a callback function that will @@ -193,7 +193,7 @@ np_error_t np_observe_notifications(np_client_t client, const char **notificatio   *         NP_E_INVALID_ARG when client is NULL, or NP_E_UNKNOWN_ERROR when   *         the callback thread could no be created.   */ -np_error_t np_set_notify_callback(np_client_t client, np_notify_cb_t notify_cb, void *user_data); +LIBIMOBILEDEVICE_API np_error_t np_set_notify_callback(np_client_t client, np_notify_cb_t notify_cb, void *user_data);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/ostrace.h b/include/libimobiledevice/ostrace.h new file mode 100644 index 0000000..f083ba7 --- /dev/null +++ b/include/libimobiledevice/ostrace.h @@ -0,0 +1,198 @@ +/** + * @file libimobiledevice/ostrace.h + * @brief System log and tracing capabilities. + * \internal + * + * Copyright (c) 2020-2025 Nikias Bassen, All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + */ + +#ifndef OSTRACE_H +#define OSTRACE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <libimobiledevice/libimobiledevice.h> +#include <libimobiledevice/lockdown.h> + +/** Service identifier passed to lockdownd_start_service() to start the os trace relay service */ +#define OSTRACE_SERVICE_NAME "com.apple.os_trace_relay" + +/** Error Codes */ +typedef enum { +	OSTRACE_E_SUCCESS         =  0, +	OSTRACE_E_INVALID_ARG     = -1, +	OSTRACE_E_MUX_ERROR       = -2, +	OSTRACE_E_SSL_ERROR       = -3, +	OSTRACE_E_NOT_ENOUGH_DATA = -4, +	OSTRACE_E_TIMEOUT         = -5, +	OSTRACE_E_PLIST_ERROR     = -6, +	OSTRACE_E_REQUEST_FAILED  = -7, +	OSTRACE_E_UNKNOWN_ERROR   = -256 +} ostrace_error_t; + +typedef struct ostrace_client_private ostrace_client_private; /**< \private */ +typedef ostrace_client_private *ostrace_client_t; /**< The client handle. */ + +#pragma pack(push,1)	 +struct ostrace_packet_header_t { +	uint8_t marker; +	uint32_t type; +	uint32_t header_size; // 0x81 +	uint32_t pid; +	uint64_t procid; // == pid +	unsigned char procuuid[16]; // procuuid +	uint16_t procpath_len; // path to process +	uint64_t aid; // activity id, usually 0 +	uint64_t paid; // (parent?) activity id, usually 0 +	uint64_t time_sec; // tv.tv_sec 64 bit +	uint32_t time_usec; // tv.usec 32 bit +	uint8_t unk06; +	uint8_t level; // Notice=0, Info=0x01, Debug=0x02, Error=0x10, Fault=0x11 +	uint8_t unk07; +	uint8_t unk08; +	uint8_t unk09; +	uint8_t unk10; +	uint8_t unk11; +	uint8_t unk12; +	uint64_t timestamp; // ? +	uint32_t thread_id; +	uint32_t unk13; // 0 +	unsigned char imageuuid[16]; // framework/dylib uuid +	uint16_t imagepath_len; // framework/dylib	 +	uint32_t message_len; // actual log message +	uint32_t offset; // offset for like timestamp or sth +	uint16_t subsystem_len; // "subsystem" +	uint16_t unk14; +	uint16_t category_len; // "category" +	uint16_t unk15; +	uint32_t unk16; // 0 +}; +#pragma pack(pop) + +/** Receives unparsed ostrace data from the ostrace service */ +typedef void (*ostrace_activity_cb_t)(const void* buf, size_t len, void *user_data); + +/** Receives archive data from the ostrace service */ +typedef int (*ostrace_archive_write_cb_t)(const void* buf, size_t len, void *user_data); + +/* Interface */ + +/** + * Connects to the os_trace_relay service on the specified device. + * + * @param device The device to connect to. + * @param service The service descriptor returned by lockdownd_start_service. + * @param client Pointer that will point to a newly allocated + *     ostrace_client_t upon successful return. Must be freed using + *     ostrace_client_free() after use. + * + * @return OSTRACE_E_SUCCESS on success, OSTRACE_E_INVALID_ARG when + *     client is NULL, or an OSTRACE_E_* error code otherwise. + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_client_new(idevice_t device, lockdownd_service_descriptor_t service, ostrace_client_t * client); + +/** + * Starts a new os_trace_relay service on the specified device and connects to it. + * + * @param device The device to connect to. + * @param client Pointer that will point to a newly allocated + *     ostrace_client_t upon successful return. Must be freed using + *     ostrace_client_free() after use. + * @param label The label to use for communication. Usually the program name. + *  Pass NULL to disable sending the label in requests to lockdownd. + * + * @return OSTRACE_E_SUCCESS on success, or an OSTRACE_E_* error code otherwise. + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_client_start_service(idevice_t device, ostrace_client_t * client, const char* label); + +/** + * Disconnects a ostrace client from the device and frees up the + * ostrace client data. + * + * @param client The ostrace client to disconnect and free. + * + * @return OSTRACE_E_SUCCESS on success, OSTRACE_E_INVALID_ARG when + *     client is NULL, or an OSTRACE_E_* error code otherwise. + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_client_free(ostrace_client_t client); + +/** + * Starts capturing OS trace activity data of the device using a callback. + * + * Use ostrace_stop_activity() to stop receiving the ostrace. + * + * @param client The ostrace client to use + * @param options Options dictionary to pass to StartActivity request. + *      Valid options are MessageFilter (PLIST_INT, default 65535), + *         Pid (PLIST_INT, default -1), and StreamFlags (PLIST_INT, default 60) + * @param callback Callback to receive data from ostrace. + * @param user_data Custom pointer passed to the callback function. + * @param user_data_free_func Function pointer that will be called when the + *      activity is stopped to release user_data. Can be NULL for none. + * + * @return OSTRACE_E_SUCCESS on success, + *      OSTRACE_E_INVALID_ARG when one or more parameters are + *      invalid or OSTRACE_E_UNKNOWN_ERROR when an unspecified + *      error occurs or an ostrace activity has already been started. + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_start_activity(ostrace_client_t client, plist_t options, ostrace_activity_cb_t callback, void* user_data); + +/** + * Stops the ostrace activity. + * + * Use ostrace_start_activity() to start receiving OS trace data. + * + * @param client The ostrace client to use + * + * @return OSTRACE_E_SUCCESS on success, + *      OSTRACE_E_INVALID_ARG when one or more parameters are + *      invalid or OSTRACE_E_UNKNOWN_ERROR when an unspecified + *      error occurs or an ostrace activity has already been started. + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_stop_activity(ostrace_client_t client); + +/** + * Returns a dictionary with all currently running processes on the device. + * + * @param client The ostrace client to use + * @param list Pointer that will receive an allocated PLIST_DICT structure with the process data + * + * @return OSTRACE_E_SUCCESS on success, or an OSTRACE_E_* error code otherwise + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_get_pid_list(ostrace_client_t client, plist_t* list); + +/** + * Creates a syslog archive. + * + * @note The device will close the connection once the transfer is complete. The client + *      is not usable after that anymore and must be disposed with ostrace_client_free. + * + * @param client The ostrace client to use + * @param options A dictionary with options for the request. + *      Valid parameters are StartTime (PLIST_UINT), SizeLimit (PLIST_UINT), and AgeLimit (PLIST_UINT). + * + * @return OSTRACE_E_SUCCESS on success, or an OSTRACE_E_* error code otherwise + */ +LIBIMOBILEDEVICE_API ostrace_error_t ostrace_create_archive(ostrace_client_t client, plist_t options, ostrace_archive_write_cb_t callback, void* user_data); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libimobiledevice/preboard.h b/include/libimobiledevice/preboard.h index 88e9806..0d89eb4 100644 --- a/include/libimobiledevice/preboard.h +++ b/include/libimobiledevice/preboard.h @@ -64,7 +64,7 @@ typedef void (*preboard_status_cb_t) (plist_t message, void *user_data);   * @return PREBOARD_E_SUCCESS on success, PREBOARD_E_INVALID_ARG when   *     client is NULL, or an PREBOARD_E_* error code otherwise.   */ -preboard_error_t preboard_client_new(idevice_t device, lockdownd_service_descriptor_t service, preboard_client_t * client); +LIBIMOBILEDEVICE_API preboard_error_t preboard_client_new(idevice_t device, lockdownd_service_descriptor_t service, preboard_client_t * client);  /**   * Starts a new preboard service on the specified device and connects to it. @@ -79,7 +79,7 @@ preboard_error_t preboard_client_new(idevice_t device, lockdownd_service_descrip   * @return PREBOARD_E_SUCCESS on success, or a PREBOARD_E_* error   *     code otherwise.   */ -preboard_error_t preboard_client_start_service(idevice_t device, preboard_client_t * client, const char* label); +LIBIMOBILEDEVICE_API preboard_error_t preboard_client_start_service(idevice_t device, preboard_client_t * client, const char* label);  /**   * Disconnects a preboard client from the device and frees up the @@ -90,7 +90,7 @@ preboard_error_t preboard_client_start_service(idevice_t device, preboard_client   * @return PREBOARD_E_SUCCESS on success, PREBOARD_E_INVALID_ARG when   *     client is NULL, or a PREBOARD_E_* error code otherwise.   */ -preboard_error_t preboard_client_free(preboard_client_t client); +LIBIMOBILEDEVICE_API preboard_error_t preboard_client_free(preboard_client_t client);  /**   * Sends a plist to the service. @@ -102,7 +102,7 @@ preboard_error_t preboard_client_free(preboard_client_t client);   *  PREBOARD_E_INVALID_ARG when client or plist is NULL,   *  or a PREBOARD_E_* error code on error   */ -preboard_error_t preboard_send(preboard_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API preboard_error_t preboard_send(preboard_client_t client, plist_t plist);  /**   * Receives a plist from the service. @@ -115,7 +115,7 @@ preboard_error_t preboard_send(preboard_client_t client, plist_t plist);   *  PREBOARD_E_TIMEOUT when no data was received after 5 seconds,   *  or a PREBOARD_E_* error code on error   */ -preboard_error_t preboard_receive(preboard_client_t client, plist_t * plist); +LIBIMOBILEDEVICE_API preboard_error_t preboard_receive(preboard_client_t client, plist_t * plist);  /**   * Receives a plist from the service with the specified timeout. @@ -129,7 +129,7 @@ preboard_error_t preboard_receive(preboard_client_t client, plist_t * plist);   *  PREBOARD_E_TIMEOUT when no data was received after the given timeout,   *  or a PREBOARD_E_* error code on error.   */ -preboard_error_t preboard_receive_with_timeout(preboard_client_t client, plist_t * plist, uint32_t timeout_ms); +LIBIMOBILEDEVICE_API preboard_error_t preboard_receive_with_timeout(preboard_client_t client, plist_t * plist, uint32_t timeout_ms);  /**   * Tells the preboard service to create a stashbag. This will make the device @@ -157,7 +157,7 @@ preboard_error_t preboard_receive_with_timeout(preboard_client_t client, plist_t   *  PREBOARD_E_INVALID_ARG when client is invalid,   *  or a PREBOARD_E_* error code on error.   */ -preboard_error_t preboard_create_stashbag(preboard_client_t client, plist_t manifest, preboard_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API preboard_error_t preboard_create_stashbag(preboard_client_t client, plist_t manifest, preboard_status_cb_t status_cb, void *user_data);  /**   * Instructs the preboard service to commit a previously created stashbag. @@ -178,7 +178,7 @@ preboard_error_t preboard_create_stashbag(preboard_client_t client, plist_t mani   *  PREBOARD_E_INVALID_ARG when client is invalid,   *  or a PREBOARD_E_* error code on error.   */ -preboard_error_t preboard_commit_stashbag(preboard_client_t client, plist_t manifest, preboard_status_cb_t status_cb, void *user_data); +LIBIMOBILEDEVICE_API preboard_error_t preboard_commit_stashbag(preboard_client_t client, plist_t manifest, preboard_status_cb_t status_cb, void *user_data);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/property_list_service.h b/include/libimobiledevice/property_list_service.h index 3f6ebad..e6b26a3 100644 --- a/include/libimobiledevice/property_list_service.h +++ b/include/libimobiledevice/property_list_service.h @@ -60,7 +60,7 @@ typedef property_list_service_private* property_list_service_client_t; /**< The   *     PROPERTY_LIST_SERVICE_E_INVALID_ARG when one of the arguments is invalid,   *     or PROPERTY_LIST_SERVICE_E_MUX_ERROR when connecting to the device failed.   */ -property_list_service_error_t property_list_service_client_new(idevice_t device, lockdownd_service_descriptor_t service, property_list_service_client_t *client); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_client_new(idevice_t device, lockdownd_service_descriptor_t service, property_list_service_client_t *client);  /**   * Frees a PropertyList service. @@ -71,7 +71,7 @@ property_list_service_error_t property_list_service_client_new(idevice_t device,   *     PROPERTY_LIST_SERVICE_E_INVALID_ARG when client is invalid, or a   *     PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when another error occurred.   */ -property_list_service_error_t property_list_service_client_free(property_list_service_client_t client); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_client_free(property_list_service_client_t client);  /**   * Sends an XML plist. @@ -84,7 +84,7 @@ property_list_service_error_t property_list_service_client_free(property_list_se   *      PROPERTY_LIST_SERVICE_E_PLIST_ERROR when dict is not a valid plist,   *      or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when an unspecified error occurs.   */ -property_list_service_error_t property_list_service_send_xml_plist(property_list_service_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_send_xml_plist(property_list_service_client_t client, plist_t plist);  /**   * Sends a binary plist. @@ -97,7 +97,7 @@ property_list_service_error_t property_list_service_send_xml_plist(property_list   *      PROPERTY_LIST_SERVICE_E_PLIST_ERROR when dict is not a valid plist,   *      or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when an unspecified error occurs.   */ -property_list_service_error_t property_list_service_send_binary_plist(property_list_service_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_send_binary_plist(property_list_service_client_t client, plist_t plist);  /**   * Receives a plist using the given property list service client with specified @@ -116,7 +116,7 @@ property_list_service_error_t property_list_service_send_binary_plist(property_l   *      communication error occurs, or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when   *      an unspecified error occurs.   */ -property_list_service_error_t property_list_service_receive_plist_with_timeout(property_list_service_client_t client, plist_t *plist, unsigned int timeout); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_receive_plist_with_timeout(property_list_service_client_t client, plist_t *plist, unsigned int timeout);  /**   * Receives a plist using the given property list service client. @@ -139,7 +139,7 @@ property_list_service_error_t property_list_service_receive_plist_with_timeout(p   *      communication error occurs, or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when   *      an unspecified error occurs.   */ -property_list_service_error_t property_list_service_receive_plist(property_list_service_client_t client, plist_t *plist); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_receive_plist(property_list_service_client_t client, plist_t *plist);  /**   * Enable SSL for the given property list service client. @@ -152,7 +152,7 @@ property_list_service_error_t property_list_service_receive_plist(property_list_   *     PROPERTY_LIST_SERVICE_E_SSL_ERROR when SSL could not be enabled,   *     or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR otherwise.   */ -property_list_service_error_t property_list_service_enable_ssl(property_list_service_client_t client); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_enable_ssl(property_list_service_client_t client);  /**   * Disable SSL for the given property list service client. @@ -164,7 +164,7 @@ property_list_service_error_t property_list_service_enable_ssl(property_list_ser   *     PROPERTY_LIST_SERVICE_E_INVALID_ARG if one or more of the arguments are invalid,   *     or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR otherwise.   */ -property_list_service_error_t property_list_service_disable_ssl(property_list_service_client_t client); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_disable_ssl(property_list_service_client_t client);  /**   * Return a handle to the parent #service_client_t of the given property list service client. @@ -175,7 +175,7 @@ property_list_service_error_t property_list_service_disable_ssl(property_list_se   * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success,   *     PROPERTY_LIST_SERVICE_E_INVALID_ARG if one or more of the arguments are invalid.   */ -property_list_service_error_t property_list_service_get_service_client(property_list_service_client_t client, service_client_t *service_client); +LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_get_service_client(property_list_service_client_t client, service_client_t *service_client);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/restore.h b/include/libimobiledevice/restore.h index 0017cfd..859dc98 100644 --- a/include/libimobiledevice/restore.h +++ b/include/libimobiledevice/restore.h @@ -56,7 +56,7 @@ typedef restored_client_private *restored_client_t; /**< The client handle. */   *   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client is NULL   */ -restored_error_t restored_client_new(idevice_t device, restored_client_t *client, const char *label); +LIBIMOBILEDEVICE_API restored_error_t restored_client_new(idevice_t device, restored_client_t *client, const char *label);  /**   * Closes the restored client session if one is running and frees up the @@ -66,7 +66,7 @@ restored_error_t restored_client_new(idevice_t device, restored_client_t *client   *   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client is NULL   */ -restored_error_t restored_client_free(restored_client_t client); +LIBIMOBILEDEVICE_API restored_error_t restored_client_free(restored_client_t client);  /** @@ -79,7 +79,7 @@ restored_error_t restored_client_free(restored_client_t client);   *   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client is NULL   */ -restored_error_t restored_query_type(restored_client_t client, char **type, uint64_t *version); +LIBIMOBILEDEVICE_API restored_error_t restored_query_type(restored_client_t client, char **type, uint64_t *version);  /**   * Queries a value from the device specified by a key. @@ -90,7 +90,7 @@ restored_error_t restored_query_type(restored_client_t client, char **type, uint   *   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client is NULL, RESTORE_E_PLIST_ERROR if value for key can't be found   */ -restored_error_t restored_query_value(restored_client_t client, const char *key, plist_t *value); +LIBIMOBILEDEVICE_API restored_error_t restored_query_value(restored_client_t client, const char *key, plist_t *value);  /**   * Retrieves a value from information plist specified by a key. @@ -101,7 +101,7 @@ restored_error_t restored_query_value(restored_client_t client, const char *key,   *   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client is NULL, RESTORE_E_PLIST_ERROR if value for key can't be found   */ -restored_error_t restored_get_value(restored_client_t client, const char *key, plist_t *value) ; +LIBIMOBILEDEVICE_API restored_error_t restored_get_value(restored_client_t client, const char *key, plist_t *value) ;  /**   * Sends a plist to restored. @@ -115,7 +115,7 @@ restored_error_t restored_get_value(restored_client_t client, const char *key, p   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client or   *  plist is NULL   */ -restored_error_t restored_send(restored_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API restored_error_t restored_send(restored_client_t client, plist_t plist);  /**   * Receives a plist from restored. @@ -126,7 +126,7 @@ restored_error_t restored_send(restored_client_t client, plist_t plist);   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client or   *  plist is NULL   */ -restored_error_t restored_receive(restored_client_t client, plist_t *plist); +LIBIMOBILEDEVICE_API restored_error_t restored_receive(restored_client_t client, plist_t *plist);  /**   * Sends the Goodbye request to restored signaling the end of communication. @@ -136,7 +136,7 @@ restored_error_t restored_receive(restored_client_t client, plist_t *plist);   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG when client is NULL,   *  RESTORE_E_PLIST_ERROR if the device did not acknowledge the request   */ -restored_error_t restored_goodbye(restored_client_t client); +LIBIMOBILEDEVICE_API restored_error_t restored_goodbye(restored_client_t client);  /** @@ -149,7 +149,7 @@ restored_error_t restored_goodbye(restored_client_t client);   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG if a parameter   *  is NULL, RESTORE_E_START_RESTORE_FAILED if the request fails   */ -restored_error_t restored_start_restore(restored_client_t client, plist_t options, uint64_t version); +LIBIMOBILEDEVICE_API restored_error_t restored_start_restore(restored_client_t client, plist_t options, uint64_t version);  /**   * Requests device to reboot. @@ -159,7 +159,7 @@ restored_error_t restored_start_restore(restored_client_t client, plist_t option   * @return RESTORE_E_SUCCESS on success, RESTORE_E_INVALID_ARG if a parameter   *  is NULL   */ -restored_error_t restored_reboot(restored_client_t client); +LIBIMOBILEDEVICE_API restored_error_t restored_reboot(restored_client_t client);  /* Helper */ @@ -170,7 +170,7 @@ restored_error_t restored_reboot(restored_client_t client);   * @param label The label to set or NULL to disable sending a label   *   */ -void restored_client_set_label(restored_client_t client, const char *label); +LIBIMOBILEDEVICE_API void restored_client_set_label(restored_client_t client, const char *label);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/reverse_proxy.h b/include/libimobiledevice/reverse_proxy.h index b7a93ff..5e2f54b 100644 --- a/include/libimobiledevice/reverse_proxy.h +++ b/include/libimobiledevice/reverse_proxy.h @@ -118,7 +118,7 @@ typedef void (*reverse_proxy_status_cb_t) (reverse_proxy_client_t client, revers   * @return REVERSE_PROXY_E_SUCCESS on success,   *    or a REVERSE_PROXY_E_* error code otherwise.   */ -reverse_proxy_error_t reverse_proxy_client_create_with_service(idevice_t device, reverse_proxy_client_t* client, const char* label); +LIBIMOBILEDEVICE_API reverse_proxy_error_t reverse_proxy_client_create_with_service(idevice_t device, reverse_proxy_client_t* client, const char* label);  /**   * Create a reverse proxy client using an open port on the device. This is @@ -136,14 +136,14 @@ reverse_proxy_error_t reverse_proxy_client_create_with_service(idevice_t device,   * @return REVERSE_PROXY_E_SUCCESS on success,   *    or a REVERSE_PROXY_E_* error code otherwise.   */ -reverse_proxy_error_t reverse_proxy_client_create_with_port(idevice_t device, reverse_proxy_client_t* client, uint16_t device_port); +LIBIMOBILEDEVICE_API reverse_proxy_error_t reverse_proxy_client_create_with_port(idevice_t device, reverse_proxy_client_t* client, uint16_t device_port);  /**   * Disconnects a reverse proxy client and frees up the client data.   *   * @param client The reverse proxy client to disconnect and free.   */ -reverse_proxy_error_t reverse_proxy_client_free(reverse_proxy_client_t client); +LIBIMOBILEDEVICE_API reverse_proxy_error_t reverse_proxy_client_free(reverse_proxy_client_t client);  /**   * Make an initialized reverse proxy client operational, i.e. start the actual proxy. @@ -155,7 +155,7 @@ reverse_proxy_error_t reverse_proxy_client_free(reverse_proxy_client_t client);   * @return REVERSE_PROXY_E_SUCCESS on success,   *    or a REVERSE_PROXY_E_* error code otherwise.   */ -reverse_proxy_error_t reverse_proxy_client_start_proxy(reverse_proxy_client_t client, int control_protocol_version); +LIBIMOBILEDEVICE_API reverse_proxy_error_t reverse_proxy_client_start_proxy(reverse_proxy_client_t client, int control_protocol_version);  /**   * Set a status callback function. This allows to report the status of the @@ -168,7 +168,7 @@ reverse_proxy_error_t reverse_proxy_client_start_proxy(reverse_proxy_client_t cl   *    when the status of the reverse proxy changes.   * @param user_data A pointer that will be passed to the callback function.   */ -void reverse_proxy_client_set_status_callback(reverse_proxy_client_t client, reverse_proxy_status_cb_t callback, void* user_data); +LIBIMOBILEDEVICE_API void reverse_proxy_client_set_status_callback(reverse_proxy_client_t client, reverse_proxy_status_cb_t callback, void* user_data);  /**   * Set a log callback function. Useful for debugging or verbosity. @@ -180,7 +180,7 @@ void reverse_proxy_client_set_status_callback(reverse_proxy_client_t client, rev   *    when the reverse proxy logs something.   * @param user_data A pointer that will be passed to the callback function.   */ -void reverse_proxy_client_set_log_callback(reverse_proxy_client_t client, reverse_proxy_log_cb_t callback, void* user_data); +LIBIMOBILEDEVICE_API void reverse_proxy_client_set_log_callback(reverse_proxy_client_t client, reverse_proxy_log_cb_t callback, void* user_data);  /**   * Set a data callback function. Useful for debugging or extra verbosity. @@ -193,7 +193,7 @@ void reverse_proxy_client_set_log_callback(reverse_proxy_client_t client, revers   * @param user_data A pointer that will be passed to the callback function.   */ -void reverse_proxy_client_set_data_callback(reverse_proxy_client_t client, reverse_proxy_data_cb_t callback, void* user_data); +LIBIMOBILEDEVICE_API void reverse_proxy_client_set_data_callback(reverse_proxy_client_t client, reverse_proxy_data_cb_t callback, void* user_data);  /**   * Helper function to return the type of a given reverse proxy client, which @@ -204,7 +204,7 @@ void reverse_proxy_client_set_data_callback(reverse_proxy_client_t client, rever   *   * @return The type of the rerverse proxy client   */ -reverse_proxy_client_type_t reverse_proxy_get_type(reverse_proxy_client_t client); +LIBIMOBILEDEVICE_API reverse_proxy_client_type_t reverse_proxy_get_type(reverse_proxy_client_t client);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/sbservices.h b/include/libimobiledevice/sbservices.h index 509d5b9..7435947 100644 --- a/include/libimobiledevice/sbservices.h +++ b/include/libimobiledevice/sbservices.h @@ -68,7 +68,7 @@ typedef sbservices_client_private *sbservices_client_t; /**< The client handle.   * @return SBSERVICES_E_SUCCESS on success, SBSERVICES_E_INVALID_ARG when   *     client is NULL, or an SBSERVICES_E_* error code otherwise.   */ -sbservices_error_t sbservices_client_new(idevice_t device, lockdownd_service_descriptor_t service, sbservices_client_t *client); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_client_new(idevice_t device, lockdownd_service_descriptor_t service, sbservices_client_t *client);  /**   * Starts a new sbservices service on the specified device and connects to it. @@ -83,7 +83,7 @@ sbservices_error_t sbservices_client_new(idevice_t device, lockdownd_service_des   * @return SBSERVICES_E_SUCCESS on success, or an SBSERVICES_E_* error   *     code otherwise.   */ -sbservices_error_t sbservices_client_start_service(idevice_t device, sbservices_client_t* client, const char* label); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_client_start_service(idevice_t device, sbservices_client_t* client, const char* label);  /**   * Disconnects an sbservices client from the device and frees up the @@ -94,7 +94,7 @@ sbservices_error_t sbservices_client_start_service(idevice_t device, sbservices_   * @return SBSERVICES_E_SUCCESS on success, SBSERVICES_E_INVALID_ARG when   *     client is NULL, or an SBSERVICES_E_* error code otherwise.   */ -sbservices_error_t sbservices_client_free(sbservices_client_t client); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_client_free(sbservices_client_t client);  /** @@ -111,7 +111,7 @@ sbservices_error_t sbservices_client_free(sbservices_client_t client);   * @return SBSERVICES_E_SUCCESS on success, SBSERVICES_E_INVALID_ARG when   *     client or state is invalid, or an SBSERVICES_E_* error code otherwise.   */ -sbservices_error_t sbservices_get_icon_state(sbservices_client_t client, plist_t *state, const char *format_version); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_get_icon_state(sbservices_client_t client, plist_t *state, const char *format_version);  /**   * Sets the icon state of the connected device. @@ -122,7 +122,7 @@ sbservices_error_t sbservices_get_icon_state(sbservices_client_t client, plist_t   * @return SBSERVICES_E_SUCCESS on success, SBSERVICES_E_INVALID_ARG when   *     client or newstate is NULL, or an SBSERVICES_E_* error code otherwise.   */ -sbservices_error_t sbservices_set_icon_state(sbservices_client_t client, plist_t newstate); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_set_icon_state(sbservices_client_t client, plist_t newstate);  /**   * Get the icon of the specified app as PNG data. @@ -139,7 +139,7 @@ sbservices_error_t sbservices_set_icon_state(sbservices_client_t client, plist_t   *     client, bundleId, or pngdata are invalid, or an SBSERVICES_E_* error   *     code otherwise.   */ -sbservices_error_t sbservices_get_icon_pngdata(sbservices_client_t client, const char *bundleId, char **pngdata, uint64_t *pngsize); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_get_icon_pngdata(sbservices_client_t client, const char *bundleId, char **pngdata, uint64_t *pngsize);  /**   * Gets the interface orientation of the device. @@ -150,7 +150,7 @@ sbservices_error_t sbservices_get_icon_pngdata(sbservices_client_t client, const   * @return SBSERVICES_E_SUCCESS on success, SBSERVICES_E_INVALID_ARG when   *     client or state is invalid, or an SBSERVICES_E_* error code otherwise.   */ -sbservices_error_t sbservices_get_interface_orientation(sbservices_client_t client, sbservices_interface_orientation_t* interface_orientation); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_get_interface_orientation(sbservices_client_t client, sbservices_interface_orientation_t* interface_orientation);  /**   * Get the home screen wallpaper as PNG data. @@ -166,7 +166,7 @@ sbservices_error_t sbservices_get_interface_orientation(sbservices_client_t clie   *     client or pngdata are invalid, or an SBSERVICES_E_* error   *     code otherwise.   */ -sbservices_error_t sbservices_get_home_screen_wallpaper_pngdata(sbservices_client_t client, char **pngdata, uint64_t *pngsize); +LIBIMOBILEDEVICE_API sbservices_error_t sbservices_get_home_screen_wallpaper_pngdata(sbservices_client_t client, char **pngdata, uint64_t *pngsize);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/screenshotr.h b/include/libimobiledevice/screenshotr.h index ecbbdbe..db3c969 100644 --- a/include/libimobiledevice/screenshotr.h +++ b/include/libimobiledevice/screenshotr.h @@ -66,7 +66,7 @@ typedef screenshotr_client_private *screenshotr_client_t; /**< The client handle   *     or more parameters are invalid, or SCREENSHOTR_E_CONN_FAILED if the   *     connection to the device could not be established.   */ -screenshotr_error_t screenshotr_client_new(idevice_t device, lockdownd_service_descriptor_t service, screenshotr_client_t * client); +LIBIMOBILEDEVICE_API screenshotr_error_t screenshotr_client_new(idevice_t device, lockdownd_service_descriptor_t service, screenshotr_client_t * client);  /**   * Starts a new screenshotr service on the specified device and connects to it. @@ -81,7 +81,7 @@ screenshotr_error_t screenshotr_client_new(idevice_t device, lockdownd_service_d   * @return SCREENSHOTR_E_SUCCESS on success, or an SCREENSHOTR_E_* error   *     code otherwise.   */ -screenshotr_error_t screenshotr_client_start_service(idevice_t device, screenshotr_client_t* client, const char* label); +LIBIMOBILEDEVICE_API screenshotr_error_t screenshotr_client_start_service(idevice_t device, screenshotr_client_t* client, const char* label);  /**   * Disconnects a screenshotr client from the device and frees up the @@ -92,7 +92,7 @@ screenshotr_error_t screenshotr_client_start_service(idevice_t device, screensho   * @return SCREENSHOTR_E_SUCCESS on success, or SCREENSHOTR_E_INVALID_ARG   *     if client is NULL.   */ -screenshotr_error_t screenshotr_client_free(screenshotr_client_t client); +LIBIMOBILEDEVICE_API screenshotr_error_t screenshotr_client_free(screenshotr_client_t client);  /** @@ -109,7 +109,7 @@ screenshotr_error_t screenshotr_client_free(screenshotr_client_t client);   *     one or more parameters are invalid, or another error code if an   *     error occurred.   */ -screenshotr_error_t screenshotr_take_screenshot(screenshotr_client_t client, char **imgdata, uint64_t *imgsize); +LIBIMOBILEDEVICE_API screenshotr_error_t screenshotr_take_screenshot(screenshotr_client_t client, char **imgdata, uint64_t *imgsize);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/service.h b/include/libimobiledevice/service.h index 28b6db6..f31ada4 100644 --- a/include/libimobiledevice/service.h +++ b/include/libimobiledevice/service.h @@ -62,7 +62,7 @@ typedef service_client_private* service_client_t; /**< The client handle. */   *     SERVICE_E_INVALID_ARG when one of the arguments is invalid,   *     or SERVICE_E_MUX_ERROR when connecting to the device failed.   */ -service_error_t service_client_new(idevice_t device, lockdownd_service_descriptor_t service, service_client_t *client); +LIBIMOBILEDEVICE_API service_error_t service_client_new(idevice_t device, lockdownd_service_descriptor_t service, service_client_t *client);  /**   * Starts a new service on the specified device with given name and @@ -81,7 +81,7 @@ service_error_t service_client_new(idevice_t device, lockdownd_service_descripto   * @return SERVICE_E_SUCCESS on success, or a SERVICE_E_* error code   *     otherwise.   */ -service_error_t service_client_factory_start_service(idevice_t device, const char* service_name, void **client, const char* label, int32_t (*constructor_func)(idevice_t, lockdownd_service_descriptor_t, void**), int32_t *error_code); +LIBIMOBILEDEVICE_API service_error_t service_client_factory_start_service(idevice_t device, const char* service_name, void **client, const char* label, int32_t (*constructor_func)(idevice_t, lockdownd_service_descriptor_t, void**), int32_t *error_code);  /**   * Frees a service instance. @@ -92,7 +92,7 @@ service_error_t service_client_factory_start_service(idevice_t device, const cha   *     SERVICE_E_INVALID_ARG when client is invalid, or a   *     SERVICE_E_UNKNOWN_ERROR when another error occurred.   */ -service_error_t service_client_free(service_client_t client); +LIBIMOBILEDEVICE_API service_error_t service_client_free(service_client_t client);  /** @@ -108,7 +108,7 @@ service_error_t service_client_free(service_client_t client);   *      invalid, or SERVICE_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -service_error_t service_send(service_client_t client, const char *data, uint32_t size, uint32_t *sent); +LIBIMOBILEDEVICE_API service_error_t service_send(service_client_t client, const char *data, uint32_t size, uint32_t *sent);  /**   * Receives data using the given service client with specified timeout. @@ -125,7 +125,7 @@ service_error_t service_send(service_client_t client, const char *data, uint32_t   *      occurs, or SERVICE_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -service_error_t service_receive_with_timeout(service_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout); +LIBIMOBILEDEVICE_API service_error_t service_receive_with_timeout(service_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout);  /**   * Receives data using the given service client. @@ -143,7 +143,7 @@ service_error_t service_receive_with_timeout(service_client_t client, char *data   *      occurs, or SERVICE_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -service_error_t service_receive(service_client_t client, char *data, uint32_t size, uint32_t *received); +LIBIMOBILEDEVICE_API service_error_t service_receive(service_client_t client, char *data, uint32_t size, uint32_t *received);  /** @@ -158,7 +158,7 @@ service_error_t service_receive(service_client_t client, char *data, uint32_t si   *     SERVICE_E_SSL_ERROR when SSL could not be enabled,   *     or SERVICE_E_UNKNOWN_ERROR otherwise.   */ -service_error_t service_enable_ssl(service_client_t client); +LIBIMOBILEDEVICE_API service_error_t service_enable_ssl(service_client_t client);  /**   * Disable SSL for the given service client. @@ -169,7 +169,7 @@ service_error_t service_enable_ssl(service_client_t client);   *     SERVICE_E_INVALID_ARG if client or client->connection is   *     NULL, or SERVICE_E_UNKNOWN_ERROR otherwise.   */ -service_error_t service_disable_ssl(service_client_t client); +LIBIMOBILEDEVICE_API service_error_t service_disable_ssl(service_client_t client);  /**   * Disable SSL for the given service client, optionally without sending SSL terminate messages. @@ -182,7 +182,7 @@ service_error_t service_disable_ssl(service_client_t client);   *     SERVICE_E_INVALID_ARG if client or client->connection is   *     NULL, or SERVICE_E_UNKNOWN_ERROR otherwise.   */ -service_error_t service_disable_bypass_ssl(service_client_t client, uint8_t sslBypass); +LIBIMOBILEDEVICE_API service_error_t service_disable_bypass_ssl(service_client_t client, uint8_t sslBypass);  /**   * Return a handle to the parent #idevice_connection_t of the given service client. @@ -193,7 +193,8 @@ service_error_t service_disable_bypass_ssl(service_client_t client, uint8_t sslB   * @return SERVICE_E_SUCCESS on success,   *     SERVICE_E_INVALID_ARG if one or more of the arguments are invalid.   */ -service_error_t service_get_connection(service_client_t client, idevice_connection_t *connection); +LIBIMOBILEDEVICE_API service_error_t service_get_connection(service_client_t client, idevice_connection_t *connection); +  #ifdef __cplusplus  }  #endif diff --git a/include/libimobiledevice/syslog_relay.h b/include/libimobiledevice/syslog_relay.h index aae5d11..0f6487a 100644 --- a/include/libimobiledevice/syslog_relay.h +++ b/include/libimobiledevice/syslog_relay.h @@ -65,7 +65,7 @@ typedef void (*syslog_relay_receive_cb_t)(char c, void *user_data);   * @return SYSLOG_RELAY_E_SUCCESS on success, SYSLOG_RELAY_E_INVALID_ARG when   *     client is NULL, or an SYSLOG_RELAY_E_* error code otherwise.   */ -syslog_relay_error_t syslog_relay_client_new(idevice_t device, lockdownd_service_descriptor_t service, syslog_relay_client_t * client); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_client_new(idevice_t device, lockdownd_service_descriptor_t service, syslog_relay_client_t * client);  /**   * Starts a new syslog_relay service on the specified device and connects to it. @@ -80,7 +80,7 @@ syslog_relay_error_t syslog_relay_client_new(idevice_t device, lockdownd_service   * @return SYSLOG_RELAY_E_SUCCESS on success, or an SYSLOG_RELAY_E_* error   *     code otherwise.   */ -syslog_relay_error_t syslog_relay_client_start_service(idevice_t device, syslog_relay_client_t * client, const char* label); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_client_start_service(idevice_t device, syslog_relay_client_t * client, const char* label);  /**   * Disconnects a syslog_relay client from the device and frees up the @@ -91,7 +91,7 @@ syslog_relay_error_t syslog_relay_client_start_service(idevice_t device, syslog_   * @return SYSLOG_RELAY_E_SUCCESS on success, SYSLOG_RELAY_E_INVALID_ARG when   *     client is NULL, or an SYSLOG_RELAY_E_* error code otherwise.   */ -syslog_relay_error_t syslog_relay_client_free(syslog_relay_client_t client); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_client_free(syslog_relay_client_t client);  /** @@ -108,7 +108,7 @@ syslog_relay_error_t syslog_relay_client_free(syslog_relay_client_t client);   *      invalid or SYSLOG_RELAY_E_UNKNOWN_ERROR when an unspecified   *      error occurs or a syslog capture has already been started.   */ -syslog_relay_error_t syslog_relay_start_capture(syslog_relay_client_t client, syslog_relay_receive_cb_t callback, void* user_data); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_start_capture(syslog_relay_client_t client, syslog_relay_receive_cb_t callback, void* user_data);  /**   * Starts capturing the *raw* syslog of the device using a callback. @@ -129,7 +129,7 @@ syslog_relay_error_t syslog_relay_start_capture(syslog_relay_client_t client, sy   *      invalid or SYSLOG_RELAY_E_UNKNOWN_ERROR when an unspecified   *      error occurs or a syslog capture has already been started.   */ -syslog_relay_error_t syslog_relay_start_capture_raw(syslog_relay_client_t client, syslog_relay_receive_cb_t callback, void* user_data); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_start_capture_raw(syslog_relay_client_t client, syslog_relay_receive_cb_t callback, void* user_data);  /**   * Stops capturing the syslog of the device. @@ -143,7 +143,7 @@ syslog_relay_error_t syslog_relay_start_capture_raw(syslog_relay_client_t client   *      invalid or SYSLOG_RELAY_E_UNKNOWN_ERROR when an unspecified   *      error occurs or a syslog capture has already been started.   */ -syslog_relay_error_t syslog_relay_stop_capture(syslog_relay_client_t client); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_stop_capture(syslog_relay_client_t client);  /* Receiving */ @@ -162,7 +162,7 @@ syslog_relay_error_t syslog_relay_stop_capture(syslog_relay_client_t client);   *      occurs, or SYSLOG_RELAY_E_UNKNOWN_ERROR when an unspecified   *      error occurs.   */ -syslog_relay_error_t syslog_relay_receive_with_timeout(syslog_relay_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_receive_with_timeout(syslog_relay_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout);  /**   * Receives data from the service. @@ -175,7 +175,7 @@ syslog_relay_error_t syslog_relay_receive_with_timeout(syslog_relay_client_t cli   * @return SYSLOG_RELAY_E_SUCCESS on success,   *  SYSLOG_RELAY_E_INVALID_ARG when client or plist is NULL   */ -syslog_relay_error_t syslog_relay_receive(syslog_relay_client_t client, char *data, uint32_t size, uint32_t *received); +LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_receive(syslog_relay_client_t client, char *data, uint32_t size, uint32_t *received);  #ifdef __cplusplus  } diff --git a/include/libimobiledevice/webinspector.h b/include/libimobiledevice/webinspector.h index 064ba91..16d2ca2 100644 --- a/include/libimobiledevice/webinspector.h +++ b/include/libimobiledevice/webinspector.h @@ -62,7 +62,7 @@ typedef webinspector_client_private *webinspector_client_t; /**< The client hand   * @return WEBINSPECTOR_E_SUCCESS on success, WEBINSPECTOR_E_INVALID_ARG when   *     client is NULL, or an WEBINSPECTOR_E_* error code otherwise.   */ -webinspector_error_t webinspector_client_new(idevice_t device, lockdownd_service_descriptor_t service, webinspector_client_t * client); +LIBIMOBILEDEVICE_API webinspector_error_t webinspector_client_new(idevice_t device, lockdownd_service_descriptor_t service, webinspector_client_t * client);  /**   * Starts a new webinspector service on the specified device and connects to it. @@ -77,7 +77,7 @@ webinspector_error_t webinspector_client_new(idevice_t device, lockdownd_service   * @return WEBINSPECTOR_E_SUCCESS on success, or an WEBINSPECTOR_E_* error   *     code otherwise.   */ -webinspector_error_t webinspector_client_start_service(idevice_t device, webinspector_client_t * client, const char* label); +LIBIMOBILEDEVICE_API webinspector_error_t webinspector_client_start_service(idevice_t device, webinspector_client_t * client, const char* label);  /**   * Disconnects a webinspector client from the device and frees up the @@ -88,7 +88,7 @@ webinspector_error_t webinspector_client_start_service(idevice_t device, webinsp   * @return WEBINSPECTOR_E_SUCCESS on success, WEBINSPECTOR_E_INVALID_ARG when   *     client is NULL, or an WEBINSPECTOR_E_* error code otherwise.   */ -webinspector_error_t webinspector_client_free(webinspector_client_t client); +LIBIMOBILEDEVICE_API webinspector_error_t webinspector_client_free(webinspector_client_t client);  /** @@ -100,7 +100,7 @@ webinspector_error_t webinspector_client_free(webinspector_client_t client);   * @return DIAGNOSTICS_RELAY_E_SUCCESS on success,   *  DIAGNOSTICS_RELAY_E_INVALID_ARG when client or plist is NULL   */ -webinspector_error_t webinspector_send(webinspector_client_t client, plist_t plist); +LIBIMOBILEDEVICE_API webinspector_error_t webinspector_send(webinspector_client_t client, plist_t plist);  /**   * Receives a plist from the service. @@ -111,7 +111,7 @@ webinspector_error_t webinspector_send(webinspector_client_t client, plist_t pli   * @return DIAGNOSTICS_RELAY_E_SUCCESS on success,   *  DIAGNOSTICS_RELAY_E_INVALID_ARG when client or plist is NULL   */ -webinspector_error_t webinspector_receive(webinspector_client_t client, plist_t * plist); +LIBIMOBILEDEVICE_API webinspector_error_t webinspector_receive(webinspector_client_t client, plist_t * plist);  /**   * Receives a plist using the given webinspector client. @@ -128,7 +128,7 @@ webinspector_error_t webinspector_receive(webinspector_client_t client, plist_t   *      communication error occurs, or WEBINSPECTOR_E_UNKNOWN_ERROR   *      when an unspecified error occurs.   */ -webinspector_error_t webinspector_receive_with_timeout(webinspector_client_t client, plist_t * plist, uint32_t timeout_ms); +LIBIMOBILEDEVICE_API webinspector_error_t webinspector_receive_with_timeout(webinspector_client_t client, plist_t * plist, uint32_t timeout_ms);  #ifdef __cplusplus  } | 
