diff --git a/DGIdGateway/Conf.cpp b/DGIdGateway/Conf.cpp index 90fe17f..98d1341 100644 --- a/DGIdGateway/Conf.cpp +++ b/DGIdGateway/Conf.cpp @@ -263,10 +263,6 @@ bool CConf::read() dgIdData->m_rfHangTime = m_fcsRFHangTime; dgIdData->m_netHangTime = m_fcsNetHangTime; dgIdData->m_debug = m_fcsNetDebug; - } else if (::strcmp(value, "YCS") == 0) { - dgIdData->m_rfHangTime = m_ysfRFHangTime; - dgIdData->m_netHangTime = m_ysfNetHangTime; - dgIdData->m_debug = m_ysfNetDebug; } else if (::strcmp(value, "IMRS") == 0) { dgIdData->m_rfHangTime = m_imrsRFHangTime; dgIdData->m_netHangTime = m_imrsNetHangTime; diff --git a/DGIdGateway/DGIdGateway.cpp b/DGIdGateway/DGIdGateway.cpp index 2a1e622..e9bb77b 100644 --- a/DGIdGateway/DGIdGateway.cpp +++ b/DGIdGateway/DGIdGateway.cpp @@ -21,7 +21,6 @@ #include "DGIdNetwork.h" #include "IMRSNetwork.h" #include "YSFNetwork.h" -#include "YCSNetwork.h" #include "FCSNetwork.h" #include "UDPSocket.h" #include "StopWatch.h" @@ -265,28 +264,6 @@ int CDGIdGateway::run() } else { LogWarning("Unknown YSF reflector: %s", name.c_str()); } - } else if (type == "YCS") { - std::string name = (*it)->m_name; - unsigned int local = (*it)->m_local; - unsigned int txFrequency = m_conf.getTxFrequency(); - unsigned int rxFrequency = m_conf.getRxFrequency(); - std::string locator = calculateLocator(); - std::string description = m_conf.getDescription(); - unsigned int id = m_conf.getId(); - - CYSFReflector* reflector = reflectors->findByName(name); - if (reflector != NULL) { - dgIdNetwork[dgid] = new CYCSNetwork(local, reflector->m_name, reflector->m_addr, reflector->m_addrLen, m_callsign, rxFrequency, txFrequency, locator, description, id, (*it)->m_netDGId, 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; - dgIdNetwork[dgid]->m_rfHangTime = rfHangTime; - dgIdNetwork[dgid]->m_netHangTime = netHangTime; - - LogMessage("Added YCS:%s:%u to DG-ID %u%s", name.c_str(), (*it)->m_netDGId, dgid, statc ? " (Static)" : ""); - } - else { - LogWarning("Unknown YCS reflector: %s", name.c_str()); - } } else if (type == "IMRS") { if (imrs != NULL) { std::vector destinations = (*it)->m_destinations; diff --git a/DGIdGateway/DGIdGateway.ini b/DGIdGateway/DGIdGateway.ini index f8f918b..1c9f07b 100644 --- a/DGIdGateway/DGIdGateway.ini +++ b/DGIdGateway/DGIdGateway.ini @@ -137,17 +137,6 @@ Local=42024 #NetHangTime=60 Debug=0 -[DGId=55] -# YCS Reflector YCS310 (DG-ID 80) -Type=YCS -Static=0 -Name=US-C4FM-NA -Local=42025 -DGId=80 -#RFHangTime=120 -#NetHangTime=60 -Debug=0 - [DGId=60] # Local IMRS System Fusion Network Type=IMRS diff --git a/DGIdGateway/DGIdGateway.vcxproj b/DGIdGateway/DGIdGateway.vcxproj index 5c5a89c..1864ae7 100644 --- a/DGIdGateway/DGIdGateway.vcxproj +++ b/DGIdGateway/DGIdGateway.vcxproj @@ -159,7 +159,6 @@ - @@ -185,7 +184,6 @@ - diff --git a/DGIdGateway/DGIdGateway.vcxproj.filters b/DGIdGateway/DGIdGateway.vcxproj.filters index b1929f0..8c55194 100644 --- a/DGIdGateway/DGIdGateway.vcxproj.filters +++ b/DGIdGateway/DGIdGateway.vcxproj.filters @@ -74,9 +74,6 @@ Source Files - - Source Files - @@ -151,8 +148,5 @@ Header Files - - Header Files - \ No newline at end of file diff --git a/DGIdGateway/Makefile b/DGIdGateway/Makefile index 242d096..78db036 100644 --- a/DGIdGateway/Makefile +++ b/DGIdGateway/Makefile @@ -12,8 +12,8 @@ LIBS = -lm -lpthread LDFLAGS = -g OBJECTS = APRSWriter.o Conf.o CRC.o DGIdGateway.o DGIdNetwork.o FCSNetwork.o Golay24128.o GPS.o IMRSNetwork.o \ - Log.o StopWatch.o Sync.o Thread.o Timer.o UDPSocket.o Utils.o YCSNetwork.o YSFConvolution.o YSFFICH.o \ - YSFNetwork.o YSFPayload.o YSFReflectors.o + Log.o StopWatch.o Sync.o Thread.o Timer.o UDPSocket.o Utils.o YSFConvolution.o YSFFICH.o YSFNetwork.o \ + YSFPayload.o YSFReflectors.o all: DGIdGateway diff --git a/DGIdGateway/Version.h b/DGIdGateway/Version.h index 379828d..04ee492 100644 --- a/DGIdGateway/Version.h +++ b/DGIdGateway/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20200927"; +const char* VERSION = "20200928"; #endif diff --git a/DGIdGateway/YCSNetwork.cpp b/DGIdGateway/YCSNetwork.cpp deleted file mode 100644 index ce5e241..0000000 --- a/DGIdGateway/YCSNetwork.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (C) 2009-2014,2016,2017,2018,2020 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "YSFDefines.h" -#include "YCSNetwork.h" -#include "Utils.h" -#include "Log.h" - -#include -#include -#include - -const unsigned int BUFFER_LENGTH = 200U; - -CYCSNetwork::CYCSNetwork(unsigned int localPort, const std::string& name, const sockaddr_storage& addr, unsigned int addrLen, const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, const std::string& locator, const std::string& description, unsigned int id, unsigned int dgId, bool statc, bool debug) : -m_socket(localPort), -m_debug(debug), -m_addr(addr), -m_addrLen(addrLen), -m_static(statc), -m_poll(NULL), -m_options(NULL), -m_info(NULL), -m_unlink(NULL), -m_buffer(1000U, "YCS Network Buffer"), -m_sendPollTimer(1000U, 5U), -m_recvPollTimer(1000U, 60U), -m_name(name), -m_state(DS_NOTOPEN), -m_dgId(dgId) -{ - m_poll = new unsigned char[14U]; - ::memcpy(m_poll + 0U, "YSFP", 4U); - - m_unlink = new unsigned char[14U]; - ::memcpy(m_unlink + 0U, "YSFU", 4U); - - m_options = new unsigned char[50U]; - ::memcpy(m_options + 0U, "YSFO", 4U); - - m_info = new unsigned char[80U]; - ::memcpy(m_info + 0U, "YSFI", 4U); - - std::string node = callsign; - node.resize(YSF_CALLSIGN_LENGTH, ' '); - - for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) { - m_poll[i + 4U] = node.at(i); - m_unlink[i + 4U] = node.at(i); - m_options[i + 4U] = node.at(i); - m_info[i + 4U] = node.at(i); - } - - char text[101U]; - ::sprintf(text, "%u ", dgId); - - for (unsigned int i = 0U; i < (50U - 4U - YSF_CALLSIGN_LENGTH); i++) - m_options[i + 4U + YSF_CALLSIGN_LENGTH] = text[i]; - - std::string desc = description; - desc.resize(20U, ' '); - - sprintf(text, "%9u%9u%.6s%sMMDVM %07u ", rxFrequency, txFrequency, locator.c_str(), desc.c_str(), id); - for (unsigned int i = 0U; i < (80U - 4U - YSF_CALLSIGN_LENGTH); i++) - m_info[i + 4U + YSF_CALLSIGN_LENGTH] = text[i]; -} - -CYCSNetwork::~CYCSNetwork() -{ - delete[] m_poll; - delete[] m_unlink; - delete[] m_options; - delete[] m_info; -} - -std::string CYCSNetwork::getDesc(unsigned int dgId) -{ - return "YCS: " + m_name; -} - -unsigned int CYCSNetwork::getDGId() -{ - return m_dgId; -} - -bool CYCSNetwork::open() -{ - if (m_addrLen == 0U) { - LogError("Unable to resolve the address of the YCS network"); - m_state = DS_NOTOPEN; - return false; - } - - LogMessage("Opening YCS network connection"); - - bool ret = m_socket.open(m_addr); - if (!ret) { - m_state = DS_NOTOPEN; - return false; - } else { - m_state = DS_NOTLINKED; - return true; - } -} - -DGID_STATUS CYCSNetwork::getStatus() -{ - return m_state; -} - -void CYCSNetwork::write(unsigned int dgid, const unsigned char* data) -{ - assert(data != NULL); - - if (m_state != DS_LINKED) - return; - - if (m_debug) - CUtils::dump(1U, "YCS Network Data Sent", data, 155U); - - m_socket.write(data, 155U, m_addr, m_addrLen); -} - -void CYCSNetwork::link() -{ - if (m_state != DS_NOTLINKED) - return; - - m_state = DS_LINKING; - - m_sendPollTimer.start(); - m_recvPollTimer.start(); - - writePoll(); -} - -void CYCSNetwork::writePoll() -{ - if (m_state != DS_LINKING && m_state != DS_LINKED) - return; - - if (m_debug) - CUtils::dump(1U, "YCS Network Data Sent", m_poll, 14U); - - m_socket.write(m_poll, 14U, m_addr, m_addrLen); -} - -void CYCSNetwork::unlink() -{ - if (m_state != DS_LINKED) - return; - - m_sendPollTimer.stop(); - m_recvPollTimer.stop(); - - if (m_debug) - CUtils::dump(1U, "YCS Network Data Sent", m_unlink, 14U); - - m_socket.write(m_unlink, 14U, m_addr, m_addrLen); - - LogMessage("Unlinked from %s", m_name.c_str()); - - m_state = DS_NOTLINKED; -} - -void CYCSNetwork::clock(unsigned int ms) -{ - if (m_state == DS_NOTOPEN) - return; - - m_recvPollTimer.clock(ms); - if (m_recvPollTimer.isRunning() && m_recvPollTimer.hasExpired()) { - if (m_static) { - m_state = DS_LINKING; - } else { - m_state = DS_NOTLINKED; - m_sendPollTimer.stop(); - } - - LogMessage("Lost link to %s", m_name.c_str()); - m_recvPollTimer.stop(); - } - - m_sendPollTimer.clock(ms); - if (m_sendPollTimer.isRunning() && m_sendPollTimer.hasExpired()) { - writePoll(); - m_sendPollTimer.start(); - } - - unsigned char buffer[BUFFER_LENGTH]; - sockaddr_storage addr; - unsigned int addrLen; - int length = m_socket.read(buffer, BUFFER_LENGTH, addr, addrLen); - if (length <= 0) - return; - - if (m_addrLen == 0U) - return; - - if (!CUDPSocket::match(addr, m_addr)) - return; - - if (m_debug) - CUtils::dump(1U, "YCS Network Data Received", buffer, length); - - if (::memcmp(buffer, "YSFP", 4U) == 0) { - m_recvPollTimer.start(); - - if (m_state == DS_LINKING) { - LogMessage("Linked to %s", m_name.c_str()); - - m_state = DS_LINKED; - - if (m_debug) - CUtils::dump(1U, "YCS Network Data Sent", m_options, 50U); - - m_socket.write(m_options, 50U, m_addr, m_addrLen); - - if (m_debug) - CUtils::dump(1U, "YCS Network Data Sent", m_info, 80U); - - m_socket.write(m_info, 80U, m_addr, m_addrLen); - } - } - - if (::memcmp(buffer, "YSFD", 4U) == 0) { - m_recvPollTimer.start(); - - unsigned char len = length; - m_buffer.addData(&len, 1U); - - m_buffer.addData(buffer, length); - } -} - -unsigned int CYCSNetwork::read(unsigned int dgid, unsigned char* data) -{ - assert(data != NULL); - - if (m_buffer.isEmpty()) - return 0U; - - unsigned char len = 0U; - m_buffer.getData(&len, 1U); - - m_buffer.getData(data, len); - - return len; -} - -void CYCSNetwork::close() -{ - m_socket.close(); - - LogMessage("Closing YCS network connection"); - - m_state = DS_NOTOPEN; -} diff --git a/DGIdGateway/YCSNetwork.h b/DGIdGateway/YCSNetwork.h deleted file mode 100644 index 1c6c1f5..0000000 --- a/DGIdGateway/YCSNetwork.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2009-2014,2016,2017,2018,2020 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef YCSNetwork_H -#define YCSNetwork_H - -#include "DGIdNetwork.h" -#include "YSFDefines.h" -#include "UDPSocket.h" -#include "RingBuffer.h" -#include "Timer.h" - -#include -#include - -class CYCSNetwork : public CDGIdNetwork { -public: - CYCSNetwork(unsigned int localPort, const std::string& name, const sockaddr_storage& addr, unsigned int addrLen, const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, const std::string& locator, const std::string& description, unsigned int id, unsigned int dgId, bool statc, bool debug); - virtual ~CYCSNetwork(); - - virtual std::string getDesc(unsigned int dgId); - - virtual unsigned int getDGId(); - - virtual bool open(); - - virtual DGID_STATUS getStatus(); - - virtual void link(); - - virtual void write(unsigned int dgId, const unsigned char* data); - - virtual unsigned int read(unsigned int dgId, unsigned char* data); - - virtual void clock(unsigned int ms); - - virtual void unlink(); - - virtual void close(); - -private: - CUDPSocket m_socket; - bool m_debug; - sockaddr_storage m_addr; - unsigned int m_addrLen; - bool m_static; - unsigned char* m_poll; - unsigned char* m_options; - unsigned char* m_info; - unsigned char* m_unlink; - CRingBuffer m_buffer; - CTimer m_sendPollTimer; - CTimer m_recvPollTimer; - std::string m_name; - DGID_STATUS m_state; - unsigned int m_dgId; - - void writePoll(); -}; - -#endif diff --git a/DGIdGateway/YSFReflectors.cpp b/DGIdGateway/YSFReflectors.cpp index bf2a7a1..caba235 100644 --- a/DGIdGateway/YSFReflectors.cpp +++ b/DGIdGateway/YSFReflectors.cpp @@ -57,20 +57,22 @@ bool CYSFReflectors::load() char* p6 = ::strtok(NULL, "\r\n"); if (p1 != NULL && p2 != NULL && p3 != NULL && p4 != NULL && p5 != NULL && p6 != NULL) { - std::string host = std::string(p4); + std::string host = std::string(p4); unsigned int port = (unsigned int)::atoi(p5); - sockaddr_storage addr; - unsigned int addrLen; - if (CUDPSocket::lookup(host, port, addr, addrLen) == 0) { - CYSFReflector* refl = new CYSFReflector; - refl->m_id = std::string(p1); - refl->m_name = std::string(p2); - refl->m_addr = addr; - refl->m_addrLen = addrLen; - m_reflectors.push_back(refl); - } else { - LogWarning("Unable to resolve the address for %s", host.c_str()); + if (::strstr(p1, "YCS") == NULL && ::strstr(p2, "YCS") == NULL) { + sockaddr_storage addr; + unsigned int addrLen; + if (CUDPSocket::lookup(host, port, addr, addrLen) == 0) { + CYSFReflector* refl = new CYSFReflector; + refl->m_id = std::string(p1); + refl->m_name = std::string(p2); + refl->m_addr = addr; + refl->m_addrLen = addrLen; + m_reflectors.push_back(refl); + } else { + LogWarning("Unable to resolve the address for %s", host.c_str()); + } } } }