Stop duplciate IPv6 addresses due to privacy mode IPs.

This commit is contained in:
Adam Ierymenko 2017-10-25 16:01:36 -07:00
parent 508fa6a7fe
commit fac7dc9c91
2 changed files with 22 additions and 2 deletions

View file

@ -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) {