Skip to content

v3.10.0 — channel-lifetime keep-alive

Choose a tag to compare

@mijahauan mijahauan released this 30 Apr 03:33
· 124 commits to main since this release

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-alive
  • create_channel(..., lifetime=None) — sends LIFETIME on creation when set
  • ensure_channel(..., lifetime=None) — passes through to create_channel; on the reuse path, calls set_channel_lifetime so the value is enforced regardless of prior state
  • tune(..., lifetime=None)LIFETIME is included in the multi-parameter command buffer
  • _decode_status_response() now surfaces incoming LIFETIME as status['lifetime'] and incoming DESCRIPTION as status['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.py to match the current 6-byte wire format
  • Hardened tests/test_native_discovery.py to mock RadiodControl._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]'

PyPI: https://pypi.org/project/ka9q-python/3.10.0/