summaryrefslogtreecommitdiff
path: root/node/InetAddress.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-03-27 18:23:02 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-03-27 18:23:02 -0700
commitb73c36acbf03431fd7fa3584e8621875fdcbebf4 (patch)
treea08a976e4d4a63efecc2892bc969cc60141b4c5f /node/InetAddress.cpp
parent181369964f501c3c702971b30c82b9e84eed58db (diff)
parentd2c5d7150253a5ae5613cac1d65e84b3aa5d33bc (diff)
downloadinfinitytier-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.cpp32
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