From e57b43377cb3006f8619d8bec5faf5e7109f5410 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 19 Mar 2025 17:49:49 +0000 Subject: [PATCH] Update the C++ version. --- DGIdGateway/APRSWriter.cpp | 12 +- DGIdGateway/CRC.cpp | 8 +- DGIdGateway/Conf.cpp | 82 +++++++------- DGIdGateway/DGIdGateway.cpp | 68 ++++++------ DGIdGateway/DGIdNetwork.cpp | 9 +- DGIdGateway/DGIdNetwork.h | 13 ++- DGIdGateway/FCSNetwork.cpp | 44 ++++---- DGIdGateway/GPS.cpp | 8 +- DGIdGateway/Golay24128.cpp | 4 +- DGIdGateway/IMRSNetwork.cpp | 44 ++++---- DGIdGateway/IMRSNetwork.h | 6 +- DGIdGateway/Log.cpp | 22 ++-- DGIdGateway/RingBuffer.h | 6 +- DGIdGateway/StopWatch.cpp | 4 +- DGIdGateway/Sync.cpp | 4 +- DGIdGateway/Thread.cpp | 14 +-- DGIdGateway/UDPSocket.cpp | 12 +- DGIdGateway/UDPSocket.h | 10 +- DGIdGateway/Utils.cpp | 18 +-- DGIdGateway/Version.h | 4 +- DGIdGateway/YSFConvolution.cpp | 20 ++-- DGIdGateway/YSFFICH.cpp | 10 +- DGIdGateway/YSFNetwork.cpp | 48 ++++---- DGIdGateway/YSFPayload.cpp | 62 +++++------ DGIdGateway/YSFReflectors.cpp | 24 ++-- YSFGateway/APRSWriter.cpp | 12 +- YSFGateway/CRC.cpp | 8 +- YSFGateway/Conf.cpp | 76 ++++++------- YSFGateway/DTMF.cpp | 28 ++--- YSFGateway/FCSNetwork.cpp | 40 +++---- YSFGateway/FCSNetwork.h | 8 +- YSFGateway/GPS.cpp | 8 +- YSFGateway/Golay24128.cpp | 4 +- YSFGateway/Log.cpp | 22 ++-- YSFGateway/RingBuffer.h | 6 +- YSFGateway/StopWatch.cpp | 4 +- YSFGateway/Sync.cpp | 4 +- YSFGateway/Thread.cpp | 14 +-- YSFGateway/UDPSocket.cpp | 12 +- YSFGateway/UDPSocket.h | 10 +- YSFGateway/Utils.cpp | 18 +-- YSFGateway/Version.h | 4 +- YSFGateway/WiresX.cpp | 114 +++++++++---------- YSFGateway/WiresX.h | 32 +++--- YSFGateway/YSFConvolution.cpp | 20 ++-- YSFGateway/YSFFICH.cpp | 10 +- YSFGateway/YSFGateway.cpp | 196 ++++++++++++++++----------------- YSFGateway/YSFGateway.h | 10 +- YSFGateway/YSFNetwork.cpp | 18 +-- YSFGateway/YSFPayload.cpp | 30 ++--- YSFGateway/YSFReflectors.cpp | 38 +++---- YSFGateway/YSFReflectors.h | 10 +- YSFParrot/Network.cpp | 4 +- YSFParrot/Parrot.cpp | 8 +- YSFParrot/StopWatch.cpp | 4 +- YSFParrot/Thread.cpp | 12 +- YSFParrot/UDPSocket.cpp | 12 +- YSFParrot/UDPSocket.h | 10 +- YSFParrot/Version.h | 4 +- 59 files changed, 687 insertions(+), 679 deletions(-) diff --git a/DGIdGateway/APRSWriter.cpp b/DGIdGateway/APRSWriter.cpp index 84519a9..3b18505 100644 --- a/DGIdGateway/APRSWriter.cpp +++ b/DGIdGateway/APRSWriter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2010-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -106,7 +106,7 @@ bool CAPRSWriter::open() return false; } - ::gps_stream(&m_gpsdData, WATCH_ENABLE | WATCH_JSON, NULL); + ::gps_stream(&m_gpsdData, WATCH_ENABLE | WATCH_JSON, nullptr); LogMessage("Connected to GPSD"); } @@ -125,8 +125,8 @@ bool CAPRSWriter::open() void CAPRSWriter::write(const unsigned char* source, const char* type, unsigned char radio, float fLatitude, float fLongitude) { - assert(source != NULL); - assert(type != NULL); + assert(source != nullptr); + assert(type != nullptr); char callsign[15U]; ::memcpy(callsign, source, YSF_CALLSIGN_LENGTH); @@ -219,7 +219,7 @@ void CAPRSWriter::close() #if defined(USE_GPSD) if (m_gpsdEnabled) { - ::gps_stream(&m_gpsdData, WATCH_DISABLE, NULL); + ::gps_stream(&m_gpsdData, WATCH_DISABLE, nullptr); ::gps_close(&m_gpsdData); } #endif @@ -300,7 +300,7 @@ void CAPRSWriter::sendIdFrameMobile() return; #if GPSD_API_MAJOR_VERSION >= 7 - if (::gps_read(&m_gpsdData, NULL, 0) <= 0) + if (::gps_read(&m_gpsdData, nullptr, 0) <= 0) return; #else if (::gps_read(&m_gpsdData) <= 0) diff --git a/DGIdGateway/CRC.cpp b/DGIdGateway/CRC.cpp index f2c3cbc..d916798 100644 --- a/DGIdGateway/CRC.cpp +++ b/DGIdGateway/CRC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ const uint16_t CCITT16_TABLE2[] = { void CCRC::addCCITT16(unsigned char *in, unsigned int length) { - assert(in != NULL); + assert(in != nullptr); assert(length > 2U); union { @@ -84,7 +84,7 @@ void CCRC::addCCITT16(unsigned char *in, unsigned int length) bool CCRC::checkCCITT16(const unsigned char *in, unsigned int length) { - assert(in != NULL); + assert(in != nullptr); assert(length > 2U); union { @@ -104,7 +104,7 @@ bool CCRC::checkCCITT16(const unsigned char *in, unsigned int length) unsigned char CCRC::addCRC(const unsigned char* in, unsigned int length) { - assert(in != NULL); + assert(in != nullptr); unsigned char crc = 0U; diff --git a/DGIdGateway/Conf.cpp b/DGIdGateway/Conf.cpp index 6a6df9d..312156d 100644 --- a/DGIdGateway/Conf.cpp +++ b/DGIdGateway/Conf.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,17 +27,17 @@ const int BUFFER_SIZE = 500; -enum SECTION { - SECTION_NONE, - SECTION_GENERAL, - SECTION_INFO, - SECTION_LOG, - SECTION_APRS, - SECTION_YSF_NETWORK, - SECTION_FCS_NETWORK, - SECTION_IMRS_NETWORK, - SECTION_DGID, - SECTION_GPSD +enum class SECTION { + NONE, + GENERAL, + INFO, + LOG, + APRS, + YSF_NETWORK, + FCS_NETWORK, + IMRS_NETWORK, + DGID, + GPSD }; CConf::CConf(const std::string& file) : @@ -96,54 +96,54 @@ CConf::~CConf() bool CConf::read() { FILE* fp = ::fopen(m_file.c_str(), "rt"); - if (fp == NULL) { + if (fp == nullptr) { ::fprintf(stderr, "Couldn't open the .ini file - %s\n", m_file.c_str()); return false; } - SECTION section = SECTION_NONE; + SECTION section = SECTION::NONE; - DGIdData* dgIdData = NULL; + DGIdData* dgIdData = nullptr; char buffer[BUFFER_SIZE]; - while (::fgets(buffer, BUFFER_SIZE, fp) != NULL) { + while (::fgets(buffer, BUFFER_SIZE, fp) != nullptr) { if (buffer[0U] == '#') continue; if (buffer[0U] == '[') { if (::strncmp(buffer, "[General]", 9U) == 0) - section = SECTION_GENERAL; + section = SECTION::GENERAL; else if (::strncmp(buffer, "[Info]", 6U) == 0) - section = SECTION_INFO; + section = SECTION::INFO; else if (::strncmp(buffer, "[Log]", 5U) == 0) - section = SECTION_LOG; + section = SECTION::LOG; else if (::strncmp(buffer, "[APRS]", 6U) == 0) - section = SECTION_APRS; + section = SECTION::APRS; else if (::strncmp(buffer, "[YSF Network]", 13U) == 0) - section = SECTION_YSF_NETWORK; + section = SECTION::YSF_NETWORK; else if (::strncmp(buffer, "[FCS Network]", 13U) == 0) - section = SECTION_FCS_NETWORK; + section = SECTION::FCS_NETWORK; else if (::strncmp(buffer, "[IMRS Network]", 14U) == 0) - section = SECTION_IMRS_NETWORK; + section = SECTION::IMRS_NETWORK; else if (::strncmp(buffer, "[DGId=", 6U) == 0) { - section = SECTION_DGID; + section = SECTION::DGID; dgIdData = new DGIdData; dgIdData->m_dgId = (unsigned int)::atoi(buffer + 6U); m_dgIdData.push_back(dgIdData); } else if (::strncmp(buffer, "[GPSD]", 6U) == 0) - section = SECTION_GPSD; + section = SECTION::GPSD; else - section = SECTION_NONE; + section = SECTION::NONE; continue; } char* key = ::strtok(buffer, " \t=\r\n"); - if (key == NULL) + if (key == nullptr) continue; - char* value = ::strtok(NULL, "\r\n"); - if (value == NULL) + char* value = ::strtok(nullptr, "\r\n"); + if (value == nullptr) continue; // Remove quotes from the value @@ -155,7 +155,7 @@ bool CConf::read() char *p; // if value is not quoted, remove after # (to make comment) - if ((p = strchr(value, '#')) != NULL) + if ((p = strchr(value, '#')) != nullptr) *p = '\0'; // remove trailing tab/space @@ -163,7 +163,7 @@ bool CConf::read() *p = '\0'; } - if (section == SECTION_GENERAL) { + if (section == SECTION::GENERAL) { if (::strcmp(key, "Callsign") == 0) { // Convert the callsign to upper case for (unsigned int i = 0U; value[i] != 0; i++) @@ -194,7 +194,7 @@ bool CConf::read() m_debug = ::atoi(value) == 1; else if (::strcmp(key, "Daemon") == 0) m_daemon = ::atoi(value) == 1; - } else if (section == SECTION_INFO) { + } else if (section == SECTION::INFO) { if (::strcmp(key, "TXFrequency") == 0) m_txFrequency = (unsigned int)::atoi(value); else if (::strcmp(key, "RXFrequency") == 0) @@ -209,7 +209,7 @@ bool CConf::read() m_height = ::atoi(value); else if (::strcmp(key, "Description") == 0) m_description = value; - } else if (section == SECTION_LOG) { + } else if (section == SECTION::LOG) { if (::strcmp(key, "FilePath") == 0) m_logFilePath = value; else if (::strcmp(key, "FileRoot") == 0) @@ -220,7 +220,7 @@ bool CConf::read() m_logDisplayLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "FileRotate") == 0) m_logFileRotate = ::atoi(value) == 1; - } else if (section == SECTION_APRS) { + } else if (section == SECTION::APRS) { if (::strcmp(key, "Enable") == 0) m_aprsEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Address") == 0) @@ -233,7 +233,7 @@ bool CConf::read() m_aprsDescription = value; else if (::strcmp(key, "Symbol") == 0) m_aprsSymbol = value; - } else if (section == SECTION_YSF_NETWORK) { + } else if (section == SECTION::YSF_NETWORK) { if (::strcmp(key, "Hosts") == 0) m_ysfNetHosts = value; else if (::strcmp(key, "RFHangTime") == 0) @@ -242,22 +242,22 @@ bool CConf::read() m_ysfNetHangTime = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_ysfNetDebug = ::atoi(value) == 1; - } else if (section == SECTION_FCS_NETWORK) { + } else if (section == SECTION::FCS_NETWORK) { if (::strcmp(key, "RFHangTime") == 0) m_fcsRFHangTime = (unsigned int)::atoi(value); else if (::strcmp(key, "NetHangTime") == 0) m_fcsNetHangTime = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_fcsNetDebug = ::atoi(value) == 1; - } else if (section == SECTION_IMRS_NETWORK) { + } else if (section == SECTION::IMRS_NETWORK) { if (::strcmp(key, "RFHangTime") == 0) m_imrsRFHangTime = (unsigned int)::atoi(value); else if (::strcmp(key, "NetHangTime") == 0) m_imrsNetHangTime = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_imrsNetDebug = ::atoi(value) == 1; - } else if (section == SECTION_DGID) { - assert(dgIdData != NULL); + } else if (section == SECTION::DGID) { + assert(dgIdData != nullptr); if (::strcmp(key, "Type") == 0) { dgIdData->m_type = value; dgIdData->m_static = false; @@ -296,14 +296,14 @@ bool CConf::read() dgIdData->m_netDGId = (unsigned int)::atoi(value); else if (::strcmp(key, "Destination") == 0) { char* p1 = ::strtok(value, ","); - char* p2 = ::strtok(NULL, "\r\n"); + char* p2 = ::strtok(nullptr, "\r\n"); IMRSDestination* dest = new IMRSDestination; dest->m_dgId = (unsigned int)::atoi(p1); dest->m_address = p2; dgIdData->m_destinations.push_back(dest); } else if (::strcmp(key, "Debug") == 0) dgIdData->m_debug = ::atoi(value) == 1; - } else if (section == SECTION_GPSD) { + } else if (section == SECTION::GPSD) { if (::strcmp(key, "Enable") == 0) m_gpsdEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Address") == 0) diff --git a/DGIdGateway/DGIdGateway.cpp b/DGIdGateway/DGIdGateway.cpp index 5a023e2..68ab579 100644 --- a/DGIdGateway/DGIdGateway.cpp +++ b/DGIdGateway/DGIdGateway.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016-2020,2024 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -134,8 +134,8 @@ CDGIdGateway::CDGIdGateway(const std::string& configFile) : m_callsign(), m_suffix(), m_conf(configFile), -m_writer(NULL), -m_gps(NULL) +m_writer(nullptr), +m_gps(nullptr) { CUDPSocket::startup(); } @@ -183,7 +183,7 @@ int CDGIdGateway::run() // If we are currently root... if (getuid() == 0) { struct passwd* user = ::getpwnam("mmdvm"); - if (user == NULL) { + if (user == nullptr) { ::fprintf(stderr, "Could not get the mmdvm user, exiting\n"); return -1; } @@ -260,7 +260,7 @@ int CDGIdGateway::run() ret = imrs->open(); if (!ret) { delete imrs; - imrs = NULL; + imrs = nullptr; } unsigned int currentDGId = UNSET_DGID; @@ -268,7 +268,7 @@ int CDGIdGateway::run() CDGIdNetwork* dgIdNetwork[100U]; for (unsigned int i = 0U; i < 100U; i++) - dgIdNetwork[i] = NULL; + dgIdNetwork[i] = nullptr; std::vector dgIdData = m_conf.getDGIdData(); for (std::vector::const_iterator it = dgIdData.begin(); it != dgIdData.end(); ++it) { @@ -302,7 +302,7 @@ int CDGIdGateway::run() unsigned int local = (*it)->m_local; CYSFReflector* reflector = reflectors->findByName(name); - if (reflector != NULL) { + if (reflector != nullptr) { dgIdNetwork[dgid] = new CYSFNetwork(local, reflector->m_name, reflector->m_addr, reflector->m_addrLen, m_callsign, statc, debug); dgIdNetwork[dgid]->m_modes = DT_VD_MODE1 | DT_VD_MODE2 | DT_VOICE_FR_MODE | DT_DATA_FR_MODE; dgIdNetwork[dgid]->m_static = statc; @@ -314,7 +314,7 @@ int CDGIdGateway::run() LogWarning("Unknown YSF reflector: %s", name.c_str()); } } else if (type == "IMRS") { - if (imrs != NULL) { + if (imrs != nullptr) { std::vector destinations = (*it)->m_destinations; std::vector dests; std::string name = (*it)->m_name; @@ -425,12 +425,12 @@ int CDGIdGateway::run() } } - if (dgIdNetwork[dgid] != NULL && dgIdNetwork[dgid] != imrs) { + if (dgIdNetwork[dgid] != nullptr && dgIdNetwork[dgid] != imrs) { bool ret = dgIdNetwork[dgid]->open(); if (!ret) { LogWarning("\tUnable to open connection"); delete dgIdNetwork[dgid]; - dgIdNetwork[dgid] = NULL; + dgIdNetwork[dgid] = nullptr; } else if (dgIdNetwork[dgid]->m_static) { LogMessage("\tLinking at startup"); dgIdNetwork[dgid]->link(); @@ -451,7 +451,7 @@ int CDGIdGateway::run() LogMessage("DGIdGateway-%s is starting", VERSION); LogMessage("Built %s %s (GitID #%.7s)", __TIME__, __DATE__, gitversion); - DGID_STATUS state = DS_NOTLINKED; + DGID_STATUS state = DGID_STATUS::NOTLINKED; unsigned int nPips = 0U; while (!m_killed) { @@ -468,29 +468,29 @@ int CDGIdGateway::run() dgId = 0U; if (currentDGId == UNSET_DGID) { - if (dgIdNetwork[dgId] != NULL && !dgIdNetwork[dgId]->m_static) { + if (dgIdNetwork[dgId] != nullptr && !dgIdNetwork[dgId]->m_static) { dgIdNetwork[dgId]->link(); dgIdNetwork[dgId]->link(); dgIdNetwork[dgId]->link(); } - if (dgIdNetwork[dgId] != NULL) { + if (dgIdNetwork[dgId] != nullptr) { std::string desc = dgIdNetwork[dgId]->getDesc(dgId); LogMessage("DG-ID set to %u (%s) via RF", dgId, desc.c_str()); currentDGId = dgId; - state = DS_NOTLINKED; + state = DGID_STATUS::NOTLINKED; } else { LogMessage("DG-ID set to %u (None) via RF", dgId); - state = DS_NOTOPEN; + state = DGID_STATUS::NOTOPEN; } fromRF = true; } - if (m_gps != NULL) + if (m_gps != nullptr) m_gps->data(buffer + 14U, buffer + 35U, fich); - if (currentDGId != UNSET_DGID && dgIdNetwork[currentDGId] != NULL) { + if (currentDGId != UNSET_DGID && dgIdNetwork[currentDGId] != nullptr) { // Only allow the wanted modes through unsigned char dt = fich.getDT(); if ((dt == YSF_DT_VD_MODE1 && (dgIdNetwork[currentDGId]->m_modes & DT_VD_MODE1) != 0U) || @@ -513,7 +513,7 @@ int CDGIdGateway::run() } if ((buffer[34U] & 0x01U) == 0x01U) { - if (m_gps != NULL) + if (m_gps != nullptr) m_gps->reset(); if (nPips > 0U && fromRF) bleepTimer.start(); @@ -521,7 +521,7 @@ int CDGIdGateway::run() } for (unsigned int i = 0U; i < 100U; i++) { - if (dgIdNetwork[i] != NULL) { + if (dgIdNetwork[i] != nullptr) { unsigned int len = dgIdNetwork[i]->read(i, buffer); if (len > 0U && (i == currentDGId || currentDGId == UNSET_DGID)) { CYSFFICH fich; @@ -542,7 +542,7 @@ int CDGIdGateway::run() std::string desc = dgIdNetwork[i]->getDesc(i); LogMessage("DG-ID set to %u (%s) via Network", i, desc.c_str()); currentDGId = i; - state = DS_LINKED; + state = DGID_STATUS::LINKED; fromRF = false; } } @@ -556,16 +556,16 @@ int CDGIdGateway::run() rptNetwork.clock(ms); for (unsigned int i = 0U; i < 100U; i++) { - if (dgIdNetwork[i] != NULL) + if (dgIdNetwork[i] != nullptr) dgIdNetwork[i]->clock(ms); } - if (m_writer != NULL) + if (m_writer != nullptr) m_writer->clock(ms); inactivityTimer.clock(ms); if (inactivityTimer.isRunning() && inactivityTimer.hasExpired()) { - if (dgIdNetwork[currentDGId] != NULL && !dgIdNetwork[currentDGId]->m_static) { + if (dgIdNetwork[currentDGId] != nullptr && !dgIdNetwork[currentDGId]->m_static) { dgIdNetwork[currentDGId]->unlink(); dgIdNetwork[currentDGId]->unlink(); dgIdNetwork[currentDGId]->unlink(); @@ -573,7 +573,7 @@ int CDGIdGateway::run() LogMessage("DG-ID set to None via timeout"); - state = DS_NOTLINKED; + state = DGID_STATUS::NOTLINKED; currentDGId = UNSET_DGID; inactivityTimer.stop(); @@ -590,20 +590,20 @@ int CDGIdGateway::run() nPips = 0U; } - if (currentDGId != UNSET_DGID && dgIdNetwork[currentDGId] != NULL) { + if (currentDGId != UNSET_DGID && dgIdNetwork[currentDGId] != nullptr) { DGID_STATUS netState = dgIdNetwork[currentDGId]->getStatus(); bool statc = dgIdNetwork[currentDGId]->m_static; - if (fromRF && state != DS_LINKED && netState != DS_LINKED && statc) + if (fromRF && state != DGID_STATUS::LINKED && netState != DGID_STATUS::LINKED && statc) nPips = 3U; - else if (fromRF && state != DS_LINKED && netState == DS_LINKED) + else if (fromRF && state != DGID_STATUS::LINKED && netState == DGID_STATUS::LINKED) nPips = 1U; - else if (fromRF && state == DS_LINKED && netState != DS_LINKED) + else if (fromRF && state == DGID_STATUS::LINKED && netState != DGID_STATUS::LINKED) nPips = 3U; state = netState; } else { - if (fromRF && state != DS_NOTLINKED) + if (fromRF && state != DGID_STATUS::NOTLINKED) nPips = 2U; - state = DS_NOTLINKED; + state = DGID_STATUS::NOTLINKED; } if (ms < 5U) @@ -613,14 +613,14 @@ int CDGIdGateway::run() rptNetwork.unlink(); rptNetwork.close(); - if (m_gps != NULL) { + if (m_gps != nullptr) { m_writer->close(); delete m_writer; delete m_gps; } for (unsigned int i = 0U; i < 100U; i++) { - if (dgIdNetwork[i] != NULL && dgIdNetwork[i] != imrs) { + if (dgIdNetwork[i] != nullptr && dgIdNetwork[i] != imrs) { dgIdNetwork[i]->unlink(); dgIdNetwork[i]->unlink(); dgIdNetwork[i]->unlink(); @@ -629,7 +629,7 @@ int CDGIdGateway::run() } } - if (imrs != NULL) { + if (imrs != nullptr) { imrs->close(); delete imrs; } @@ -675,7 +675,7 @@ void CDGIdGateway::createGPS() bool ret = m_writer->open(); if (!ret) { delete m_writer; - m_writer = NULL; + m_writer = nullptr; return; } diff --git a/DGIdGateway/DGIdNetwork.cpp b/DGIdGateway/DGIdNetwork.cpp index 83a786f..03cdc0c 100644 --- a/DGIdGateway/DGIdNetwork.cpp +++ b/DGIdGateway/DGIdNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,6 +18,13 @@ #include "DGIdNetwork.h" +CDGIdNetwork::CDGIdNetwork() : +m_modes(0U), +m_static(false), +m_rfHangTime(0U), +m_netHangTime(0U) +{ +} CDGIdNetwork::~CDGIdNetwork() { diff --git a/DGIdGateway/DGIdNetwork.h b/DGIdGateway/DGIdNetwork.h index ce962ec..d10bc98 100644 --- a/DGIdGateway/DGIdNetwork.h +++ b/DGIdGateway/DGIdNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,15 +21,16 @@ #include -enum DGID_STATUS { - DS_NOTOPEN, - DS_NOTLINKED, - DS_LINKING, - DS_LINKED +enum class DGID_STATUS { + NOTOPEN, + NOTLINKED, + LINKING, + LINKED }; class CDGIdNetwork { public: + CDGIdNetwork(); virtual ~CDGIdNetwork() = 0; virtual std::string getDesc(unsigned int dgId) = 0; diff --git a/DGIdGateway/FCSNetwork.cpp b/DGIdGateway/FCSNetwork.cpp index 5318178..4c4f5d3 100644 --- a/DGIdGateway/FCSNetwork.cpp +++ b/DGIdGateway/FCSNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2017,2018,2020,2021,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,8 +35,8 @@ m_debug(debug), m_addr(), m_addrLen(0U), m_static(statc), -m_ping(NULL), -m_info(NULL), +m_ping(nullptr), +m_info(nullptr), m_reflector(reflector), m_print(), m_buffer(1000U, "FCS Network Buffer"), @@ -44,7 +44,7 @@ m_n(0U), m_sendPollTimer(1000U, 0U, 800U), m_recvPollTimer(1000U, 60U), m_resetTimer(1000U, 1U), -m_state(DS_NOTOPEN) +m_state(DGID_STATUS::NOTOPEN) { m_info = new unsigned char[100U]; ::sprintf((char*)m_info, "%9u%9u%-6.6s%-12.12s%7u", rxFrequency, txFrequency, locator.c_str(), FCS_VERSION, id); @@ -85,7 +85,7 @@ bool CFCSNetwork::open() { if (m_addrLen == 0U) { LogError("Unable to resolve the address of %s", m_reflector.c_str()); - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; return false; } @@ -93,10 +93,10 @@ bool CFCSNetwork::open() bool ret = m_socket.open(m_addr); if (!ret) { - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; return false; } else { - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; return true; } } @@ -108,9 +108,9 @@ DGID_STATUS CFCSNetwork::getStatus() void CFCSNetwork::write(unsigned int dgid, const unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); - if (m_state != DS_LINKED) + if (m_state != DGID_STATUS::LINKED) return; unsigned char buffer[130U]; @@ -127,10 +127,10 @@ void CFCSNetwork::write(unsigned int dgid, const unsigned char* data) void CFCSNetwork::link() { - if (m_state != DS_NOTLINKED) + if (m_state != DGID_STATUS::NOTLINKED) return; - m_state = DS_LINKING; + m_state = DGID_STATUS::LINKING; m_sendPollTimer.start(); m_recvPollTimer.start(); @@ -140,7 +140,7 @@ void CFCSNetwork::link() void CFCSNetwork::unlink() { - if (m_state != DS_LINKED) + if (m_state != DGID_STATUS::LINKED) return; m_socket.write((unsigned char*)"CLOSE ", 11U, m_addr, m_addrLen); @@ -150,20 +150,20 @@ void CFCSNetwork::unlink() LogMessage("Unlinked from %s", m_print.c_str()); - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; } void CFCSNetwork::clock(unsigned int ms) { - if (m_state == DS_NOTOPEN) + if (m_state == DGID_STATUS::NOTOPEN) return; m_recvPollTimer.clock(ms); if (m_recvPollTimer.isRunning() && m_recvPollTimer.hasExpired()) { if (m_static) { - m_state = DS_LINKING; + m_state = DGID_STATUS::LINKING; } else { - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; m_sendPollTimer.stop(); } @@ -194,7 +194,7 @@ void CFCSNetwork::clock(unsigned int ms) if (m_debug) CUtils::dump(1U, "FCS Network Data Received", buffer, length); - if (m_state == DS_NOTLINKED) + if (m_state == DGID_STATUS::NOTLINKED) return; if (!CUDPSocket::match(addr, m_addr)) @@ -206,10 +206,10 @@ void CFCSNetwork::clock(unsigned int ms) if (length == 7 || length == 10) { m_recvPollTimer.start(); - if (m_state == DS_LINKING) { + if (m_state == DGID_STATUS::LINKING) { LogMessage("Linked to %s", m_print.c_str()); - m_state = DS_LINKED; + m_state = DGID_STATUS::LINKED; if (m_debug) CUtils::dump(1U, "FCS Network Data Sent", m_info, 100U); @@ -229,7 +229,7 @@ void CFCSNetwork::clock(unsigned int ms) unsigned int CFCSNetwork::read(unsigned int dgid, unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if (m_buffer.isEmpty()) return 0U; @@ -261,12 +261,12 @@ void CFCSNetwork::close() LogMessage("Closing FCS network connection"); - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; } void CFCSNetwork::writePoll() { - if (m_state != DS_LINKING && m_state != DS_LINKED) + if (m_state != DGID_STATUS::LINKING && m_state != DGID_STATUS::LINKED) return; if (m_debug) diff --git a/DGIdGateway/GPS.cpp b/DGIdGateway/GPS.cpp index a8f71c1..5239f16 100644 --- a/DGIdGateway/GPS.cpp +++ b/DGIdGateway/GPS.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018,2020,2024 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2018,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,10 +32,10 @@ const unsigned char LONG_GPS[] = {0x47U, 0x64U}; CGPS::CGPS(CAPRSWriter* writer) : m_writer(writer), -m_buffer(NULL), +m_buffer(nullptr), m_sent(false) { - assert(writer != NULL); + assert(writer != nullptr); m_buffer = new unsigned char[300U]; } @@ -141,7 +141,7 @@ void CGPS::reset() void CGPS::transmitGPS(const unsigned char* source) { - assert(m_writer != NULL); + assert(m_writer != nullptr); // We don't know who its from! if (::memcmp(source, " ", YSF_CALLSIGN_LENGTH) == 0) diff --git a/DGIdGateway/Golay24128.cpp b/DGIdGateway/Golay24128.cpp index 417da00..5c5aaeb 100644 --- a/DGIdGateway/Golay24128.cpp +++ b/DGIdGateway/Golay24128.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2010,2016,2025 by Jonathan Naylor G4KLX * Copyright (C) 2002 by Robert H. Morelos-Zaragoza. All rights reserved. */ @@ -1096,7 +1096,7 @@ unsigned int CGolay24128::decode24128(unsigned int code) unsigned int CGolay24128::decode24128(unsigned char* bytes) { - assert(bytes != NULL); + assert(bytes != nullptr); unsigned int code = bytes[0U]; code <<= 8; diff --git a/DGIdGateway/IMRSNetwork.cpp b/DGIdGateway/IMRSNetwork.cpp index 672c278..665f6cc 100644 --- a/DGIdGateway/IMRSNetwork.cpp +++ b/DGIdGateway/IMRSNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ CIMRSNetwork::CIMRSNetwork() : m_socket(IMRS_PORT), m_dgIds(), -m_state(DS_NOTOPEN) +m_state(DGID_STATUS::NOTOPEN) { } @@ -54,7 +54,7 @@ void CIMRSNetwork::addDGId(unsigned int dgId, const std::string& name, const std std::string CIMRSNetwork::getDesc(unsigned int dgId) { IMRSDGId* ptr = find(dgId); - if (ptr == NULL) + if (ptr == nullptr) return "IMRS: Unknown"; return "IMRS: " + ptr->m_name; @@ -71,10 +71,10 @@ bool CIMRSNetwork::open() bool ret = m_socket.open(); if (!ret) { - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; return false; } else { - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; return true; } } @@ -86,10 +86,10 @@ DGID_STATUS CIMRSNetwork::getStatus() void CIMRSNetwork::write(unsigned int dgId, const unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); IMRSDGId* ptr = find(dgId); - if (ptr == NULL) + if (ptr == nullptr) return; CUtils::dump(1U, "YSF Data Received", data, 155U); @@ -112,8 +112,8 @@ void CIMRSNetwork::write(unsigned int dgId, const unsigned char* data) bool CIMRSNetwork::writeHeaderTrailer(IMRSDGId* ptr, CYSFFICH& fich, const unsigned char* data) { - assert(ptr != NULL); - assert(data != NULL); + assert(ptr != nullptr); + assert(data != nullptr); unsigned char buffer[200U]; @@ -158,8 +158,8 @@ bool CIMRSNetwork::writeHeaderTrailer(IMRSDGId* ptr, CYSFFICH& fich, const unsig bool CIMRSNetwork::writeData(IMRSDGId* ptr, CYSFFICH& fich, const unsigned char* data) { - assert(ptr != NULL); - assert(data != NULL); + assert(ptr != nullptr); + assert(data != nullptr); unsigned char buffer[200U]; unsigned int length = 0U; @@ -253,8 +253,8 @@ bool CIMRSNetwork::writeData(IMRSDGId* ptr, CYSFFICH& fich, const unsigned char* void CIMRSNetwork::readHeaderTrailer(IMRSDGId* ptr, CYSFFICH& fich, const unsigned char* data) { - assert(ptr != NULL); - assert(data != NULL); + assert(ptr != nullptr); + assert(data != nullptr); unsigned char buffer[155U]; @@ -298,8 +298,8 @@ void CIMRSNetwork::readHeaderTrailer(IMRSDGId* ptr, CYSFFICH& fich, const unsign void CIMRSNetwork::readData(IMRSDGId* ptr, CYSFFICH& fich, const unsigned char* data) { - assert(ptr != NULL); - assert(data != NULL); + assert(ptr != nullptr); + assert(data != nullptr); unsigned char buffer[155U]; @@ -352,7 +352,7 @@ void CIMRSNetwork::readData(IMRSDGId* ptr, CYSFFICH& fich, const unsigned char* if (fn == 0U && ft == 1U) { // Copy the DCH payload.writeVoiceFRModeData(data + 7U, buffer + 35U); - // NULL the unused section + // nullptr the unused section ::memset(buffer + 35U + YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES + 45U, 0x00U, 9U); // Copy the audio ::memcpy(buffer + 35U + YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES + 54U, data + 27U + 0U, 18U); @@ -403,7 +403,7 @@ void CIMRSNetwork::clock(unsigned int ms) CUtils::dump(1U, "IMRS Network Data Received", buffer, length); IMRSDGId* ptr = find(addr); - if (ptr == NULL) + if (ptr == nullptr) return; if (ptr->m_debug) @@ -428,10 +428,10 @@ void CIMRSNetwork::clock(unsigned int ms) unsigned int CIMRSNetwork::read(unsigned int dgId, unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); IMRSDGId* ptr = find(dgId); - if (ptr == NULL) + if (ptr == nullptr) return 0U; if (ptr->m_buffer.isEmpty()) @@ -451,7 +451,7 @@ void CIMRSNetwork::close() m_socket.close(); - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; } IMRSDGId* CIMRSNetwork::find(const sockaddr_storage& addr) const @@ -463,7 +463,7 @@ IMRSDGId* CIMRSNetwork::find(const sockaddr_storage& addr) const } } - return NULL; + return nullptr; } IMRSDGId* CIMRSNetwork::find(unsigned int dgId) const @@ -473,5 +473,5 @@ IMRSDGId* CIMRSNetwork::find(unsigned int dgId) const return *it; } - return NULL; + return nullptr; } diff --git a/DGIdGateway/IMRSNetwork.h b/DGIdGateway/IMRSNetwork.h index bc40fba..597f12e 100644 --- a/DGIdGateway/IMRSNetwork.h +++ b/DGIdGateway/IMRSNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,8 +42,8 @@ public: m_dgId(0U), m_name(), m_seqNo(0U), - m_source(NULL), - m_dest(NULL), + m_source(nullptr), + m_dest(nullptr), m_destinations(), m_debug(false), m_buffer(1000U, "IMRS Buffer") diff --git a/DGIdGateway/Log.cpp b/DGIdGateway/Log.cpp index 752601e..9aa2f96 100644 --- a/DGIdGateway/Log.cpp +++ b/DGIdGateway/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,7 +37,7 @@ static std::string m_filePath; static std::string m_fileRoot; static bool m_fileRotate = true; -static FILE* m_fpLog = NULL; +static FILE* m_fpLog = nullptr; static bool m_daemon = false; static unsigned int m_displayLevel = 2U; @@ -59,10 +59,10 @@ static bool logOpenRotate() struct tm* tm = ::gmtime(&now); if (tm->tm_mday == m_tm.tm_mday && tm->tm_mon == m_tm.tm_mon && tm->tm_year == m_tm.tm_year) { - if (m_fpLog != NULL) + if (m_fpLog != nullptr) return true; } else { - if (m_fpLog != NULL) + if (m_fpLog != nullptr) ::fclose(m_fpLog); } @@ -73,7 +73,7 @@ static bool logOpenRotate() ::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); #endif - if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { + if ((m_fpLog = ::fopen(filename, "a+t")) != nullptr) { status = true; #if !defined(_WIN32) && !defined(_WIN64) @@ -94,7 +94,7 @@ static bool logOpenNoRotate() if (m_fileLevel == 0U) return true; - if (m_fpLog != NULL) + if (m_fpLog != nullptr) return true; char filename[200U]; @@ -104,7 +104,7 @@ static bool logOpenNoRotate() ::sprintf(filename, "%s/%s.log", m_filePath.c_str(), m_fileRoot.c_str()); #endif - if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { + if ((m_fpLog = ::fopen(filename, "a+t")) != nullptr) { status = true; #if !defined(_WIN32) && !defined(_WIN64) @@ -141,13 +141,13 @@ bool LogInitialise(bool daemon, const std::string& filePath, const std::string& void LogFinalise() { - if (m_fpLog != NULL) + if (m_fpLog != nullptr) ::fclose(m_fpLog); } void Log(unsigned int level, const char* fmt, ...) { - assert(fmt != NULL); + assert(fmt != nullptr); char buffer[501U]; #if defined(_WIN32) || defined(_WIN64) @@ -157,7 +157,7 @@ void Log(unsigned int level, const char* fmt, ...) ::sprintf(buffer, "%c: %04u-%02u-%02u %02u:%02u:%02u.%03u ", LEVELS[level], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); #else struct timeval now; - ::gettimeofday(&now, NULL); + ::gettimeofday(&now, nullptr); struct tm* tm = ::gmtime(&now.tv_sec); @@ -167,7 +167,7 @@ void Log(unsigned int level, const char* fmt, ...) va_list vl; va_start(vl, fmt); - ::vsnprintf(buffer + ::strlen(buffer), 500, fmt, vl); + ::vsnprintf(buffer + ::strlen(buffer), 500 - ::strlen(buffer), fmt, vl); va_end(vl); diff --git a/DGIdGateway/RingBuffer.h b/DGIdGateway/RingBuffer.h index 7805005..3091d80 100644 --- a/DGIdGateway/RingBuffer.h +++ b/DGIdGateway/RingBuffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009,2012,2013,2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2009,2012,2013,2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,12 +30,12 @@ public: CRingBuffer(unsigned int length, const char* name) : m_length(length), m_name(name), - m_buffer(NULL), + m_buffer(nullptr), m_iPtr(0U), m_oPtr(0U) { assert(length > 0U); - assert(name != NULL); + assert(name != nullptr); m_buffer = new T[length]; diff --git a/DGIdGateway/StopWatch.cpp b/DGIdGateway/StopWatch.cpp index 481241b..3d59e12 100644 --- a/DGIdGateway/StopWatch.cpp +++ b/DGIdGateway/StopWatch.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,7 +77,7 @@ CStopWatch::~CStopWatch() unsigned long long CStopWatch::time() const { struct timeval now; - ::gettimeofday(&now, NULL); + ::gettimeofday(&now, nullptr); return now.tv_sec * 1000ULL + now.tv_usec / 1000ULL; } diff --git a/DGIdGateway/Sync.cpp b/DGIdGateway/Sync.cpp index c8d4d52..cc598c7 100644 --- a/DGIdGateway/Sync.cpp +++ b/DGIdGateway/Sync.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ void CSync::add(unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); ::memcpy(data, YSF_SYNC_BYTES, YSF_SYNC_LENGTH_BYTES); } diff --git a/DGIdGateway/Thread.cpp b/DGIdGateway/Thread.cpp index 6f76f5b..86b8967 100644 --- a/DGIdGateway/Thread.cpp +++ b/DGIdGateway/Thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,9 +31,9 @@ CThread::~CThread() bool CThread::run() { - m_handle = ::CreateThread(NULL, 0, &helper, this, 0, NULL); + m_handle = ::CreateThread(nullptr, 0, &helper, this, 0, nullptr); - return m_handle != NULL; + return m_handle != nullptr; } @@ -74,13 +74,13 @@ CThread::~CThread() bool CThread::run() { - return ::pthread_create(&m_thread, NULL, helper, this) == 0; + return ::pthread_create(&m_thread, nullptr, helper, this) == 0; } void CThread::wait() { - ::pthread_join(m_thread, NULL); + ::pthread_join(m_thread, nullptr); } @@ -90,7 +90,7 @@ void* CThread::helper(void* arg) p->entry(); - return NULL; + return nullptr; } void CThread::sleep(unsigned int ms) @@ -100,7 +100,7 @@ void CThread::sleep(unsigned int ms) ts.tv_sec = ms / 1000U; ts.tv_nsec = (ms % 1000U) * 1000000U; - ::nanosleep(&ts, NULL); + ::nanosleep(&ts, nullptr); } #endif diff --git a/DGIdGateway/UDPSocket.cpp b/DGIdGateway/UDPSocket.cpp index 0ad8aea..63a7ab7 100644 --- a/DGIdGateway/UDPSocket.cpp +++ b/DGIdGateway/UDPSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -94,7 +94,7 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd /* Port is always digits, no needs to lookup service */ hints.ai_flags |= AI_NUMERICSERV; - int err = ::getaddrinfo(hostname.empty() ? NULL : hostname.c_str(), portstr.c_str(), &hints, &res); + int err = ::getaddrinfo(hostname.empty() ? nullptr : hostname.c_str(), portstr.c_str(), &hints, &res); if (err != 0) { sockaddr_in* paddr = (sockaddr_in*)&addr; ::memset(paddr, 0x00U, address_length = sizeof(sockaddr_in)); @@ -119,7 +119,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad if (addr1.ss_family != addr2.ss_family) return false; - if (type == IMT_ADDRESS_AND_PORT) { + if (type == IPMATCHTYPE::ADDRESS_AND_PORT) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -134,7 +134,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad default: return false; } - } else if (type == IMT_ADDRESS_ONLY) { + } else if (type == IPMATCHTYPE::ADDRESS_ONLY) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -233,7 +233,7 @@ bool CUDPSocket::open() int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int& addressLength) { - assert(buffer != NULL); + assert(buffer != nullptr); assert(length > 0U); #if defined(_WIN32) || defined(_WIN64) @@ -301,7 +301,7 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const sockaddr_storage& address, unsigned int addressLength) { - assert(buffer != NULL); + assert(buffer != nullptr); assert(length > 0U); #if defined(_WIN32) || defined(_WIN64) assert(m_fd != INVALID_SOCKET); diff --git a/DGIdGateway/UDPSocket.h b/DGIdGateway/UDPSocket.h index 75228a3..1ca32d9 100644 --- a/DGIdGateway/UDPSocket.h +++ b/DGIdGateway/UDPSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011,2013,2015,2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2011,2013,2015,2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,9 +35,9 @@ #include #endif -enum IPMATCHTYPE { - IMT_ADDRESS_AND_PORT, - IMT_ADDRESS_ONLY +enum class IPMATCHTYPE { + ADDRESS_AND_PORT, + ADDRESS_ONLY }; class CUDPSocket { @@ -60,7 +60,7 @@ public: static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength); static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength, struct addrinfo& hints); - static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IPMATCHTYPE::ADDRESS_AND_PORT); static bool isNone(const sockaddr_storage& addr); diff --git a/DGIdGateway/Utils.cpp b/DGIdGateway/Utils.cpp index 49ded13..4461eee 100644 --- a/DGIdGateway/Utils.cpp +++ b/DGIdGateway/Utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009,2014,2015,2016 Jonathan Naylor, G4KLX + * Copyright (C) 2009,2014,2015,2016,2025 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,14 +19,14 @@ void CUtils::dump(const std::string& title, const unsigned char* data, unsigned int length) { - assert(data != NULL); + assert(data != nullptr); dump(2U, title, data, length); } void CUtils::dump(int level, const std::string& title, const unsigned char* data, unsigned int length) { - assert(data != NULL); + assert(data != nullptr); ::Log(level, "%s", title.c_str()); @@ -72,14 +72,14 @@ void CUtils::dump(int level, const std::string& title, const unsigned char* data void CUtils::dump(const std::string& title, const bool* bits, unsigned int length) { - assert(bits != NULL); + assert(bits != nullptr); dump(2U, title, bits, length); } void CUtils::dump(int level, const std::string& title, const bool* bits, unsigned int length) { - assert(bits != NULL); + assert(bits != nullptr); unsigned char bytes[100U]; unsigned int nBytes = 0U; @@ -91,7 +91,7 @@ void CUtils::dump(int level, const std::string& title, const bool* bits, unsigne void CUtils::byteToBitsBE(unsigned char byte, bool* bits) { - assert(bits != NULL); + assert(bits != nullptr); bits[0U] = (byte & 0x80U) == 0x80U; bits[1U] = (byte & 0x40U) == 0x40U; @@ -105,7 +105,7 @@ void CUtils::byteToBitsBE(unsigned char byte, bool* bits) void CUtils::byteToBitsLE(unsigned char byte, bool* bits) { - assert(bits != NULL); + assert(bits != nullptr); bits[0U] = (byte & 0x01U) == 0x01U; bits[1U] = (byte & 0x02U) == 0x02U; @@ -119,7 +119,7 @@ void CUtils::byteToBitsLE(unsigned char byte, bool* bits) void CUtils::bitsToByteBE(const bool* bits, unsigned char& byte) { - assert(bits != NULL); + assert(bits != nullptr); byte = bits[0U] ? 0x80U : 0x00U; byte |= bits[1U] ? 0x40U : 0x00U; @@ -133,7 +133,7 @@ void CUtils::bitsToByteBE(const bool* bits, unsigned char& byte) void CUtils::bitsToByteLE(const bool* bits, unsigned char& byte) { - assert(bits != NULL); + assert(bits != nullptr); byte = bits[0U] ? 0x01U : 0x00U; byte |= bits[1U] ? 0x02U : 0x00U; diff --git a/DGIdGateway/Version.h b/DGIdGateway/Version.h index 8417ca9..13f194e 100644 --- a/DGIdGateway/Version.h +++ b/DGIdGateway/Version.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021,2023,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,2023,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20241218"; +const char* VERSION = "20250319"; #endif diff --git a/DGIdGateway/YSFConvolution.cpp b/DGIdGateway/YSFConvolution.cpp index 23b117e..584a24b 100644 --- a/DGIdGateway/YSFConvolution.cpp +++ b/DGIdGateway/YSFConvolution.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,12 +36,12 @@ const uint32_t M = 2U; const unsigned int K = 5U; CYSFConvolution::CYSFConvolution() : -m_metrics1(NULL), -m_metrics2(NULL), -m_oldMetrics(NULL), -m_newMetrics(NULL), -m_decisions(NULL), -m_dp(NULL) +m_metrics1(nullptr), +m_metrics2(nullptr), +m_oldMetrics(nullptr), +m_newMetrics(nullptr), +m_decisions(nullptr), +m_dp(nullptr) { m_metrics1 = new uint16_t[16U]; m_metrics2 = new uint16_t[16U]; @@ -98,7 +98,7 @@ void CYSFConvolution::decode(uint8_t s0, uint8_t s1) void CYSFConvolution::chainback(unsigned char* out, unsigned int nBits) { - assert(out != NULL); + assert(out != nullptr); uint32_t state = 0U; @@ -115,8 +115,8 @@ void CYSFConvolution::chainback(unsigned char* out, unsigned int nBits) void CYSFConvolution::encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const { - assert(in != NULL); - assert(out != NULL); + assert(in != nullptr); + assert(out != nullptr); assert(nBits > 0U); uint8_t d1 = 0U, d2 = 0U, d3 = 0U, d4 = 0U; diff --git a/DGIdGateway/YSFFICH.cpp b/DGIdGateway/YSFFICH.cpp index e4f800a..c5f09db 100644 --- a/DGIdGateway/YSFFICH.cpp +++ b/DGIdGateway/YSFFICH.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2019,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2019,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,7 +55,7 @@ const unsigned int INTERLEAVE_TABLE[] = { 38U, 78U, 118U, 158U, 198U}; CYSFFICH::CYSFFICH(const CYSFFICH& fich) : -m_fich(NULL) +m_fich(nullptr) { m_fich = new unsigned char[6U]; @@ -63,7 +63,7 @@ m_fich(NULL) } CYSFFICH::CYSFFICH() : - m_fich(NULL) + m_fich(nullptr) { m_fich = new unsigned char[6U]; @@ -77,7 +77,7 @@ CYSFFICH::~CYSFFICH() bool CYSFFICH::decode(const unsigned char* bytes) { - assert(bytes != NULL); + assert(bytes != nullptr); // Skip the sync bytes bytes += YSF_SYNC_LENGTH_BYTES; @@ -116,7 +116,7 @@ bool CYSFFICH::decode(const unsigned char* bytes) void CYSFFICH::encode(unsigned char* bytes) { - assert(bytes != NULL); + assert(bytes != nullptr); // Skip the sync bytes bytes += YSF_SYNC_LENGTH_BYTES; diff --git a/DGIdGateway/YSFNetwork.cpp b/DGIdGateway/YSFNetwork.cpp index ad0c43e..bbb082e 100644 --- a/DGIdGateway/YSFNetwork.cpp +++ b/DGIdGateway/YSFNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,13 +33,13 @@ m_debug(debug), m_addr(addr), m_addrLen(addrLen), m_static(true), -m_poll(NULL), -m_unlink(NULL), +m_poll(nullptr), +m_unlink(nullptr), m_buffer(1000U, "YSF Network Buffer"), m_sendPollTimer(1000U, 5U), m_recvPollTimer(1000U, 60U), m_name(name), -m_state(DS_NOTOPEN) +m_state(DGID_STATUS::NOTOPEN) { m_poll = new unsigned char[14U]; ::memcpy(m_poll + 0U, "YSFP", 4U); @@ -62,13 +62,13 @@ m_debug(debug), m_addr(addr), m_addrLen(addrLen), m_static(statc), -m_poll(NULL), -m_unlink(NULL), +m_poll(nullptr), +m_unlink(nullptr), m_buffer(1000U, "YSF Network Buffer"), m_sendPollTimer(1000U, 5U), m_recvPollTimer(1000U, 60U), m_name(name), -m_state(DS_NOTOPEN) +m_state(DGID_STATUS::NOTOPEN) { m_poll = new unsigned char[14U]; ::memcpy(m_poll + 0U, "YSFP", 4U); @@ -105,7 +105,7 @@ bool CYSFNetwork::open() { if (m_addrLen == 0U) { LogError("Unable to resolve the address of the YSF network"); - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; return false; } @@ -113,10 +113,10 @@ bool CYSFNetwork::open() bool ret = m_socket.open(m_addr); if (!ret) { - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; return false; } else { - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; return true; } } @@ -128,9 +128,9 @@ DGID_STATUS CYSFNetwork::getStatus() void CYSFNetwork::write(unsigned int dgid, const unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); - if (m_state != DS_LINKED) + if (m_state != DGID_STATUS::LINKED) return; if (m_debug) @@ -141,10 +141,10 @@ void CYSFNetwork::write(unsigned int dgid, const unsigned char* data) void CYSFNetwork::link() { - if (m_state != DS_NOTLINKED) + if (m_state != DGID_STATUS::NOTLINKED) return; - m_state = DS_LINKING; + m_state = DGID_STATUS::LINKING; m_sendPollTimer.start(); m_recvPollTimer.start(); @@ -154,7 +154,7 @@ void CYSFNetwork::link() void CYSFNetwork::writePoll() { - if (m_state != DS_LINKING && m_state != DS_LINKED) + if (m_state != DGID_STATUS::LINKING && m_state != DGID_STATUS::LINKED) return; if (m_debug) @@ -165,7 +165,7 @@ void CYSFNetwork::writePoll() void CYSFNetwork::unlink() { - if (m_state != DS_LINKED) + if (m_state != DGID_STATUS::LINKED) return; m_sendPollTimer.stop(); @@ -178,20 +178,20 @@ void CYSFNetwork::unlink() LogMessage("Unlinked from %s", m_name.c_str()); - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; } void CYSFNetwork::clock(unsigned int ms) { - if (m_state == DS_NOTOPEN) + if (m_state == DGID_STATUS::NOTOPEN) return; m_recvPollTimer.clock(ms); if (m_recvPollTimer.isRunning() && m_recvPollTimer.hasExpired()) { if (m_static) { - m_state = DS_LINKING; + m_state = DGID_STATUS::LINKING; } else { - m_state = DS_NOTLINKED; + m_state = DGID_STATUS::NOTLINKED; m_sendPollTimer.stop(); } @@ -224,13 +224,13 @@ void CYSFNetwork::clock(unsigned int ms) if (::memcmp(buffer, "YSFP", 4U) == 0) { m_recvPollTimer.start(); - if (m_state == DS_LINKING) { + if (m_state == DGID_STATUS::LINKING) { if (strcmp(m_name.c_str(), "MMDVM") == 0) LogMessage("Link successful to %s", m_name.c_str()); else LogMessage("Linked to %s", m_name.c_str()); - m_state = DS_LINKED; + m_state = DGID_STATUS::LINKED; } } @@ -246,7 +246,7 @@ void CYSFNetwork::clock(unsigned int ms) unsigned int CYSFNetwork::read(unsigned int dgid, unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if (m_buffer.isEmpty()) return 0U; @@ -265,5 +265,5 @@ void CYSFNetwork::close() LogMessage("Closing YSF network connection"); - m_state = DS_NOTOPEN; + m_state = DGID_STATUS::NOTOPEN; } diff --git a/DGIdGateway/YSFPayload.cpp b/DGIdGateway/YSFPayload.cpp index 848ad84..06981b2 100644 --- a/DGIdGateway/YSFPayload.cpp +++ b/DGIdGateway/YSFPayload.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2020 Jonathan Naylor, G4KLX +* Copyright (C) 2016,2020,2025 Jonathan Naylor, G4KLX * Copyright (C) 2016 Mathias Weyland, HB9FRV * * This program is free software; you can redistribute it and/or modify @@ -86,8 +86,8 @@ CYSFPayload::~CYSFPayload() bool CYSFPayload::readHeaderData(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -154,8 +154,8 @@ bool CYSFPayload::readHeaderData(const unsigned char* data, unsigned char* dt) bool CYSFPayload::readVDMode1Data(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -195,8 +195,8 @@ bool CYSFPayload::readVDMode1Data(const unsigned char* data, unsigned char* dt) bool CYSFPayload::readVDMode2Data(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -236,8 +236,8 @@ bool CYSFPayload::readVDMode2Data(const unsigned char* data, unsigned char* dt) bool CYSFPayload::readDataFRModeData1(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); ::memset(dt, ' ', 20U); @@ -279,8 +279,8 @@ bool CYSFPayload::readDataFRModeData1(const unsigned char* data, unsigned char* bool CYSFPayload::readVoiceFRModeData(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -314,8 +314,8 @@ bool CYSFPayload::readVoiceFRModeData(const unsigned char* data, unsigned char* bool CYSFPayload::readDataFRModeData2(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); ::memset(dt, ' ', 20U); @@ -357,8 +357,8 @@ bool CYSFPayload::readDataFRModeData2(const unsigned char* data, unsigned char* void CYSFPayload::writeHeaderData(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -374,7 +374,7 @@ void CYSFPayload::writeHeaderData(const unsigned char* dt, unsigned char* data) CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; @@ -431,8 +431,8 @@ void CYSFPayload::writeHeaderData(const unsigned char* dt, unsigned char* data) void CYSFPayload::writeVDMode1Data(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -448,7 +448,7 @@ void CYSFPayload::writeVDMode1Data(const unsigned char* dt, unsigned char* data) CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; @@ -475,8 +475,8 @@ void CYSFPayload::writeVDMode1Data(const unsigned char* dt, unsigned char* data) void CYSFPayload::writeVDMode2Data(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -492,7 +492,7 @@ void CYSFPayload::writeVDMode2Data(const unsigned char* dt, unsigned char* data) CYSFConvolution conv; conv.encode(output, convolved, 100U); - unsigned char bytes[25U]; + unsigned char bytes[25U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 100U; i++) { unsigned int n = INTERLEAVE_TABLE_5_20[i]; @@ -519,8 +519,8 @@ void CYSFPayload::writeVDMode2Data(const unsigned char* dt, unsigned char* data) void CYSFPayload::writeVoiceFRModeData(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -536,7 +536,7 @@ void CYSFPayload::writeVoiceFRModeData(const unsigned char* dt, unsigned char* d CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; @@ -558,8 +558,8 @@ void CYSFPayload::writeVoiceFRModeData(const unsigned char* dt, unsigned char* d void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -575,7 +575,7 @@ void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* d CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; @@ -602,8 +602,8 @@ void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* d void CYSFPayload::writeDataFRModeData2(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -619,7 +619,7 @@ void CYSFPayload::writeDataFRModeData2(const unsigned char* dt, unsigned char* d CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; diff --git a/DGIdGateway/YSFReflectors.cpp b/DGIdGateway/YSFReflectors.cpp index cb3c2ab..56c7f06 100644 --- a/DGIdGateway/YSFReflectors.cpp +++ b/DGIdGateway/YSFReflectors.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016-2020 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,24 +43,24 @@ CYSFReflectors::~CYSFReflectors() bool CYSFReflectors::load() { FILE* fp = ::fopen(m_hostsFile.c_str(), "rt"); - if (fp != NULL) { + if (fp != nullptr) { char buffer[100U]; - while (::fgets(buffer, 100U, fp) != NULL) { + while (::fgets(buffer, 100U, fp) != nullptr) { if (buffer[0U] == '#') continue; char* p1 = ::strtok(buffer, ";\r\n"); - char* p2 = ::strtok(NULL, ";\r\n"); - char* p3 = ::strtok(NULL, ";\r\n"); - char* p4 = ::strtok(NULL, ";\r\n"); - char* p5 = ::strtok(NULL, ";\r\n"); - char* p6 = ::strtok(NULL, "\r\n"); + char* p2 = ::strtok(nullptr, ";\r\n"); + char* p3 = ::strtok(nullptr, ";\r\n"); + char* p4 = ::strtok(nullptr, ";\r\n"); + char* p5 = ::strtok(nullptr, ";\r\n"); + char* p6 = ::strtok(nullptr, "\r\n"); - if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL && p5 != NULL && p6 != NULL) { + if (p1 != nullptr && p2 != nullptr && p3 != nullptr && p4 != nullptr && p5 != nullptr && p6 != nullptr) { std::string host = std::string(p4); unsigned short port = (unsigned short)::atoi(p5); - if (::strstr(p1, "YCS") == NULL && ::strstr(p2, "YCS") == NULL) { + if (::strstr(p1, "YCS") == nullptr && ::strstr(p2, "YCS") == nullptr) { sockaddr_storage addr; unsigned int addrLen; if (CUDPSocket::lookup(host, port, addr, addrLen) == 0) { @@ -95,7 +95,7 @@ CYSFReflector* CYSFReflectors::findById(const std::string& id) LogMessage("Trying to find non existent YSF reflector with an id of %s", id.c_str()); - return NULL; + return nullptr; } CYSFReflector* CYSFReflectors::findByName(const std::string& name) @@ -107,6 +107,6 @@ CYSFReflector* CYSFReflectors::findByName(const std::string& name) LogMessage("Trying to find non existent YSF reflector with a name of %s", name.c_str()); - return NULL; + return nullptr; } diff --git a/YSFGateway/APRSWriter.cpp b/YSFGateway/APRSWriter.cpp index c33c850..fd26fb0 100644 --- a/YSFGateway/APRSWriter.cpp +++ b/YSFGateway/APRSWriter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2010-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -106,7 +106,7 @@ bool CAPRSWriter::open() return false; } - ::gps_stream(&m_gpsdData, WATCH_ENABLE | WATCH_JSON, NULL); + ::gps_stream(&m_gpsdData, WATCH_ENABLE | WATCH_JSON, nullptr); LogMessage("Connected to GPSD"); } @@ -125,8 +125,8 @@ bool CAPRSWriter::open() void CAPRSWriter::write(const unsigned char* source, const char* type, unsigned char radio, float fLatitude, float fLongitude) { - assert(source != NULL); - assert(type != NULL); + assert(source != nullptr); + assert(type != nullptr); char callsign[15U]; ::memcpy(callsign, source, YSF_CALLSIGN_LENGTH); @@ -219,7 +219,7 @@ void CAPRSWriter::close() #if defined(USE_GPSD) if (m_gpsdEnabled) { - ::gps_stream(&m_gpsdData, WATCH_DISABLE, NULL); + ::gps_stream(&m_gpsdData, WATCH_DISABLE, nullptr); ::gps_close(&m_gpsdData); } #endif @@ -300,7 +300,7 @@ void CAPRSWriter::sendIdFrameMobile() return; #if GPSD_API_MAJOR_VERSION >= 7 - if (::gps_read(&m_gpsdData, NULL, 0) <= 0) + if (::gps_read(&m_gpsdData, nullptr, 0) <= 0) return; #else if (::gps_read(&m_gpsdData) <= 0) diff --git a/YSFGateway/CRC.cpp b/YSFGateway/CRC.cpp index f2c3cbc..d916798 100644 --- a/YSFGateway/CRC.cpp +++ b/YSFGateway/CRC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ const uint16_t CCITT16_TABLE2[] = { void CCRC::addCCITT16(unsigned char *in, unsigned int length) { - assert(in != NULL); + assert(in != nullptr); assert(length > 2U); union { @@ -84,7 +84,7 @@ void CCRC::addCCITT16(unsigned char *in, unsigned int length) bool CCRC::checkCCITT16(const unsigned char *in, unsigned int length) { - assert(in != NULL); + assert(in != nullptr); assert(length > 2U); union { @@ -104,7 +104,7 @@ bool CCRC::checkCCITT16(const unsigned char *in, unsigned int length) unsigned char CCRC::addCRC(const unsigned char* in, unsigned int length) { - assert(in != NULL); + assert(in != nullptr); unsigned char crc = 0U; diff --git a/YSFGateway/Conf.cpp b/YSFGateway/Conf.cpp index f6f1270..6ed3b01 100644 --- a/YSFGateway/Conf.cpp +++ b/YSFGateway/Conf.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,17 +26,17 @@ const int BUFFER_SIZE = 500; -enum SECTION { - SECTION_NONE, - SECTION_GENERAL, - SECTION_INFO, - SECTION_LOG, - SECTION_APRS, - SECTION_NETWORK, - SECTION_YSF_NETWORK, - SECTION_FCS_NETWORK, - SECTION_GPSD, - SECTION_REMOTE_COMMANDS +enum class SECTION { + NONE, + GENERAL, + INFO, + LOG, + APRS, + NETWORK, + YSF_NETWORK, + FCS_NETWORK, + GPSD, + REMOTE_COMMANDS }; CConf::CConf(const std::string& file) : @@ -106,49 +106,49 @@ CConf::~CConf() bool CConf::read() { FILE* fp = ::fopen(m_file.c_str(), "rt"); - if (fp == NULL) { + if (fp == nullptr) { ::fprintf(stderr, "Couldn't open the .ini file - %s\n", m_file.c_str()); return false; } - SECTION section = SECTION_NONE; + SECTION section = SECTION::NONE; char buffer[BUFFER_SIZE]; - while (::fgets(buffer, BUFFER_SIZE, fp) != NULL) { + while (::fgets(buffer, BUFFER_SIZE, fp) != nullptr) { if (buffer[0U] == '#') continue; if (buffer[0U] == '[') { if (::strncmp(buffer, "[General]", 9U) == 0) - section = SECTION_GENERAL; + section = SECTION::GENERAL; else if (::strncmp(buffer, "[Info]", 6U) == 0) - section = SECTION_INFO; + section = SECTION::INFO; else if (::strncmp(buffer, "[Log]", 5U) == 0) - section = SECTION_LOG; + section = SECTION::LOG; else if (::strncmp(buffer, "[APRS]", 6U) == 0) - section = SECTION_APRS; + section = SECTION::APRS; else if (::strncmp(buffer, "[Network]", 9U) == 0) - section = SECTION_NETWORK; + section = SECTION::NETWORK; else if (::strncmp(buffer, "[YSF Network]", 13U) == 0) - section = SECTION_YSF_NETWORK; + section = SECTION::YSF_NETWORK; else if (::strncmp(buffer, "[FCS Network]", 13U) == 0) - section = SECTION_FCS_NETWORK; + section = SECTION::FCS_NETWORK; else if (::strncmp(buffer, "[GPSD]", 6U) == 0) - section = SECTION_GPSD; + section = SECTION::GPSD; else if (::strncmp(buffer, "[Remote Commands]", 17U) == 0) - section = SECTION_REMOTE_COMMANDS; + section = SECTION::REMOTE_COMMANDS; else - section = SECTION_NONE; + section = SECTION::NONE; continue; } char* key = ::strtok(buffer, " \t=\r\n"); - if (key == NULL) + if (key == nullptr) continue; - char* value = ::strtok(NULL, "\r\n"); - if (value == NULL) + char* value = ::strtok(nullptr, "\r\n"); + if (value == nullptr) continue; // Remove quotes from the value @@ -160,7 +160,7 @@ bool CConf::read() char *p; // if value is not quoted, remove after # (to make comment) - if ((p = strchr(value, '#')) != NULL) + if ((p = strchr(value, '#')) != nullptr) *p = '\0'; // remove trailing tab/space @@ -168,7 +168,7 @@ bool CConf::read() *p = '\0'; } - if (section == SECTION_GENERAL) { + if (section == SECTION::GENERAL) { if (::strcmp(key, "Callsign") == 0) { // Convert the callsign to upper case for (unsigned int i = 0U; value[i] != 0; i++) @@ -197,7 +197,7 @@ bool CConf::read() m_debug = ::atoi(value) == 1; else if (::strcmp(key, "Daemon") == 0) m_daemon = ::atoi(value) == 1; - } else if (section == SECTION_INFO) { + } else if (section == SECTION::INFO) { if (::strcmp(key, "TXFrequency") == 0) m_txFrequency = (unsigned int)::atoi(value); else if (::strcmp(key, "RXFrequency") == 0) @@ -214,7 +214,7 @@ bool CConf::read() m_name = value; else if (::strcmp(key, "Description") == 0) m_description = value; - } else if (section == SECTION_LOG) { + } else if (section == SECTION::LOG) { if (::strcmp(key, "FilePath") == 0) m_logFilePath = value; else if (::strcmp(key, "FileRoot") == 0) @@ -225,7 +225,7 @@ bool CConf::read() m_logDisplayLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "FileRotate") == 0) m_logFileRotate = ::atoi(value) == 1; - } else if (section == SECTION_APRS) { + } else if (section == SECTION::APRS) { if (::strcmp(key, "Enable") == 0) m_aprsEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Address") == 0) @@ -238,7 +238,7 @@ bool CConf::read() m_aprsDescription = value; else if (::strcmp(key, "Symbol") == 0) m_aprsSymbol = value; - } else if (section == SECTION_NETWORK) { + } else if (section == SECTION::NETWORK) { if (::strcmp(key, "Startup") == 0) m_networkStartup = value; else if (::strcmp(key, "Options") == 0) @@ -249,7 +249,7 @@ bool CConf::read() m_networkRevert = ::atoi(value) == 1; else if (::strcmp(key, "Debug") == 0) m_networkDebug = ::atoi(value) == 1; - } else if (section == SECTION_YSF_NETWORK) { + } else if (section == SECTION::YSF_NETWORK) { if (::strcmp(key, "Enable") == 0) m_ysfNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Port") == 0) @@ -274,21 +274,21 @@ bool CConf::read() m_ysfNetworkYSF2P25Address = value; else if (::strcmp(key, "YSF2P25Port") == 0) m_ysfNetworkYSF2P25Port = (unsigned short)::atoi(value); - } else if (section == SECTION_FCS_NETWORK) { + } else if (section == SECTION::FCS_NETWORK) { if (::strcmp(key, "Enable") == 0) m_fcsNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Rooms") == 0) m_fcsNetworkFile = value; else if (::strcmp(key, "Port") == 0) m_fcsNetworkPort = (unsigned short)::atoi(value); - } else if (section == SECTION_GPSD) { + } else if (section == SECTION::GPSD) { if (::strcmp(key, "Enable") == 0) m_gpsdEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Address") == 0) m_gpsdAddress = value; else if (::strcmp(key, "Port") == 0) m_gpsdPort = value; - } else if (section == SECTION_REMOTE_COMMANDS) { + } else if (section == SECTION::REMOTE_COMMANDS) { if (::strcmp(key, "Enable") == 0) m_remoteCommandsEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Port") == 0) diff --git a/YSFGateway/DTMF.cpp b/YSFGateway/DTMF.cpp index f08b2da..3d94cba 100644 --- a/YSFGateway/DTMF.cpp +++ b/YSFGateway/DTMF.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012,2013,2015,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2012,2013,2015,2017,2018,2025 by Jonathan Naylor G4KLX * Copyright (C) 2011 by DV Developer Group. DJ0ABR * * This program is free software; you can redistribute it and/or modify @@ -60,17 +60,17 @@ CDTMF::~CDTMF() WX_STATUS CDTMF::decodeVDMode2(unsigned char* payload, bool end) { - assert(payload != NULL); + assert(payload != nullptr); payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; for (unsigned int offset = 5U; offset < 90U; offset += 18U) { WX_STATUS status = decodeVDMode2Slice(payload + offset, end); - if (status != WXS_NONE) + if (status != WX_STATUS::NONE) return status; } - return WXS_NONE; + return WX_STATUS::NONE; } WX_STATUS CDTMF::decodeVDMode2Slice(unsigned char* ambe, bool end) @@ -167,43 +167,43 @@ WX_STATUS CDTMF::decodeVDMode2Slice(unsigned char* ambe, bool end) WX_STATUS CDTMF::validate() const { if (m_command.empty()) - return WXS_NONE; + return WX_STATUS::NONE; size_t length = m_command.length(); char first = m_command.at(0U); if (length == 1U && first == '#') { - return WXS_DISCONNECT; + return WX_STATUS::DISCONNECT; } else if (length == 3U && first == 'A') { for (unsigned int i = 1U; i < 3U; i++) { char c = m_command.at(i); if (c < '0' || c > '9') - return WXS_NONE; + return WX_STATUS::NONE; } - return WXS_CONNECT_FCS; + return WX_STATUS::CONNECT_FCS; } else if (length == 4U && first == 'A') { for (unsigned int i = 1U; i < 4U; i++) { char c = m_command.at(i); if (c < '0' || c > '9') - return WXS_NONE; + return WX_STATUS::NONE; } - return WXS_CONNECT_FCS; + return WX_STATUS::CONNECT_FCS; } else if (length == 6U && first == '#') { for (unsigned int i = 1U; i < 6U; i++) { char c = m_command.at(i); if (c < '0' || c > '9') - return WXS_NONE; + return WX_STATUS::NONE; } if (m_command == "#99999") - return WXS_DISCONNECT; + return WX_STATUS::DISCONNECT; - return WXS_CONNECT_YSF; + return WX_STATUS::CONNECT_YSF; } - return WXS_NONE; + return WX_STATUS::NONE; } std::string CDTMF::getReflector() diff --git a/YSFGateway/FCSNetwork.cpp b/YSFGateway/FCSNetwork.cpp index 4571a73..4b43b36 100644 --- a/YSFGateway/FCSNetwork.cpp +++ b/YSFGateway/FCSNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,17 +34,17 @@ m_socket(port), m_debug(debug), m_addr(), m_addrLen(), -m_ping(NULL), -m_options(NULL), +m_ping(nullptr), +m_options(nullptr), m_opt(), -m_info(NULL), +m_info(nullptr), m_reflector(), m_print(), m_buffer(1000U, "FCS Network Buffer"), m_n(0U), m_pingTimer(1000U, 0U, 800U), m_resetTimer(1000U, 1U), -m_state(FCS_UNLINKED) +m_state(FCS_STATE::UNLINKED) { m_info = new unsigned char[100U]; ::sprintf((char*)m_info, "%9u%9u%-6.6s%-12.12s%7u", rxFrequency, txFrequency, locator.c_str(), FCS_VERSION, id); @@ -93,14 +93,14 @@ void CFCSNetwork::clearDestination() m_pingTimer.stop(); m_resetTimer.stop(); - m_state = FCS_UNLINKED; + m_state = FCS_STATE::UNLINKED; } void CFCSNetwork::write(const unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); - if (m_state != FCS_LINKED) + if (m_state != FCS_STATE::LINKED) return; unsigned char buffer[130U]; @@ -117,7 +117,7 @@ void CFCSNetwork::write(const unsigned char* data) bool CFCSNetwork::writeLink(const std::string& reflector) { - if (m_state != FCS_LINKED) { + if (m_state != FCS_STATE::LINKED) { std::string name = reflector.substr(0U, 6U); if (m_addresses.count(name) == 0U) { @@ -140,7 +140,7 @@ bool CFCSNetwork::writeLink(const std::string& reflector) m_print = reflector.substr(0U, 6U) + "-" + reflector.substr(6U); - m_state = FCS_LINKING; + m_state = FCS_STATE::LINKING; m_pingTimer.start(); @@ -156,7 +156,7 @@ void CFCSNetwork::setOptions(const std::string& options) void CFCSNetwork::writeUnlink(unsigned int count) { - if (m_state != FCS_LINKED) + if (m_state != FCS_STATE::LINKED) return; for (unsigned int i = 0U; i < count; i++) @@ -185,7 +185,7 @@ void CFCSNetwork::clock(unsigned int ms) if (length <= 0) return; - if (m_state == FCS_UNLINKED) + if (m_state == FCS_STATE::UNLINKED) return; if (!CUDPSocket::match(addr, m_addr)) @@ -195,16 +195,16 @@ void CFCSNetwork::clock(unsigned int ms) CUtils::dump(1U, "FCS Network Data Received", buffer, length); if (length == 7) { - if (m_state == FCS_LINKING) + if (m_state == FCS_STATE::LINKING) LogMessage("Linked to %s", m_print.c_str()); - m_state = FCS_LINKED; + m_state = FCS_STATE::LINKED; writeInfo(); writeOptions(m_print); } - if (length == 10 && m_state == FCS_LINKING) { + if (length == 10 && m_state == FCS_STATE::LINKING) { LogMessage("Linked to %s", m_print.c_str()); - m_state = FCS_LINKED; + m_state = FCS_STATE::LINKED; writeInfo(); writeOptions(m_print); } @@ -218,7 +218,7 @@ void CFCSNetwork::clock(unsigned int ms) unsigned int CFCSNetwork::read(unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if (m_buffer.isEmpty()) return 0U; @@ -264,7 +264,7 @@ void CFCSNetwork::close() void CFCSNetwork::writeInfo() { - if (m_state != FCS_LINKED) + if (m_state != FCS_STATE::LINKED) return; if (m_debug) @@ -275,7 +275,7 @@ void CFCSNetwork::writeInfo() void CFCSNetwork::writePing() { - if (m_state == FCS_UNLINKED) + if (m_state == FCS_STATE::UNLINKED) return; if (m_debug) @@ -286,7 +286,7 @@ void CFCSNetwork::writePing() void CFCSNetwork::writeOptions(const std::string& reflector) { - if (m_state != FCS_LINKED) + if (m_state != FCS_STATE::LINKED) return; if (m_opt.size() < 1) diff --git a/YSFGateway/FCSNetwork.h b/YSFGateway/FCSNetwork.h index f9b9d20..1056033 100644 --- a/YSFGateway/FCSNetwork.h +++ b/YSFGateway/FCSNetwork.h @@ -28,10 +28,10 @@ #include #include -enum FCS_STATE { - FCS_UNLINKED, - FCS_LINKING, - FCS_LINKED +enum class FCS_STATE { + UNLINKED, + LINKING, + LINKED }; class CFCSNetwork { diff --git a/YSFGateway/GPS.cpp b/YSFGateway/GPS.cpp index a8f71c1..5239f16 100644 --- a/YSFGateway/GPS.cpp +++ b/YSFGateway/GPS.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018,2020,2024 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2018,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,10 +32,10 @@ const unsigned char LONG_GPS[] = {0x47U, 0x64U}; CGPS::CGPS(CAPRSWriter* writer) : m_writer(writer), -m_buffer(NULL), +m_buffer(nullptr), m_sent(false) { - assert(writer != NULL); + assert(writer != nullptr); m_buffer = new unsigned char[300U]; } @@ -141,7 +141,7 @@ void CGPS::reset() void CGPS::transmitGPS(const unsigned char* source) { - assert(m_writer != NULL); + assert(m_writer != nullptr); // We don't know who its from! if (::memcmp(source, " ", YSF_CALLSIGN_LENGTH) == 0) diff --git a/YSFGateway/Golay24128.cpp b/YSFGateway/Golay24128.cpp index 417da00..5c5aaeb 100644 --- a/YSFGateway/Golay24128.cpp +++ b/YSFGateway/Golay24128.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2010,2016,2025 by Jonathan Naylor G4KLX * Copyright (C) 2002 by Robert H. Morelos-Zaragoza. All rights reserved. */ @@ -1096,7 +1096,7 @@ unsigned int CGolay24128::decode24128(unsigned int code) unsigned int CGolay24128::decode24128(unsigned char* bytes) { - assert(bytes != NULL); + assert(bytes != nullptr); unsigned int code = bytes[0U]; code <<= 8; diff --git a/YSFGateway/Log.cpp b/YSFGateway/Log.cpp index 752601e..9aa2f96 100644 --- a/YSFGateway/Log.cpp +++ b/YSFGateway/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,7 +37,7 @@ static std::string m_filePath; static std::string m_fileRoot; static bool m_fileRotate = true; -static FILE* m_fpLog = NULL; +static FILE* m_fpLog = nullptr; static bool m_daemon = false; static unsigned int m_displayLevel = 2U; @@ -59,10 +59,10 @@ static bool logOpenRotate() struct tm* tm = ::gmtime(&now); if (tm->tm_mday == m_tm.tm_mday && tm->tm_mon == m_tm.tm_mon && tm->tm_year == m_tm.tm_year) { - if (m_fpLog != NULL) + if (m_fpLog != nullptr) return true; } else { - if (m_fpLog != NULL) + if (m_fpLog != nullptr) ::fclose(m_fpLog); } @@ -73,7 +73,7 @@ static bool logOpenRotate() ::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); #endif - if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { + if ((m_fpLog = ::fopen(filename, "a+t")) != nullptr) { status = true; #if !defined(_WIN32) && !defined(_WIN64) @@ -94,7 +94,7 @@ static bool logOpenNoRotate() if (m_fileLevel == 0U) return true; - if (m_fpLog != NULL) + if (m_fpLog != nullptr) return true; char filename[200U]; @@ -104,7 +104,7 @@ static bool logOpenNoRotate() ::sprintf(filename, "%s/%s.log", m_filePath.c_str(), m_fileRoot.c_str()); #endif - if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { + if ((m_fpLog = ::fopen(filename, "a+t")) != nullptr) { status = true; #if !defined(_WIN32) && !defined(_WIN64) @@ -141,13 +141,13 @@ bool LogInitialise(bool daemon, const std::string& filePath, const std::string& void LogFinalise() { - if (m_fpLog != NULL) + if (m_fpLog != nullptr) ::fclose(m_fpLog); } void Log(unsigned int level, const char* fmt, ...) { - assert(fmt != NULL); + assert(fmt != nullptr); char buffer[501U]; #if defined(_WIN32) || defined(_WIN64) @@ -157,7 +157,7 @@ void Log(unsigned int level, const char* fmt, ...) ::sprintf(buffer, "%c: %04u-%02u-%02u %02u:%02u:%02u.%03u ", LEVELS[level], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); #else struct timeval now; - ::gettimeofday(&now, NULL); + ::gettimeofday(&now, nullptr); struct tm* tm = ::gmtime(&now.tv_sec); @@ -167,7 +167,7 @@ void Log(unsigned int level, const char* fmt, ...) va_list vl; va_start(vl, fmt); - ::vsnprintf(buffer + ::strlen(buffer), 500, fmt, vl); + ::vsnprintf(buffer + ::strlen(buffer), 500 - ::strlen(buffer), fmt, vl); va_end(vl); diff --git a/YSFGateway/RingBuffer.h b/YSFGateway/RingBuffer.h index 7805005..3091d80 100644 --- a/YSFGateway/RingBuffer.h +++ b/YSFGateway/RingBuffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009,2012,2013,2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2009,2012,2013,2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,12 +30,12 @@ public: CRingBuffer(unsigned int length, const char* name) : m_length(length), m_name(name), - m_buffer(NULL), + m_buffer(nullptr), m_iPtr(0U), m_oPtr(0U) { assert(length > 0U); - assert(name != NULL); + assert(name != nullptr); m_buffer = new T[length]; diff --git a/YSFGateway/StopWatch.cpp b/YSFGateway/StopWatch.cpp index 481241b..3d59e12 100644 --- a/YSFGateway/StopWatch.cpp +++ b/YSFGateway/StopWatch.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,7 +77,7 @@ CStopWatch::~CStopWatch() unsigned long long CStopWatch::time() const { struct timeval now; - ::gettimeofday(&now, NULL); + ::gettimeofday(&now, nullptr); return now.tv_sec * 1000ULL + now.tv_usec / 1000ULL; } diff --git a/YSFGateway/Sync.cpp b/YSFGateway/Sync.cpp index c8d4d52..cc598c7 100644 --- a/YSFGateway/Sync.cpp +++ b/YSFGateway/Sync.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ void CSync::add(unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); ::memcpy(data, YSF_SYNC_BYTES, YSF_SYNC_LENGTH_BYTES); } diff --git a/YSFGateway/Thread.cpp b/YSFGateway/Thread.cpp index 6f76f5b..86b8967 100644 --- a/YSFGateway/Thread.cpp +++ b/YSFGateway/Thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,9 +31,9 @@ CThread::~CThread() bool CThread::run() { - m_handle = ::CreateThread(NULL, 0, &helper, this, 0, NULL); + m_handle = ::CreateThread(nullptr, 0, &helper, this, 0, nullptr); - return m_handle != NULL; + return m_handle != nullptr; } @@ -74,13 +74,13 @@ CThread::~CThread() bool CThread::run() { - return ::pthread_create(&m_thread, NULL, helper, this) == 0; + return ::pthread_create(&m_thread, nullptr, helper, this) == 0; } void CThread::wait() { - ::pthread_join(m_thread, NULL); + ::pthread_join(m_thread, nullptr); } @@ -90,7 +90,7 @@ void* CThread::helper(void* arg) p->entry(); - return NULL; + return nullptr; } void CThread::sleep(unsigned int ms) @@ -100,7 +100,7 @@ void CThread::sleep(unsigned int ms) ts.tv_sec = ms / 1000U; ts.tv_nsec = (ms % 1000U) * 1000000U; - ::nanosleep(&ts, NULL); + ::nanosleep(&ts, nullptr); } #endif diff --git a/YSFGateway/UDPSocket.cpp b/YSFGateway/UDPSocket.cpp index c28c039..27101fa 100644 --- a/YSFGateway/UDPSocket.cpp +++ b/YSFGateway/UDPSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -94,7 +94,7 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd /* Port is always digits, no needs to lookup service */ hints.ai_flags |= AI_NUMERICSERV; - int err = ::getaddrinfo(hostname.empty() ? NULL : hostname.c_str(), portstr.c_str(), &hints, &res); + int err = ::getaddrinfo(hostname.empty() ? nullptr : hostname.c_str(), portstr.c_str(), &hints, &res); if (err != 0) { sockaddr_in* paddr = (sockaddr_in*)&addr; ::memset(paddr, 0x00U, address_length = sizeof(sockaddr_in)); @@ -119,7 +119,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad if (addr1.ss_family != addr2.ss_family) return false; - if (type == IMT_ADDRESS_AND_PORT) { + if (type == IPMATCHTYPE::ADDRESS_AND_PORT) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -134,7 +134,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad default: return false; } - } else if (type == IMT_ADDRESS_ONLY) { + } else if (type == IPMATCHTYPE::ADDRESS_ONLY) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -233,7 +233,7 @@ bool CUDPSocket::open() int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int &addressLength) { - assert(buffer != NULL); + assert(buffer != nullptr); assert(length > 0U); #if defined(_WIN32) || defined(_WIN64) @@ -301,7 +301,7 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const sockaddr_storage& address, unsigned int addressLength) { - assert(buffer != NULL); + assert(buffer != nullptr); assert(length > 0U); #if defined(_WIN32) || defined(_WIN64) assert(m_fd != INVALID_SOCKET); diff --git a/YSFGateway/UDPSocket.h b/YSFGateway/UDPSocket.h index 75228a3..1ca32d9 100644 --- a/YSFGateway/UDPSocket.h +++ b/YSFGateway/UDPSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011,2013,2015,2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2011,2013,2015,2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,9 +35,9 @@ #include #endif -enum IPMATCHTYPE { - IMT_ADDRESS_AND_PORT, - IMT_ADDRESS_ONLY +enum class IPMATCHTYPE { + ADDRESS_AND_PORT, + ADDRESS_ONLY }; class CUDPSocket { @@ -60,7 +60,7 @@ public: static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength); static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength, struct addrinfo& hints); - static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IPMATCHTYPE::ADDRESS_AND_PORT); static bool isNone(const sockaddr_storage& addr); diff --git a/YSFGateway/Utils.cpp b/YSFGateway/Utils.cpp index 49ded13..4461eee 100644 --- a/YSFGateway/Utils.cpp +++ b/YSFGateway/Utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009,2014,2015,2016 Jonathan Naylor, G4KLX + * Copyright (C) 2009,2014,2015,2016,2025 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,14 +19,14 @@ void CUtils::dump(const std::string& title, const unsigned char* data, unsigned int length) { - assert(data != NULL); + assert(data != nullptr); dump(2U, title, data, length); } void CUtils::dump(int level, const std::string& title, const unsigned char* data, unsigned int length) { - assert(data != NULL); + assert(data != nullptr); ::Log(level, "%s", title.c_str()); @@ -72,14 +72,14 @@ void CUtils::dump(int level, const std::string& title, const unsigned char* data void CUtils::dump(const std::string& title, const bool* bits, unsigned int length) { - assert(bits != NULL); + assert(bits != nullptr); dump(2U, title, bits, length); } void CUtils::dump(int level, const std::string& title, const bool* bits, unsigned int length) { - assert(bits != NULL); + assert(bits != nullptr); unsigned char bytes[100U]; unsigned int nBytes = 0U; @@ -91,7 +91,7 @@ void CUtils::dump(int level, const std::string& title, const bool* bits, unsigne void CUtils::byteToBitsBE(unsigned char byte, bool* bits) { - assert(bits != NULL); + assert(bits != nullptr); bits[0U] = (byte & 0x80U) == 0x80U; bits[1U] = (byte & 0x40U) == 0x40U; @@ -105,7 +105,7 @@ void CUtils::byteToBitsBE(unsigned char byte, bool* bits) void CUtils::byteToBitsLE(unsigned char byte, bool* bits) { - assert(bits != NULL); + assert(bits != nullptr); bits[0U] = (byte & 0x01U) == 0x01U; bits[1U] = (byte & 0x02U) == 0x02U; @@ -119,7 +119,7 @@ void CUtils::byteToBitsLE(unsigned char byte, bool* bits) void CUtils::bitsToByteBE(const bool* bits, unsigned char& byte) { - assert(bits != NULL); + assert(bits != nullptr); byte = bits[0U] ? 0x80U : 0x00U; byte |= bits[1U] ? 0x40U : 0x00U; @@ -133,7 +133,7 @@ void CUtils::bitsToByteBE(const bool* bits, unsigned char& byte) void CUtils::bitsToByteLE(const bool* bits, unsigned char& byte) { - assert(bits != NULL); + assert(bits != nullptr); byte = bits[0U] ? 0x01U : 0x00U; byte |= bits[1U] ? 0x02U : 0x00U; diff --git a/YSFGateway/Version.h b/YSFGateway/Version.h index 8417ca9..13f194e 100644 --- a/YSFGateway/Version.h +++ b/YSFGateway/Version.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021,2023,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,2023,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20241218"; +const char* VERSION = "20250319"; #endif diff --git a/YSFGateway/WiresX.cpp b/YSFGateway/WiresX.cpp index 0394799..1c8765c 100644 --- a/YSFGateway/WiresX.cpp +++ b/YSFGateway/WiresX.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018,2019,2020 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2018,2019,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -48,26 +48,26 @@ m_callsign(callsign), m_node(), m_network(network), m_reflectors(reflectors), -m_reflector(NULL), +m_reflector(nullptr), m_id(), m_name(), -m_command(NULL), +m_command(nullptr), m_txFrequency(0U), m_rxFrequency(0U), m_timer(1000U, 1U), m_seqNo(0U), -m_header(NULL), -m_csd1(NULL), -m_csd2(NULL), -m_csd3(NULL), -m_status(WXSI_NONE), +m_header(nullptr), +m_csd1(nullptr), +m_csd2(nullptr), +m_csd3(nullptr), +m_status(WXSI_STATUS::NONE), m_start(0U), m_search(), m_busy(false), m_busyTimer(3000U, 1U), m_bufferTX(10000U, "YSF Wires-X TX Buffer") { - assert(network != NULL); + assert(network != nullptr); m_node = callsign; if (suffix.size() > 0U) { @@ -187,35 +187,35 @@ bool CWiresX::start() WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* source, const CYSFFICH& fich, bool wiresXCommandPassthrough) { - assert(data != NULL); - assert(source != NULL); + assert(data != nullptr); + assert(source != nullptr); unsigned char dt = fich.getDT(); if (dt != YSF_DT_DATA_FR_MODE) - return WXS_NONE; + return WX_STATUS::NONE; unsigned char fi = fich.getFI(); if (fi != YSF_FI_COMMUNICATIONS) - return WXS_NONE; + return WX_STATUS::NONE; CYSFPayload payload; unsigned char fn = fich.getFN(); if (fn == 0U) - return WXS_NONE; + return WX_STATUS::NONE; if (fn == 1U) { bool valid = payload.readDataFRModeData2(data, m_command + 0U); if (!valid) - return WXS_NONE; + return WX_STATUS::NONE; } else { bool valid = payload.readDataFRModeData1(data, m_command + (fn - 2U) * 40U + 20U); if (!valid) - return WXS_NONE; + return WX_STATUS::NONE; valid = payload.readDataFRModeData2(data, m_command + (fn - 2U) * 40U + 40U); if (!valid) - return WXS_NONE; + return WX_STATUS::NONE; } unsigned char ft = fich.getFT(); @@ -234,52 +234,52 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc } if (!valid) - return WXS_NONE; + return WX_STATUS::NONE; CUtils::dump(1U, "Received Wires-X command", m_command, cmd_len); // If we are using WiresX Passthrough (we already know we are on a YSF2xxx room from YSFGateway if (wiresXCommandPassthrough) { if (::memcmp(m_command + 1U, DX_REQ, 3U) == 0) { - return WXS_NONE; + return WX_STATUS::NONE; } else if (::memcmp(m_command + 1U, ALL_REQ, 3U) == 0) { - return WXS_NONE; + return WX_STATUS::NONE; } else if (::memcmp(m_command + 1U, CONN_REQ, 3U) == 0) { - return WXS_NONE; + return WX_STATUS::NONE; } else if (::memcmp(m_command + 1U, DISC_REQ, 3U) == 0) { processDisconnect(source); - return WXS_DISCONNECT; + return WX_STATUS::DISCONNECT; } else if (::memcmp(m_command + 1U, CAT_REQ, 3U) == 0) { - return WXS_NONE; + return WX_STATUS::NONE; } else { CUtils::dump("Unknown Wires-X command", m_command, cmd_len); - return WXS_NONE; + return WX_STATUS::NONE; } } // Origional Code Here else { if (::memcmp(m_command + 1U, DX_REQ, 3U) == 0) { processDX(source); - return WXS_NONE; + return WX_STATUS::NONE; } else if (::memcmp(m_command + 1U, ALL_REQ, 3U) == 0) { processAll(source, m_command + 5U); - return WXS_NONE; + return WX_STATUS::NONE; } else if (::memcmp(m_command + 1U, CONN_REQ, 3U) == 0) { return processConnect(source, m_command + 5U); } else if (::memcmp(m_command + 1U, DISC_REQ, 3U) == 0) { processDisconnect(source); - return WXS_DISCONNECT; + return WX_STATUS::DISCONNECT; } else if (::memcmp(m_command + 1U, CAT_REQ, 3U) == 0) { processCategory(source, m_command + 5U); - return WXS_NONE; + return WX_STATUS::NONE; } else { CUtils::dump("Unknown Wires-X command", m_command, cmd_len); - return WXS_NONE; + return WX_STATUS::NONE; } } } - return WXS_NONE; + return WX_STATUS::NONE; } CYSFReflector* CWiresX::getReflector() const @@ -296,7 +296,7 @@ void CWiresX::processDX(const unsigned char* source) { ::LogDebug("Received DX from %10.10s", source); - m_status = WXSI_DX; + m_status = WXSI_STATUS::DX; m_timer.start(); } @@ -329,7 +329,7 @@ void CWiresX::processCategory(const unsigned char* source, const unsigned char* m_category.push_back(refl); } - m_status = WXSI_CATEGORY; + m_status = WXSI_STATUS::CATEGORY; m_timer.start(); } @@ -346,7 +346,7 @@ void CWiresX::processAll(const unsigned char* source, const unsigned char* data) if (m_start > 0U) m_start--; - m_status = WXSI_ALL; + m_status = WXSI_STATUS::ALL; m_timer.start(); } else if (data[0U] == '1' && data[1U] == '1') { @@ -358,7 +358,7 @@ void CWiresX::processAll(const unsigned char* source, const unsigned char* data) m_search = std::string((char*)(data + 5U), 16U); - m_status = WXSI_SEARCH; + m_status = WXSI_STATUS::SEARCH; m_timer.start(); } @@ -374,19 +374,19 @@ WX_STATUS CWiresX::processConnect(const unsigned char* source, const unsigned ch std::string id = std::string((char*)data, 5U); m_reflector = m_reflectors.findById(id); - if (m_reflector == NULL) - return WXS_NONE; + if (m_reflector == nullptr) + return WX_STATUS::NONE; - m_status = WXSI_CONNECT; + m_status = WXSI_STATUS::CONNECT; m_timer.start(); switch (m_reflector->m_type) { - case YT_YSF: - return WXS_CONNECT_YSF; - case YT_FCS: - return WXS_CONNECT_FCS; + case YSF_TYPE::YSF: + return WX_STATUS::CONNECT_YSF; + case YSF_TYPE::FCS: + return WX_STATUS::CONNECT_FCS; default: - return WXS_NONE; + return WX_STATUS::NONE; } } @@ -397,18 +397,18 @@ void CWiresX::processConnect(CYSFReflector* reflector) m_reflector = reflector; - m_status = WXSI_CONNECT; + m_status = WXSI_STATUS::CONNECT; m_timer.start(); } void CWiresX::processDisconnect(const unsigned char* source) { - if (source != NULL) + if (source != nullptr) ::LogDebug("Received Disconect from %10.10s", source); - m_reflector = NULL; + m_reflector = nullptr; - m_status = WXSI_DISCONNECT; + m_status = WXSI_STATUS::DISCONNECT; m_timer.start(); } @@ -421,29 +421,29 @@ void CWiresX::clock(unsigned int ms) m_timer.clock(ms); if (m_timer.isRunning() && m_timer.hasExpired()) { switch (m_status) { - case WXSI_DX: + case WXSI_STATUS::DX: sendDXReply(); break; - case WXSI_ALL: + case WXSI_STATUS::ALL: sendAllReply(); break; - case WXSI_SEARCH: + case WXSI_STATUS::SEARCH: sendSearchReply(); break; - case WXSI_CONNECT: + case WXSI_STATUS::CONNECT: sendConnectReply(); break; - case WXSI_DISCONNECT: + case WXSI_STATUS::DISCONNECT: sendDisconnectReply(); break; - case WXSI_CATEGORY: + case WXSI_STATUS::CATEGORY: sendCategoryReply(); break; default: break; } - m_status = WXSI_NONE; + m_status = WXSI_STATUS::NONE; m_timer.stop(); } @@ -468,13 +468,13 @@ void CWiresX::clock(unsigned int ms) void CWiresX::createReply(const unsigned char* data, unsigned int length, CYSFNetwork* network) { - assert(data != NULL); + assert(data != nullptr); assert(length > 0U); bool isYSF2XX = true; // If we don't explicitly pass a network, use the default one. - if (network == NULL) { + if (network == nullptr) { isYSF2XX = false; network = m_network; } @@ -642,7 +642,7 @@ void CWiresX::sendDXReply() for (unsigned int i = 0U; i < 14U; i++) data[i + 20U] = m_name.at(i); - if (m_reflector == NULL) { + if (m_reflector == nullptr) { data[34U] = '1'; data[35U] = '2'; @@ -718,7 +718,7 @@ void CWiresX::sendConnect(CYSFNetwork* network) void CWiresX::sendConnectReply() { - assert(m_reflector != NULL); + assert(m_reflector != nullptr); unsigned char data[110U]; ::memset(data, 0x00U, 110U); diff --git a/YSFGateway/WiresX.h b/YSFGateway/WiresX.h index 7901c2b..2f4de45 100644 --- a/YSFGateway/WiresX.h +++ b/YSFGateway/WiresX.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018,2019,2020 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2018,2019,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,21 +28,21 @@ #include -enum WX_STATUS { - WXS_NONE, - WXS_CONNECT_YSF, - WXS_CONNECT_FCS, - WXS_DISCONNECT +enum class WX_STATUS { + NONE, + CONNECT_YSF, + CONNECT_FCS, + DISCONNECT }; -enum WXSI_STATUS { - WXSI_NONE, - WXSI_DX, - WXSI_CONNECT, - WXSI_DISCONNECT, - WXSI_ALL, - WXSI_SEARCH, - WXSI_CATEGORY +enum class WXSI_STATUS { + NONE, + DX, + CONNECT, + DISCONNECT, + ALL, + SEARCH, + CATEGORY }; class CWiresX { @@ -66,7 +66,7 @@ public: void setReflector(CYSFReflector* reflector); void processConnect(CYSFReflector* reflector); - void processDisconnect(const unsigned char* source = NULL); + void processDisconnect(const unsigned char* source = nullptr); void sendConnect(CYSFNetwork* network); @@ -111,7 +111,7 @@ private: void sendSearchNotFoundReply(); void sendCategoryReply(); - void createReply(const unsigned char* data, unsigned int length, CYSFNetwork* network = NULL); + void createReply(const unsigned char* data, unsigned int length, CYSFNetwork* network = nullptr); void writeData(const unsigned char* data, CYSFNetwork* network, bool isYSF2XX); unsigned char calculateFT(unsigned int length, unsigned int offset) const; }; diff --git a/YSFGateway/YSFConvolution.cpp b/YSFGateway/YSFConvolution.cpp index 23b117e..584a24b 100644 --- a/YSFGateway/YSFConvolution.cpp +++ b/YSFGateway/YSFConvolution.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,12 +36,12 @@ const uint32_t M = 2U; const unsigned int K = 5U; CYSFConvolution::CYSFConvolution() : -m_metrics1(NULL), -m_metrics2(NULL), -m_oldMetrics(NULL), -m_newMetrics(NULL), -m_decisions(NULL), -m_dp(NULL) +m_metrics1(nullptr), +m_metrics2(nullptr), +m_oldMetrics(nullptr), +m_newMetrics(nullptr), +m_decisions(nullptr), +m_dp(nullptr) { m_metrics1 = new uint16_t[16U]; m_metrics2 = new uint16_t[16U]; @@ -98,7 +98,7 @@ void CYSFConvolution::decode(uint8_t s0, uint8_t s1) void CYSFConvolution::chainback(unsigned char* out, unsigned int nBits) { - assert(out != NULL); + assert(out != nullptr); uint32_t state = 0U; @@ -115,8 +115,8 @@ void CYSFConvolution::chainback(unsigned char* out, unsigned int nBits) void CYSFConvolution::encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const { - assert(in != NULL); - assert(out != NULL); + assert(in != nullptr); + assert(out != nullptr); assert(nBits > 0U); uint8_t d1 = 0U, d2 = 0U, d3 = 0U, d4 = 0U; diff --git a/YSFGateway/YSFFICH.cpp b/YSFGateway/YSFFICH.cpp index fb0726e..57eb524 100644 --- a/YSFGateway/YSFFICH.cpp +++ b/YSFGateway/YSFFICH.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2019,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2019,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,7 +55,7 @@ const unsigned int INTERLEAVE_TABLE[] = { 38U, 78U, 118U, 158U, 198U }; CYSFFICH::CYSFFICH(const CYSFFICH& fich) : -m_fich(NULL) +m_fich(nullptr) { m_fich = new unsigned char[6U]; @@ -63,7 +63,7 @@ m_fich(NULL) } CYSFFICH::CYSFFICH() : - m_fich(NULL) + m_fich(nullptr) { m_fich = new unsigned char[6U]; @@ -77,7 +77,7 @@ CYSFFICH::~CYSFFICH() bool CYSFFICH::decode(const unsigned char* bytes) { - assert(bytes != NULL); + assert(bytes != nullptr); // Skip the sync bytes bytes += YSF_SYNC_LENGTH_BYTES; @@ -116,7 +116,7 @@ bool CYSFFICH::decode(const unsigned char* bytes) void CYSFFICH::encode(unsigned char* bytes) { - assert(bytes != NULL); + assert(bytes != nullptr); // Skip the sync bytes bytes += YSF_SYNC_LENGTH_BYTES; diff --git a/YSFGateway/YSFGateway.cpp b/YSFGateway/YSFGateway.cpp index 05aa591..7cddea9 100644 --- a/YSFGateway/YSFGateway.cpp +++ b/YSFGateway/YSFGateway.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016-2020,2024 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -121,14 +121,14 @@ CYSFGateway::CYSFGateway(const std::string& configFile) : m_callsign(), m_suffix(), m_conf(configFile), -m_writer(NULL), -m_gps(NULL), -m_reflectors(NULL), -m_wiresX(NULL), +m_writer(nullptr), +m_gps(nullptr), +m_reflectors(nullptr), +m_wiresX(nullptr), m_dtmf(), -m_ysfNetwork(NULL), -m_fcsNetwork(NULL), -m_linkType(LINK_NONE), +m_ysfNetwork(nullptr), +m_fcsNetwork(nullptr), +m_linkType(LINK_TYPE::NONE), m_current(), m_startup(), m_options(), @@ -136,7 +136,7 @@ m_exclude(false), m_inactivityTimer(1000U), m_lostTimer(1000U, 120U), m_fcsNetworkEnabled(false), -m_remoteSocket(NULL) +m_remoteSocket(nullptr) { CUDPSocket::startup(); } @@ -183,7 +183,7 @@ int CYSFGateway::run() // If we are currently root... if (getuid() == 0) { struct passwd* user = ::getpwnam("mmdvm"); - if (user == NULL) { + if (user == nullptr) { ::fprintf(stderr, "Could not get the mmdvm user, exiting\n"); return -1; } @@ -293,7 +293,7 @@ int CYSFGateway::run() ret = m_remoteSocket->open(); if (!ret) { delete m_remoteSocket; - m_remoteSocket = NULL; + m_remoteSocket = nullptr; } } @@ -322,29 +322,29 @@ int CYSFGateway::run() unsigned char dt = fich.getDT(); CYSFReflector* reflector = m_wiresX->getReflector(); - if (m_ysfNetwork != NULL && m_linkType == LINK_YSF && wiresXCommandPassthrough && reflector->m_wiresX) { + if (m_ysfNetwork != nullptr && m_linkType == LINK_TYPE::YSF && wiresXCommandPassthrough && reflector->m_wiresX) { processDTMF(buffer, dt); processWiresX(buffer, fich, true, wiresXCommandPassthrough); } else { processDTMF(buffer, dt); processWiresX(buffer, fich, false, wiresXCommandPassthrough); reflector = m_wiresX->getReflector(); //reflector may have changed - if (m_ysfNetwork != NULL && m_linkType == LINK_YSF && reflector->m_wiresX) + if (m_ysfNetwork != nullptr && m_linkType == LINK_TYPE::YSF && reflector->m_wiresX) m_exclude = (dt == YSF_DT_DATA_FR_MODE); } - if (m_gps != NULL) + if (m_gps != nullptr) m_gps->data(buffer + 14U, buffer + 35U, fich); } - if (m_ysfNetwork != NULL && m_linkType == LINK_YSF && !m_exclude) { + if (m_ysfNetwork != nullptr && m_linkType == LINK_TYPE::YSF && !m_exclude) { if (::memcmp(buffer + 0U, "YSFD", 4U) == 0) { m_ysfNetwork->write(buffer); m_inactivityTimer.start(); } } - if (m_fcsNetwork != NULL && m_linkType == LINK_FCS && !m_exclude) { + if (m_fcsNetwork != nullptr && m_linkType == LINK_TYPE::FCS && !m_exclude) { if (::memcmp(buffer + 0U, "YSFD", 4U) == 0) { m_fcsNetwork->write(buffer); m_inactivityTimer.start(); @@ -352,16 +352,16 @@ int CYSFGateway::run() } if ((buffer[34U] & 0x01U) == 0x01U) { - if (m_gps != NULL) + if (m_gps != nullptr) m_gps->reset(); m_dtmf.reset(); m_exclude = false; } } - if (m_ysfNetwork != NULL) { + if (m_ysfNetwork != nullptr) { while (m_ysfNetwork->read(buffer) > 0U) { - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { // Only pass through YSF data packets if (::memcmp(buffer + 0U, "YSFD", 4U) == 0 && !m_wiresX->isBusy()) rptNetwork.write(buffer); @@ -371,9 +371,9 @@ int CYSFGateway::run() } } - if (m_fcsNetwork != NULL) { + if (m_fcsNetwork != nullptr) { while (m_fcsNetwork->read(buffer) > 0U) { - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { // Only pass through YSF data packets if (::memcmp(buffer + 0U, "YSFD", 4U) == 0 && !m_wiresX->isBusy()) rptNetwork.write(buffer); @@ -383,18 +383,18 @@ int CYSFGateway::run() } } - if (m_remoteSocket != NULL) + if (m_remoteSocket != nullptr) processRemoteCommands(); unsigned int ms = stopWatch.elapsed(); stopWatch.start(); rptNetwork.clock(ms); - if (m_ysfNetwork != NULL) + if (m_ysfNetwork != nullptr) m_ysfNetwork->clock(ms); - if (m_fcsNetwork != NULL) + if (m_fcsNetwork != nullptr) m_fcsNetwork->clock(ms); - if (m_writer != NULL) + if (m_writer != nullptr) m_writer->clock(ms); m_wiresX->clock(ms); @@ -402,32 +402,32 @@ int CYSFGateway::run() if (m_inactivityTimer.isRunning() && m_inactivityTimer.hasExpired()) { if (revert) { if (m_current != m_startup) { - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { m_wiresX->processDisconnect(); m_ysfNetwork->writeUnlink(3U); m_ysfNetwork->clearDestination(); } - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { m_fcsNetwork->writeUnlink(3U); m_fcsNetwork->clearDestination(); } m_current.clear(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; startupLinking(); } } else { - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { LogMessage("Disconnecting due to inactivity"); m_wiresX->processDisconnect(); m_ysfNetwork->writeUnlink(3U); m_ysfNetwork->clearDestination(); } - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { LogMessage("Disconnecting due to inactivity"); m_fcsNetwork->writeUnlink(3U); m_fcsNetwork->clearDestination(); @@ -435,7 +435,7 @@ int CYSFGateway::run() m_current.clear(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } m_inactivityTimer.start(); @@ -443,13 +443,13 @@ int CYSFGateway::run() m_lostTimer.clock(ms); if (m_lostTimer.isRunning() && m_lostTimer.hasExpired()) { - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { LogWarning("Link has failed, polls lost"); m_wiresX->processDisconnect(); m_ysfNetwork->clearDestination(); } - if (m_fcsNetwork != NULL) { + if (m_fcsNetwork != nullptr) { LogWarning("Link has failed, polls lost"); m_fcsNetwork->clearDestination(); } @@ -457,7 +457,7 @@ int CYSFGateway::run() m_current.clear(); m_inactivityTimer.start(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } if (ms < 5U) @@ -466,23 +466,23 @@ int CYSFGateway::run() rptNetwork.clearDestination(); - if (m_gps != NULL) { + if (m_gps != nullptr) { m_writer->close(); delete m_writer; delete m_gps; } - if (m_ysfNetwork != NULL) { + if (m_ysfNetwork != nullptr) { m_ysfNetwork->clearDestination(); delete m_ysfNetwork; } - if (m_fcsNetwork != NULL) { + if (m_fcsNetwork != nullptr) { m_fcsNetwork->close(); delete m_fcsNetwork; } - if (m_remoteSocket != NULL) { + if (m_remoteSocket != nullptr) { m_remoteSocket->close(); delete m_remoteSocket; } @@ -531,7 +531,7 @@ void CYSFGateway::createGPS() bool ret = m_writer->open(); if (!ret) { delete m_writer; - m_writer = NULL; + m_writer = nullptr; return; } @@ -540,7 +540,7 @@ void CYSFGateway::createGPS() void CYSFGateway::createWiresX(CYSFNetwork* rptNetwork) { - assert(rptNetwork != NULL); + assert(rptNetwork != nullptr); m_wiresX = new CWiresX(m_callsign, m_suffix, rptNetwork, *m_reflectors); @@ -580,15 +580,15 @@ void CYSFGateway::createWiresX(CYSFNetwork* rptNetwork) void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fich, bool dontProcessWiresXLocal, bool wiresXCommandPassthrough) { - assert(buffer != NULL); + assert(buffer != nullptr); WX_STATUS status = m_wiresX->process(buffer + 35U, buffer + 14U, fich, dontProcessWiresXLocal); switch (status) { - case WXS_CONNECT_YSF: { - if (m_linkType == LINK_YSF) + case WX_STATUS::CONNECT_YSF: { + if (m_linkType == LINK_TYPE::YSF) m_ysfNetwork->writeUnlink(3U); - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { m_fcsNetwork->writeUnlink(3U); m_fcsNetwork->clearDestination(); } @@ -602,7 +602,7 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic m_current = reflector->m_id; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_YSF; + m_linkType = LINK_TYPE::YSF; // If we are linking to a YSF2xxx mode, send the YSF2xxx gateway the link command too if (reflector->m_wiresX && wiresXCommandPassthrough) { @@ -611,19 +611,19 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic } } break; - case WXS_CONNECT_FCS: { - if (m_linkType == LINK_YSF) { + case WX_STATUS::CONNECT_FCS: { + if (m_linkType == LINK_TYPE::YSF) { m_ysfNetwork->writeUnlink(3U); m_ysfNetwork->clearDestination(); } - if (m_linkType == LINK_FCS) + if (m_linkType == LINK_TYPE::FCS) m_fcsNetwork->writeUnlink(3U); m_current.clear(); m_inactivityTimer.start(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; CYSFReflector* reflector = m_wiresX->getReflector(); LogMessage("Connect to %s - \"%s\" has been requested by %10.10s", reflector->m_id.c_str(), reflector->m_name.c_str(), buffer + 14U); @@ -635,14 +635,14 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic if (ok) { m_current = name; m_lostTimer.start(); - m_linkType = LINK_FCS; + m_linkType = LINK_TYPE::FCS; } else { LogMessage("Unknown reflector - %s", name.c_str()); } } break; - case WXS_DISCONNECT: - if (m_linkType == LINK_YSF) { + case WX_STATUS::DISCONNECT: + if (m_linkType == LINK_TYPE::YSF) { LogMessage("Disconnect has been requested by %10.10s", buffer + 14U); if ( (wiresXCommandPassthrough) && (::memcmp(buffer + 0U, "YSFD", 4U) == 0) ) { // Send the disconnect to the YSF2xxx gateway too @@ -655,9 +655,9 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic m_current.clear(); m_inactivityTimer.start(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { LogMessage("Disconnect has been requested by %10.10s", buffer + 14U); m_fcsNetwork->writeUnlink(3U); @@ -666,7 +666,7 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic m_current.clear(); m_inactivityTimer.start(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } break; default: @@ -676,9 +676,9 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) { - assert(buffer != NULL); + assert(buffer != nullptr); - WX_STATUS status = WXS_NONE; + WX_STATUS status = WX_STATUS::NONE; switch (dt) { case YSF_DT_VD_MODE2: status = m_dtmf.decodeVDMode2(buffer + 35U, (buffer[34U] & 0x01U) == 0x01U); @@ -688,16 +688,16 @@ void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) } switch (status) { - case WXS_CONNECT_YSF: { + case WX_STATUS::CONNECT_YSF: { std::string id = m_dtmf.getReflector(); CYSFReflector* reflector = m_reflectors->findById(id); - if (reflector != NULL) { + if (reflector != nullptr) { m_wiresX->processConnect(reflector); - if (m_linkType == LINK_YSF) + if (m_linkType == LINK_TYPE::YSF) m_ysfNetwork->writeUnlink(3U); - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { m_fcsNetwork->writeUnlink(3U); m_fcsNetwork->clearDestination(); } @@ -710,11 +710,11 @@ void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) m_current = id; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_YSF; + m_linkType = LINK_TYPE::YSF; } } break; - case WXS_CONNECT_FCS: { + case WX_STATUS::CONNECT_FCS: { std::string raw = m_dtmf.getReflector(); std::string id = "FCS00"; std::string idShort = "FCS"; @@ -730,18 +730,18 @@ void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) return; } - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { m_wiresX->processDisconnect(); m_ysfNetwork->writeUnlink(3U); m_ysfNetwork->clearDestination(); } - if (m_linkType == LINK_FCS) + if (m_linkType == LINK_TYPE::FCS) m_fcsNetwork->writeUnlink(3U); m_current.clear(); m_inactivityTimer.stop(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; LogMessage("Connect via DTMF to %s has been requested by %10.10s", id.c_str(), buffer + 14U); @@ -750,14 +750,14 @@ void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) m_current = id; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_FCS; + m_linkType = LINK_TYPE::FCS; } else { LogMessage("Unknown reflector - %s", id.c_str()); } } break; - case WXS_DISCONNECT: - if (m_linkType == LINK_YSF) { + case WX_STATUS::DISCONNECT: + if (m_linkType == LINK_TYPE::YSF) { m_wiresX->processDisconnect(); LogMessage("Disconnect via DTMF has been requested by %10.10s", buffer + 14U); @@ -768,9 +768,9 @@ void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) m_current.clear(); m_inactivityTimer.start(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { LogMessage("Disconnect via DTMF has been requested by %10.10s", buffer + 14U); m_fcsNetwork->writeUnlink(3U); @@ -779,7 +779,7 @@ void CYSFGateway::processDTMF(unsigned char* buffer, unsigned char dt) m_current.clear(); m_inactivityTimer.start(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } break; default: @@ -840,11 +840,11 @@ std::string CYSFGateway::calculateLocator() void CYSFGateway::startupLinking() { if (!m_startup.empty()) { - if (m_startup.substr(0U, 3U) == "FCS" && m_fcsNetwork != NULL) { + if (m_startup.substr(0U, 3U) == "FCS" && m_fcsNetwork != nullptr) { m_current.clear(); m_inactivityTimer.stop(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; bool ok = m_fcsNetwork->writeLink(m_startup); m_fcsNetwork->setOptions(m_options); @@ -855,18 +855,18 @@ void CYSFGateway::startupLinking() m_current = m_startup; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_FCS; + m_linkType = LINK_TYPE::FCS; } else { LogMessage("Unknown reflector - %s", m_startup.c_str()); } - } else if (m_ysfNetwork != NULL) { + } else if (m_ysfNetwork != nullptr) { m_current.clear(); m_inactivityTimer.stop(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; CYSFReflector* reflector = m_reflectors->findByName(m_startup); - if (reflector != NULL) { + if (reflector != nullptr) { LogMessage("Automatic (re-)connection to %5.5s - \"%s\"", reflector->m_id.c_str(), reflector->m_name.c_str()); m_ysfNetwork->setOptions(m_options); @@ -879,7 +879,7 @@ void CYSFGateway::startupLinking() m_current = m_startup; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_YSF; + m_linkType = LINK_TYPE::YSF; } } } @@ -890,20 +890,20 @@ void CYSFGateway::startupLinking() void CYSFGateway::readFCSRoomsFile(const std::string& filename) { FILE* fp = ::fopen(filename.c_str(), "rt"); - if (fp == NULL) + if (fp == nullptr) return; unsigned int count = 0U; char buffer[200U]; - while (::fgets(buffer, 200, fp) != NULL) { + while (::fgets(buffer, 200, fp) != nullptr) { if (buffer[0U] == '#') continue; char* p1 = ::strtok(buffer, ";"); - char* p2 = ::strtok(NULL, ";"); + char* p2 = ::strtok(nullptr, ";"); - if (p1 != NULL && p2 != NULL) { + if (p1 != nullptr && p2 != nullptr) { m_wiresX->addFCSRoom(p1, p2); count++; } @@ -928,15 +928,15 @@ void CYSFGateway::processRemoteCommands() // Left trim id.erase(id.begin(), std::find_if(id.begin(), id.end(), [](unsigned char ch) { return !std::isspace(ch); })); CYSFReflector* reflector = m_reflectors->findById(id); - if (reflector == NULL) + if (reflector == nullptr) reflector = m_reflectors->findByName(id); - if (reflector != NULL) { + if (reflector != nullptr) { m_wiresX->processConnect(reflector); - if (m_linkType == LINK_YSF) + if (m_linkType == LINK_TYPE::YSF) m_ysfNetwork->writeUnlink(3U); - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { m_fcsNetwork->writeUnlink(3U); m_fcsNetwork->clearDestination(); } @@ -949,7 +949,7 @@ void CYSFGateway::processRemoteCommands() m_current = id; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_YSF; + m_linkType = LINK_TYPE::YSF; } else { LogWarning("Invalid YSF reflector id/name - \"%s\"", id.c_str()); return; @@ -970,18 +970,18 @@ void CYSFGateway::processRemoteCommands() return; } - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { m_wiresX->processDisconnect(); m_ysfNetwork->writeUnlink(3U); m_ysfNetwork->clearDestination(); } - if (m_linkType == LINK_FCS) + if (m_linkType == LINK_TYPE::FCS) m_fcsNetwork->writeUnlink(3U); m_current.clear(); m_inactivityTimer.stop(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; LogMessage("Connect by remote command to %s", id.c_str()); @@ -990,12 +990,12 @@ void CYSFGateway::processRemoteCommands() m_current = id; m_inactivityTimer.start(); m_lostTimer.start(); - m_linkType = LINK_FCS; + m_linkType = LINK_TYPE::FCS; } else { LogMessage("Unknown reflector - %s", id.c_str()); } } else if (::memcmp(buffer + 0U, "UnLink", 6U) == 0) { - if (m_linkType == LINK_YSF) { + if (m_linkType == LINK_TYPE::YSF) { m_wiresX->processDisconnect(); LogMessage("Disconnect by remote command"); @@ -1006,9 +1006,9 @@ void CYSFGateway::processRemoteCommands() m_current.clear(); m_inactivityTimer.stop(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } - if (m_linkType == LINK_FCS) { + if (m_linkType == LINK_TYPE::FCS) { LogMessage("Disconnect by remote command"); m_fcsNetwork->writeUnlink(3U); @@ -1017,13 +1017,13 @@ void CYSFGateway::processRemoteCommands() m_current.clear(); m_inactivityTimer.stop(); m_lostTimer.stop(); - m_linkType = LINK_NONE; + m_linkType = LINK_TYPE::NONE; } } else if (::memcmp(buffer + 0U, "status", 6U) == 0) { - std::string state = std::string("ysf:") + (((m_ysfNetwork == NULL) && (m_fcsNetwork == NULL)) ? "n/a" : ((m_linkType != LINK_NONE) ? "conn" : "disc")); + std::string state = std::string("ysf:") + (((m_ysfNetwork == nullptr) && (m_fcsNetwork == nullptr)) ? "n/a" : ((m_linkType != LINK_TYPE::NONE) ? "conn" : "disc")); m_remoteSocket->write((unsigned char*)state.c_str(), (unsigned int)state.length(), addr, addrLen); } else if (::memcmp(buffer + 0U, "host", 4U) == 0) { - std::string ref = ((((m_ysfNetwork == NULL) && (m_fcsNetwork == NULL)) || (m_linkType == LINK_NONE)) ? "NONE" : m_current); + std::string ref = ((((m_ysfNetwork == nullptr) && (m_fcsNetwork == nullptr)) || (m_linkType == LINK_TYPE::NONE)) ? "NONE" : m_current); std::string host = std::string("ysf:\"") + ref + "\""; m_remoteSocket->write((unsigned char*)host.c_str(), (unsigned int)host.length(), addr, addrLen); } else { diff --git a/YSFGateway/YSFGateway.h b/YSFGateway/YSFGateway.h index 61a11f9..809b321 100644 --- a/YSFGateway/YSFGateway.h +++ b/YSFGateway/YSFGateway.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018,2020 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,10 +32,10 @@ #include -enum LINK_TYPE { - LINK_NONE, - LINK_YSF, - LINK_FCS +enum class LINK_TYPE { + NONE, + YSF, + FCS }; class CYSFGateway diff --git a/YSFGateway/YSFNetwork.cpp b/YSFGateway/YSFNetwork.cpp index 6519b27..988ab50 100644 --- a/YSFGateway/YSFNetwork.cpp +++ b/YSFGateway/YSFNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2017,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,10 +32,10 @@ m_socket(address, port), m_debug(debug), m_addr(), m_addrLen(0U), -m_poll(NULL), -m_options(NULL), +m_poll(nullptr), +m_options(nullptr), m_opt(), -m_unlink(NULL), +m_unlink(nullptr), m_buffer(1000U, "YSF Network Buffer"), m_pollTimer(1000U, 5U), m_name(), @@ -65,10 +65,10 @@ m_socket(port), m_debug(debug), m_addr(), m_addrLen(0U), -m_poll(NULL), -m_options(NULL), +m_poll(nullptr), +m_options(nullptr), m_opt(), -m_unlink(NULL), +m_unlink(nullptr), m_buffer(1000U, "YSF Network Buffer"), m_pollTimer(1000U, 5U), m_name(), @@ -140,7 +140,7 @@ void CYSFNetwork::clearDestination() void CYSFNetwork::write(const unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if (m_addrLen == 0U) return; @@ -249,7 +249,7 @@ void CYSFNetwork::clock(unsigned int ms) unsigned int CYSFNetwork::read(unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if (m_buffer.isEmpty()) return 0U; diff --git a/YSFGateway/YSFPayload.cpp b/YSFGateway/YSFPayload.cpp index 16b4476..b19644b 100644 --- a/YSFGateway/YSFPayload.cpp +++ b/YSFGateway/YSFPayload.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 Jonathan Naylor, G4KLX +* Copyright (C) 2016,2025 Jonathan Naylor, G4KLX * Copyright (C) 2016 Mathias Weyland, HB9FRV * * This program is free software; you can redistribute it and/or modify @@ -86,8 +86,8 @@ CYSFPayload::~CYSFPayload() bool CYSFPayload::readVDMode1Data(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -131,8 +131,8 @@ bool CYSFPayload::readVDMode1Data(const unsigned char* data, unsigned char* dt) bool CYSFPayload::readVDMode2Data(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -176,8 +176,8 @@ bool CYSFPayload::readVDMode2Data(const unsigned char* data, unsigned char* dt) bool CYSFPayload::readDataFRModeData1(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); ::memset(dt, ' ', 20U); @@ -223,8 +223,8 @@ bool CYSFPayload::readDataFRModeData1(const unsigned char* data, unsigned char* bool CYSFPayload::readDataFRModeData2(const unsigned char* data, unsigned char* dt) { - assert(data != NULL); - assert(dt != NULL); + assert(data != nullptr); + assert(dt != nullptr); ::memset(dt, ' ', 20U); @@ -270,8 +270,8 @@ bool CYSFPayload::readDataFRModeData2(const unsigned char* data, unsigned char* void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -287,7 +287,7 @@ void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* d CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; @@ -314,8 +314,8 @@ void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* d void CYSFPayload::writeDataFRModeData2(const unsigned char* dt, unsigned char* data) { - assert(dt != NULL); - assert(data != NULL); + assert(dt != nullptr); + assert(data != nullptr); data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; @@ -331,7 +331,7 @@ void CYSFPayload::writeDataFRModeData2(const unsigned char* dt, unsigned char* d CYSFConvolution conv; conv.encode(output, convolved, 180U); - unsigned char bytes[45U]; + unsigned char bytes[45U] = { 0x00U }; unsigned int j = 0U; for (unsigned int i = 0U; i < 180U; i++) { unsigned int n = INTERLEAVE_TABLE_9_20[i]; diff --git a/YSFGateway/YSFReflectors.cpp b/YSFGateway/YSFReflectors.cpp index 129b20c..1a72b39 100644 --- a/YSFGateway/YSFReflectors.cpp +++ b/YSFGateway/YSFReflectors.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016-2021 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2021,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -61,8 +61,8 @@ CYSFReflectors::~CYSFReflectors() static bool refComparison(const CYSFReflector* r1, const CYSFReflector* r2) { - assert(r1 != NULL); - assert(r2 != NULL); + assert(r1 != nullptr); + assert(r2 != nullptr); std::string name1 = r1->m_name; std::string name2 = r2->m_name; @@ -113,20 +113,20 @@ bool CYSFReflectors::load() m_newReflectors.clear(); FILE* fp = ::fopen(m_hostsFile.c_str(), "rt"); - if (fp != NULL) { + if (fp != nullptr) { char buffer[100U]; - while (::fgets(buffer, 100U, fp) != NULL) { + while (::fgets(buffer, 100U, fp) != nullptr) { if (buffer[0U] == '#') continue; char* p1 = ::strtok(buffer, ";\r\n"); - char* p2 = ::strtok(NULL, ";\r\n"); - char* p3 = ::strtok(NULL, ";\r\n"); - char* p4 = ::strtok(NULL, ";\r\n"); - char* p5 = ::strtok(NULL, ";\r\n"); - char* p6 = ::strtok(NULL, "\r\n"); + char* p2 = ::strtok(nullptr, ";\r\n"); + char* p3 = ::strtok(nullptr, ";\r\n"); + char* p4 = ::strtok(nullptr, ";\r\n"); + char* p5 = ::strtok(nullptr, ";\r\n"); + char* p6 = ::strtok(nullptr, "\r\n"); - if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL && p5 != NULL && p6 != NULL) { + if (p1 != nullptr && p2 != nullptr && p3 != nullptr && p4 != nullptr && p5 != nullptr && p6 != nullptr) { std::string host = std::string(p4); unsigned short port = (unsigned short)::atoi(p5); @@ -141,7 +141,7 @@ bool CYSFReflectors::load() refl->m_addr = addr; refl->m_addrLen = addrLen; refl->m_count = std::string(p6); - refl->m_type = YT_YSF; + refl->m_type = YSF_TYPE::YSF; refl->m_wiresX = (refl->m_name.compare(0, 3, "XLX") == 0); refl->m_name.resize(16U, ' '); @@ -172,7 +172,7 @@ bool CYSFReflectors::load() refl->m_addr = addr; refl->m_addrLen = addrLen; refl->m_count = "000"; - refl->m_type = YT_YSF; + refl->m_type = YSF_TYPE::YSF; refl->m_wiresX = false; m_newReflectors.push_back(refl); @@ -195,7 +195,7 @@ bool CYSFReflectors::load() refl->m_addr = addr; refl->m_addrLen = addrLen; refl->m_count = "000"; - refl->m_type = YT_YSF; + refl->m_type = YSF_TYPE::YSF; refl->m_wiresX = true; m_newReflectors.push_back(refl); @@ -218,7 +218,7 @@ bool CYSFReflectors::load() refl->m_addr = addr; refl->m_addrLen = addrLen; refl->m_count = "000"; - refl->m_type = YT_YSF; + refl->m_type = YSF_TYPE::YSF; refl->m_wiresX = true; m_newReflectors.push_back(refl); @@ -241,7 +241,7 @@ bool CYSFReflectors::load() refl->m_addr = addr; refl->m_addrLen = addrLen; refl->m_count = "000"; - refl->m_type = YT_YSF; + refl->m_type = YSF_TYPE::YSF; refl->m_wiresX = true; m_newReflectors.push_back(refl); @@ -272,7 +272,7 @@ bool CYSFReflectors::load() refl->m_desc = desc; refl->m_addrLen = 0U; refl->m_count = "000"; - refl->m_type = YT_FCS; + refl->m_type = YSF_TYPE::FCS; refl->m_wiresX = false; refl->m_name.resize(16U, ' '); @@ -306,7 +306,7 @@ CYSFReflector* CYSFReflectors::findById(const std::string& id) LogMessage("Trying to find non existent YSF reflector with an id of %s", id.c_str()); - return NULL; + return nullptr; } bool CYSFReflectors::findById(unsigned int id) const @@ -337,7 +337,7 @@ CYSFReflector* CYSFReflectors::findByName(const std::string& name) LogMessage("Trying to find non existent YSF reflector with a name of %s", name.c_str()); - return NULL; + return nullptr; } std::vector& CYSFReflectors::current() diff --git a/YSFGateway/YSFReflectors.h b/YSFGateway/YSFReflectors.h index 00c8184..a0da0e1 100644 --- a/YSFGateway/YSFReflectors.h +++ b/YSFGateway/YSFReflectors.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016-2021 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2021,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,9 +25,9 @@ #include #include -enum YSF_TYPE { - YT_YSF, - YT_FCS +enum class YSF_TYPE { + YSF, + FCS }; class CYSFReflector { @@ -39,7 +39,7 @@ public: m_count("000"), m_addr(), m_addrLen(0U), - m_type(YT_YSF), + m_type(YSF_TYPE::YSF), m_wiresX(false) { } diff --git a/YSFParrot/Network.cpp b/YSFParrot/Network.cpp index d735398..d90882e 100644 --- a/YSFParrot/Network.cpp +++ b/YSFParrot/Network.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2018,2020,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ bool CNetwork::write(const unsigned char* data) if (m_addrLen == 0U) return true; - assert(data != NULL); + assert(data != nullptr); return m_socket.write(data, 155U, m_addr, m_addrLen); } diff --git a/YSFParrot/Parrot.cpp b/YSFParrot/Parrot.cpp index 5c7b534..e0eaa0c 100644 --- a/YSFParrot/Parrot.cpp +++ b/YSFParrot/Parrot.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ #include CParrot::CParrot(unsigned int timeout) : -m_data(NULL), +m_data(nullptr), m_length(timeout * 1550U + 1000U), m_used(0U), m_ptr(0U) @@ -40,7 +40,7 @@ CParrot::~CParrot() bool CParrot::write(const unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if ((m_length - m_used) < 1000U) return false; @@ -64,7 +64,7 @@ void CParrot::clear() unsigned int CParrot::read(unsigned char* data) { - assert(data != NULL); + assert(data != nullptr); if (m_used == 0U) return 0U; diff --git a/YSFParrot/StopWatch.cpp b/YSFParrot/StopWatch.cpp index 481241b..3d59e12 100644 --- a/YSFParrot/StopWatch.cpp +++ b/YSFParrot/StopWatch.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,7 +77,7 @@ CStopWatch::~CStopWatch() unsigned long long CStopWatch::time() const { struct timeval now; - ::gettimeofday(&now, NULL); + ::gettimeofday(&now, nullptr); return now.tv_sec * 1000ULL + now.tv_usec / 1000ULL; } diff --git a/YSFParrot/Thread.cpp b/YSFParrot/Thread.cpp index b334436..8923aa4 100644 --- a/YSFParrot/Thread.cpp +++ b/YSFParrot/Thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,9 +31,9 @@ CThread::~CThread() bool CThread::run() { - m_handle = ::CreateThread(NULL, 0, &helper, this, 0, NULL); + m_handle = ::CreateThread(nullptr, 0, &helper, this, 0, nullptr); - return m_handle != NULL; + return m_handle != nullptr; } @@ -74,13 +74,13 @@ CThread::~CThread() bool CThread::run() { - return ::pthread_create(&m_thread, NULL, helper, this) == 0; + return ::pthread_create(&m_thread, nullptr, helper, this) == 0; } void CThread::wait() { - ::pthread_join(m_thread, NULL); + ::pthread_join(m_thread, nullptr); } @@ -90,7 +90,7 @@ void* CThread::helper(void* arg) p->entry(); - return NULL; + return nullptr; } void CThread::sleep(unsigned int ms) diff --git a/YSFParrot/UDPSocket.cpp b/YSFParrot/UDPSocket.cpp index c28c039..27101fa 100644 --- a/YSFParrot/UDPSocket.cpp +++ b/YSFParrot/UDPSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -94,7 +94,7 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd /* Port is always digits, no needs to lookup service */ hints.ai_flags |= AI_NUMERICSERV; - int err = ::getaddrinfo(hostname.empty() ? NULL : hostname.c_str(), portstr.c_str(), &hints, &res); + int err = ::getaddrinfo(hostname.empty() ? nullptr : hostname.c_str(), portstr.c_str(), &hints, &res); if (err != 0) { sockaddr_in* paddr = (sockaddr_in*)&addr; ::memset(paddr, 0x00U, address_length = sizeof(sockaddr_in)); @@ -119,7 +119,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad if (addr1.ss_family != addr2.ss_family) return false; - if (type == IMT_ADDRESS_AND_PORT) { + if (type == IPMATCHTYPE::ADDRESS_AND_PORT) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -134,7 +134,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad default: return false; } - } else if (type == IMT_ADDRESS_ONLY) { + } else if (type == IPMATCHTYPE::ADDRESS_ONLY) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -233,7 +233,7 @@ bool CUDPSocket::open() int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int &addressLength) { - assert(buffer != NULL); + assert(buffer != nullptr); assert(length > 0U); #if defined(_WIN32) || defined(_WIN64) @@ -301,7 +301,7 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const sockaddr_storage& address, unsigned int addressLength) { - assert(buffer != NULL); + assert(buffer != nullptr); assert(length > 0U); #if defined(_WIN32) || defined(_WIN64) assert(m_fd != INVALID_SOCKET); diff --git a/YSFParrot/UDPSocket.h b/YSFParrot/UDPSocket.h index 75228a3..1ca32d9 100644 --- a/YSFParrot/UDPSocket.h +++ b/YSFParrot/UDPSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011,2013,2015,2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2011,2013,2015,2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,9 +35,9 @@ #include #endif -enum IPMATCHTYPE { - IMT_ADDRESS_AND_PORT, - IMT_ADDRESS_ONLY +enum class IPMATCHTYPE { + ADDRESS_AND_PORT, + ADDRESS_ONLY }; class CUDPSocket { @@ -60,7 +60,7 @@ public: static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength); static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength, struct addrinfo& hints); - static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IPMATCHTYPE::ADDRESS_AND_PORT); static bool isNone(const sockaddr_storage& addr); diff --git a/YSFParrot/Version.h b/YSFParrot/Version.h index b2429d9..74da99d 100644 --- a/YSFParrot/Version.h +++ b/YSFParrot/Version.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2024,2025 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20240831"; +const char* VERSION = "20250319"; #endif