Merge branch 'master' into DualInputs

This commit is contained in:
Jonathan Naylor
2021-04-09 10:20:28 +01:00
5 changed files with 23 additions and 21 deletions

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -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;

View File

@@ -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

View File

@@ -19,6 +19,6 @@
#if !defined(VERSION_H) #if !defined(VERSION_H)
#define VERSION_H #define VERSION_H
const char* VERSION = "20210313"; const char* VERSION = "20210409";
#endif #endif