summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-02-07 15:23:52 +0200
committerPedro Alvarez <pedro.alvarez@codethink.co.uk>2014-04-10 14:15:09 +0000
commit534d39d50ae31db2a80e56da73177ca139e5a8ae (patch)
treec2b59ab65c8b0d2012d2d3d1c146e0051de4a345
parentd9a384a32032e8dd34ab69c99c4f31950790910a (diff)
downloadbluez-534d39d50ae31db2a80e56da73177ca139e5a8ae.tar.gz
core/service: Add btd_service_get_version
This adds btd_service_get_version which can be use to query service version.
-rw-r--r--src/service.c24
-rw-r--r--src/service.h1
2 files changed, 25 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c
index 7a480d6da..529217a8b 100644
--- a/src/service.c
+++ b/src/service.c
@@ -36,6 +36,8 @@
#include <errno.h>
#include <bluetooth/bluetooth.h>
+#include <bluetooth/sdp.h>
+#include <bluetooth/sdp_lib.h>
#include <glib.h>
@@ -282,6 +284,28 @@ int btd_service_get_error(const struct btd_service *service)
return service->err;
}
+uint16_t btd_service_get_version(const struct btd_service *service)
+{
+ const sdp_record_t *rec;
+ sdp_list_t *list;
+ sdp_profile_desc_t *desc;
+ uint16_t version;
+
+ rec = btd_device_get_record(service->device,
+ service->profile->remote_uuid);
+ if (rec == NULL)
+ return 0;
+
+ if (sdp_get_profile_descs(rec, &list) < 0)
+ return 0;
+
+ desc = list->data;
+ version = desc->version;
+ sdp_list_free(list, free);
+
+ return version;
+}
+
unsigned int btd_service_add_state_cb(btd_service_state_cb cb, void *user_data)
{
struct service_state_callback *state_cb;
diff --git a/src/service.h b/src/service.h
index 5230115cb..1a4a1a66e 100644
--- a/src/service.h
+++ b/src/service.h
@@ -57,6 +57,7 @@ struct btd_device *btd_service_get_device(const struct btd_service *service);
struct btd_profile *btd_service_get_profile(const struct btd_service *service);
btd_service_state_t btd_service_get_state(const struct btd_service *service);
int btd_service_get_error(const struct btd_service *service);
+uint16_t btd_service_get_version(const struct btd_service *service);
unsigned int btd_service_add_state_cb(btd_service_state_cb cb,
void *user_data);