summaryrefslogtreecommitdiff
path: root/src/adapter.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-04-13 17:17:01 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-08-29 12:41:50 -0700
commit67dfe38b660d9a1461dc2acea60a1157fc7c169f (patch)
treecefdd2517b773cd40e69c6b917739426152ae034 /src/adapter.c
parent6b8f9fbd5bb81fe8d156155551fb727ceb21c869 (diff)
downloadbluez-67dfe38b660d9a1461dc2acea60a1157fc7c169f.tar.gz
adapter: Add btd_adapter_find_device_by_fd
This adds btd_adapter_find_device_by_fd that lookup a device by a fd socket destination address.
Diffstat (limited to 'src/adapter.c')
-rw-r--r--src/adapter.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/adapter.c b/src/adapter.c
index b453e86a0..51b099dae 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1383,6 +1383,39 @@ struct btd_device *btd_adapter_get_device(struct btd_adapter *adapter,
return adapter_create_device(adapter, addr, addr_type);
}
+struct btd_device *btd_adapter_find_device_by_fd(int fd)
+{
+ bdaddr_t src, dst;
+ uint8_t dst_type;
+ GIOChannel *io = NULL;
+ GError *gerr = NULL;
+ struct btd_adapter *adapter;
+
+ io = g_io_channel_unix_new(fd);
+ if (!io)
+ return NULL;
+
+ bt_io_get(io, &gerr,
+ BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_DEST_BDADDR, &dst,
+ BT_IO_OPT_DEST_TYPE, &dst_type,
+ BT_IO_OPT_INVALID);
+ if (gerr) {
+ error("bt_io_get: %s", gerr->message);
+ g_error_free(gerr);
+ g_io_channel_unref(io);
+ return NULL;
+ }
+
+ g_io_channel_unref(io);
+
+ adapter = adapter_find(&src);
+ if (!adapter)
+ return NULL;
+
+ return btd_adapter_find_device(adapter, &dst, dst_type);
+}
+
sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter)
{
return adapter->services;