From f7822c0cf492a6df2f7e5514aecabb5894ca3c05 Mon Sep 17 00:00:00 2001
From: Benny Baumann <BenBE@geshi.org>
Date: Sun, 19 Feb 2023 21:43:34 +0100
Subject: [PATCH] add: Implement socketaddress comparison operators

---
 src/net/socketaddress.hpp | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/net/socketaddress.hpp b/src/net/socketaddress.hpp
index 289ab0a..0c0034d 100644
--- a/src/net/socketaddress.hpp
+++ b/src/net/socketaddress.hpp
@@ -149,6 +149,31 @@ COMPILER_RESTORE("-Weffc++");
         return len;
     }
 
+    inline bool operator==(const socketaddr& _other) const {
+        if (!(this->family() == _other.family())) {
+            return false;
+        }
+
+        switch (_other.family()) {
+        case AF_INET:
+            return (((sockaddr_in*) &this->addr)->sin_addr.s_addr == ((sockaddr_in*) &_other.addr)->sin_addr.s_addr)
+                    && (((sockaddr_in*) &this->addr)->sin_port == ((sockaddr_in*) &_other.addr)->sin_port);
+        case AF_INET6:
+            return 0 == memcmp(&((sockaddr_in6*) &this->addr)->sin6_addr, &((sockaddr_in6*) &_other.addr)->sin6_addr, sizeof(in6_addr))
+                    && (((sockaddr_in6*) &this->addr)->sin6_port == ((sockaddr_in6*) &_other.addr)->sin6_port);
+        default:
+            return
+                this->len == _other.len &&
+                0 == memcmp(&this->addr, &_other.addr, this->len);
+        }
+
+        return true;
+    }
+
+    inline bool operator!=(const socketaddr& _other) const {
+        return !(*this == _other);
+    }
+
     std::string str() const {
         std::ostringstream oss;
         oss << "SocketAddress: ";
-- 
GitLab