forked from auracaster/bumble_mirror
Compare commits
9 Commits
gbg/update
...
v0.0.202
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a060a70fba | ||
|
|
a06394ad4a | ||
|
|
a1414c2b5b | ||
|
|
b2864dac2d | ||
|
|
b78f895143 | ||
|
|
c4e9726828 | ||
|
|
d4b8e8348a | ||
|
|
19debaa52e | ||
|
|
73fe564321 |
@@ -898,6 +898,12 @@ class Client:
|
||||
) and subscriber in subscribers:
|
||||
subscribers.remove(subscriber)
|
||||
|
||||
# The characteristic itself is added as subscriber. If it is the
|
||||
# last remaining subscriber, we remove it, such that the clean up
|
||||
# works correctly. Otherwise the CCCD never is set back to 0.
|
||||
if len(subscribers) == 1 and characteristic in subscribers:
|
||||
subscribers.remove(characteristic)
|
||||
|
||||
# Cleanup if we removed the last one
|
||||
if not subscribers:
|
||||
del subscriber_set[characteristic.handle]
|
||||
|
||||
@@ -102,6 +102,7 @@ class ContextType(enum.IntFlag):
|
||||
|
||||
# fmt: off
|
||||
PROHIBITED = 0x0000
|
||||
UNSPECIFIED = 0x0001
|
||||
CONVERSATIONAL = 0x0002
|
||||
MEDIA = 0x0004
|
||||
GAME = 0x0008
|
||||
|
||||
@@ -1839,7 +1839,7 @@ class Session:
|
||||
if self.is_initiator:
|
||||
if self.pairing_method == PairingMethod.OOB:
|
||||
self.send_pairing_random_command()
|
||||
else:
|
||||
elif self.pairing_method == PairingMethod.PASSKEY:
|
||||
self.send_pairing_confirm_command()
|
||||
else:
|
||||
if self.pairing_method == PairingMethod.PASSKEY:
|
||||
|
||||
@@ -370,11 +370,13 @@ class PumpedPacketSource(ParserSource):
|
||||
self.parser.feed_data(packet)
|
||||
except asyncio.CancelledError:
|
||||
logger.debug('source pump task done')
|
||||
self.terminated.set_result(None)
|
||||
if not self.terminated.done():
|
||||
self.terminated.set_result(None)
|
||||
break
|
||||
except Exception as error:
|
||||
logger.warning(f'exception while waiting for packet: {error}')
|
||||
self.terminated.set_exception(error)
|
||||
if not self.terminated.done():
|
||||
self.terminated.set_exception(error)
|
||||
break
|
||||
|
||||
self.pump_task = asyncio.create_task(pump_packets())
|
||||
|
||||
@@ -851,7 +851,12 @@ async def test_unsubscribe():
|
||||
await async_barrier()
|
||||
mock1.assert_called_once_with(ANY, True, False)
|
||||
|
||||
await c2.subscribe()
|
||||
assert len(server.gatt_server.subscribers) == 1
|
||||
|
||||
def callback(_):
|
||||
pass
|
||||
|
||||
await c2.subscribe(callback)
|
||||
await async_barrier()
|
||||
mock2.assert_called_once_with(ANY, True, False)
|
||||
|
||||
@@ -861,10 +866,16 @@ async def test_unsubscribe():
|
||||
mock1.assert_called_once_with(ANY, False, False)
|
||||
|
||||
mock2.reset_mock()
|
||||
await c2.unsubscribe()
|
||||
await c2.unsubscribe(callback)
|
||||
await async_barrier()
|
||||
mock2.assert_called_once_with(ANY, False, False)
|
||||
|
||||
# All CCCDs should be zeros now
|
||||
assert list(server.gatt_server.subscribers.values())[0] == {
|
||||
c1.handle: bytes([0, 0]),
|
||||
c2.handle: bytes([0, 0]),
|
||||
}
|
||||
|
||||
mock1.reset_mock()
|
||||
await c1.unsubscribe()
|
||||
await async_barrier()
|
||||
|
||||
Reference in New Issue
Block a user