|
@@ -405,6 +405,26 @@ struct InetAddress : public sockaddr_storage
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Performs an IP-only comparison or, if that is impossible, a memcmp()
|
|
|
+ *
|
|
|
+ * This version compares only the first 64 bits of IPv6 addresses.
|
|
|
+ *
|
|
|
+ * @param a InetAddress to compare again
|
|
|
+ * @return True if only IP portions are equal (false for non-IP or null addresses)
|
|
|
+ */
|
|
|
+ inline bool ipsEqual2(const InetAddress &a) const
|
|
|
+ {
|
|
|
+ if (ss_family == a.ss_family) {
|
|
|
+ if (ss_family == AF_INET)
|
|
|
+ return (reinterpret_cast<const struct sockaddr_in *>(this)->sin_addr.s_addr == reinterpret_cast<const struct sockaddr_in *>(&a)->sin_addr.s_addr);
|
|
|
+ if (ss_family == AF_INET6)
|
|
|
+ return (memcmp(reinterpret_cast<const struct sockaddr_in6 *>(this)->sin6_addr.s6_addr,reinterpret_cast<const struct sockaddr_in6 *>(&a)->sin6_addr.s6_addr,8) == 0);
|
|
|
+ return (memcmp(this,&a,sizeof(InetAddress)) == 0);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
inline unsigned long hashCode() const
|
|
|
{
|
|
|
if (ss_family == AF_INET) {
|