diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-04-13 17:17:01 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-08-29 12:41:50 -0700 |
commit | 67dfe38b660d9a1461dc2acea60a1157fc7c169f (patch) | |
tree | cefdd2517b773cd40e69c6b917739426152ae034 /src/adapter.c | |
parent | 6b8f9fbd5bb81fe8d156155551fb727ceb21c869 (diff) | |
download | bluez-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.c | 33 |
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; |