diff mbox series

[BlueZ,4/5] device: Fix pairing with dual mode devices

Message ID 20230728053153.584222-5-simon.mikuda@streamunlimited.com
State New
Headers show
Series Device pairing and discovery fixes | expand

Commit Message

Simon Mikuda July 28, 2023, 5:31 a.m. UTC
We'll prefer to pair services on connected bearer first.

There was a problem with pairing, that select_conn_bearer returned BR/EDR
even when we have connection to LE bearer only. In these situation we should
pair over connected bearer, since connection to another bearer can fail.
---
 src/device.c | 5 +++++
 1 file changed, 5 insertions(+)
diff mbox series

Patch

diff --git a/src/device.c b/src/device.c
index 5a39a6f83..367e2f046 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3017,6 +3017,11 @@  static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg,
 		bdaddr_type = device->bdaddr_type;
 	else if (device->le_state.bonded)
 		bdaddr_type = BDADDR_BREDR;
+	else if (device->bredr_state.connected && !device->le_state.connected)
+		bdaddr_type = BDADDR_BREDR;
+	else if (!device->bredr_state.connected && device->le_state.connected)
+		bdaddr_type = device->bdaddr_type == BDADDR_BREDR
+			? BDADDR_LE_PUBLIC : device->bdaddr_type;
 	else
 		bdaddr_type = select_conn_bearer(device);