diff options
-rw-r--r-- | include/Makefile.am | 3 | ||||
-rw-r--r-- | include/libimobiledevice/property_list_service.h | 170 | ||||
-rw-r--r-- | src/property_list_service.c | 100 | ||||
-rw-r--r-- | src/property_list_service.h | 33 |
4 files changed, 173 insertions, 133 deletions
diff --git a/include/Makefile.am b/include/Makefile.am index 4ee11b4..1a49703 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -19,4 +19,5 @@ nobase_include_HEADERS = libimobiledevice/libimobiledevice.h \ libimobiledevice/heartbeat.h\ libimobiledevice/diagnostics_relay.h\ libimobiledevice/syslog_relay.h\ - libimobiledevice/service.h
\ No newline at end of file + libimobiledevice/property_list_service.h\ + libimobiledevice/service.h diff --git a/include/libimobiledevice/property_list_service.h b/include/libimobiledevice/property_list_service.h new file mode 100644 index 0000000..4a004ba --- /dev/null +++ b/include/libimobiledevice/property_list_service.h @@ -0,0 +1,170 @@ +/* + * @file libimobiledevice/property_list_service.h + * @brief Definitions for the PropertyList service + * + * Copyright (c) 2010 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 IPROPERTY_LIST_SERVICE_H +#define IPROPERTY_LIST_SERVICE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <libimobiledevice/lockdown.h> + +/* Error Codes */ +/*@{*/ +#define PROPERTY_LIST_SERVICE_E_SUCCESS 0 +#define PROPERTY_LIST_SERVICE_E_INVALID_ARG -1 +#define PROPERTY_LIST_SERVICE_E_PLIST_ERROR -2 +#define PROPERTY_LIST_SERVICE_E_MUX_ERROR -3 +#define PROPERTY_LIST_SERVICE_E_SSL_ERROR -4 +#define PROPERTY_LIST_SERVICE_E_RECEIVE_TIMEOUT -5 +#define PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR -256 +/*@}*/ + +/** Represents an error code */ +typedef int16_t property_list_service_error_t; + +typedef struct property_list_service_client_private property_list_service_private; +typedef property_list_service_private* property_list_service_client_t; /**< The client handle. */ + +/* Interface */ + +/** + * Creates a new property list service for the specified port. + * + * @param device The device to connect to. + * @param service The service descriptor returned by lockdownd_start_service. + * @param client Pointer that will be set to a newly allocated + * property_list_service_client_t upon successful return. + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * 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); + +/** + * Frees a PropertyList service. + * + * @param client The property list service to free. + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client is invalid, or a + * PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when another error occured. + */ +property_list_service_error_t property_list_service_client_free(property_list_service_client_t client); + +/** + * Sends an XML plist. + * + * @param client The property list service client to use for sending. + * @param plist plist to send + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client or plist is NULL, + * 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); + +/** + * Sends a binary plist. + * + * @param client The property list service client to use for sending. + * @param plist plist to send + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client or plist is NULL, + * 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); + +/** + * Receives a plist using the given property list service client with specified + * timeout. + * Binary or XML plists are automatically handled. + * + * @param client The property list service client to use for receiving + * @param plist pointer to a plist_t that will point to the received plist + * upon successful return + * @param timeout Maximum time in milliseconds to wait for data. + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG when connection or *plist is NULL, + * PROPERTY_LIST_SERVICE_E_PLIST_ERROR when the received data cannot be + * converted to a plist, PROPERTY_LIST_SERVICE_E_MUX_ERROR when a + * 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); + +/** + * Receives a plist using the given property list service client. + * Binary or XML plists are automatically handled. + * + * This function is like property_list_service_receive_plist_with_timeout + * using a timeout of 10 seconds. + * @see property_list_service_receive_plist_with_timeout + * + * @param client The property list service client to use for receiving + * @param plist pointer to a plist_t that will point to the received plist + * upon successful return + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client or *plist is NULL, + * PROPERTY_LIST_SERVICE_E_PLIST_ERROR when the received data cannot be + * converted to a plist, PROPERTY_LIST_SERVICE_E_MUX_ERROR when a + * 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); + +/** + * Enable SSL for the given property list service client. + * + * @param client The connected property list service client for which SSL + * should be enabled. + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG if client or client->connection is + * NULL, 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); + +/** + * Disable SSL for the given property list service client. + * + * @param client The connected property list service client for which SSL + * should be disabled. + * + * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, + * PROPERTY_LIST_SERVICE_E_INVALID_ARG if client or client->connection is + * NULL, or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR otherwise. + */ +property_list_service_error_t property_list_service_disable_ssl(property_list_service_client_t client); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/property_list_service.c b/src/property_list_service.c index 3f2e6c3..c260d3e 100644 --- a/src/property_list_service.c +++ b/src/property_list_service.c @@ -54,18 +54,6 @@ static property_list_service_error_t service_to_property_list_service_error(serv return PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR; } -/** - * Creates a new property list service for the specified port. - * - * @param device The device to connect to. - * @param service The service descriptor returned by lockdownd_start_service. - * @param client Pointer that will be set to a newly allocated - * property_list_service_client_t upon successful return. - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * 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) { if (!device || !service || service->port == 0 || !client || *client) @@ -86,15 +74,6 @@ property_list_service_error_t property_list_service_client_new(idevice_t device, return PROPERTY_LIST_SERVICE_E_SUCCESS; } -/** - * Frees a PropertyList service. - * - * @param client The property list service to free. - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client is invalid, or a - * PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR when another error occured. - */ property_list_service_error_t property_list_service_client_free(property_list_service_client_t client) { if (!client) @@ -168,33 +147,11 @@ static property_list_service_error_t internal_plist_send(property_list_service_c return res; } -/** - * Sends an XML plist. - * - * @param client The property list service client to use for sending. - * @param plist plist to send - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client or plist is NULL, - * 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) { return internal_plist_send(client, plist, 0); } -/** - * Sends a binary plist. - * - * @param client The property list service client to use for sending. - * @param plist plist to send - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client or plist is NULL, - * 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) { return internal_plist_send(client, plist, 1); @@ -293,63 +250,16 @@ static property_list_service_error_t internal_plist_receive_timeout(property_lis return res; } -/** - * Receives a plist using the given property list service client with specified - * timeout. - * Binary or XML plists are automatically handled. - * - * @param client The property list service client to use for receiving - * @param plist pointer to a plist_t that will point to the received plist - * upon successful return - * @param timeout Maximum time in milliseconds to wait for data. - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG when connection or *plist is NULL, - * PROPERTY_LIST_SERVICE_E_PLIST_ERROR when the received data cannot be - * converted to a plist, PROPERTY_LIST_SERVICE_E_MUX_ERROR when a - * 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) { return internal_plist_receive_timeout(client, plist, timeout); } -/** - * Receives a plist using the given property list service client. - * Binary or XML plists are automatically handled. - * - * This function is like property_list_service_receive_plist_with_timeout - * using a timeout of 10 seconds. - * @see property_list_service_receive_plist_with_timeout - * - * @param client The property list service client to use for receiving - * @param plist pointer to a plist_t that will point to the received plist - * upon successful return - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG when client or *plist is NULL, - * PROPERTY_LIST_SERVICE_E_PLIST_ERROR when the received data cannot be - * converted to a plist, PROPERTY_LIST_SERVICE_E_MUX_ERROR when a - * 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) { return internal_plist_receive_timeout(client, plist, 10000); } -/** - * Enable SSL for the given property list service client. - * - * @param client The connected property list service client for which SSL - * should be enabled. - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG if client or client->connection is - * NULL, 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) { if (!client || !client->parent) @@ -357,16 +267,6 @@ property_list_service_error_t property_list_service_enable_ssl(property_list_ser return service_to_property_list_service_error(service_enable_ssl(client->parent)); } -/** - * Disable SSL for the given property list service client. - * - * @param client The connected property list service client for which SSL - * should be disabled. - * - * @return PROPERTY_LIST_SERVICE_E_SUCCESS on success, - * PROPERTY_LIST_SERVICE_E_INVALID_ARG if client or client->connection is - * NULL, or PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR otherwise. - */ property_list_service_error_t property_list_service_disable_ssl(property_list_service_client_t client) { if (!client || !client->parent) diff --git a/src/property_list_service.h b/src/property_list_service.h index 5c5f38f..6775c7c 100644 --- a/src/property_list_service.h +++ b/src/property_list_service.h @@ -22,42 +22,11 @@ #ifndef __PROPERTY_LIST_SERVICE_H #define __PROPERTY_LIST_SERVICE_H -#include <libimobiledevice/lockdown.h> +#include "libimobiledevice/property_list_service.h" #include "service.h" -#include "idevice.h" - -/* Error Codes */ -#define PROPERTY_LIST_SERVICE_E_SUCCESS 0 -#define PROPERTY_LIST_SERVICE_E_INVALID_ARG -1 -#define PROPERTY_LIST_SERVICE_E_PLIST_ERROR -2 -#define PROPERTY_LIST_SERVICE_E_MUX_ERROR -3 -#define PROPERTY_LIST_SERVICE_E_SSL_ERROR -4 -#define PROPERTY_LIST_SERVICE_E_RECEIVE_TIMEOUT -5 - -#define PROPERTY_LIST_SERVICE_E_UNKNOWN_ERROR -256 struct property_list_service_client_private { service_client_t parent; }; -typedef struct property_list_service_client_private *property_list_service_client_t; - -typedef int16_t property_list_service_error_t; - -/* creation and destruction */ -property_list_service_error_t property_list_service_client_new(idevice_t device, lockdownd_service_descriptor_t service, property_list_service_client_t *client); -property_list_service_error_t property_list_service_client_free(property_list_service_client_t client); - -/* sending */ -property_list_service_error_t property_list_service_send_xml_plist(property_list_service_client_t client, plist_t plist); -property_list_service_error_t property_list_service_send_binary_plist(property_list_service_client_t client, plist_t plist); - -/* receiving */ -property_list_service_error_t property_list_service_receive_plist_with_timeout(property_list_service_client_t client, plist_t *plist, unsigned int timeout); -property_list_service_error_t property_list_service_receive_plist(property_list_service_client_t client, plist_t *plist); - -/* misc */ -property_list_service_error_t property_list_service_enable_ssl(property_list_service_client_t client); -property_list_service_error_t property_list_service_disable_ssl(property_list_service_client_t client); - #endif |