mirror of https://github.com/g4klx/DMRGateway
Allow more address and port flexibility for split input networks.
This commit is contained in:
parent
7da7384bb2
commit
74208ed8d5
58
Conf.cpp
58
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;
|
||||
|
|
|
|||
12
Conf.h
12
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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue