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:
|
) and subscriber in subscribers:
|
||||||
subscribers.remove(subscriber)
|
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
|
# Cleanup if we removed the last one
|
||||||
if not subscribers:
|
if not subscribers:
|
||||||
del subscriber_set[characteristic.handle]
|
del subscriber_set[characteristic.handle]
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ class ContextType(enum.IntFlag):
|
|||||||
|
|
||||||
# fmt: off
|
# fmt: off
|
||||||
PROHIBITED = 0x0000
|
PROHIBITED = 0x0000
|
||||||
|
UNSPECIFIED = 0x0001
|
||||||
CONVERSATIONAL = 0x0002
|
CONVERSATIONAL = 0x0002
|
||||||
MEDIA = 0x0004
|
MEDIA = 0x0004
|
||||||
GAME = 0x0008
|
GAME = 0x0008
|
||||||
|
|||||||
@@ -1839,7 +1839,7 @@ class Session:
|
|||||||
if self.is_initiator:
|
if self.is_initiator:
|
||||||
if self.pairing_method == PairingMethod.OOB:
|
if self.pairing_method == PairingMethod.OOB:
|
||||||
self.send_pairing_random_command()
|
self.send_pairing_random_command()
|
||||||
else:
|
elif self.pairing_method == PairingMethod.PASSKEY:
|
||||||
self.send_pairing_confirm_command()
|
self.send_pairing_confirm_command()
|
||||||
else:
|
else:
|
||||||
if self.pairing_method == PairingMethod.PASSKEY:
|
if self.pairing_method == PairingMethod.PASSKEY:
|
||||||
|
|||||||
@@ -370,10 +370,12 @@ class PumpedPacketSource(ParserSource):
|
|||||||
self.parser.feed_data(packet)
|
self.parser.feed_data(packet)
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
logger.debug('source pump task done')
|
logger.debug('source pump task done')
|
||||||
|
if not self.terminated.done():
|
||||||
self.terminated.set_result(None)
|
self.terminated.set_result(None)
|
||||||
break
|
break
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
logger.warning(f'exception while waiting for packet: {error}')
|
logger.warning(f'exception while waiting for packet: {error}')
|
||||||
|
if not self.terminated.done():
|
||||||
self.terminated.set_exception(error)
|
self.terminated.set_exception(error)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -851,7 +851,12 @@ async def test_unsubscribe():
|
|||||||
await async_barrier()
|
await async_barrier()
|
||||||
mock1.assert_called_once_with(ANY, True, False)
|
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()
|
await async_barrier()
|
||||||
mock2.assert_called_once_with(ANY, True, False)
|
mock2.assert_called_once_with(ANY, True, False)
|
||||||
|
|
||||||
@@ -861,10 +866,16 @@ async def test_unsubscribe():
|
|||||||
mock1.assert_called_once_with(ANY, False, False)
|
mock1.assert_called_once_with(ANY, False, False)
|
||||||
|
|
||||||
mock2.reset_mock()
|
mock2.reset_mock()
|
||||||
await c2.unsubscribe()
|
await c2.unsubscribe(callback)
|
||||||
await async_barrier()
|
await async_barrier()
|
||||||
mock2.assert_called_once_with(ANY, False, False)
|
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()
|
mock1.reset_mock()
|
||||||
await c1.unsubscribe()
|
await c1.unsubscribe()
|
||||||
await async_barrier()
|
await async_barrier()
|
||||||
|
|||||||
Reference in New Issue
Block a user