From 340c322bf98214cf5d207b98e77986ae37b3ebde Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Tue, 17 Sep 2024 20:37:46 +0200 Subject: [PATCH] add own config for Hostsfiles stuff #50 --- BaseCommon/Config.cpp | 2 +- BaseCommon/Config.h | 2 +- DStarGateway/DStarGatewayApp.cpp | 5 ++++- DStarGateway/DStarGatewayConfig.cpp | 26 +++++++++++++++++++++++--- DStarGateway/DStarGatewayConfig.h | 10 +++++++++- DStarGateway/example.cfg | 10 +++++++--- 6 files changed, 45 insertions(+), 10 deletions(-) diff --git a/BaseCommon/Config.cpp b/BaseCommon/Config.cpp index ffe8468..d8a5cba 100644 --- a/BaseCommon/Config.cpp +++ b/BaseCommon/Config.cpp @@ -170,7 +170,7 @@ bool CConfig::getValue(const std::string §ion, const std::string& key, doubl return true; } -bool CConfig::getValue(const std::string §ion, const std::string& key, unsigned int &value, unsigned int min, unsigned int max, int defaultValue) const +bool CConfig::getValue(const std::string §ion, const std::string& key, unsigned int &value, unsigned int min, unsigned int max, unsigned int defaultValue) const { TConfigValue * val = lookupValue(section, key); if(val == nullptr || val->m_value.empty()) { diff --git a/BaseCommon/Config.h b/BaseCommon/Config.h index aabf432..e0a523e 100644 --- a/BaseCommon/Config.h +++ b/BaseCommon/Config.h @@ -99,7 +99,7 @@ public: bool getValue(const std::string §ion, const std::string& key, bool &value, bool defaultValue) const; bool getValue(const std::string §ion, const std::string& key, int &value, int min, int max, int defaultValue) const; bool getValue(const std::string §ion, const std::string& key, double &value, double min, double max, double defaultValue) const; - bool getValue(const std::string §ion, const std::string& key, unsigned int &value, unsigned int min, unsigned int max,int defaultValue) const; + bool getValue(const std::string §ion, const std::string& key, unsigned int &value, unsigned int min, unsigned int max, unsigned int defaultValue) const; bool getValue(const std::string §ion, const std::string& key, unsigned char &value, unsigned char min, unsigned char max,unsigned char defaultValue) const; bool getValue(const std::string §ion, const std::string& key, std::string &value, unsigned int minLen, unsigned int maxLen, const std::string defaultValue) const; bool getValue(const std::string §ion, const std::string& key, std::string &value, const std::string defaultValue, const std::vector& allowedValues) const; diff --git a/DStarGateway/DStarGatewayApp.cpp b/DStarGateway/DStarGatewayApp.cpp index 2df277b..5b3301c 100644 --- a/DStarGateway/DStarGatewayApp.cpp +++ b/DStarGateway/DStarGatewayApp.cpp @@ -347,7 +347,10 @@ bool CDStarGatewayApp::createThread() m_thread->setXLX(xlxConfig.enabled); // Setup hostsfiles - CHostsFilesManager::setHostFilesDirectories(paths.dataDir, paths.customHostsFiles); + THostsFiles hostsFilesConfig; + m_config->getHostsFiles(hostsFilesConfig); + CHostsFilesManager::setHostFilesDirectories(hostsFilesConfig.downloadedHostFiles, hostsFilesConfig.customHostsFiles); + CHostsFilesManager::setDownloadTimeout(3600 * hostsFilesConfig.downloadTimeout); CHostsFilesManager::setDextra(dextraConfig.enabled, dextraConfig.hostfileUrl); CHostsFilesManager::setDCS (dcsConfig.enabled, dcsConfig.hostfileUrl); CHostsFilesManager::setDPlus (dplusConfig.enabled, dplusConfig.hostfileUrl); diff --git a/DStarGateway/DStarGatewayConfig.cpp b/DStarGateway/DStarGatewayConfig.cpp index 2438e87..0833678 100644 --- a/DStarGateway/DStarGatewayConfig.cpp +++ b/DStarGateway/DStarGatewayConfig.cpp @@ -45,6 +45,7 @@ bool CDStarGatewayConfig::load() ret = loadIrcDDB(cfg) && ret; ret = loadRepeaters(cfg) && ret; ret = loadPaths(cfg) && ret; + ret = loadHostsFiles(cfg) && ret; ret = loadLog(cfg) && ret; ret = loadAPRS(cfg) && ret; ret = loadDextra(cfg) && ret; @@ -195,14 +196,28 @@ bool CDStarGatewayConfig::loadLog(const CConfig & cfg) bool CDStarGatewayConfig::loadPaths(const CConfig & cfg) { bool ret = cfg.getValue("paths", "data", m_paths.dataDir, 0, 2048, "/usr/local/share/dstargateway.d/"); - ret = cfg.getValue("customHostfiles", "data", m_paths.customHostsFiles, 0, 2048, "/usr/local/share/dstargateway.d/hostfiles.d/") && ret; if(ret && m_paths.dataDir[m_paths.dataDir.length() - 1] != '/') { m_paths.dataDir.push_back('/'); } - if(ret && m_paths.dataDir[m_paths.customHostsFiles.length() - 1] != '/') { - m_paths.customHostsFiles.push_back('/'); + //TODO 20211226 check if directory are accessible + + return ret; +} + +bool CDStarGatewayConfig::loadHostsFiles(const CConfig & cfg) +{ + bool ret = cfg.getValue("HostsFiles", "downloadedHostsFiles", m_hostsFiles.downloadedHostFiles, 0, 2048, "/usr/local/share/dstargateway.d/"); + ret = cfg.getValue("HostsFiles", "customHostsfiles", m_hostsFiles.customHostsFiles, 0, 2048, "/usr/local/share/dstargateway.d/hostsfiles.d/"); + ret = cfg.getValue("HostsFiles", "downloadTimer", m_hostsFiles.downloadTimeout, 24U, 0xffffffffU, 72U); + + if(ret && m_hostsFiles.downloadedHostFiles[m_hostsFiles.downloadedHostFiles.length() - 1] != '/') { + m_hostsFiles.downloadedHostFiles.push_back('/'); + } + + if(ret && m_hostsFiles.customHostsFiles[m_hostsFiles.customHostsFiles.length() - 1] != '/') { + m_hostsFiles.downloadedHostFiles.push_back('/'); } //TODO 20211226 check if directory are accessible @@ -441,6 +456,11 @@ void CDStarGatewayConfig::getPaths(Tpaths & paths) const paths = m_paths; } +void CDStarGatewayConfig::getHostsFiles(THostsFiles & hostsFiles) const +{ + hostsFiles = m_hostsFiles; +} + void CDStarGatewayConfig::getAPRS(TAPRS & aprs) const { aprs = m_aprs; diff --git a/DStarGateway/DStarGatewayConfig.h b/DStarGateway/DStarGatewayConfig.h index 6a620e5..2d5bf62 100644 --- a/DStarGateway/DStarGatewayConfig.h +++ b/DStarGateway/DStarGatewayConfig.h @@ -80,9 +80,14 @@ typedef struct { typedef struct { std::string dataDir; - std::string customHostsFiles; } Tpaths; +typedef struct { + std::string downloadedHostFiles; + std::string customHostsFiles; + unsigned int downloadTimeout; +} THostsFiles; + typedef struct { std::string logDir; LOG_SEVERITY displayLevel; @@ -160,6 +165,7 @@ public: unsigned int getRepeaterCount() const; void getLog(TLog& log) const; void getPaths(Tpaths & paths) const; + void getHostsFiles(THostsFiles & hostsFiles) const; void getAPRS(TAPRS & aprs) const; void getDExtra(TDextra & dextra) const; void getDPlus(TDplus & dplus) const; @@ -180,6 +186,7 @@ private: bool loadRepeaters(const CConfig & cfg); bool loadLog(const CConfig & cfg); bool loadPaths(const CConfig & cfg); + bool loadHostsFiles(const CConfig & cfg); bool loadAPRS(const CConfig & cfg); bool loadDextra(const CConfig & cfg); bool loadDPlus(const CConfig & cfg); @@ -196,6 +203,7 @@ private: std::string m_fileName; TGateway m_gateway; Tpaths m_paths; + THostsFiles m_hostsFiles; TAPRS m_aprs; TDextra m_dextra; TDplus m_dplus; diff --git a/DStarGateway/example.cfg b/DStarGateway/example.cfg index 23ae692..e385857 100644 --- a/DStarGateway/example.cfg +++ b/DStarGateway/example.cfg @@ -155,10 +155,14 @@ displayLevel= # defaults to info, valid values are trace, debug, info, warning repeatThreshold=#defaults to 2, valid values are disbaled and 1 to 10. Prevents flooding of logs from repeated log messages. [Paths] -data=/usr/local/share/dstargateway.d/ # Path where the data (auto downbloaded hostfiles, audio files etc) can be found -customHostfiles=/usr/local/share/dstargateway.d/hostfiles.d/ # Place your custom host files in this directory, this dir must be different from datadir. - # Any hosts found here will override same host in downloaded files +data=/usr/local/share/dstargateway.d/ # Path where the data (audio files etc) can be found +[HostsFiles] +downloadedHostsFiles=/usr/local/share/dstargateway.d/ # Path where the downloaded host files are stored, make sure user dstar has write access +downloadTimer= # Redownload host files every X hours, must be greater than 24 hours. Defaults to 72 hours +customHostsfiles=/usr/local/share/dstargateway.d/hostfiles.d/ # Place your custom host files in this directory, this dir must be different from datadir. + # Any hosts found here will override same host in downloaded files + [DExtra] enabled=true # There is no reason to disable this maxDongles=5