From fcf72b9b41b63e608dacef637ca1879cd14b0261 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Tue, 10 Mar 2026 20:22:42 +0100 Subject: [PATCH 1/3] replace existing route #64 --- Common/G2Handler.cpp | 49 +++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/Common/G2Handler.cpp b/Common/G2Handler.cpp index 1aaf362..27290e8 100644 --- a/Common/G2Handler.cpp +++ b/Common/G2Handler.cpp @@ -72,11 +72,11 @@ void CG2Handler::setHeaderLogger(CHeaderLogger* logger) m_headerLogger = logger; } -void CG2Handler::process(CHeaderData& header) +void CG2Handler::process(CHeaderData &header) { // Is this a busy reply? unsigned char flag1 = header.getFlag1(); - if (flag1 == 0x01) { + if (flag1 == 0x01) { // Don't check the incoming stream // CLog::logInfo("G2 busy message received")); return; @@ -84,8 +84,8 @@ void CG2Handler::process(CHeaderData& header) #ifdef USE_STARNET // Check to see if this is for StarNet - CStarNetHandler* handler = CStarNetHandler::findStarNet(header); - if (handler != NULL) { + CStarNetHandler *handler = CStarNetHandler::findStarNet(header); + if (handler != NULL){ // Write to Header.log if it's enabled if (m_headerLogger != NULL) m_headerLogger->write("StarNet", header); @@ -101,26 +101,43 @@ void CG2Handler::process(CHeaderData& header) in_addr address = header.getYourAddress(); unsigned int id = header.getId(); - + // Find the destination repeater - CRepeaterHandler* repeater = CRepeaterHandler::findDVRepeater(header.getRptCall2()); + CRepeaterHandler *repeater = CRepeaterHandler::findDVRepeater(header.getRptCall2()); if (repeater == NULL) { CLog::logInfo("Incoming G2 header from %s to unknown repeater - %s", header.getMyCall1().c_str(), header.getRptCall2().c_str()); - return; // Not found, ignore + return; // Not found, ignore } - CG2Handler* route = new CG2Handler(repeater, address, id); + CG2Handler *route = new CG2Handler(repeater, address, id); - for (unsigned int i = 0U; i < m_maxRoutes; i++) { - if (m_routes[i] == NULL) { - m_routes[i] = route; + for (unsigned int i = 0U; i < m_maxRoutes; i++) + { + if (m_routes[i] != NULL) + { + if (m_routes[i]->m_id == id) + { + // This should never happen, but if it does, delete the old route and replace it with the new one + CLog::logInfo("Duplicate G2 route received, replacing existing route"); + + delete m_routes[i]; + m_routes[i] = route; + + repeater->process(header, DIR_INCOMING, AS_G2); + return; + } + } + else { + if (m_routes[i] == NULL) { + m_routes[i] = route; - // Write to Header.log if it's enabled - if (m_headerLogger != NULL) - m_headerLogger->write("G2", header); + // Write to Header.log if it's enabled + if (m_headerLogger != NULL) + m_headerLogger->write("G2", header); - repeater->process(header, DIR_INCOMING, AS_G2); - return; + repeater->process(header, DIR_INCOMING, AS_G2); + return; + } } } From 5b23a1a3ab390511dadfc30acb082bad35a4e202 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 28 Mar 2026 15:05:50 +0100 Subject: [PATCH 2/3] #64 changed logging --- Common/G2Handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/G2Handler.cpp b/Common/G2Handler.cpp index 27290e8..3ba16b3 100644 --- a/Common/G2Handler.cpp +++ b/Common/G2Handler.cpp @@ -118,7 +118,7 @@ void CG2Handler::process(CHeaderData &header) if (m_routes[i]->m_id == id) { // This should never happen, but if it does, delete the old route and replace it with the new one - CLog::logInfo("Duplicate G2 route received, replacing existing route"); + CLog::logDebug("Duplicate G2 route received, replacing existing route"); delete m_routes[i]; m_routes[i] = route; From 0df922b445c04f6a64b9c813b780e8cc8c3c36c0 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 28 Mar 2026 15:14:27 +0100 Subject: [PATCH 3/3] update readme #64 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 413612e..22ee3f4 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ The testing framwework used is Google Test. # 6. Version History ## 6.1. Version 1.0 +- [**Bugfix**] Fix duplicate G2 routes ([#64](https://github.com/F4FXL/DStarGateway/issues/64)) - [**Bugfix**] Fix decoding of DTMF commands with leading 0 ([#61](https://github.com/F4FXL/DStarGateway/issues/61)) - [**Improvement**] Add second French voice ([#60](https://github.com/F4FXL/DStarGateway/issues/60)) - [**Improvement**] Clarify French "Linking to" announcement ([#60](https://github.com/F4FXL/DStarGateway/issues/60))