diff --git a/Conf.cpp b/Conf.cpp index 9a4d669..1586bfd 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -50,9 +50,15 @@ m_rfTimeout(10U), m_netTimeout(10U), m_rptAddress("127.0.0.1"), m_rptPort(62032U), +m_rpt1Address("127.0.0.1"), +m_rpt1Port(62032U), +m_rpt2Address("127.0.0.1"), +m_rpt2Port(62033U), m_localAddress("127.0.0.1"), -m_localPort(62031U), -m_rptProtocol("New"), +m_localPort(62030U), +m_localPort1(62030U), +m_localPort2(62031U), +m_rptProtocol("new"), m_split(0U), m_ruleTrace(false), m_debug(false), @@ -275,13 +281,25 @@ bool CConf::read() else if (::strcmp(key, "NetTimeout") == 0) m_netTimeout = (unsigned int)::atoi(value); else if (::strcmp(key, "RptAddress") == 0) - m_rptAddress = value; + m_rpt1Address = m_rpt2Address = m_rptAddress = value; else if (::strcmp(key, "RptPort") == 0) - m_rptPort = (unsigned int)::atoi(value); + m_rpt1Port = m_rpt2Port = m_rptPort = (unsigned int)::atoi(value); + else if (::strcmp(key, "Rpt1Address") == 0) + m_rpt1Address = value; + else if (::strcmp(key, "Rpt1Port") == 0) + m_rpt1Port = (unsigned int)::atoi(value); + else if (::strcmp(key, "Rpt2Address") == 0) + m_rpt2Address = value; + else if (::strcmp(key, "Rpt2Port") == 0) + m_rpt2Port = (unsigned int)::atoi(value); else if (::strcmp(key, "LocalAddress") == 0) m_localAddress = value; else if (::strcmp(key, "LocalPort") == 0) - m_localPort = (unsigned int)::atoi(value); + m_localPort1 = m_localPort2 = m_localPort = (unsigned int)::atoi(value); + else if (::strcmp(key, "LocalPort1") == 0) + m_localPort1 = (unsigned int)::atoi(value); + else if (::strcmp(key, "LocalPort2") == 0) + m_localPort2 = (unsigned int)::atoi(value); else if (::strcmp(key, "RptProtocol") == 0) m_rptProtocol = value; else if (::strcmp(key, "Split") == 0) @@ -1016,6 +1034,26 @@ unsigned int CConf::getRptPort() const return m_rptPort; } +std::string CConf::getRpt1Address() const +{ + return m_rpt1Address; +} + +unsigned int CConf::getRpt1Port() const +{ + return m_rpt1Port; +} + +std::string CConf::getRpt2Address() const +{ + return m_rpt2Address; +} + +unsigned int CConf::getRpt2Port() const +{ + return m_rpt2Port; +} + std::string CConf::getLocalAddress() const { return m_localAddress; @@ -1026,6 +1064,16 @@ unsigned int CConf::getLocalPort() const return m_localPort; } +unsigned int CConf::getLocalPort1() const +{ + return m_localPort1; +} + +unsigned int CConf::getLocalPort2() const +{ + return m_localPort2; +} + std::string CConf::getRptProtocol() const { return m_rptProtocol; diff --git a/Conf.h b/Conf.h index f40fb65..b2beada 100644 --- a/Conf.h +++ b/Conf.h @@ -83,8 +83,14 @@ public: unsigned int getNetTimeout() const; std::string getRptAddress() const; unsigned int getRptPort() const; + std::string getRpt1Address() const; + unsigned int getRpt1Port() const; + std::string getRpt2Address() const; + unsigned int getRpt2Port() const; std::string getLocalAddress() const; unsigned int getLocalPort() const; + unsigned int getLocalPort1() const; + unsigned int getLocalPort2() const; std::string getRptProtocol() const; unsigned int getSplit() const; bool getRuleTrace() const; @@ -250,8 +256,14 @@ private: unsigned int m_netTimeout; std::string m_rptAddress; unsigned int m_rptPort; + std::string m_rpt1Address; + unsigned int m_rpt1Port; + std::string m_rpt2Address; + unsigned int m_rpt2Port; std::string m_localAddress; unsigned int m_localPort; + unsigned int m_localPort1; + unsigned int m_localPort2; std::string m_rptProtocol; unsigned int m_split; bool m_ruleTrace; diff --git a/DMRGateway.cpp b/DMRGateway.cpp index ecd0371..d72882f 100644 --- a/DMRGateway.cpp +++ b/DMRGateway.cpp @@ -1306,40 +1306,58 @@ int CDMRGateway::run() bool CDMRGateway::createMMDVM() { - std::string rptAddress = m_conf.getRptAddress(); - unsigned int rptPort = m_conf.getRptPort(); - std::string localAddress = m_conf.getLocalAddress(); - unsigned int localPort = m_conf.getLocalPort(); std::string protocol = m_conf.getRptProtocol(); unsigned int split = m_conf.getSplit(); bool debug = m_conf.getDebug(); LogInfo("MMDVM Network Parameters"); - LogInfo(" Rpt Address: %s", rptAddress.c_str()); - LogInfo(" Rpt Port: %u", rptPort); - LogInfo(" Local Address: %s", localAddress.c_str()); - LogInfo(" Local Port: %u", localPort); LogInfo(" Protocol: %s", protocol.c_str()); LogInfo(" Split: %u", split); if (split > 0U) { + std::string rpt1Address = m_conf.getRpt1Address(); + unsigned int rpt1Port = m_conf.getRpt1Port(); + std::string rpt2Address = m_conf.getRpt2Address(); + unsigned int rpt2Port = m_conf.getRpt2Port(); + std::string localAddress = m_conf.getLocalAddress(); + unsigned int localPort1 = m_conf.getLocalPort1(); + unsigned int localPort2 = m_conf.getLocalPort2(); + + LogInfo(" Rpt1 Address: %s", rpt1Address.c_str()); + LogInfo(" Rpt1 Port: %u", rpt1Port); + LogInfo(" Rpt2 Address: %s", rpt2Address.c_str()); + LogInfo(" Rpt2 Port: %u", rpt2Port); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port1: %u", localPort1); + LogInfo(" Local Port2: %u", localPort2); + IMMDVMNetwork* network1 = NULL; IMMDVMNetwork* network2 = NULL; if (protocol == "old") { - network1 = new CMMDVMNetworkOld(rptAddress, rptPort + 0U, localAddress, localPort + 0U, debug); - network2 = new CMMDVMNetworkOld(rptAddress, rptPort + 1U, localAddress, localPort + 1U, debug); + network1 = new CMMDVMNetworkOld("MMDVM-1", rpt1Address, rpt1Port, localAddress, localPort1, debug); + network2 = new CMMDVMNetworkOld("MMDVM-2", rpt2Address, rpt2Port, localAddress, localPort2, debug); } else { - network1 = new CMMDVMNetworkNew(rptAddress, rptPort + 0U, localAddress, localPort + 0U, debug); - network2 = new CMMDVMNetworkNew(rptAddress, rptPort + 1U, localAddress, localPort + 1U, debug); + network1 = new CMMDVMNetworkNew("MMDVM-1", rpt1Address, rpt1Port, localAddress, localPort1, debug); + network2 = new CMMDVMNetworkNew("MMDVM-2", rpt2Address, rpt2Port, localAddress, localPort2, debug); } m_repeater = new CSplitNetwork(network1, network2, split, debug); } else { + std::string rptAddress = m_conf.getRptAddress(); + unsigned int rptPort = m_conf.getRptPort(); + std::string localAddress = m_conf.getLocalAddress(); + unsigned int localPort = m_conf.getLocalPort(); + + LogInfo(" Rpt Address: %s", rptAddress.c_str()); + LogInfo(" Rpt Port: %u", rptPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %u", localPort); + if (protocol == "old") - m_repeater = new CMMDVMNetworkOld(rptAddress, rptPort, localAddress, localPort, debug); + m_repeater = new CMMDVMNetworkOld("MMDVM", rptAddress, rptPort, localAddress, localPort, debug); else - m_repeater = new CMMDVMNetworkNew(rptAddress, rptPort, localAddress, localPort, debug); + m_repeater = new CMMDVMNetworkNew("MMDVM", rptAddress, rptPort, localAddress, localPort, debug); } bool ret = m_repeater->open(); diff --git a/DMRGateway.ini b/DMRGateway.ini index 94bc05d..27d7b03 100644 --- a/DMRGateway.ini +++ b/DMRGateway.ini @@ -2,10 +2,17 @@ Timeout=10 # RFTimeout=10 # NetTimeout=7 +RptProtocol=new RptAddress=127.0.0.1 RptPort=62032 +# Rpt1Address=127.0.0.1 +# Rpt1Port=62032 +# Rpt2Address=127.0.0.1 +# Rpt2Port=62033 LocalAddress=127.0.0.1 -LocalPort=62031 +LocalPort=62030 +# LocalPort1=62030 +# LocalPort2=62031 Split=0 RuleTrace=0 Daemon=0 diff --git a/MMDVMNetworkNew.cpp b/MMDVMNetworkNew.cpp index 03e0817..d2d8a1c 100644 --- a/MMDVMNetworkNew.cpp +++ b/MMDVMNetworkNew.cpp @@ -30,7 +30,8 @@ const unsigned int BUFFER_LENGTH = 500U; const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; -CMMDVMNetworkNew::CMMDVMNetworkNew(const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug) : +CMMDVMNetworkNew::CMMDVMNetworkNew(const char* name, const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug) : +m_name(name), m_rptAddr(), m_rptAddrLen(0U), m_id(0U), @@ -46,6 +47,7 @@ m_radioPositionLen(0U), m_talkerAliasData(NULL), m_talkerAliasLen(0U) { + assert(name != NULL); assert(!rptAddress.empty()); assert(rptPort > 0U); @@ -89,11 +91,11 @@ unsigned int CMMDVMNetworkNew::getId() const bool CMMDVMNetworkNew::open() { if (m_rptAddrLen == 0U) { - LogError("Could not lookup the address of the MMDVM Host"); + LogError("%s Network, could not lookup the address of the MMDVM Host", m_name); return false; } - LogMessage("MMDVM Network, Opening"); + LogMessage("%s Network, opening new network", m_name); return m_socket.open(m_rptAddr); } @@ -250,7 +252,7 @@ bool CMMDVMNetworkNew::writeBeacon() void CMMDVMNetworkNew::close() { - LogMessage("MMDVM Network, Closing"); + LogMessage("%s Network, closing new network", m_name); m_socket.close(); } @@ -264,7 +266,7 @@ void CMMDVMNetworkNew::clock(unsigned int ms) return; if (!CUDPSocket::match(m_rptAddr, address)) { - LogMessage("MMDVM packet received from an invalid source"); + LogMessage("%s Network, packet received from an invalid source", m_name); return; } diff --git a/MMDVMNetworkNew.h b/MMDVMNetworkNew.h index 4a834af..a3a8c37 100644 --- a/MMDVMNetworkNew.h +++ b/MMDVMNetworkNew.h @@ -30,7 +30,7 @@ class CMMDVMNetworkNew : public IMMDVMNetwork { public: - CMMDVMNetworkNew(const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug); + CMMDVMNetworkNew(const char* name, const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug); virtual ~CMMDVMNetworkNew(); virtual unsigned int getShortConfig(unsigned char* config) const; @@ -54,6 +54,7 @@ public: virtual void close(); private: + const char* m_name; sockaddr_storage m_rptAddr; unsigned int m_rptAddrLen; unsigned int m_id; diff --git a/MMDVMNetworkOld.cpp b/MMDVMNetworkOld.cpp index 872ca08..3b9f123 100644 --- a/MMDVMNetworkOld.cpp +++ b/MMDVMNetworkOld.cpp @@ -31,7 +31,8 @@ const unsigned int BUFFER_LENGTH = 500U; const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; -CMMDVMNetworkOld::CMMDVMNetworkOld(const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug) : +CMMDVMNetworkOld::CMMDVMNetworkOld(const char* name, const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug) : +m_name(name), m_rptAddr(), m_rptAddrLen(0U), m_id(0U), @@ -47,6 +48,7 @@ m_radioPositionLen(0U), m_talkerAliasData(NULL), m_talkerAliasLen(0U) { + assert(name != NULL); assert(!rptAddress.empty()); assert(rptPort > 0U); @@ -90,11 +92,11 @@ unsigned int CMMDVMNetworkOld::getId() const bool CMMDVMNetworkOld::open() { if (m_rptAddrLen == 0U) { - LogError("Could not lookup the address of the MMDVM Host"); + LogError("%s Network, could not lookup the address of the MMDVM Host", m_name); return false; } - LogMessage("MMDVM Network, Opening"); + LogMessage("%s Network, opening old network", m_name); return m_socket.open(); } @@ -258,7 +260,7 @@ void CMMDVMNetworkOld::close() unsigned char buffer[HOMEBREW_DATA_PACKET_LENGTH]; ::memset(buffer, 0x00U, HOMEBREW_DATA_PACKET_LENGTH); - LogMessage("MMDVM Network, Closing"); + LogMessage("%s Network, closing old network", m_name); ::memcpy(buffer + 0U, "MSTCL", 5U); ::memcpy(buffer + 5U, m_netId, 4U); @@ -273,14 +275,14 @@ void CMMDVMNetworkOld::clock(unsigned int ms) unsigned int addrlen; int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, addrlen); if (length < 0) { - LogError("MMDVM Network, Socket has failed, reopening"); + LogError("%s Network, socket has failed, reopening", m_name); close(); open(); return; } if (!CUDPSocket::match(m_rptAddr, address)) { - LogMessage("MMDVM packet received from an invalid source"); + LogMessage("%s Network, packet received from an invalid source", m_name); return; } @@ -319,7 +321,7 @@ void CMMDVMNetworkOld::clock(unsigned int ms) ::memcpy(ack + 6U, m_netId, 4U); m_socket.write(ack, 10U, m_rptAddr, m_rptAddrLen); } else if (::memcmp(m_buffer, "RPTCL", 5U) == 0) { - ::LogMessage("MMDVM Network, The connected MMDVM is closing down"); + ::LogMessage("%s Network, the connected MMDVM is closing down", m_name); } else if (::memcmp(m_buffer, "RPTC", 4U) == 0) { m_configLen = 111U; m_configData = new unsigned char[m_configLen]; diff --git a/MMDVMNetworkOld.h b/MMDVMNetworkOld.h index 343530f..a09eb34 100644 --- a/MMDVMNetworkOld.h +++ b/MMDVMNetworkOld.h @@ -30,7 +30,7 @@ class CMMDVMNetworkOld : public IMMDVMNetwork { public: - CMMDVMNetworkOld(const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug); + CMMDVMNetworkOld(const char* name, const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug); virtual ~CMMDVMNetworkOld(); virtual unsigned int getShortConfig(unsigned char* config) const; @@ -54,6 +54,7 @@ public: virtual void close(); private: + const char* m_name; sockaddr_storage m_rptAddr; unsigned int m_rptAddrLen; unsigned int m_id; diff --git a/Version.h b/Version.h index dc21127..71f551d 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20210131"; +const char* VERSION = "20210202"; #endif