diff options
| author | 2013-12-13 12:01:45 +0100 | |
|---|---|---|
| committer | 2013-12-13 12:01:45 +0100 | |
| commit | 30b64de8f30f90875dc78fc2305a6b0fbe209614 (patch) | |
| tree | dacf5c374487c015420905370d8323b7c1aab0ee /src | |
| parent | 75534a5e07d8974fd1aa3b80892255af48def715 (diff) | |
| download | libusbmuxd-30b64de8f30f90875dc78fc2305a6b0fbe209614.tar.gz libusbmuxd-30b64de8f30f90875dc78fc2305a6b0fbe209614.tar.bz2 | |
implemented usbmuxd_read/save/delete_pair_record()
Diffstat (limited to 'src')
| -rw-r--r-- | src/libusbmuxd.c | 133 | 
1 files changed, 133 insertions, 0 deletions
| diff --git a/src/libusbmuxd.c b/src/libusbmuxd.c index 909851c..97662bf 100644 --- a/src/libusbmuxd.c +++ b/src/libusbmuxd.c @@ -452,6 +452,23 @@ static int send_read_buid_packet(int sfd, uint32_t tag)  	return res;  } +static int send_pair_record_packet(int sfd, uint32_t tag, const char* msgtype, const char* pair_record_id, plist_t data) +{ +	int res = -1; + +	/* construct message plist */ +	plist_t plist = create_plist_message(msgtype); +	plist_dict_insert_item(plist, "PairRecordID", plist_new_string(pair_record_id)); +	if (data) { +		plist_dict_insert_item(plist, "PairRecordData", plist_copy(data)); +	} +	 +	res = send_plist_packet(sfd, tag, plist); +	plist_free(plist); + +	return res; +} +  /**   * Generates an event, i.e. calls the callback function.   * A reference to a populated usbmuxd_event_t with information about the event @@ -1103,6 +1120,122 @@ int usbmuxd_read_buid(char **buid)  	return ret;  } +int usbmuxd_read_pair_record(const char* record_id, char **record_data, uint32_t *record_size) +{ +	int sfd; +	int ret = -1; + +	if (!record_id || !record_data || !record_size) { +		return -EINVAL; +	} +	*record_data = NULL; +	*record_size = 0; + +	sfd = connect_usbmuxd_socket(); +	if (sfd < 0) { +		DEBUG(1, "%s: Error: Connection to usbmuxd failed: %s\n", +				__func__, strerror(errno)); +		return sfd; +	} + +	proto_version = 1; +	use_tag++; + +	if (send_pair_record_packet(sfd, use_tag, "ReadPairRecord", record_id, NULL) <= 0) { +		DEBUG(1, "%s: Error sending connect message!\n", __func__); +	} else { +		uint32_t rc = 0; +		plist_t pl = NULL; +		if (usbmuxd_get_result(sfd, use_tag, &rc, &pl)) { +			plist_t node = plist_dict_get_item(pl, "PairRecordData"); +			if (node && plist_get_node_type(node) == PLIST_DATA) { +				uint64_t int64val = 0; +				plist_get_data_val(node, record_data, &int64val); +				if (record_data && int64val > 0) { +					*record_size = (uint32_t)int64val; +					ret = 0; +				} +			} +		} else { +			ret = -(int)rc; +		} +		if (pl) +			plist_free(pl); +	} + +	return ret; +} + +int usbmuxd_save_pair_record(const char* record_id, const char *record_data, uint32_t record_size) +{ +	int sfd; +	int ret = -1; + +	if (!record_id || !record_data || !record_size) { +		return -EINVAL; +	} + +	sfd = connect_usbmuxd_socket(); +	if (sfd < 0) { +		DEBUG(1, "%s: Error: Connection to usbmuxd failed: %s\n", +				__func__, strerror(errno)); +		return sfd; +	} + +	proto_version = 1; +	use_tag++; + +	plist_t data = plist_new_data(record_data, record_size); +	if (send_pair_record_packet(sfd, use_tag, "SavePairRecord", record_id, data) <= 0) { +		DEBUG(1, "%s: Error sending connect message!\n", __func__); +	} else { +		uint32_t rc = 0; +		if (usbmuxd_get_result(sfd, use_tag, &rc, NULL)) { +			ret = 0; +		} else { +			ret = -(int)rc; +			DEBUG(1, "%s: Error: saving pair record failed: %d\n", __func__, ret); +		} +	} +	plist_free(data); + +	return ret; +} + +int usbmuxd_delete_pair_record(const char* record_id) +{ +	int sfd; +	int ret = -1; + +	if (!record_id) { +		return -EINVAL; +	} + +	sfd = connect_usbmuxd_socket(); +	if (sfd < 0) { +		DEBUG(1, "%s: Error: Connection to usbmuxd failed: %s\n", +				__func__, strerror(errno)); +		return sfd; +	} + +	proto_version = 1; +	use_tag++; + +	if (send_pair_record_packet(sfd, use_tag, "DeletePairRecord", record_id, NULL) <= 0) { +		DEBUG(1, "%s: Error sending connect message!\n", __func__); +	} else { +		uint32_t rc = 0; +		if (usbmuxd_get_result(sfd, use_tag, &rc, NULL)) { +			ret = 0; +		} else { +			ret = -(int)rc; +			DEBUG(1, "%s: Error: deleting pair record failed: %d\n", __func__, ret); +		} +	} + +	return ret; +} +  void libusbmuxd_set_use_inotify(int set)  {  #ifdef HAVE_INOTIFY | 
