From e3037ef7b06a8248c49e78e01d3f44e2c7e31dd5 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sun, 11 Sep 2016 20:48:01 -0500 Subject: [PATCH] nsapi - Added equality operators to SocketAddress class --- features/net/network-socket/SocketAddress.cpp | 19 +++++++++++++++++++ features/net/network-socket/SocketAddress.h | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/features/net/network-socket/SocketAddress.cpp b/features/net/network-socket/SocketAddress.cpp index a6e9fb7cf48..ccb3f733041 100644 --- a/features/net/network-socket/SocketAddress.cpp +++ b/features/net/network-socket/SocketAddress.cpp @@ -258,6 +258,25 @@ SocketAddress::operator bool() const return false; } +bool operator==(const SocketAddress &a, const SocketAddress &b) +{ + int count = 0; + if (a._addr.version == NSAPI_IPv4 && b._addr.version == NSAPI_IPv4) { + count = NSAPI_IPv4_BYTES; + } else if (a._addr.version == NSAPI_IPv6 && b._addr.version == NSAPI_IPv6) { + count = NSAPI_IPv6_BYTES; + } else { + return false; + } + + return (memcmp(a._addr.bytes, b._addr.bytes, count) == 0); +} + +bool operator!=(const SocketAddress &a, const SocketAddress &b) +{ + return !(a == b); +} + void SocketAddress::_SocketAddress(NetworkStack *iface, const char *host, uint16_t port) { _ip_address[0] = '\0'; diff --git a/features/net/network-socket/SocketAddress.h b/features/net/network-socket/SocketAddress.h index e03f677c494..9f1a81e1367 100644 --- a/features/net/network-socket/SocketAddress.h +++ b/features/net/network-socket/SocketAddress.h @@ -137,6 +137,18 @@ class SocketAddress { */ operator bool() const; + /** Compare two addresses for equality + * + * @return True if both addresses are equal + */ + friend bool operator==(const SocketAddress &a, const SocketAddress &b); + + /** Compare two addresses for equality + * + * @return True if both addresses are not equal + */ + friend bool operator!=(const SocketAddress &a, const SocketAddress &b); + private: void _SocketAddress(NetworkStack *iface, const char *host, uint16_t port);