diff --git a/APRSWriter.cpp b/APRSWriter.cpp index a302952..d126cc4 100644 --- a/APRSWriter.cpp +++ b/APRSWriter.cpp @@ -35,8 +35,8 @@ m_latitude(0.0F), m_longitude(0.0F), m_height(0), m_desc(), -m_aprsAddress(), -m_aprsLen(), +m_aprsAddr(), +m_aprsLen(0U), m_aprsSocket() { assert(!callsign.empty()); @@ -48,7 +48,8 @@ m_aprsSocket() m_callsign.append(suffix.substr(0U, 1U)); } - CUDPSocket::lookup(address, port, m_aprsAddress, m_aprsLen); + if (CUDPSocket::lookup(address, port, m_aprsAddr, m_aprsLen) != 0) + m_aprsLen = 0U; } CAPRSWriter::~CAPRSWriter() @@ -71,7 +72,12 @@ void CAPRSWriter::setLocation(float latitude, float longitude, int height) bool CAPRSWriter::open() { - bool ret = m_aprsSocket.open(); + if (m_aprsLen == 0U) { + LogError("Could not lookup the address of the APRS-IS server"); + return false; + } + + bool ret = m_aprsSocket.open(m_aprsAddr); if (!ret) return false; @@ -159,5 +165,5 @@ void CAPRSWriter::sendIdFrame() if (m_debug) LogDebug("APRS ==> %s", output); - m_aprsSocket.write((unsigned char*)output, (unsigned int)::strlen(output), m_aprsAddress, m_aprsLen); + m_aprsSocket.write((unsigned char*)output, (unsigned int)::strlen(output), m_aprsAddr, m_aprsLen); } diff --git a/APRSWriter.h b/APRSWriter.h index f3ad1f7..ce45dd7 100644 --- a/APRSWriter.h +++ b/APRSWriter.h @@ -62,7 +62,7 @@ private: float m_longitude; int m_height; std::string m_desc; - sockaddr_storage m_aprsAddress; + sockaddr_storage m_aprsAddr; unsigned int m_aprsLen; CUDPSocket m_aprsSocket; diff --git a/DMRNetwork.cpp b/DMRNetwork.cpp index cd379f2..6e5e90c 100644 --- a/DMRNetwork.cpp +++ b/DMRNetwork.cpp @@ -32,8 +32,8 @@ const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, const std::string& name, bool location, bool debug) : -m_address(), -m_addrlen(), +m_addr(), +m_addrLen(0U), m_id(NULL), m_password(password), m_name(name), @@ -56,7 +56,8 @@ m_beacon(false) assert(id > 1000U); assert(!password.empty()); - CUDPSocket::lookup(address, port, m_address, m_addrlen); + if (CUDPSocket::lookup(address, port, m_addr, m_addrLen) != 0) + m_addrLen = 0U; m_buffer = new unsigned char[BUFFER_LENGTH]; m_salt = new unsigned char[sizeof(uint32_t)]; @@ -93,6 +94,11 @@ void CDMRNetwork::setConfig(const unsigned char* data, unsigned int len) bool CDMRNetwork::open() { + if (m_addrLen == 0U) { + LogError("%s, Could not lookup the address of the master", m_name.c_str()); + return false; + } + LogMessage("%s, Opening DMR Network", m_name.c_str()); m_status = WAITING_CONNECT; @@ -305,7 +311,7 @@ void CDMRNetwork::clock(unsigned int ms) if (m_status == WAITING_CONNECT) { m_retryTimer.clock(ms); if (m_retryTimer.isRunning() && m_retryTimer.hasExpired()) { - bool ret = m_socket.open(m_address.ss_family); + bool ret = m_socket.open(m_addr); if (ret) { ret = writeLogin(); if (!ret) @@ -334,7 +340,7 @@ void CDMRNetwork::clock(unsigned int ms) if (m_debug && length > 0) CUtils::dump(1U, "Network Received", m_buffer, length); - if (length > 0 && CUDPSocket::match(m_address, address)) { + if (length > 0 && CUDPSocket::match(m_addr, address)) { if (::memcmp(m_buffer, "DMRD", 4U) == 0) { if (m_debug) CUtils::dump(1U, "Network Received", m_buffer, length); @@ -526,7 +532,7 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length) if (m_debug) CUtils::dump(1U, "Network Transmitted", data, length); - bool ret = m_socket.write(data, length, m_address, m_addrlen); + bool ret = m_socket.write(data, length, m_addr, m_addrLen); if (!ret) { LogError("%s, Socket has failed when writing data to the master, retrying connection", m_name.c_str()); m_socket.close(); diff --git a/DMRNetwork.h b/DMRNetwork.h index 91c78b6..e496bee 100644 --- a/DMRNetwork.h +++ b/DMRNetwork.h @@ -58,8 +58,8 @@ public: void close(); private: - sockaddr_storage m_address; - unsigned int m_addrlen; + sockaddr_storage m_addr; + unsigned int m_addrLen; uint8_t* m_id; std::string m_password; std::string m_name; diff --git a/MMDVMNetwork.cpp b/MMDVMNetwork.cpp index 529eba4..09d7303 100644 --- a/MMDVMNetwork.cpp +++ b/MMDVMNetwork.cpp @@ -31,8 +31,8 @@ const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; CMMDVMNetwork::CMMDVMNetwork(const std::string& rptAddress, unsigned int rptPort, const std::string& localAddress, unsigned int localPort, bool debug) : -m_rptAddress(), -m_rptAddrLen(), +m_rptAddr(), +m_rptAddrLen(0U), m_id(0U), m_netId(NULL), m_debug(debug), @@ -49,7 +49,8 @@ m_talkerAliasLen(0U) assert(!rptAddress.empty()); assert(rptPort > 0U); - CUDPSocket::lookup(rptAddress, rptPort, m_rptAddress, m_rptAddrLen); + if (CUDPSocket::lookup(rptAddress, rptPort, m_rptAddr, m_rptAddrLen) != 0) + m_rptAddrLen = 0U; m_buffer = new unsigned char[BUFFER_LENGTH]; m_netId = new unsigned char[4U]; @@ -87,9 +88,14 @@ unsigned int CMMDVMNetwork::getId() const bool CMMDVMNetwork::open() { + if (m_rptAddrLen == 0U) { + LogError("Could not lookup the address of the MMDVM Host"); + return false; + } + LogMessage("MMDVM Network, Opening"); - return m_socket.open(m_rptAddress); + return m_socket.open(m_rptAddr); } bool CMMDVMNetwork::read(CDMRData& data) @@ -206,7 +212,7 @@ bool CMMDVMNetwork::write(const CDMRData& data) if (m_debug) CUtils::dump(1U, "Network Transmitted", buffer, HOMEBREW_DATA_PACKET_LENGTH); - m_socket.write(buffer, HOMEBREW_DATA_PACKET_LENGTH, m_rptAddress, m_rptAddrLen); + m_socket.write(buffer, HOMEBREW_DATA_PACKET_LENGTH, m_rptAddr, m_rptAddrLen); return true; } @@ -239,7 +245,7 @@ bool CMMDVMNetwork::readTalkerAlias(unsigned char* data, unsigned int& length) bool CMMDVMNetwork::writeBeacon() { - return m_socket.write((unsigned char*)"DMRB", 4U, m_rptAddress, m_rptAddrLen); + return m_socket.write((unsigned char*)"DMRB", 4U, m_rptAddr, m_rptAddrLen); } void CMMDVMNetwork::close() @@ -257,7 +263,7 @@ void CMMDVMNetwork::clock(unsigned int ms) if (length <= 0) return; - if (!CUDPSocket::match(m_rptAddress, address)) { + if (!CUDPSocket::match(m_rptAddr, address)) { LogMessage("MMDVM packet received from an invalid source"); return; } @@ -284,7 +290,7 @@ void CMMDVMNetwork::clock(unsigned int ms) ::memcpy(m_configData, m_buffer + 8U, m_configLen); } - m_socket.write((unsigned char*)"DMRP", 4U, m_rptAddress, m_rptAddrLen); + m_socket.write((unsigned char*)"DMRP", 4U, m_rptAddr, m_rptAddrLen); } else { CUtils::dump("Unknown packet from the MMDVM", m_buffer, length); } diff --git a/MMDVMNetwork.h b/MMDVMNetwork.h index 83baa5e..89dc762 100644 --- a/MMDVMNetwork.h +++ b/MMDVMNetwork.h @@ -54,7 +54,7 @@ public: void close(); private: - sockaddr_storage m_rptAddress; + sockaddr_storage m_rptAddr; unsigned int m_rptAddrLen; unsigned int m_id; unsigned char* m_netId; diff --git a/UDPSocket.cpp b/UDPSocket.cpp index 48e779f..fb4eb16 100644 --- a/UDPSocket.cpp +++ b/UDPSocket.cpp @@ -143,11 +143,6 @@ bool CUDPSocket::isNone(const sockaddr_storage& addr) return ((addr.ss_family == AF_INET) && (in->sin_addr.s_addr == htonl(INADDR_NONE))); } -bool CUDPSocket::open() -{ - return open(AF_UNSPEC); -} - bool CUDPSocket::open(const sockaddr_storage& address) { return open(address.ss_family); diff --git a/UDPSocket.h b/UDPSocket.h index 92daa1f..b169641 100644 --- a/UDPSocket.h +++ b/UDPSocket.h @@ -46,8 +46,7 @@ public: CUDPSocket(unsigned int port = 0U); ~CUDPSocket(); - bool open(); - bool open(unsigned int af); + bool open(unsigned int af = AF_UNSPEC); bool open(const sockaddr_storage& address); int read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int &address_length); @@ -69,3 +68,4 @@ private: }; #endif +