diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-03-27 18:23:02 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-03-27 18:23:02 -0700 |
| commit | b73c36acbf03431fd7fa3584e8621875fdcbebf4 (patch) | |
| tree | a08a976e4d4a63efecc2892bc969cc60141b4c5f /node/InetAddress.cpp | |
| parent | 181369964f501c3c702971b30c82b9e84eed58db (diff) | |
| parent | d2c5d7150253a5ae5613cac1d65e84b3aa5d33bc (diff) | |
| download | infinitytier-b73c36acbf03431fd7fa3584e8621875fdcbebf4.tar.gz infinitytier-b73c36acbf03431fd7fa3584e8621875fdcbebf4.zip | |
Merge branch 'adamierymenko-dev' of ssh://shub-niggurath.zerotier.com:222/git/ZeroTierOne into adamierymenko-dev
Diffstat (limited to 'node/InetAddress.cpp')
| -rw-r--r-- | node/InetAddress.cpp | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/node/InetAddress.cpp b/node/InetAddress.cpp index 349646cb..0a7dd88c 100644 --- a/node/InetAddress.cpp +++ b/node/InetAddress.cpp @@ -141,27 +141,29 @@ bool InetAddress::operator==(const InetAddress &a) const return (!memcmp(_sa.sin6.sin6_addr.s6_addr,a._sa.sin6.sin6_addr.s6_addr,sizeof(_sa.sin6.sin6_addr.s6_addr))); } return false; - } else if (!_sa.saddr.sa_family) - return (!a._sa.saddr.sa_family); - return (!memcmp(&_sa,&a._sa,sizeof(_sa))); + } else return (memcmp(&_sa,&a._sa,sizeof(_sa)) == 0); } bool InetAddress::operator<(const InetAddress &a) const throw() { - if (_sa.saddr.sa_family == AF_INET) { - if (a._sa.saddr.sa_family == AF_INET) - return ((ntohl(_sa.sin.sin_addr.s_addr < ntohl(a._sa.sin.sin_addr.s_addr)))||((_sa.sin.sin_addr.s_addr == a._sa.sin.sin_addr.s_addr)&&(ntohs(_sa.sin.sin_port) < ntohs(a._sa.sin.sin_port)))); - else if (a._sa.saddr.sa_family == AF_INET6) - return true; - } else if (_sa.saddr.sa_family == AF_INET6) { - if (a._sa.saddr.sa_family == AF_INET6) { - int cmp = memcmp(_sa.sin6.sin6_addr.s6_addr,a._sa.sin6.sin6_addr.s6_addr,16); - return ((cmp < 0)||((!cmp)&&(ntohs(_sa.sin6.sin6_port) < ntohs(a._sa.sin6.sin6_port)))); - } else if (a._sa.saddr.sa_family == AF_INET) - return false; + if (_sa.saddr.sa_family < a._sa.saddr.sa_family) + return true; + else if (_sa.saddr.sa_family == a._sa.saddr.sa_family) { + if (_sa.saddr.sa_family == AF_INET) { + unsigned long x = ntohl(_sa.sin.sin_addr.s_addr); + unsigned long y = ntohl(a._sa.sin.sin_addr.s_addr); + if (x == y) + return (ntohs(_sa.sin.sin_port) < ntohs(a._sa.sin.sin_port)); + else return (x < y); + } else if (_sa.saddr.sa_family == AF_INET6) { + int cmp = (int)memcmp(_sa.sin6.sin6_addr.s6_addr,a._sa.sin6.sin6_addr.s6_addr,16); + if (cmp == 0) + return (ntohs(_sa.sin6.sin6_port) < ntohs(a._sa.sin6.sin6_port)); + else return (cmp < 0); + } else return (memcmp(&_sa,&a._sa,sizeof(_sa)) < 0); } - return (_sa.saddr.sa_family < a._sa.saddr.sa_family); + return false; } } // namespace ZeroTier |
