mirror of
https://github.com/n0mjs710/dmr-talkback.git
synced 2026-11-08 04:19:24 +00:00
Three changes, all driven by the same design conversation. GROUP CALLS ONLY. Private calls to the talkback's radio ID are now ignored. Unit routing draws on a globally administered namespace and is unbounded -- a private call to an unknown ID floods until located -- so reachability-by-ID would require a unique registered radio ID for every instance anyone ever deploys, for something that is neither a radio nor a repeater. BrandMeister can do it because it is the sole authority over its own namespace; these tools assume an internet of independent routers. Talkgroups are operator-scoped and bounded by the operator's own rules, so they cost nobody else anything. Consequence: the radio ID never needs to be reachable, so one ID an operator already owns serves every instance they run. PER-SLOT LANES. The previous version had a single global capture buffer, so two simultaneous callers -- one per timeslot, which the wire delivers routinely -- reset it on every interleaved packet and captured nothing. That is the same defect the 2019 Python playback.py had. Capture and replay are now per timeslot and fully independent. Within a lane, a second stream no longer supersedes unconditionally: first-come-wins unless the current capture has gone quiet, so interleaving can never thrash the buffer. One talkgroup per slot, deliberately: a slot carries one call at a time, so a list would advertise capacity that does not exist. N INSTANCES. One process now runs several independent connections, each with its own radio ID, server, and talkgroups. The purpose is one instance per HBlink3 *system*, so each system gets a private talkback without building a bridge to multiplex everyone into one engine. Bridging into a single instance remains supported. Two instances sharing a radio ID on the same server is rejected at startup. Adds toml_sections() to the vendored reader to discover [instance.<name>] sections, since it has no array-of-tables. Tests: rewrite conformance 566 checks; new test_lanes covers lane isolation, same-lane non-thrash, the ingress gate, and the capture ceiling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>