diff --git a/Conf.cpp b/Conf.cpp index 6c5c01c..4870a03 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -100,6 +100,7 @@ m_modemI2CPort(), m_modemI2CAddress(0x22U), m_modemModemAddress(), m_modemModemPort(0U), +m_modemLocalAddress(), m_modemLocalPort(0U), m_modemRXInvert(false), m_modemTXInvert(false), @@ -233,14 +234,16 @@ m_ax25Trace(false), m_dstarNetworkEnabled(false), m_dstarGatewayAddress(), m_dstarGatewayPort(0U), +m_dstarLocalAddress(), m_dstarLocalPort(0U), m_dstarNetworkModeHang(3U), m_dstarNetworkDebug(false), m_dmrNetworkEnabled(false), m_dmrNetworkType("Gateway"), -m_dmrNetworkAddress(), -m_dmrNetworkPort(0U), -m_dmrNetworkLocal(0U), +m_dmrNetworkRemoteAddress(), +m_dmrNetworkRemotePort(0U), +m_dmrNetworkLocalAddress(), +m_dmrNetworkLocalPort(0U), m_dmrNetworkPassword(), m_dmrNetworkOptions(), m_dmrNetworkDebug(false), @@ -249,8 +252,8 @@ m_dmrNetworkSlot1(true), m_dmrNetworkSlot2(true), m_dmrNetworkModeHang(3U), m_fusionNetworkEnabled(false), -m_fusionNetworkMyAddress(), -m_fusionNetworkMyPort(0U), +m_fusionNetworkLocalAddress(), +m_fusionNetworkLocalPort(0U), m_fusionNetworkGatewayAddress(), m_fusionNetworkGatewayPort(0U), m_fusionNetworkModeHang(3U), @@ -258,6 +261,7 @@ m_fusionNetworkDebug(false), m_p25NetworkEnabled(false), m_p25GatewayAddress(), m_p25GatewayPort(0U), +m_p25LocalAddress(), m_p25LocalPort(0U), m_p25NetworkModeHang(3U), m_p25NetworkDebug(false), @@ -272,6 +276,7 @@ m_nxdnNetworkDebug(false), m_m17NetworkEnabled(false), m_m17GatewayAddress(), m_m17GatewayPort(0U), +m_m17LocalAddress(), m_m17LocalPort(0U), m_m17NetworkModeHang(3U), m_m17NetworkDebug(false), @@ -536,6 +541,8 @@ bool CConf::read() m_modemModemAddress = value; else if (::strcmp(key, "ModemPort") == 0) m_modemModemPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_modemLocalAddress = value; else if (::strcmp(key, "LocalPort") == 0) m_modemLocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "RXInvert") == 0) @@ -897,6 +904,8 @@ bool CConf::read() m_dstarGatewayAddress = value; else if (::strcmp(key, "GatewayPort") == 0) m_dstarGatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_dstarLocalAddress = value; else if (::strcmp(key, "LocalPort") == 0) m_dstarLocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) @@ -908,12 +917,14 @@ bool CConf::read() m_dmrNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Type") == 0) m_dmrNetworkType = value; - else if (::strcmp(key, "Address") == 0) - m_dmrNetworkAddress = value; - else if (::strcmp(key, "Port") == 0) - m_dmrNetworkPort = (unsigned short)::atoi(value); - else if (::strcmp(key, "Local") == 0) - m_dmrNetworkLocal = (unsigned short)::atoi(value); + else if (::strcmp(key, "RemoteAddress") == 0) + m_dmrNetworkRemoteAddress = value; + else if (::strcmp(key, "RemotePort") == 0) + m_dmrNetworkRemotePort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_dmrNetworkLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_dmrNetworkLocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "Password") == 0) m_dmrNetworkPassword = value; else if (::strcmp(key, "Options") == 0) @@ -932,9 +943,9 @@ bool CConf::read() if (::strcmp(key, "Enable") == 0) m_fusionNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "LocalAddress") == 0) - m_fusionNetworkMyAddress = value; + m_fusionNetworkLocalAddress = value; else if (::strcmp(key, "LocalPort") == 0) - m_fusionNetworkMyPort = (unsigned short)::atoi(value); + m_fusionNetworkLocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "GatewayAddress") == 0) m_fusionNetworkGatewayAddress = value; else if (::strcmp(key, "GatewayPort") == 0) @@ -950,6 +961,8 @@ bool CConf::read() m_p25GatewayAddress = value; else if (::strcmp(key, "GatewayPort") == 0) m_p25GatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_p25LocalAddress = value; else if (::strcmp(key, "LocalPort") == 0) m_p25LocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) @@ -974,6 +987,8 @@ bool CConf::read() } else if (section == SECTION_M17_NETWORK) { if (::strcmp(key, "Enable") == 0) m_m17NetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "LocalAddress") == 0) + m_m17LocalAddress = value; else if (::strcmp(key, "LocalPort") == 0) m_m17LocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "GatewayAddress") == 0) @@ -1294,6 +1309,11 @@ unsigned short CConf::getModemModemPort() const return m_modemModemPort; } +std::string CConf::getModemLocalAddress() const +{ + return m_modemLocalAddress; +} + unsigned short CConf::getModemLocalPort() const { return m_modemLocalPort; @@ -1959,6 +1979,11 @@ unsigned short CConf::getDStarGatewayPort() const return m_dstarGatewayPort; } +std::string CConf::getDStarLocalAddress() const +{ + return m_dstarLocalAddress; +} + unsigned short CConf::getDStarLocalPort() const { return m_dstarLocalPort; @@ -1984,19 +2009,24 @@ std::string CConf::getDMRNetworkType() const return m_dmrNetworkType; } -std::string CConf::getDMRNetworkAddress() const +std::string CConf::getDMRNetworkRemoteAddress() const { - return m_dmrNetworkAddress; + return m_dmrNetworkRemoteAddress; } -unsigned short CConf::getDMRNetworkPort() const +unsigned short CConf::getDMRNetworkRemotePort() const { - return m_dmrNetworkPort; + return m_dmrNetworkRemotePort; } -unsigned short CConf::getDMRNetworkLocal() const +std::string CConf::getDMRNetworkLocalAddress() const { - return m_dmrNetworkLocal; + return m_dmrNetworkLocalAddress; +} + +unsigned short CConf::getDMRNetworkLocalPort() const +{ + return m_dmrNetworkLocalPort; } std::string CConf::getDMRNetworkPassword() const @@ -2039,14 +2069,14 @@ bool CConf::getFusionNetworkEnabled() const return m_fusionNetworkEnabled; } -std::string CConf::getFusionNetworkMyAddress() const +std::string CConf::getFusionNetworkLocalAddress() const { - return m_fusionNetworkMyAddress; + return m_fusionNetworkLocalAddress; } -unsigned short CConf::getFusionNetworkMyPort() const +unsigned short CConf::getFusionNetworkLocalPort() const { - return m_fusionNetworkMyPort; + return m_fusionNetworkLocalPort; } std::string CConf::getFusionNetworkGatewayAddress() const @@ -2084,6 +2114,11 @@ unsigned short CConf::getP25GatewayPort() const return m_p25GatewayPort; } +std::string CConf::getP25LocalAddress() const +{ + return m_p25LocalAddress; +} + unsigned short CConf::getP25LocalPort() const { return m_p25LocalPort; @@ -2154,6 +2189,11 @@ unsigned short CConf::getM17GatewayPort() const return m_m17GatewayPort; } +std::string CConf::getM17LocalAddress() const +{ + return m_m17LocalAddress; +} + unsigned short CConf::getM17LocalPort() const { return m_m17LocalPort; diff --git a/Conf.h b/Conf.h index 5140a5b..3fde503 100644 --- a/Conf.h +++ b/Conf.h @@ -77,6 +77,7 @@ public: unsigned int getModemI2CAddress() const; std::string getModemModemAddress() const; unsigned short getModemModemPort() const; + std::string getModemLocalAddress() const; unsigned short getModemLocalPort() const; bool getModemRXInvert() const; bool getModemTXInvert() const; @@ -232,6 +233,7 @@ public: bool getDStarNetworkEnabled() const; std::string getDStarGatewayAddress() const; unsigned short getDStarGatewayPort() const; + std::string getDStarLocalAddress() const; unsigned short getDStarLocalPort() const; unsigned int getDStarNetworkModeHang() const; bool getDStarNetworkDebug() const; @@ -239,9 +241,10 @@ public: // The DMR Network section bool getDMRNetworkEnabled() const; std::string getDMRNetworkType() const; - std::string getDMRNetworkAddress() const; - unsigned short getDMRNetworkPort() const; - unsigned short getDMRNetworkLocal() const; + std::string getDMRNetworkRemoteAddress() const; + unsigned short getDMRNetworkRemotePort() const; + std::string getDMRNetworkLocalAddress() const; + unsigned short getDMRNetworkLocalPort() const; std::string getDMRNetworkPassword() const; std::string getDMRNetworkOptions() const; bool getDMRNetworkDebug() const; @@ -252,8 +255,8 @@ public: // The System Fusion Network section bool getFusionNetworkEnabled() const; - std::string getFusionNetworkMyAddress() const; - unsigned short getFusionNetworkMyPort() const; + std::string getFusionNetworkLocalAddress() const; + unsigned short getFusionNetworkLocalPort() const; std::string getFusionNetworkGatewayAddress() const; unsigned short getFusionNetworkGatewayPort() const; unsigned int getFusionNetworkModeHang() const; @@ -263,6 +266,7 @@ public: bool getP25NetworkEnabled() const; std::string getP25GatewayAddress() const; unsigned short getP25GatewayPort() const; + std::string getP25LocalAddress() const; unsigned short getP25LocalPort() const; unsigned int getP25NetworkModeHang() const; bool getP25NetworkDebug() const; @@ -281,6 +285,7 @@ public: bool getM17NetworkEnabled() const; std::string getM17GatewayAddress() const; unsigned short getM17GatewayPort() const; + std::string getM17LocalAddress() const; unsigned short getM17LocalPort() const; unsigned int getM17NetworkModeHang() const; bool getM17NetworkDebug() const; @@ -406,6 +411,7 @@ private: unsigned int m_modemI2CAddress; std::string m_modemModemAddress; unsigned short m_modemModemPort; + std::string m_modemLocalAddress; unsigned short m_modemLocalPort; bool m_modemRXInvert; bool m_modemTXInvert; @@ -550,15 +556,17 @@ private: bool m_dstarNetworkEnabled; std::string m_dstarGatewayAddress; unsigned short m_dstarGatewayPort; + std::string m_dstarLocalAddress; unsigned short m_dstarLocalPort; unsigned int m_dstarNetworkModeHang; bool m_dstarNetworkDebug; bool m_dmrNetworkEnabled; std::string m_dmrNetworkType; - std::string m_dmrNetworkAddress; - unsigned short m_dmrNetworkPort; - unsigned short m_dmrNetworkLocal; + std::string m_dmrNetworkRemoteAddress; + unsigned short m_dmrNetworkRemotePort; + std::string m_dmrNetworkLocalAddress; + unsigned short m_dmrNetworkLocalPort; std::string m_dmrNetworkPassword; std::string m_dmrNetworkOptions; bool m_dmrNetworkDebug; @@ -568,8 +576,8 @@ private: unsigned int m_dmrNetworkModeHang; bool m_fusionNetworkEnabled; - std::string m_fusionNetworkMyAddress; - unsigned short m_fusionNetworkMyPort; + std::string m_fusionNetworkLocalAddress; + unsigned short m_fusionNetworkLocalPort; std::string m_fusionNetworkGatewayAddress; unsigned short m_fusionNetworkGatewayPort; unsigned int m_fusionNetworkModeHang; @@ -578,6 +586,7 @@ private: bool m_p25NetworkEnabled; std::string m_p25GatewayAddress; unsigned short m_p25GatewayPort; + std::string m_p25LocalAddress; unsigned short m_p25LocalPort; unsigned int m_p25NetworkModeHang; bool m_p25NetworkDebug; @@ -594,6 +603,7 @@ private: bool m_m17NetworkEnabled; std::string m_m17GatewayAddress; unsigned short m_m17GatewayPort; + std::string m_m17LocalAddress; unsigned short m_m17LocalPort; unsigned int m_m17NetworkModeHang; bool m_m17NetworkDebug; diff --git a/DMRDirectNetwork.cpp b/DMRDirectNetwork.cpp index 04886c1..ba36a69 100644 --- a/DMRDirectNetwork.cpp +++ b/DMRDirectNetwork.cpp @@ -30,7 +30,7 @@ const unsigned int BUFFER_LENGTH = 500U; const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; -CDMRDirectNetwork::CDMRDirectNetwork(const std::string& address, unsigned short port, unsigned short local, unsigned int id, const std::string& password, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug) : +CDMRDirectNetwork::CDMRDirectNetwork(const std::string& address, unsigned short port, const std::string& localAddress, unsigned short localPort, unsigned int id, const std::string& password, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug) : m_address(address), m_port(port), m_addr(), @@ -40,7 +40,7 @@ m_password(password), m_duplex(duplex), m_version(version), m_debug(debug), -m_socket(local), +m_socket(localAddress, localPort), m_enabled(false), m_slot1(slot1), m_slot2(slot2), diff --git a/DMRDirectNetwork.h b/DMRDirectNetwork.h index 6ebff40..5d6a959 100644 --- a/DMRDirectNetwork.h +++ b/DMRDirectNetwork.h @@ -32,7 +32,7 @@ class CDMRDirectNetwork : public IDMRNetwork { public: - CDMRDirectNetwork(const std::string& address, unsigned short port, unsigned short local, unsigned int id, const std::string& password, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug); + CDMRDirectNetwork(const std::string& remoteAddress, unsigned short remotePort, const std::string& localAddress, unsigned short localPort, unsigned int id, const std::string& password, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug); virtual ~CDMRDirectNetwork(); virtual void setOptions(const std::string& options); diff --git a/DMRGatewayNetwork.cpp b/DMRGatewayNetwork.cpp index fe4cda8..5dd55b5 100644 --- a/DMRGatewayNetwork.cpp +++ b/DMRGatewayNetwork.cpp @@ -31,7 +31,7 @@ const unsigned int BUFFER_LENGTH = 500U; const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; -CDMRGatewayNetwork::CDMRGatewayNetwork(const std::string& address, unsigned short port, unsigned short local, unsigned int id, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug) : +CDMRGatewayNetwork::CDMRGatewayNetwork(const std::string& address, unsigned short port, const std::string& localAddress, unsigned short localPort, unsigned int id, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug) : m_addressStr(address), m_addr(), m_addrLen(0U), @@ -40,7 +40,7 @@ m_id(NULL), m_duplex(duplex), m_version(version), m_debug(debug), -m_socket(local), +m_socket(localAddress, localPort), m_enabled(false), m_slot1(slot1), m_slot2(slot2), diff --git a/DMRGatewayNetwork.h b/DMRGatewayNetwork.h index 5979a3a..160dc51 100644 --- a/DMRGatewayNetwork.h +++ b/DMRGatewayNetwork.h @@ -33,7 +33,7 @@ class CDMRGatewayNetwork : public IDMRNetwork { public: - CDMRGatewayNetwork(const std::string& address, unsigned short port, unsigned short local, unsigned int id, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug); + CDMRGatewayNetwork(const std::string& remoteAddress, unsigned short remotePort, const std::string& localAddress, unsigned short localPort, unsigned int id, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug); virtual ~CDMRGatewayNetwork(); virtual void setOptions(const std::string& options); diff --git a/DStarNetwork.cpp b/DStarNetwork.cpp index 96c826b..7f9e9dd 100644 --- a/DStarNetwork.cpp +++ b/DStarNetwork.cpp @@ -30,8 +30,8 @@ const unsigned int BUFFER_LENGTH = 100U; -CDStarNetwork::CDStarNetwork(const std::string& gatewayAddress, unsigned short gatewayPort, unsigned short localPort, bool duplex, const char* version, bool debug) : -m_socket(localPort), +CDStarNetwork::CDStarNetwork(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool duplex, const char* version, bool debug) : +m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), m_duplex(duplex), diff --git a/DStarNetwork.h b/DStarNetwork.h index 8ecd5ac..d7a1cc4 100644 --- a/DStarNetwork.h +++ b/DStarNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2020,2021 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,7 +30,7 @@ class CDStarNetwork { public: - CDStarNetwork(const std::string& gatewayAddress, unsigned short gatewayPort, unsigned short localPort, bool duplex, const char* version, bool debug); + CDStarNetwork(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool duplex, const char* version, bool debug); ~CDStarNetwork(); bool open(); diff --git a/FMNetwork.h b/FMNetwork.h index dd2a8e6..606bad6 100644 --- a/FMNetwork.h +++ b/FMNetwork.h @@ -31,7 +31,7 @@ enum FM_NETWORK_PROTOCOL { class CFMNetwork { public: - CFMNetwork(const std::string& callsign, const std::string& protocol, const std::string& myAddress, unsigned short myPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); + CFMNetwork(const std::string& callsign, const std::string& protocol, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); ~CFMNetwork(); bool open(); diff --git a/M17Network.cpp b/M17Network.cpp index 3578252..9a3bf8d 100644 --- a/M17Network.cpp +++ b/M17Network.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2021 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 @@ -29,8 +29,8 @@ const unsigned int BUFFER_LENGTH = 200U; -CM17Network::CM17Network(unsigned short localPort, const std::string& gwyAddress, unsigned short gwyPort, bool debug) : -m_socket(localPort), +CM17Network::CM17Network(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) : +m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), m_debug(debug), @@ -41,7 +41,7 @@ m_buffer(1000U, "M17 Network"), m_random(), m_timer(1000U, 5U) { - if (CUDPSocket::lookup(gwyAddress, gwyPort, m_addr, m_addrLen) != 0) { + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) { m_addrLen = 0U; return; } diff --git a/M17Network.h b/M17Network.h index 6b002e0..dbc2b2c 100644 --- a/M17Network.h +++ b/M17Network.h @@ -29,7 +29,7 @@ class CM17Network { public: - CM17Network(unsigned short localPort, const std::string& gwyAddress, unsigned short gwyPort, bool debug); + CM17Network(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); ~CM17Network(); bool open(); diff --git a/MMDVM.ini b/MMDVM.ini index 7a8aa4c..2880c65 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -56,6 +56,7 @@ I2CAddress=0x22 # IP parameters for UDP connection ModemAddress=192.168.2.100 ModemPort=3334 +LocalAddress=192.168.2.1 LocalPort=3335 TXInvert=1 @@ -207,9 +208,10 @@ Trace=1 [D-Star Network] Enable=1 +LocalAddress=127.0.0.1 +LocalPort=20011 GatewayAddress=127.0.0.1 GatewayPort=20010 -LocalPort=20011 # ModeHang=3 Debug=0 @@ -218,9 +220,10 @@ Enable=1 # Type may be either 'Direct' or 'Gateway'. When Direct you must provide the Master's # address as well as the Password, and for DMR+, Options also. Type=Gateway -Address=127.0.0.1 -Port=62031 -Local=62032 +LocalAddress=127.0.0.1 +LocalPort=62032 +RemoteAddress=127.0.0.1 +RemotePort=62031 # Password=P@ssw0rd1234 Jitter=360 Slot1=1 @@ -240,9 +243,10 @@ Debug=0 [P25 Network] Enable=1 +LocalAddress=127.0.0.1 +LocalPort=32010 GatewayAddress=127.0.0.1 GatewayPort=42020 -LocalPort=32010 # ModeHang=3 Debug=0 @@ -258,9 +262,10 @@ Debug=0 [M17 Network] Enable=1 +LocalAddress=127.0.0.1 +LocalPort=17011 GatewayAddress=127.0.0.1 GatewayPort=17010 -LocalPort=17011 # ModeHang=3 Debug=0 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 0edb12a..58b678b 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -1330,8 +1330,9 @@ bool CMMDVMHost::createModem() std::string i2cPort = m_conf.getModemI2CPort(); unsigned int i2cAddress = m_conf.getModemI2CAddress(); std::string modemAddress = m_conf.getModemModemAddress(); - unsigned int modemPort = m_conf.getModemModemPort(); - unsigned int localPort = m_conf.getModemLocalPort(); + unsigned short modemPort = m_conf.getModemModemPort(); + std::string localAddress = m_conf.getModemLocalAddress(); + unsigned short localPort = m_conf.getModemLocalPort(); bool rxInvert = m_conf.getModemRXInvert(); bool txInvert = m_conf.getModemTXInvert(); bool pttInvert = m_conf.getModemPTTInvert(); @@ -1378,8 +1379,9 @@ bool CMMDVMHost::createModem() LogInfo(" UART Speed: %u", uartSpeed); } else if (protocol == "udp") { LogInfo(" Modem Address: %s", modemAddress.c_str()); - LogInfo(" Modem Port: %u", modemPort); - LogInfo(" Local Port: %u", localPort); + LogInfo(" Modem Port: %hu", modemPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); } #if defined(__linux__) else if (protocol == "i2c") { @@ -1418,7 +1420,7 @@ bool CMMDVMHost::createModem() if (protocol == "uart") port = new CUARTController(uartPort, uartSpeed, true); else if (protocol == "udp") - port = new CUDPController(modemAddress, modemPort, localPort); + port = new CUDPController(modemAddress, modemPort, localAddress, localPort); #if defined(__linux__) else if (protocol == "i2c") port = new CI2CController(i2cPort, i2cAddress); @@ -1540,6 +1542,7 @@ bool CMMDVMHost::createDStarNetwork() { std::string gatewayAddress = m_conf.getDStarGatewayAddress(); unsigned short gatewayPort = m_conf.getDStarGatewayPort(); + std::string localAddress = m_conf.getDStarLocalAddress(); unsigned short localPort = m_conf.getDStarLocalPort(); bool debug = m_conf.getDStarNetworkDebug(); m_dstarNetModeHang = m_conf.getDStarNetworkModeHang(); @@ -1547,10 +1550,11 @@ bool CMMDVMHost::createDStarNetwork() LogInfo("D-Star Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_dstarNetModeHang); - m_dstarNetwork = new CDStarNetwork(gatewayAddress, gatewayPort, localPort, m_duplex, VERSION, debug); + m_dstarNetwork = new CDStarNetwork(gatewayAddress, gatewayPort, localAddress, localPort, m_duplex, VERSION, debug); bool ret = m_dstarNetwork->open(); if (!ret) { @@ -1566,9 +1570,10 @@ bool CMMDVMHost::createDStarNetwork() bool CMMDVMHost::createDMRNetwork() { - std::string address = m_conf.getDMRNetworkAddress(); - unsigned short port = m_conf.getDMRNetworkPort(); - unsigned short local = m_conf.getDMRNetworkLocal(); + std::string remoteAddress = m_conf.getDMRNetworkRemoteAddress(); + unsigned short remotePort = m_conf.getDMRNetworkRemotePort(); + std::string localAddress = m_conf.getDMRNetworkLocalAddress(); + unsigned short localPort = m_conf.getDMRNetworkLocalPort(); unsigned int id = m_conf.getDMRId(); std::string password = m_conf.getDMRNetworkPassword(); bool debug = m_conf.getDMRNetworkDebug(); @@ -1583,21 +1588,19 @@ bool CMMDVMHost::createDMRNetwork() LogInfo("DMR Network Parameters"); LogInfo(" Type: %s", type.c_str()); - LogInfo(" Address: %s", address.c_str()); - LogInfo(" Port: %hu", port); - if (local > 0U) - LogInfo(" Local: %hu", local); - else - LogInfo(" Local: random"); + LogInfo(" Remote Address: %s", remoteAddress.c_str()); + LogInfo(" Remote Port: %hu", remotePort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Jitter: %ums", jitter); LogInfo(" Slot 1: %s", slot1 ? "enabled" : "disabled"); LogInfo(" Slot 2: %s", slot2 ? "enabled" : "disabled"); LogInfo(" Mode Hang: %us", m_dmrNetModeHang); if (type == "Direct") - m_dmrNetwork = new CDMRDirectNetwork(address, port, local, id, password, m_duplex, VERSION, slot1, slot2, hwType, debug); + m_dmrNetwork = new CDMRDirectNetwork(remoteAddress, remotePort, localAddress, localPort, id, password, m_duplex, VERSION, slot1, slot2, hwType, debug); else - m_dmrNetwork = new CDMRGatewayNetwork(address, port, local, id, m_duplex, VERSION, slot1, slot2, hwType, debug); + m_dmrNetwork = new CDMRGatewayNetwork(remoteAddress, remotePort, localAddress, localPort, id, m_duplex, VERSION, slot1, slot2, hwType, debug); unsigned int rxFrequency = m_conf.getRXFrequency(); unsigned int txFrequency = m_conf.getTXFrequency(); @@ -1650,21 +1653,21 @@ bool CMMDVMHost::createDMRNetwork() bool CMMDVMHost::createYSFNetwork() { - std::string myAddress = m_conf.getFusionNetworkMyAddress(); - unsigned short myPort = m_conf.getFusionNetworkMyPort(); + std::string localAddress = m_conf.getFusionNetworkLocalAddress(); + unsigned short localPort = m_conf.getFusionNetworkLocalPort(); std::string gatewayAddress = m_conf.getFusionNetworkGatewayAddress(); unsigned short gatewayPort = m_conf.getFusionNetworkGatewayPort(); m_ysfNetModeHang = m_conf.getFusionNetworkModeHang(); bool debug = m_conf.getFusionNetworkDebug(); LogInfo("System Fusion Network Parameters"); - LogInfo(" Local Address: %s", myAddress.c_str()); - LogInfo(" Local Port: %hu", myPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); LogInfo(" Gateway Port: %hu", gatewayPort); LogInfo(" Mode Hang: %us", m_ysfNetModeHang); - m_ysfNetwork = new CYSFNetwork(myAddress, myPort, gatewayAddress, gatewayPort, m_callsign, debug); + m_ysfNetwork = new CYSFNetwork(localAddress, localPort, gatewayAddress, gatewayPort, m_callsign, debug); bool ret = m_ysfNetwork->open(); if (!ret) { @@ -1682,6 +1685,7 @@ bool CMMDVMHost::createP25Network() { std::string gatewayAddress = m_conf.getP25GatewayAddress(); unsigned short gatewayPort = m_conf.getP25GatewayPort(); + std::string localAddress = m_conf.getP25LocalAddress(); unsigned short localPort = m_conf.getP25LocalPort(); m_p25NetModeHang = m_conf.getP25NetworkModeHang(); bool debug = m_conf.getP25NetworkDebug(); @@ -1689,10 +1693,11 @@ bool CMMDVMHost::createP25Network() LogInfo("P25 Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_p25NetModeHang); - m_p25Network = new CP25Network(gatewayAddress, gatewayPort, localPort, debug); + m_p25Network = new CP25Network(gatewayAddress, gatewayPort, localAddress, localPort, debug); bool ret = m_p25Network->open(); if (!ret) { @@ -1745,6 +1750,7 @@ bool CMMDVMHost::createM17Network() { std::string gatewayAddress = m_conf.getM17GatewayAddress(); unsigned short gatewayPort = m_conf.getM17GatewayPort(); + std::string localAddress = m_conf.getM17LocalAddress(); unsigned short localPort = m_conf.getM17LocalPort(); m_m17NetModeHang = m_conf.getM17NetworkModeHang(); bool debug = m_conf.getM17NetworkDebug(); @@ -1752,10 +1758,11 @@ bool CMMDVMHost::createM17Network() LogInfo("M17 Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_m17NetModeHang); - m_m17Network = new CM17Network(localPort, gatewayAddress, gatewayPort, debug); + m_m17Network = new CM17Network(localAddress, localPort, gatewayAddress, gatewayPort, debug); bool ret = m_m17Network->open(); if (!ret) { delete m_m17Network; diff --git a/P25Network.cpp b/P25Network.cpp index 2db60d4..b63b522 100644 --- a/P25Network.cpp +++ b/P25Network.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2019,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2019,2020,2021 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 @@ -87,8 +87,8 @@ const unsigned char REC80[] = { const unsigned int BUFFER_LENGTH = 100U; -CP25Network::CP25Network(const std::string& gatewayAddress, unsigned short gatewayPort, unsigned short localPort, bool debug) : -m_socket(localPort), +CP25Network::CP25Network(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool debug) : +m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), m_debug(debug), diff --git a/P25Network.h b/P25Network.h index 0724310..7023c94 100644 --- a/P25Network.h +++ b/P25Network.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2020,2021 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,7 +30,7 @@ class CP25Network { public: - CP25Network(const std::string& gatewayAddress, unsigned short gatewayPort, unsigned short localPort, bool debug); + CP25Network(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool debug); ~CP25Network(); bool open(); diff --git a/POCSAGNetwork.cpp b/POCSAGNetwork.cpp index 0fc1322..2a4e650 100644 --- a/POCSAGNetwork.cpp +++ b/POCSAGNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018,2019,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2019,2020,2021 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,8 +28,8 @@ const unsigned int BUFFER_LENGTH = 200U; -CPOCSAGNetwork::CPOCSAGNetwork(const std::string& myAddress, unsigned short myPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) : -m_socket(myAddress, myPort), +CPOCSAGNetwork::CPOCSAGNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) : +m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), m_debug(debug), diff --git a/POCSAGNetwork.h b/POCSAGNetwork.h index b14ae73..beceb9b 100644 --- a/POCSAGNetwork.h +++ b/POCSAGNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2020,2021 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 @@ -29,7 +29,7 @@ class CPOCSAGNetwork { public: - CPOCSAGNetwork(const std::string& myAddress, unsigned short myPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); + CPOCSAGNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); ~CPOCSAGNetwork(); bool open(); diff --git a/UDPController.cpp b/UDPController.cpp index 827446f..3996d32 100644 --- a/UDPController.cpp +++ b/UDPController.cpp @@ -24,8 +24,8 @@ const unsigned int BUFFER_LENGTH = 600U; -CUDPController::CUDPController(const std::string& modemAddress, unsigned int modemPort, unsigned int localPort) : -m_socket(localPort), +CUDPController::CUDPController(const std::string& modemAddress, unsigned int modemPort, const std::string& localAddress, unsigned int localPort) : +m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), m_buffer(2000U, "UDP Controller Ring Buffer") diff --git a/UDPController.h b/UDPController.h index ee10cb3..85ee612 100644 --- a/UDPController.h +++ b/UDPController.h @@ -27,7 +27,7 @@ class CUDPController : public IModemPort { public: - CUDPController(const std::string& modemAddress, unsigned int modemPort, unsigned int localPort); + CUDPController(const std::string& modemAddress, unsigned int modemPort, const std::string& localAddress, unsigned int localPort); virtual ~CUDPController(); virtual bool open(); diff --git a/Version.h b/Version.h index b9a0ca6..69f184a 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20210424"; +const char* VERSION = "20210425"; #endif diff --git a/YSFNetwork.cpp b/YSFNetwork.cpp index b9bd0d2..727a1a0 100644 --- a/YSFNetwork.cpp +++ b/YSFNetwork.cpp @@ -28,8 +28,8 @@ const unsigned int BUFFER_LENGTH = 200U; -CYSFNetwork::CYSFNetwork(const std::string& myAddress, unsigned short myPort, const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& callsign, bool debug) : -m_socket(myAddress, myPort), +CYSFNetwork::CYSFNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& callsign, bool debug) : +m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), m_callsign(), diff --git a/YSFNetwork.h b/YSFNetwork.h index ecc3a91..918134b 100644 --- a/YSFNetwork.h +++ b/YSFNetwork.h @@ -29,7 +29,7 @@ class CYSFNetwork { public: - CYSFNetwork(const std::string& myAddress, unsigned short myPort, const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& callsign, bool debug); + CYSFNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& callsign, bool debug); ~CYSFNetwork(); bool open();