From 6af8b0150f84b77539421002a9c0f7a99082720a Mon Sep 17 00:00:00 2001 From: Tom Early Date: Fri, 9 Aug 2024 07:39:02 -0700 Subject: [PATCH] fixed crash when no autolink module was specified --- config/urfd.ini | 4 ++-- reflector/Configure.cpp | 16 +++++++--------- reflector/Configure.h | 2 +- reflector/CurlGet.cpp | 2 +- reflector/Main.cpp | 2 +- reflector/NXDNProtocol.cpp | 2 +- reflector/P25Protocol.cpp | 2 +- reflector/Protocols.cpp | 2 +- reflector/Reflector.cpp | 6 +++--- reflector/YSFProtocol.cpp | 2 +- 10 files changed, 19 insertions(+), 21 deletions(-) diff --git a/config/urfd.ini b/config/urfd.ini index 77148a1..07d049e 100644 --- a/config/urfd.ini +++ b/config/urfd.ini @@ -37,7 +37,7 @@ IPv4Binding = 0.0.0.0 # Modules = ABCDEFGHIJKLMNOPQRSTUVWXYZ Modules = ADMSZ # Create Descriptions as needed... -DescriptionA = Transcoded +DescriptionA = All Modes DescriptionD = DMR Chat DescriptionM = M17 Chat DescriptionS = DStar Chat @@ -91,7 +91,7 @@ Port = 10017 [USRP] Enable = false -Callsign = ALLSTAR # set to NONE if you don't want to create this client +Callsign = ALLSTAR IPAddress = 1.2.3.4 # the IP address of the USRP client (the Allstar node) RxPort = 34000 TxPort = 32000 diff --git a/reflector/Configure.cpp b/reflector/Configure.cpp index 75e28d8..445e953 100644 --- a/reflector/Configure.cpp +++ b/reflector/Configure.cpp @@ -819,21 +819,19 @@ bool CConfigure::isDefined(ErrorLevel level, const std::string §ion, const s return false; } -void CConfigure::checkAutoLink(const std::string §ion, const std::string &pname, const std::string &key, bool &rval) +void CConfigure::checkAutoLink(const std::string §ion, const std::string &pname, const std::string &key, bool &rval) const { - if (data.contains(key)) + const auto autolinkModule = GetAutolinkModule(key); + if (' ' != autolinkModule) { auto ismods = data.contains(g_Keys.modules.modules); const auto mods(ismods ? data[g_Keys.modules.modules].get() : ""); - const auto c = data[key].get().at(0); - if (std::string::npos == mods.find(c)) + if (std::string::npos == mods.find(autolinkModule)) { - std::cerr << "ERROR: [" << section << ']' << pname << " module '" << c << "' not a configured module" << std::endl; + std::cerr << "ERROR: [" << section << ']' << pname << " module '" << autolinkModule << "' not a configured module" << std::endl; rval = true; } } - else - data[key] = nullptr; } std::string CConfigure::getDataRefreshType(ERefreshType type) const @@ -865,7 +863,7 @@ void CConfigure::badParam(const std::string &key) const bool CConfigure::checkModules(std::string &m) const { bool rval = false; // return true on error - for(unsigned i=0; i(Callsign, Ip); // aautolink, if enabled - if (m_AutolinkModule) + if (' ' != m_AutolinkModule) newclient->SetReflectorModule(m_AutolinkModule); // and append diff --git a/reflector/P25Protocol.cpp b/reflector/P25Protocol.cpp index c83e33c..0c52204 100644 --- a/reflector/P25Protocol.cpp +++ b/reflector/P25Protocol.cpp @@ -122,7 +122,7 @@ void CP25Protocol::Task(void) auto newclient = std::make_shared(Callsign, Ip); // aautolink, if enabled - if (m_AutolinkModule) + if (' ' != m_AutolinkModule) newclient->SetReflectorModule(m_AutolinkModule); // and append diff --git a/reflector/Protocols.cpp b/reflector/Protocols.cpp index 5109b93..65709fe 100644 --- a/reflector/Protocols.cpp +++ b/reflector/Protocols.cpp @@ -94,7 +94,7 @@ bool CProtocols::Init(void) if (g_Configure.GetBoolean(g_Keys.usrp.enable)) { m_Protocols.emplace_back(std::unique_ptr(new CUSRPProtocol)); - if (! m_Protocols.back()->Initialize("USRP", EProtocol::usrp, uint16_t(g_Configure.GetUnsigned(g_Keys.usrp.rxport)), USRP_IPV4, USRP_IPV6)) + if (! m_Protocols.back()->Initialize("USRP", EProtocol::usrp, uint16_t(g_Configure.GetUnsigned(g_Keys.usrp.rxport)), USRP_IPV4, USRP_IPV6)) return false; } diff --git a/reflector/Reflector.cpp b/reflector/Reflector.cpp index 4861ae8..4c19087 100644 --- a/reflector/Reflector.cpp +++ b/reflector/Reflector.cpp @@ -532,9 +532,9 @@ void CReflector::PutDHTConfig() std::ostringstream ss; ss << g_Version; cfg.version.assign(ss.str()); - cfg.almod[toUType(EUrfdAlMod::nxdn)] = g_Configure.GetString(g_Keys.nxdn.autolinkmod).at(0); - cfg.almod[toUType(EUrfdAlMod::p25)] = g_Configure.GetString(g_Keys.p25.autolinkmod).at(0); - cfg.almod[toUType(EUrfdAlMod::ysf)] = g_Configure.GetString(g_Keys.ysf.autolinkmod).at(0); + cfg.almod[toUType(EUrfdAlMod::nxdn)] = g_Configure.GetAutolinkModule(g_Keys.nxdn.autolinkmod); + cfg.almod[toUType(EUrfdAlMod::p25)] = g_Configure.GetAutolinkModule(g_Keys.p25.autolinkmod); + cfg.almod[toUType(EUrfdAlMod::ysf)] = g_Configure.GetAutolinkModule(g_Keys.ysf.autolinkmod); cfg.ysffreq[toUType(EUrfdTxRx::rx)] = g_Configure.GetUnsigned(g_Keys.ysf.defaultrxfreq); cfg.ysffreq[toUType(EUrfdTxRx::tx)] = g_Configure.GetUnsigned(g_Keys.ysf.defaulttxfreq); cfg.refid[toUType(EUrfdRefId::nxdn)] = g_Configure.GetUnsigned(g_Keys.nxdn.reflectorid); diff --git a/reflector/YSFProtocol.cpp b/reflector/YSFProtocol.cpp index 9439716..a3f6db6 100644 --- a/reflector/YSFProtocol.cpp +++ b/reflector/YSFProtocol.cpp @@ -164,7 +164,7 @@ void CYsfProtocol::Task(void) auto newclient = std::make_shared(Callsign, Ip); // aautolink, if enabled - if (m_AutolinkModule) + if (' ' != m_AutolinkModule) newclient->SetReflectorModule(m_AutolinkModule); // and append