v3.10.0 — channel-lifetime keep-alive
Highlights
Adds Python support for ka9q-radio's new channel-lifetime self-destruct timer (radiod 0f8b622+). Channels can now declare a lifetime in radiod main-loop frames; if the client dies, the channel expires on its own instead of lingering on radiod.
New API on RadiodControl
set_channel_lifetime(ssrc, lifetime)— explicit poll, suitable as a periodic keep-alivecreate_channel(..., lifetime=None)— sendsLIFETIMEon creation when setensure_channel(..., lifetime=None)— passes through tocreate_channel; on the reuse path, callsset_channel_lifetimeso the value is enforced regardless of prior statetune(..., lifetime=None)—LIFETIMEis included in the multi-parameter command buffer_decode_status_response()now surfaces incomingLIFETIMEasstatus['lifetime']and incomingDESCRIPTIONasstatus['description']
Default behavior is unchanged: omit lifetime and the wire packet has no LIFETIME tag, so pre-0f8b622 radiod stays compatible.
Units are radiod main-loop frames (~50 Hz at the default 20 ms blocktime). 0 = infinite.
Other
- Backfilled CHANGELOG entry for v3.9.0 (CLI + Textual TUI + typed
ChannelStatus) - Refreshed stale
tests/test_encode_socket.pyto match the current 6-byte wire format - Hardened
tests/test_native_discovery.pyto mockRadiodControl._connect(no DNS dependency)
Full unit suite: 232 passed, 12 skipped.
Install
pip install --upgrade ka9q-python
# or, with TUI extras:
pip install --upgrade 'ka9q-python[tui]'