diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2023-03-29 13:27:05 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2023-03-29 16:25:18 -0700 |
commit | 2b022fa5297a56875f06c2b5612258cd99dcbe74 (patch) | |
tree | dcf706df4eafa0175a476fa0524366cee8547d31 | |
parent | ca07d198f9c7d289e95091c30ed15bff2106a7db (diff) | |
download | bluez-2b022fa5297a56875f06c2b5612258cd99dcbe74.tar.gz |
device: Fix not setting initiator flag when auto-connecting
If the device is marked as auto-connect the kernel may initiate the
connection spontaneously causing new connections to not have set the
state->initiator flag properly.
-rw-r--r-- | src/device.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/device.c b/src/device.c index f31f2a097..b43ced8b5 100644 --- a/src/device.c +++ b/src/device.c @@ -312,9 +312,16 @@ static struct bearer_state *get_state(struct btd_device *dev, bool btd_device_is_initiator(struct btd_device *dev) { - if (dev->le_state.connected) + if (dev->le_state.connected) { + /* Mark as initiator if not set yet and auto-connect flag is + * set and LTK key is for a peripheral. + */ + if (!dev->le_state.initiator && dev->auto_connect && + dev->ltk && !dev->ltk->central) + dev->le_state.initiator = true; + return dev->le_state.initiator; - if (dev->bredr_state.connected) + } else if (dev->bredr_state.connected) return dev->bredr_state.initiator; return dev->att_io ? true : false; |