From 646a7b1ed44decdb6aff868633419dbf3f3d95d1 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Tue, 23 Dec 2025 16:07:51 +0100 Subject: Add remote address to stats --- lib/Socket.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'lib/Socket.cpp') diff --git a/lib/Socket.cpp b/lib/Socket.cpp index 33c9c73..da9031f 100644 --- a/lib/Socket.cpp +++ b/lib/Socket.cpp @@ -71,13 +71,35 @@ void InetAddress::resolveUdpDestination(const std::string& destination, int port string InetAddress::to_string() const { char received_from_str[64] = {}; - sockaddr *addr = reinterpret_cast(&addr); - const char* ret = inet_ntop(AF_INET, addr, received_from_str, 63); - if (ret == nullptr) { - throw invalid_argument(string("Error converting InetAddress") + strerror(errno)); + if (addr.ss_family == AF_INET) { + const sockaddr_in *s = reinterpret_cast(&addr); + const char *ret = inet_ntop(AF_INET, &s->sin_addr, received_from_str, 63); + + if (ret == nullptr) { + throw invalid_argument(string("Error converting AF_INET InetAddress") + strerror(errno)); + } + + auto port = ntohs(s->sin_port); + + return string(ret) + ":" + std::to_string(port); + } + else if (addr.ss_family == AF_INET6) { + const sockaddr_in6 *s = reinterpret_cast(&addr); + const char *ret = inet_ntop(AF_INET6, &s->sin6_addr, received_from_str, 63); + + if (ret == nullptr) { + throw invalid_argument(string("Error converting AF_INET6 InetAddress") + strerror(errno)); + } + + auto port = ntohs(s->sin6_port); + + return string(ret) + ":" + std::to_string(port); + } + else { + fprintf(stderr, "Unknown AF %u\n", addr.ss_family); + return ""; } - return ret; } UDPPacket::UDPPacket() { } -- cgit v1.2.3