From 8ffe73c5397a2e2391249c4dfaefd653bc46a9e5 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sun, 1 Mar 2026 14:47:54 +0100 Subject: [PATCH] [fix](trx-server): drop CRC-failed APRS frames before sending to clients Guard both the live broadcast (decode_tx.send) and the history store (record_aprs_packet) so CRC-failed packets are never forwarded to connected clients or replayed on reconnect. The decode logger still receives all frames for debugging. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Stan Grams --- src/trx-server/src/audio.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/trx-server/src/audio.rs b/src/trx-server/src/audio.rs index a0bdd2e..5f671cf 100644 --- a/src/trx-server/src/audio.rs +++ b/src/trx-server/src/audio.rs @@ -152,6 +152,9 @@ impl DecoderHistories { } pub fn record_aprs_packet(&self, pkt: AprsPacket) { + if !pkt.crc_ok { + return; + } let mut h = self.aprs.lock().expect("aprs history mutex poisoned"); h.push_back((Instant::now(), pkt)); Self::prune_aprs(&mut h); @@ -773,10 +776,13 @@ pub async fn run_aprs_decoder( was_active = true; for pkt in decoder.process_samples(&mono) { - histories.record_aprs_packet(pkt.clone()); if let Some(logger) = decode_logs.as_ref() { logger.log_aprs(&pkt); } + if !pkt.crc_ok { + continue; + } + histories.record_aprs_packet(pkt.clone()); let _ = decode_tx.send(DecodedMessage::Aprs(pkt)); } }