diff --git a/NXDNReflector/NXDNReflector.cpp b/NXDNReflector/NXDNReflector.cpp index 2d4f2a3..3d4ca1f 100644 --- a/NXDNReflector/NXDNReflector.cpp +++ b/NXDNReflector/NXDNReflector.cpp @@ -257,7 +257,8 @@ void CNXDNReflector::run() rpt->m_callsign = std::string((char*)(buffer + 5U), 10U); m_repeaters.push_back(rpt); - LogMessage("Adding %s", rpt->m_callsign.c_str()); + char buff[80U]; + LogMessage("Adding %s (%s)", rpt->m_callsign.c_str(), CUDPSocket::display(address, buff, 80U)); } else { rpt->m_timer.start(); } @@ -270,7 +271,9 @@ void CNXDNReflector::run() if (id == tg) { if (rpt != NULL) { std::string callsign = std::string((char*)(buffer + 5U), 10U); - LogMessage("Removing %s", callsign.c_str()); + + char buff[80U]; + LogMessage("Removing %s (%s) unlinked", callsign.c_str(), CUDPSocket::display(address, buff, 80U)); for (std::vector::iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) { if (*it == rpt) { @@ -514,7 +517,10 @@ void CNXDNReflector::run() CNXDNRepeater* itRpt = *it; if (itRpt->m_timer.hasExpired()) { std::string callsign = itRpt->m_callsign; - LogMessage("Removing %s disappeared", callsign.c_str()); + + char buff[80U]; + LogMessage("Removing %s (%s) disappeared", callsign.c_str(), CUDPSocket::display(itRpt->m_addr, buff, 80U)); + m_repeaters.erase(it); delete itRpt; break; @@ -576,10 +582,13 @@ void CNXDNReflector::dumpRepeaters() const LogMessage("Currently linked repeaters:"); for (std::vector::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) { - std::string callsign = (*it)->m_callsign; - unsigned int timer = (*it)->m_timer.getTimer(); - unsigned int timeout = (*it)->m_timer.getTimeout(); - LogMessage(" %s %u/%u", callsign.c_str(), timer, timeout); + std::string callsign = (*it)->m_callsign; + sockaddr_storage addr = (*it)->m_addr; + unsigned int timer = (*it)->m_timer.getTimer(); + unsigned int timeout = (*it)->m_timer.getTimeout(); + + char buffer[80U]; + LogMessage(" %s: %s %u/%u", callsign.c_str(), CUDPSocket::display(addr, buffer, 80U), timer, timeout); } } diff --git a/NXDNReflector/UDPSocket.cpp b/NXDNReflector/UDPSocket.cpp index 510c8a2..f52249d 100644 --- a/NXDNReflector/UDPSocket.cpp +++ b/NXDNReflector/UDPSocket.cpp @@ -160,6 +160,34 @@ bool CUDPSocket::isNone(const sockaddr_storage& addr) return ((addr.ss_family == AF_INET) && (in->sin_addr.s_addr == htonl(INADDR_NONE))); } +char* CUDPSocket::display(const sockaddr_storage& addr, char* buffer, unsigned int length) +{ + assert(buffer != NULL); + assert(length > INET6_ADDRSTRLEN); + + switch (addr.ss_family) { + case AF_INET: { + struct sockaddr_in* in4 = (struct sockaddr_in*)&addr; + ::inet_ntop(AF_INET, &in4, buffer, length); + ::sprintf(buffer + ::strlen(buffer), ":%u", in4->sin_port); + } + break; + + case AF_INET6: { + struct sockaddr_in6* in6 = (struct sockaddr_in6*)&addr; + ::inet_ntop(AF_INET6, &in6, buffer, length); + ::sprintf(buffer + ::strlen(buffer), ":%u", in6->sin6_port); + } + break; + + default: + ::strcpy(buffer, "Unknown"); + break; + } + + return buffer; +} + bool CUDPSocket::open(const sockaddr_storage& address) { return open(address.ss_family); diff --git a/NXDNReflector/UDPSocket.h b/NXDNReflector/UDPSocket.h index 6e3846c..003483b 100644 --- a/NXDNReflector/UDPSocket.h +++ b/NXDNReflector/UDPSocket.h @@ -70,6 +70,8 @@ public: static bool isNone(const sockaddr_storage& addr); + static char* display(const sockaddr_storage& address, char* buffer, unsigned int length); + private: std::string m_address_save; unsigned short m_port_save; diff --git a/NXDNReflector/Version.h b/NXDNReflector/Version.h index fb0377d..0c91fa4 100644 --- a/NXDNReflector/Version.h +++ b/NXDNReflector/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20201101"; +const char* VERSION = "20201124"; #endif