summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/usbmuxd.h10
-rw-r--r--src/libusbmuxd.c51
2 files changed, 61 insertions, 0 deletions
diff --git a/include/usbmuxd.h b/include/usbmuxd.h
index 4ae71e2..ad0b126 100644
--- a/include/usbmuxd.h
+++ b/include/usbmuxd.h
@@ -175,6 +175,16 @@ int usbmuxd_recv_timeout(int sfd, char *data, uint32_t len, uint32_t *recv_bytes
int usbmuxd_recv(int sfd, char *data, uint32_t len, uint32_t *recv_bytes);
/**
+ * Reads the SystemBUID
+ *
+ * @param buid pointer to a variable that will be set to point to a newly
+ * allocated string with the System BUID returned by usbmuxd
+ *
+ * @return 0 on success, a negative errno value otherwise.
+ */
+int usbmuxd_read_buid(char** buid);
+
+/**
* Enable or disable the use of inotify extension. Enabled by default.
* Use 0 to disable and 1 to enable inotify support.
* This only has an effect on linux systems if inotify support has been built
diff --git a/src/libusbmuxd.c b/src/libusbmuxd.c
index b6e2bbe..909851c 100644
--- a/src/libusbmuxd.c
+++ b/src/libusbmuxd.c
@@ -439,6 +439,19 @@ static int send_list_devices_packet(int sfd, uint32_t tag)
return res;
}
+static int send_read_buid_packet(int sfd, uint32_t tag)
+{
+ int res = -1;
+
+ /* construct message plist */
+ plist_t plist = create_plist_message("ReadBUID");
+
+ 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
@@ -1052,6 +1065,44 @@ int usbmuxd_recv(int sfd, char *data, uint32_t len, uint32_t *recv_bytes)
return usbmuxd_recv_timeout(sfd, data, len, recv_bytes, 5000);
}
+int usbmuxd_read_buid(char **buid)
+{
+ int sfd;
+ int ret = 0;
+
+ if (!buid) {
+ return -EINVAL;
+ }
+ *buid = NULL;
+
+ 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_read_buid_packet(sfd, use_tag) <= 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, "BUID");
+ if (node && plist_get_node_type(node) == PLIST_STRING) {
+ plist_get_string_val(node, buid);
+ }
+ } else {
+ ret = -(int)rc;
+ }
+ if (pl)
+ plist_free(pl);
+ }
+
+ return ret;
+}
+
void libusbmuxd_set_use_inotify(int set)
{
#ifdef HAVE_INOTIFY