aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Socket.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2025-12-23 16:07:51 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2025-12-23 16:55:55 +0100
commit646a7b1ed44decdb6aff868633419dbf3f3d95d1 (patch)
tree208b765bcc6c8c610eed517565e34921043fa75a /lib/Socket.cpp
parent802155fe01ea0cfdd3102f4688094a3925b6a4e6 (diff)
downloaddabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.tar.gz
dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.tar.bz2
dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.zip
Add remote address to stats
Diffstat (limited to 'lib/Socket.cpp')
-rw-r--r--lib/Socket.cpp32
1 files changed, 27 insertions, 5 deletions
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<sockaddr*>(&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<const sockaddr_in*>(&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<const sockaddr_in6*>(&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() { }