You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ADN-DMR-Peer-Server/CHANGELOG.md

22 KiB

Changelog

All notable changes to adn-server are documented here.

v2.5.6 (2026-09-19)

Bug Fixes

  • Write alias downloads atomically and validate checksum before persisting (aad30ba)

v2.5.5 (2026-09-18)

Bug Fixes

  • Retry alias JSON downloads on a short poll instead of waiting a full STALE_DAYS cycle (f6cc0fe)

v2.5.4 (2026-08-19)

Bug Fixes

  • Keep hotspots connected when the security server is unreachable (49114fe)

  • Stop unit calls to 4000 from being broadcast to every peer (62225c9)

v2.5.3 (2026-07-31)

Bug Fixes

  • Deliver a hotspot's own group call back to its other slot when subscribed there too (#67, c788382)

  • Deliver TG on both slots when static on one, dynamic on the other (#66, 6c28754)

  • Dual-slot delivery for mixed static+dynamic TG subscriptions (#66, 6c28754)

  • Strip NUL-padded CALLSIGN instead of showing raw bytes (#66, 6c28754)

v2.5.2 (2026-07-28)

Bug Fixes

  • Deliver a group call on both slots when a peer has the TG on TS1+TS2 (4360efa)

v2.5.1 (2026-07-25)

Bug Fixes

  • Target private calls to the known hotspot instead of broadcasting (11970e0)

v2.5.0 (2026-07-23)

Bug Fixes

  • Don't attribute synthetic announcement PTT to a real connected peer (99b6f8d)

  • Log silent dynamic TG activation once per peer and TG (278b10e)

Features

  • Add HP3ICC acknowledgments to README (4bf378f)

v2.4.3 (2026-07-22)

Bug Fixes

  • Forward OBP group voice to an HBP target only once per TG (6a66010)

v2.4.2 (2026-07-22)

Bug Fixes

  • Default TALKER_ALIAS_SEND_DMRA off for legacy wire parity (169467e)

v2.4.1 (2026-07-21)

Bug Fixes

  • Accept NUL-padded RPTC callsigns in login check (#52, 5f2f69d)

  • Accept NUL-padded RPTC/RPTO from ipsc2hbp (#52, 5f2f69d)

  • Deliver one DMRD when TG is on both OPTIONS slots (#53, 7ff3010)

  • Strip NUL padding from monitor export and shared HBP fields (#52, 5f2f69d)

  • Strip NUL padding from RPTO OPTIONS in logs and storage (#52, 5f2f69d)

v2.4.0 (2026-07-15)

Bug Fixes

  • OBP_PROXY fan-in for centralized OpenBridge ingress (770523c)

Features

  • Publish OBP keepalive connected status in dashboard_state (b27c166)

v2.3.3 (2026-07-13)

Bug Fixes

  • Gate OBP source ensure when bridge source is already active (e140822)

v2.3.2 (2026-07-13)

Bug Fixes

  • Inject scheduled voice via routing and restore monitor TX events (62f429a)

v2.3.1 (2026-07-13)

Bug Fixes

  • Stop premature OBP monitor voice END events (cc4031a)

v2.3.0 (2026-07-10)

Chores

  • Fix import order in voice subscription plan test (#40, c3b1c1c)

Features

  • Poll peer_dynamic_tgs.need_reload for dynamic TG purge (#40, c3b1c1c)

v2.2.6 (2026-07-10)

Bug Fixes

  • Block OBP during server announcements on inject-only masters (cae5d57)

v2.2.5 (2026-07-10)

Bug Fixes

  • Add ReportWire contract tests against report-v2 schema (#36, c15430a)

  • Add tests/fakes shim for application test decoupling (#36, c15430a)

  • Align OPTIONS static validity checks across routing and report (#36, c15430a)

  • Audit items 11-13 coverage, infra tests, and warning logs (#36, c15430a)

  • Audit refactors, report contract, and concurrent OBP downlink (#36, c15430a)

  • Audit wave 1 server hygiene refactors (#36, c15430a)

  • Document dashboard_state in report-v2 schema (#36, c15430a)

  • OBP DMRE source-server validation without ALLOW_UNREG_ID bypass (#36, c15430a)

  • Per-stream OBP bridge TX legs for concurrent MASTER downlink (#36, c15430a)

  • Ruff lint in OBP concurrent streams downlink test (#36, c15430a)

v2.2.4 (2026-07-09)

Bug Fixes

  • Duplicate-safe TA embed phase and REPEAT VHEAD DMRA (B) (#34, 1567314)

  • Exclude byte-identical duplicates from HBP rate counter (A.2) (#34, 1567314)

  • Production ingress mitigations (UDP rcvbuf, rate limiter, TA embed) (#34, 1567314)

  • Raise UDP SO_RCVBUF on voice listeners (C-LOCAL) (#34, 1567314)

Chores

  • Document echo point-to-point and logged_in reconciliation (EN/ES) (#34, 1567314)

v2.2.3 (2026-07-04)

Bug Fixes

  • Echo TG 9990 isolation for multi-peer inject proxy (#32, 8698359)

v2.2.2 (2026-07-02)

Bug Fixes

  • Correct broken hotspot-proxy anchor link in special-numbers (EN) (2ec900b)

  • Reconcile logged_in against connected peers every 120s (ab63a8c)

Chores

  • Document OPTIONS line behaviour and self-service dashboard login (EN/ES) (81cf74d)

v2.2.1 (2026-07-01)

Bug Fixes

  • Add shared PASS= redaction for OPTIONS log lines (#28, 9de26ea)

  • Elevate proxy attach rejection to WARNING for RPTC/RPTO (#28, 9de26ea)

  • Fetch DB options when hotspot sends no RPTO after RPTC (#28, 9de26ea)

  • Remove noisy CALL RX log on OBP DMRE voice header (#28, 9de26ea)

  • Rework self-service RPTO to distinguish PASS, empty, and OPTIONS (#28, 9de26ea)

  • Self-service RPTO handling, PASS redaction, and proxy log cleanup (#28, 9de26ea)

v2.1.1 (2026-06-22)

Bug Fixes

  • Block downlink DMRD to busy hotspot RF slot per peer (ecca56f)

v2.1.0 (2026-06-22)

Bug Fixes

  • Allow same static TG on TS1 and TS2 for duplex routing (e7d3dab)

  • Inject-only contention, dynamic TG restore, and UA timer parity (#24, c5cbdb2)

  • Inject-only slot contention, monitor events, and UA timer display (#24, c5cbdb2)

  • Reject malformed peer OPTIONS for monitor and downlink (08c648f)

  • Slot contention, simplex RF mode, and static TG dedup (1931682)

Documentation

  • Document simplex downlink TS2 choice (MMDVMHost DMO parity) (49a9605)

Features

  • Dynamic TG restore, OBP cross-slot downlink, and DB migration 005 (#24, c5cbdb2)

v2.0.6 (2026-06-22)

Bug Fixes

  • Tear down REPEAT and bridge TX per stream on concurrent duplex slots (#19, de05504)

Chores

  • ci: Require merge-commit release PRs for develop ff sync (#21, 374cc68)

v2.0.5 (2026-06-21)

Bug Fixes

  • Cross-slot DMRD remap and monitor TE slot (#18, 5945d66)

  • Remap REPEAT DMRD slot to peer OPTIONS for cross-slot downlink (#18, 5945d66)

  • Restore cross-slot downlink and REPEAT monitor activity (#18, 5945d66)

Chores

  • ci: Sync develop via merge instead of force-push (#18, 5945d66)

v2.0.4 (2026-06-21)

Bug Fixes

  • Cross-slot downlink and REPEAT monitor activity (f561b26)

Chores

  • ci: Sync develop via merge after release (e05dc00)

v2.0.3 (2026-06-21)

Bug Fixes

  • ci: Force-with-lease when syncing develop after release (#13, 5fad3b5)

v2.0.2 (2026-06-21)

Bug Fixes

  • Keep YAML SINGLE_MODE on multi-peer masters for dynamic TGs (#12, 47c7e33)

  • SINGLE=0 multi-dynamic TGs and YAML SINGLE_MODE defaults (#12, 47c7e33)

Chores

  • Run releases on master only, not develop (#12, 47c7e33)

v2.0.1 (2026-06-20)

Bug Fixes

  • Filter standalone DMRA downlink by TG subscription (#10, 0dcdf54)

Chores

  • Run releases on master only, not develop (#10, 0dcdf54)

v2.0.0 (2026-06-19)

Chores

  • Add release workflow and semver versioning (semver from 2.0.0; no RC phase) (013b766)

[2.0.0-rc.4] - 2026-06-18

Added

  • Docs (MkDocs EN/ES): bridges vs subscriptions, performance notes, report-proxy guide for legacy dashboards, Mermaid diagrams in architecture/monitoring pages.

Fixed

  • Echo TG 9990 — excluded from SINGLE/UA session locks; inject-only monitor remap for echo TX legs; bridge TX report field 5 resolves hotspot radio id for ECHO/hotspot live chips.
  • Dynamic TG restore — sync_restored_dynamic_tgs passes now= as keyword (fixes TypeError on echo startup after DB restore).

Compatibility

  • Monitor: adn-monitor 2.0.0-rc.5.

[2.0.0-rc.3] - 2026-06-17

Added

  • Dynamic TG persistence — per-peer user-activated TGs stored in MariaDB (peer_dynamic_tgs); restored on hotspot reconnect (RPTC); shared DATABASE block with proxy self-service.
  • Server-owned migration — ensures peer_dynamic_tgs table on startup (idempotent, same schema as adn-monitor 004).

Fixed

  • TG 4000 — clears all peer dynamic slots (memory + DB); emits INGRESS BRDG_EVENT so monitor SINGLE=0 chips clear without stuck TX; TG 4000 is never stored as a UA session.

Compatibility

  • Monitor: adn-monitor 2.0.0-rc.4.

[2.0.0-rc.2] - 2026-06-16

Fixed

  • Cross-slot static TG downlink (legacy REPEAT parity): inject-only MASTER delivers group voice to hotspots when the TG is listed in TS1 or TS2 OPTIONS, regardless of incoming wire timeslot. Wire slot is unchanged; downlink index and peer_should_receive_group_voice match both OPTIONS lists.

Compatibility

  • Monitor: adn-monitor 2.0.0-rc.2 (TS chip maps OPTIONS static slot on receive).

[2.0.0-rc.1] - 2026-06-12

First v2 release candidate since 1.0.0 (~70 commits). HBP/OpenBridge on-wire behaviour preserved.

Added

  • Report v2 — JSON HELLO, slim dashboard_state TCP wire (no full topology/routing snapshots to monitor), bounded report queue, optional MQTT.
  • Unified binary — adn-server.py with --echo, --doctor, --no-proxy; wiring in bootstrap/peer_server.py.
  • Integrated proxy — in-process UDP fan-in (PROXY), inject-only MASTER, self-service MySQL OPTIONS, peer blacklist/timers parity with legacy proxy.
  • Subscription routing — SubscriptionStore + SubscriptionRouter as runtime authority; store-native timers, OPTIONS/static TG, in-band ON/OFF; MeshCodecRegistry on OpenBridge.
  • Inject-only production path — per-peer OPTIONS downlink filter, monitor topology expansion (virtual SYSTEM slots), CONFIG push on peer connect.
  • Performance — O(1) BRIDGES source index; peer downlink index for inject fan-out; adaptive CONFIG_SND debounce on mass login.

Changed

  • Architecture — bridge_use_cases split into routing_use_cases + mixins; RuntimeContext and atomic SIGHUP reload; DMR codecs vendored to domain/dmr/; mesh codecs extracted from udp_hbp.
  • OPTIONS / static TG — event-driven refresh (RPTO, startup, reload, dmrd fallback) instead of 26 s periodic loop.
  • Talker Alias — embed on local REPEAT; passthrough and dedupe fixes on relay path.

Fixed

  • OpenBridge packet control and rate-limit parity with legacy.
  • Echo playback when sequence byte wraps; echo TG 9990 bootstrap.
  • Inject TG 4000: clear dynamics once per PTT per peer.
  • Unit data (ARS/LRRP) downlink for 7-digit private calls; monitor TS chip (no spurious PRIVATE VOICE on unit data).
  • OBP → HBP voice forwarding and downlink CPU under multi-peer inject load.

Removed

  • Standalone adn-parrot.py — use adn-server.py --echo.
  • Periodic 26 s options_config_loop.
  • Legacy pickle CONFIG/BRIDGE snapshots on the server → monitor wire (monitor uses v2 slim ingest).

Compatibility

  • Monitor: adn-monitor 2.0.0-rc.1 (report v2 slim wire, HELLO JSON).
  • Wire: HBP and OpenBridge on-wire formats unchanged vs legacy ADN DMR Server.
  • Config: same adn-server.yaml shape; add optional PROXY / SELF_SERVICE / REPORTS.MQTT sections.

1.0.0 - 2026-06-06

First stable public release.

Added

  • Clean-architecture rewrite: domain, application, infrastructure layers.
  • YAML configuration (adn-server.yaml) with startup validation.
  • HBP MASTER/PEER and OpenBridge forwarding with legacy parity (loops, BCSQ, packet control).
  • Talker Alias: DMRA packets and embedded LC overlay (UTF-8 / ISO-8859-1 / 7-bit formats).
  • Voice: announcements, TTS pipeline, on-demand AMBE playback, recording.
  • Echo playback entrypoint (adn-server.py --echo, adn-echo.yaml) for TG 9990.
  • Monitor report TCP: HELLO JSON (mode v2), CONFIG_SND / BRIDGE_SND (pickle), BRDG_EVENT.
  • Hot reload: adn-server.yaml (SIGHUP), adn-voice.yaml (15 s loop), log reopen (SIGUSR2).
  • MkDocs user guide (EN/ES).

Fixed (highlights since parity baseline)

  • OpenBridge packet control and ingress timing.
  • Echo playback sequence preservation on long QSOs.
  • Config validator accepts numeric MMDVM option fields in YAML.
  • OBP END/TX reporting and STATUS lifecycle alignment with legacy.

Compatibility

  • Monitor: adn-monitor 1.0.0 (HELLO v2 + legacy pickle report).
  • Config: use adn-server.example.yaml as template; production YAML is not committed.
  • Wire: HBP and OpenBridge on-wire formats unchanged vs legacy ADN DMR Server.

Powered by TurnKey Linux.