delete only the required connection

This commit is contained in:
timrid
2026-02-05 18:50:31 +01:00
parent 79e5974946
commit 81d9adb983
2 changed files with 25 additions and 12 deletions

View File

@@ -481,6 +481,18 @@ class Controller:
return connection
return None
def find_le_connection_by_handle(self, handle: int) -> Connection | None:
for connection in self.le_connections.values():
if connection.handle == handle:
return connection
return None
def find_classic_connection_by_handle(self, handle: int) -> Connection | None:
for connection in self.classic_connections.values():
if connection.handle == handle:
return connection
return None
def find_classic_sco_link_by_handle(self, handle: int) -> ScoLink | None:
for connection in self.sco_links.values():
if connection.handle == handle:
@@ -1203,22 +1215,22 @@ class Controller:
# Notify the link of the disconnection
handle = command.connection_handle
if connection := self.find_connection_by_handle(handle):
if connection := self.find_classic_connection_by_handle(handle):
if self.link:
if connection.transport == PhysicalTransport.BR_EDR:
self.send_lmp_packet(
connection.peer_address,
lmp.LmpDetach(command.reason),
)
self.on_classic_disconnected(
connection.peer_address, command.reason
)
else:
connection.send_ll_control_pdu(ll.TerminateInd(command.reason))
self.on_le_disconnected(connection, command.reason)
self.send_lmp_packet(
connection.peer_address,
lmp.LmpDetach(command.reason),
)
self.on_classic_disconnected(connection.peer_address, command.reason)
else:
# Remove the connection
del self.classic_connections[connection.peer_address]
elif connection := self.find_le_connection_by_handle(handle):
if self.link:
connection.send_ll_control_pdu(ll.TerminateInd(command.reason))
self.on_le_disconnected(connection, command.reason)
else:
# Remove the connection
del self.le_connections[connection.peer_address]
elif sco_link := self.find_classic_sco_link_by_handle(handle):
if self.link:

View File

@@ -329,6 +329,7 @@ async def test_le_multiple_connects():
connection = await devices[1].connect(devices[0].random_address)
await connection.disconnect()
# -----------------------------------------------------------------------------
@pytest.mark.asyncio
async def test_advertising_and_scanning():