mirror of
https://github.com/g4klx/DMRGateway
synced 2025-12-23 23:05:38 +08:00
Merge branch 'master' into DualInputs
This commit is contained in:
@@ -1303,32 +1303,32 @@ int CDMRGateway::run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_dmrNetwork1 != NULL) {
|
if (m_dmrNetwork1 != NULL) {
|
||||||
m_dmrNetwork1->close();
|
m_dmrNetwork1->close(true);
|
||||||
delete m_dmrNetwork1;
|
delete m_dmrNetwork1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dmrNetwork2 != NULL) {
|
if (m_dmrNetwork2 != NULL) {
|
||||||
m_dmrNetwork2->close();
|
m_dmrNetwork2->close(true);
|
||||||
delete m_dmrNetwork2;
|
delete m_dmrNetwork2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dmrNetwork3 != NULL) {
|
if (m_dmrNetwork3 != NULL) {
|
||||||
m_dmrNetwork3->close();
|
m_dmrNetwork3->close(true);
|
||||||
delete m_dmrNetwork3;
|
delete m_dmrNetwork3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dmrNetwork4 != NULL) {
|
if (m_dmrNetwork4 != NULL) {
|
||||||
m_dmrNetwork4->close();
|
m_dmrNetwork4->close(true);
|
||||||
delete m_dmrNetwork4;
|
delete m_dmrNetwork4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dmrNetwork5 != NULL) {
|
if (m_dmrNetwork5 != NULL) {
|
||||||
m_dmrNetwork5->close();
|
m_dmrNetwork5->close(true);
|
||||||
delete m_dmrNetwork5;
|
delete m_dmrNetwork5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_xlxNetwork != NULL) {
|
if (m_xlxNetwork != NULL) {
|
||||||
m_xlxNetwork->close();
|
m_xlxNetwork->close(true);
|
||||||
delete m_xlxNetwork;
|
delete m_xlxNetwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2351,7 +2351,7 @@ bool CDMRGateway::linkXLX(unsigned int number)
|
|||||||
|
|
||||||
if (m_xlxNetwork != NULL) {
|
if (m_xlxNetwork != NULL) {
|
||||||
LogMessage("XLX, Disconnecting from XLX%03u", m_xlxNumber);
|
LogMessage("XLX, Disconnecting from XLX%03u", m_xlxNumber);
|
||||||
m_xlxNetwork->close();
|
m_xlxNetwork->close(true);
|
||||||
delete m_xlxNetwork;
|
delete m_xlxNetwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2388,7 +2388,7 @@ bool CDMRGateway::linkXLX(unsigned int number)
|
|||||||
void CDMRGateway::unlinkXLX()
|
void CDMRGateway::unlinkXLX()
|
||||||
{
|
{
|
||||||
if (m_xlxNetwork != NULL) {
|
if (m_xlxNetwork != NULL) {
|
||||||
m_xlxNetwork->close();
|
m_xlxNetwork->close(true);
|
||||||
delete m_xlxNetwork;
|
delete m_xlxNetwork;
|
||||||
m_xlxNetwork = NULL;
|
m_xlxNetwork = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -293,11 +293,11 @@ bool CDMRNetwork::isConnected() const
|
|||||||
return m_status == RUNNING;
|
return m_status == RUNNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDMRNetwork::close()
|
void CDMRNetwork::close(bool sayGoodbye)
|
||||||
{
|
{
|
||||||
LogMessage("%s, Closing DMR Network", m_name.c_str());
|
LogMessage("%s, Closing DMR Network", m_name.c_str());
|
||||||
|
|
||||||
if (m_status == RUNNING) {
|
if (sayGoodbye && (m_status == RUNNING)) {
|
||||||
unsigned char buffer[9U];
|
unsigned char buffer[9U];
|
||||||
::memcpy(buffer + 0U, "RPTCL", 5U);
|
::memcpy(buffer + 0U, "RPTCL", 5U);
|
||||||
::memcpy(buffer + 5U, m_id, 4U);
|
::memcpy(buffer + 5U, m_id, 4U);
|
||||||
@@ -349,7 +349,7 @@ void CDMRNetwork::clock(unsigned int ms)
|
|||||||
int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, addrlen);
|
int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, addrlen);
|
||||||
if (length < 0) {
|
if (length < 0) {
|
||||||
LogError("%s, Socket has failed, retrying connection to the master", m_name.c_str());
|
LogError("%s, Socket has failed, retrying connection to the master", m_name.c_str());
|
||||||
close();
|
close(false);
|
||||||
open();
|
open();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -383,7 +383,7 @@ void CDMRNetwork::clock(unsigned int ms)
|
|||||||
the Network sometimes times out and reaches here.
|
the Network sometimes times out and reaches here.
|
||||||
We want it to reconnect so... */
|
We want it to reconnect so... */
|
||||||
LogError("%s, Login to the master has failed, retrying network ...", m_name.c_str());
|
LogError("%s, Login to the master has failed, retrying network ...", m_name.c_str());
|
||||||
close();
|
close(false);
|
||||||
open();
|
open();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -428,7 +428,7 @@ void CDMRNetwork::clock(unsigned int ms)
|
|||||||
}
|
}
|
||||||
} else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) {
|
} else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) {
|
||||||
LogError("%s, Master is closing down", m_name.c_str());
|
LogError("%s, Master is closing down", m_name.c_str());
|
||||||
close();
|
close(false);
|
||||||
open();
|
open();
|
||||||
} else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) {
|
} else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) {
|
||||||
m_timeoutTimer.start();
|
m_timeoutTimer.start();
|
||||||
@@ -444,7 +444,7 @@ void CDMRNetwork::clock(unsigned int ms)
|
|||||||
m_timeoutTimer.clock(ms);
|
m_timeoutTimer.clock(ms);
|
||||||
if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) {
|
if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) {
|
||||||
LogError("%s, Connection to the master has timed out, retrying connection", m_name.c_str());
|
LogError("%s, Connection to the master has timed out, retrying connection", m_name.c_str());
|
||||||
close();
|
close(false);
|
||||||
open();
|
open();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -535,7 +535,7 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length)
|
|||||||
bool ret = m_socket.write(data, length, m_addr, m_addrLen);
|
bool ret = m_socket.write(data, length, m_addr, m_addrLen);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
LogError("%s, Socket has failed when writing data to the master, retrying connection", m_name.c_str());
|
LogError("%s, Socket has failed when writing data to the master, retrying connection", m_name.c_str());
|
||||||
m_socket.close();
|
close(false);
|
||||||
open();
|
open();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX
|
* Copyright (C) 2015,2016,2017,2018,2020.2021 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -57,7 +57,7 @@ public:
|
|||||||
|
|
||||||
bool isConnected() const;
|
bool isConnected() const;
|
||||||
|
|
||||||
void close();
|
void close(bool sayGoodbye);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_address;
|
std::string m_address;
|
||||||
|
|||||||
@@ -187,6 +187,8 @@ bool CUDPSocket::open(const unsigned int index, const unsigned int af, const std
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
close(index);
|
||||||
|
|
||||||
int fd = ::socket(addr.ss_family, SOCK_DGRAM, 0);
|
int fd = ::socket(addr.ss_family, SOCK_DGRAM, 0);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
@@ -343,13 +345,13 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s
|
|||||||
|
|
||||||
void CUDPSocket::close()
|
void CUDPSocket::close()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < UDP_SOCKET_MAX; i++)
|
for (unsigned int i = 0; i < UDP_SOCKET_MAX; i++)
|
||||||
close(m_fd[i]);
|
close(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CUDPSocket::close(const unsigned int index)
|
void CUDPSocket::close(const unsigned int index)
|
||||||
{
|
{
|
||||||
if (m_fd[index] >= 0) {
|
if ((index < UDP_SOCKET_MAX) && (m_fd[index] >= 0)) {
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
::closesocket(m_fd[index]);
|
::closesocket(m_fd[index]);
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user