Merge pull request #105 from f1rmb/f1rmb_no_goodbye_to_master_on_write_errors

Do not try to send RPTCL if the connection is already broken.
This commit is contained in:
Jonathan Naylor 2021-04-08 18:33:09 +01:00 committed by GitHub
commit a962971b11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 7 deletions

View file

@ -298,11 +298,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);
@ -341,7 +341,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;
} }
@ -414,7 +414,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();
@ -455,7 +455,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();
} }
} }
@ -546,7 +546,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

@ -57,7 +57,7 @@ public:
bool isConnected() const; bool isConnected() const;
void close(); void close(bool sayGoodbye = true);
private: private:
sockaddr_storage m_addr; sockaddr_storage m_addr;