diff --git a/.vscode/tasks.json b/.vscode/tasks.json index df6906d..587d251 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -26,7 +26,10 @@ "USE_GPSD=1", "DStarGateway/dstargateway" ], - "group": "build", + "group": { + "kind": "build", + "isDefault": true + }, "problemMatcher": [] }, { @@ -78,10 +81,7 @@ "USE_GPSD=1", "DGWVoiceTransmit/dgwvoicetransmit" ], - "group": { - "kind": "build", - "isDefault": true - }, + "group": "build", "problemMatcher": [] }, { diff --git a/DStarGateway/DStarGatewayApp.cpp b/DStarGateway/DStarGatewayApp.cpp index 634dd41..328e8fc 100644 --- a/DStarGateway/DStarGatewayApp.cpp +++ b/DStarGateway/DStarGatewayApp.cpp @@ -212,6 +212,34 @@ bool CDStarGatewayApp::createThread() } } + // Setup access control + TAccessControl accessControl; + m_config->getAccessControl(accessControl); + + CCallsignList * whiteList = new CCallsignList(accessControl.whiteList); + if(whiteList->load() && whiteList->getCount() > 0U) { + m_thread->setWhiteList(whiteList); + } + else { + delete whiteList; + } + + CCallsignList * blackList = new CCallsignList(accessControl.blackList); + if(blackList->load() && blackList->getCount() > 0U) { + m_thread->setBlackList(blackList); + } + else { + delete blackList; + } + + CCallsignList * restrictList = new CCallsignList(accessControl.restrictList); + if(restrictList->load() && restrictList->getCount() > 0U) { + m_thread->setRestrictList(restrictList); + } + else { + delete restrictList; + } + // Setup the repeaters bool ddEnabled = false; bool atLeastOneRepeater = false; diff --git a/DStarGateway/DStarGatewayConfig.cpp b/DStarGateway/DStarGatewayConfig.cpp index 77f8086..9fd97c0 100644 --- a/DStarGateway/DStarGatewayConfig.cpp +++ b/DStarGateway/DStarGatewayConfig.cpp @@ -56,6 +56,7 @@ bool CDStarGatewayConfig::load() ret = loadGPSD(cfg) && ret; #endif ret = loadDaemon(cfg) && ret; + ret = loadAccessControl(cfg) && ret; } if(ret) { @@ -350,6 +351,15 @@ bool CDStarGatewayConfig::loadGPSD(const CConfig & cfg) } #endif +bool CDStarGatewayConfig::loadAccessControl(const CConfig & cfg) +{ + bool ret = cfg.getValue("AccessControl", "whiteList", m_accessControl.whiteList, 0U, 2048U, ""); + ret = cfg.getValue("AccessControl", "blackList", m_accessControl.blackList, 0U, 2048U, "") && ret; + ret = cfg.getValue("AccessControl", "restrictList", m_accessControl.restrictList, 0U, 2048U, "") && ret; + + return ret; +} + bool CDStarGatewayConfig::open(CConfig & cfg) { try { @@ -450,4 +460,9 @@ void CDStarGatewayConfig::getGPSD(TGPSD & gpsd) const void CDStarGatewayConfig::getDaemon(TDaemon & gen) const { gen = m_daemon; +} + +void CDStarGatewayConfig::getAccessControl(TAccessControl & accessControl) const +{ + accessControl = m_accessControl; } \ No newline at end of file diff --git a/DStarGateway/DStarGatewayConfig.h b/DStarGateway/DStarGatewayConfig.h index 1bfce6c..b39dd84 100644 --- a/DStarGateway/DStarGatewayConfig.h +++ b/DStarGateway/DStarGatewayConfig.h @@ -134,6 +134,12 @@ typedef struct { } TGPSD; #endif +typedef struct { + std::string whiteList; + std::string blackList; + std::string restrictList; +} TAccessControl; + class CDStarGatewayConfig { public: CDStarGatewayConfig(const std::string &pathname); @@ -157,6 +163,7 @@ public: void getGPSD(TGPSD & gpsd) const; #endif void getDaemon(TDaemon & gen) const; + void getAccessControl(TAccessControl & accessControl) const; private: bool open(CConfig & cfg); @@ -175,6 +182,7 @@ private: bool loadGPSD(const CConfig & cfg); #endif bool loadDaemon(const CConfig & cfg); + bool loadAccessControl(const CConfig & cfg); std::string m_fileName; TGateway m_gateway; @@ -190,6 +198,7 @@ private: TGPSD m_gpsd; #endif TDaemon m_daemon; + TAccessControl m_accessControl; std::vector m_repeaters; std::vector m_ircDDB; diff --git a/DStarGateway/example.cfg b/DStarGateway/example.cfg index f79e4df..5d117bb 100644 --- a/DStarGateway/example.cfg +++ b/DStarGateway/example.cfg @@ -177,7 +177,13 @@ enabled=false port=4242 password=CHANGE_ME # If password is left blank, remote will be disabled regardless of the enabled field -# Provided install routines install the program as a systemd unit. SystemD does not recommand "old-school" forking daemons nor does systemd +# Should only be used with respect to your local regulation! Many countries prohibit setting up private repeaters ! +[AccessControl] +whiteList= # Only affects network +blackList= # Only affects network +restrictList= # Only affects RF, call signs present in this list are now allowed to change reflector or unlink the repeater + +# The Provided install routines install the program as a systemd unit. SystemD does not recommand "old-school" forking daemons nor does systemd # require a pid file. Moreover systemd handles the user under which the program is started. This is provided as convenience for people who might # run the program using sysv or any other old school init system. [Daemon] diff --git a/Makefile b/Makefile index 1ed1c97..ce115f6 100644 --- a/Makefile +++ b/Makefile @@ -79,8 +79,12 @@ VersionInfo/GitVersion.h: FORCE clean: $(MAKE) -C Tests clean $(MAKE) -C APRS clean - $(MAKE) -C Common clean $(MAKE) -C BaseCommon clean + $(MAKE) -C Common clean + $(MAKE) -C DGWRemoteControl clean + $(MAKE) -C DGWTextTransmit clean + $(MAKE) -C DGWTimeServer clean + $(MAKE) -C DGWVoiceTransmit clean $(MAKE) -C DStarBase clean $(MAKE) -C DStarGateway clean $(MAKE) -C IRCDDB clean diff --git a/README.md b/README.md index 03649c1..f300bcf 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,8 @@ the testing framwework used is Google Test. # 5. Version History ## 5.1. Version 0.6 +- [**Improvement**] Add call sign lists ([#22](https://github.com/F4FXL/DStarGateway/issues/22)) +- [**Improvement**] Add a way to override Slow Data in VoiceTransmit ([#23](https://github.com/F4FXL/DStarGateway/issues/23)) - [**Improvement**] Add time server - [**Improvement**] Gracefully exit on SIGINT and SIGTERM ([#21](https://github.com/F4FXL/DStarGateway/issues/21)). DStarGateway can also be run as a "forking" daemon. This might be required for distros still using sysv. Systemd can live without it. - [**Improvement**] Add text transmit utility dgwtexttransmit ([#18](https://github.com/F4FXL/DStarGateway/issues/18))