mirror of
https://github.com/google/bumble.git
synced 2026-04-17 00:35:31 +00:00
delete only the required connection
This commit is contained in:
@@ -481,6 +481,18 @@ class Controller:
|
|||||||
return connection
|
return connection
|
||||||
return None
|
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:
|
def find_classic_sco_link_by_handle(self, handle: int) -> ScoLink | None:
|
||||||
for connection in self.sco_links.values():
|
for connection in self.sco_links.values():
|
||||||
if connection.handle == handle:
|
if connection.handle == handle:
|
||||||
@@ -1203,22 +1215,22 @@ class Controller:
|
|||||||
|
|
||||||
# Notify the link of the disconnection
|
# Notify the link of the disconnection
|
||||||
handle = command.connection_handle
|
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 self.link:
|
||||||
if connection.transport == PhysicalTransport.BR_EDR:
|
self.send_lmp_packet(
|
||||||
self.send_lmp_packet(
|
connection.peer_address,
|
||||||
connection.peer_address,
|
lmp.LmpDetach(command.reason),
|
||||||
lmp.LmpDetach(command.reason),
|
)
|
||||||
)
|
self.on_classic_disconnected(connection.peer_address, 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)
|
|
||||||
else:
|
else:
|
||||||
# Remove the connection
|
# Remove the connection
|
||||||
del self.classic_connections[connection.peer_address]
|
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]
|
del self.le_connections[connection.peer_address]
|
||||||
elif sco_link := self.find_classic_sco_link_by_handle(handle):
|
elif sco_link := self.find_classic_sco_link_by_handle(handle):
|
||||||
if self.link:
|
if self.link:
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ async def test_le_multiple_connects():
|
|||||||
connection = await devices[1].connect(devices[0].random_address)
|
connection = await devices[1].connect(devices[0].random_address)
|
||||||
await connection.disconnect()
|
await connection.disconnect()
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_advertising_and_scanning():
|
async def test_advertising_and_scanning():
|
||||||
|
|||||||
Reference in New Issue
Block a user