summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/userpref.c33
-rw-r--r--common/userpref.h9
2 files changed, 24 insertions, 18 deletions
diff --git a/common/userpref.c b/common/userpref.c
index 0c6050f..bf7e1bd 100644
--- a/common/userpref.c
+++ b/common/userpref.c
@@ -309,8 +309,10 @@ userpref_error_t userpref_save_pair_record(const char *udid, uint32_t device_id,
309 * @param udid The device UDID as given by the device 309 * @param udid The device UDID as given by the device
310 * @param pair_record The pair record to read 310 * @param pair_record The pair record to read
311 * 311 *
312 * @return 1 on success and 0 if no device record is given or if it has already 312 * @return USERPREF_E_SUCCESS on success,
313 * been saved previously. 313 * USERPREF_E_NOENT if no pairing record was found,
314 * USERPREF_E_READ_ERROR if retrieving the pairing record from usbmuxd failed,
315 * or USERPREF_E_INVALID_CONF otherwise.
314 */ 316 */
315userpref_error_t userpref_read_pair_record(const char *udid, plist_t *pair_record) 317userpref_error_t userpref_read_pair_record(const char *udid, plist_t *pair_record)
316{ 318{
@@ -318,24 +320,27 @@ userpref_error_t userpref_read_pair_record(const char *udid, plist_t *pair_recor
318 uint32_t record_size = 0; 320 uint32_t record_size = 0;
319 321
320 int res = usbmuxd_read_pair_record(udid, &record_data, &record_size); 322 int res = usbmuxd_read_pair_record(udid, &record_data, &record_size);
321
322 if (res < 0) { 323 if (res < 0) {
323 if (record_data) 324 free(record_data);
324 free(record_data); 325 switch (-res) {
325 326 case ENOENT:
326 return USERPREF_E_INVALID_CONF; 327 return USERPREF_E_NOENT;
328 case ETIMEDOUT:
329 return USERPREF_E_READ_ERROR;
330 default:
331 return USERPREF_E_INVALID_CONF;
332 }
327 } 333 }
328 334
329 *pair_record = NULL; 335 *pair_record = NULL;
330 if (memcmp(record_data, "bplist00", 8) == 0) { 336 plist_from_memory(record_data, record_size, pair_record);
331 plist_from_bin(record_data, record_size, pair_record);
332 } else {
333 plist_from_xml(record_data, record_size, pair_record);
334 }
335
336 free(record_data); 337 free(record_data);
337 338
338 return res == 0 ? USERPREF_E_SUCCESS: USERPREF_E_UNKNOWN_ERROR; 339 if (!*pair_record) {
340 debug_info("Failed to parse pairing record");
341 return USERPREF_E_INVALID_CONF;
342 }
343 return USERPREF_E_SUCCESS;
339} 344}
340 345
341/** 346/**
diff --git a/common/userpref.h b/common/userpref.h
index 072721a..75bb8b7 100644
--- a/common/userpref.h
+++ b/common/userpref.h
@@ -54,10 +54,11 @@ typedef gnutls_datum_t key_data_t;
54typedef enum { 54typedef enum {
55 USERPREF_E_SUCCESS = 0, 55 USERPREF_E_SUCCESS = 0,
56 USERPREF_E_INVALID_ARG = -1, 56 USERPREF_E_INVALID_ARG = -1,
57 USERPREF_E_INVALID_CONF = -2, 57 USERPREF_E_NOENT = -2,
58 USERPREF_E_SSL_ERROR = -3, 58 USERPREF_E_INVALID_CONF = -3,
59 USERPREF_E_READ_ERROR = -4, 59 USERPREF_E_SSL_ERROR = -4,
60 USERPREF_E_WRITE_ERROR = -5, 60 USERPREF_E_READ_ERROR = -5,
61 USERPREF_E_WRITE_ERROR = -6,
61 USERPREF_E_UNKNOWN_ERROR = -256 62 USERPREF_E_UNKNOWN_ERROR = -256
62} userpref_error_t; 63} userpref_error_t;
63 64