From e7503907df29a641f1c5a6282ebc8a824086be41 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 4 Nov 2020 10:15:30 +0000 Subject: [PATCH] Fix networking issues. --- YSFGateway/FCSNetwork.cpp | 6 +++--- YSFGateway/Version.h | 2 +- YSFGateway/YSFGateway.cpp | 15 +++------------ YSFGateway/YSFNetwork.cpp | 6 +++++- YSFGateway/YSFNetwork.h | 9 ++++----- 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/YSFGateway/FCSNetwork.cpp b/YSFGateway/FCSNetwork.cpp index 2412229..7b22b62 100644 --- a/YSFGateway/FCSNetwork.cpp +++ b/YSFGateway/FCSNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2017,2018 by Jonathan Naylor G4KLX + * 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 @@ -85,7 +85,7 @@ bool CFCSNetwork::open() LogMessage("Opening FCS network connection"); - return m_socket.open(); + return m_socket.open(addr); } void CFCSNetwork::clearDestination() @@ -128,7 +128,7 @@ bool CFCSNetwork::writeLink(const std::string& reflector) LogWarning("Unknown FCS reflector - %s", name.c_str()); return false; } - } else { + } else { std::pair entry = m_addresses[name]; m_addr = entry.first; m_addrLen = entry.second; diff --git a/YSFGateway/Version.h b/YSFGateway/Version.h index 8d5b383..1ac5058 100644 --- a/YSFGateway/Version.h +++ b/YSFGateway/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20201101"; +const char* VERSION = "20201104"; #endif diff --git a/YSFGateway/YSFGateway.cpp b/YSFGateway/YSFGateway.cpp index 45c7725..49f0dc6 100644 --- a/YSFGateway/YSFGateway.cpp +++ b/YSFGateway/YSFGateway.cpp @@ -203,9 +203,7 @@ int CYSFGateway::run() unsigned int myPort = m_conf.getMyPort(); CYSFNetwork rptNetwork(myAddress, myPort, m_callsign, debug); - rptNetwork.setDestination("MMDVM", rptAddr, rptAddrLen); - - ret = rptNetwork.open(); + ret = rptNetwork.setDestination("MMDVM", rptAddr, rptAddrLen); if (!ret) { ::LogError("Cannot open the repeater network port"); ::LogFinalise(); @@ -215,14 +213,7 @@ int CYSFGateway::run() bool ysfNetworkEnabled = m_conf.getYSFNetworkEnabled(); if (ysfNetworkEnabled) { unsigned int ysfPort = m_conf.getYSFNetworkPort(); - m_ysfNetwork = new CYSFNetwork(ysfPort, m_callsign, debug); - ret = m_ysfNetwork->open(); - if (!ret) { - ::LogError("Cannot open the YSF reflector network port"); - ::LogFinalise(); - return 1; - } } m_fcsNetworkEnabled = m_conf.getFCSNetworkEnabled(); @@ -431,7 +422,7 @@ int CYSFGateway::run() CThread::sleep(5U); } - rptNetwork.close(); + rptNetwork.clearDestination(); if (m_gps != NULL) { m_writer->close(); @@ -440,7 +431,7 @@ int CYSFGateway::run() } if (m_ysfNetwork != NULL) { - m_ysfNetwork->close(); + m_ysfNetwork->clearDestination(); delete m_ysfNetwork; } diff --git a/YSFGateway/YSFNetwork.cpp b/YSFGateway/YSFNetwork.cpp index fad00b9..e32d913 100644 --- a/YSFGateway/YSFNetwork.cpp +++ b/YSFGateway/YSFNetwork.cpp @@ -112,12 +112,14 @@ bool CYSFNetwork::open() return m_socket.open(m_addr); } -void CYSFNetwork::setDestination(const std::string& name, const sockaddr_storage& addr, unsigned int addrLen) +bool CYSFNetwork::setDestination(const std::string& name, const sockaddr_storage& addr, unsigned int addrLen) { m_name = name; m_addr = addr; m_addrLen = addrLen; m_linked = false; + + return open(); } void CYSFNetwork::clearDestination() @@ -126,6 +128,8 @@ void CYSFNetwork::clearDestination() m_linked = false; m_pollTimer.stop(); + + close(); } void CYSFNetwork::write(const unsigned char* data) diff --git a/YSFGateway/YSFNetwork.h b/YSFGateway/YSFNetwork.h index 418af4b..e20054d 100644 --- a/YSFGateway/YSFNetwork.h +++ b/YSFGateway/YSFNetwork.h @@ -33,9 +33,7 @@ public: CYSFNetwork(unsigned int port, const std::string& callsign, bool debug); ~CYSFNetwork(); - bool open(); - - void setDestination(const std::string& name, const sockaddr_storage& addr, unsigned int addrLen); + bool setDestination(const std::string& name, const sockaddr_storage& addr, unsigned int addrLen); void clearDestination(); void write(const unsigned char* data); @@ -48,8 +46,6 @@ public: void clock(unsigned int ms); - void close(); - private: CUDPSocket m_socket; bool m_debug; @@ -63,6 +59,9 @@ private: CTimer m_pollTimer; std::string m_name; bool m_linked; + + bool open(); + void close(); }; #endif