From bebda6e662b377db98fc93b7c76fa947016e9234 Mon Sep 17 00:00:00 2001 From: Dave Behnke <916775+dbehnke@users.noreply.github.com> Date: Tue, 6 Jan 2026 22:17:00 -0500 Subject: [PATCH 1/3] Harden: Enforce module ID in SetTCParams to prevent transcoder mixing --- reflector/CodecStream.cpp | 2 +- reflector/DVFramePacket.cpp | 5 +++-- reflector/DVFramePacket.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/reflector/CodecStream.cpp b/reflector/CodecStream.cpp index 422d21e..30a1091 100644 --- a/reflector/CodecStream.cpp +++ b/reflector/CodecStream.cpp @@ -246,7 +246,7 @@ void CCodecStream::TxThread(void) { // update important stuff in Frame->m_TCPack for the transcoder // sets the packet counter, stream id, last_packet, module and start the trip timer - Frame->SetTCParams(m_uiTotalPackets++); + Frame->SetTCParams(m_uiTotalPackets++, m_CSModule); // now send to transcoder int fd = g_TCServer.GetFD(Frame->GetCodecPacket()->module); diff --git a/reflector/DVFramePacket.cpp b/reflector/DVFramePacket.cpp index fa1ff78..c1a15c0 100644 --- a/reflector/DVFramePacket.cpp +++ b/reflector/DVFramePacket.cpp @@ -252,10 +252,11 @@ void CDvFramePacket::SetCodecData(const STCPacket *pack) memcpy(&m_TCPack, pack, sizeof(STCPacket)); } -void CDvFramePacket::SetTCParams(uint32_t seq) +void CDvFramePacket::SetTCParams(uint32_t seq, char module) { m_TCPack.sequence = seq; m_TCPack.streamid = m_uiStreamId; m_TCPack.is_last = m_bLastPacket; - m_TCPack.module = m_cModule; + m_TCPack.module = module; + m_cModule = module; } diff --git a/reflector/DVFramePacket.h b/reflector/DVFramePacket.h index 33248cd..5de94f4 100644 --- a/reflector/DVFramePacket.h +++ b/reflector/DVFramePacket.h @@ -84,7 +84,7 @@ class CDvFramePacket : public CPacket // set void SetDvData(const uint8_t *); void SetCodecData(const STCPacket *pack); - void SetTCParams(uint32_t seq); + void SetTCParams(uint32_t seq, char module); // the round-trip timer CTimer m_rtTimer; From 1d26a89a01e4116a7de53fb544affdcb8abcb20a Mon Sep 17 00:00:00 2001 From: Dave Behnke <916775+dbehnke@users.noreply.github.com> Date: Tue, 6 Jan 2026 22:20:33 -0500 Subject: [PATCH 2/3] Fix: Pass module ID to SetTCParams in constructor --- reflector/DVFramePacket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reflector/DVFramePacket.cpp b/reflector/DVFramePacket.cpp index c1a15c0..2fcc26a 100644 --- a/reflector/DVFramePacket.cpp +++ b/reflector/DVFramePacket.cpp @@ -190,7 +190,7 @@ CDvFramePacket::CDvFramePacket(const CBuffer &buf) : CPacket(buf) memcpy(m_TCPack.m17, data+off, sizeof(m_TCPack.m17)); off += sizeof(m_TCPack.m17); memcpy(m_TCPack.p25, data+off, sizeof(m_TCPack.p25)); off += sizeof(m_TCPack.p25); memcpy(m_TCPack.usrp, data+off, sizeof(m_TCPack.usrp)); - SetTCParams(seq); + SetTCParams(seq, m_cModule); } else std::cerr << "CBuffer is too small to initialize a CDvFramePacket" << std::endl; From ac70a91a3715d25e30208e7eb988712bf7b91987 Mon Sep 17 00:00:00 2001 From: Dave Behnke <916775+dbehnke@users.noreply.github.com> Date: Tue, 6 Jan 2026 22:51:03 -0500 Subject: [PATCH 3/3] Harden: Include module ID in recording filenames --- reflector/AudioRecorder.cpp | 4 ++-- reflector/AudioRecorder.h | 2 +- reflector/CodecStream.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reflector/AudioRecorder.cpp b/reflector/AudioRecorder.cpp index f067d8d..a9a8a7e 100644 --- a/reflector/AudioRecorder.cpp +++ b/reflector/AudioRecorder.cpp @@ -37,7 +37,7 @@ void CAudioRecorder::Cleanup() m_PcmBuffer.clear(); } -std::string CAudioRecorder::Start(const std::string& directory) +std::string CAudioRecorder::Start(const std::string& directory, char module) { std::lock_guard lock(m_Mutex); Cleanup(); @@ -61,7 +61,7 @@ std::string CAudioRecorder::Start(const std::string& directory) char uuid_str[37]; uuidv7_to_string(uuid, uuid_str); - m_Filename = "hearing_" + std::string(uuid_str) + ".opus"; + m_Filename = "hearing_Mod" + std::string(1, module) + "_" + std::string(uuid_str) + ".opus"; if (directory.back() == '/') m_FullPath = directory + m_Filename; else diff --git a/reflector/AudioRecorder.h b/reflector/AudioRecorder.h index 7963ce1..748802a 100644 --- a/reflector/AudioRecorder.h +++ b/reflector/AudioRecorder.h @@ -19,7 +19,7 @@ class CAudioRecorder // Generates a UUIDv7 based filename if path is a directory, // or uses the provided path + generated filename. // Returns the filename (without path) for notification. - std::string Start(const std::string& directory); + std::string Start(const std::string& directory, char module); // Writes signed 16-bit PCM samples (8kHz mono) void Write(const int16_t* samples, int count); diff --git a/reflector/CodecStream.cpp b/reflector/CodecStream.cpp index 30a1091..f0aa1f8 100644 --- a/reflector/CodecStream.cpp +++ b/reflector/CodecStream.cpp @@ -88,7 +88,7 @@ void CCodecStream::ResetStats(uint16_t streamid, ECodecType type) if (g_Configure.GetBoolean(g_Keys.audio.enable)) { std::string path = g_Configure.GetString(g_Keys.audio.path); - m_Filename = m_Recorder.Start(path); + m_Filename = m_Recorder.Start(path, m_CSModule); } else {