mirror of https://github.com/OpenTTD/OpenTTD
(svn r16134) -Change: do not add duplicates to the broadcast list
parent
d21f406b03
commit
5db32d1dc5
|
@ -207,6 +207,15 @@ public:
|
||||||
{
|
{
|
||||||
return const_cast<NetworkAddress*>(this)->CompareTo(address) == 0;
|
return const_cast<NetworkAddress*>(this)->CompareTo(address) == 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Compare the address of this class with the address of another.
|
||||||
|
* @param address the other address.
|
||||||
|
* @return true if both do not match.
|
||||||
|
*/
|
||||||
|
bool operator != (NetworkAddress address) const
|
||||||
|
{
|
||||||
|
return const_cast<NetworkAddress*>(this)->CompareTo(address) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare the address of this class with the address of another.
|
* Compare the address of this class with the address of another.
|
||||||
|
|
|
@ -76,7 +76,8 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE
|
||||||
sockaddr_storage address;
|
sockaddr_storage address;
|
||||||
memset(&address, 0, sizeof(address));
|
memset(&address, 0, sizeof(address));
|
||||||
((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask);
|
((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask);
|
||||||
*broadcast->Append() = NetworkAddress(address, sizeof(sockaddr));
|
NetworkAddress addr(address, sizeof(sockaddr));
|
||||||
|
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
if (read < 0) {
|
if (read < 0) {
|
||||||
|
@ -100,7 +101,8 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // GE
|
||||||
if (ifa->ifa_broadaddr == NULL) continue;
|
if (ifa->ifa_broadaddr == NULL) continue;
|
||||||
if (ifa->ifa_broadaddr->sa_family != AF_INET) continue;
|
if (ifa->ifa_broadaddr->sa_family != AF_INET) continue;
|
||||||
|
|
||||||
*broadcast->Append() = NetworkAddress(ifa->ifa_broadaddr, sizeof(sockaddr));
|
NetworkAddress addr(ifa->ifa_broadaddr, sizeof(sockaddr));
|
||||||
|
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
|
||||||
}
|
}
|
||||||
freeifaddrs(ifap);
|
freeifaddrs(ifap);
|
||||||
}
|
}
|
||||||
|
@ -135,7 +137,8 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Wi
|
||||||
/* iiBroadcast is unusable, because it always seems to be set to 255.255.255.255. */
|
/* iiBroadcast is unusable, because it always seems to be set to 255.255.255.255. */
|
||||||
memcpy(&address, &ifo[j].iiAddress.Address, sizeof(sockaddr));
|
memcpy(&address, &ifo[j].iiAddress.Address, sizeof(sockaddr));
|
||||||
((sockaddr_in*)&address)->sin_addr.s_addr = ifo[j].iiAddress.AddressIn.sin_addr.s_addr | ~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr;
|
((sockaddr_in*)&address)->sin_addr.s_addr = ifo[j].iiAddress.AddressIn.sin_addr.s_addr | ~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr;
|
||||||
*broadcast->Append() = NetworkAddress(address, sizeof(sockaddr));
|
NetworkAddress addr(address, sizeof(sockaddr));
|
||||||
|
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(ifo);
|
free(ifo);
|
||||||
|
@ -172,7 +175,8 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // !G
|
||||||
if (ioctl(sock, SIOCGIFFLAGS, &r) != -1 &&
|
if (ioctl(sock, SIOCGIFFLAGS, &r) != -1 &&
|
||||||
r.ifr_flags & IFF_BROADCAST &&
|
r.ifr_flags & IFF_BROADCAST &&
|
||||||
ioctl(sock, SIOCGIFBRDADDR, &r) != -1) {
|
ioctl(sock, SIOCGIFBRDADDR, &r) != -1) {
|
||||||
*broadcast->Append() = NetworkAddress(&r.ifr_broadaddr, sizeof(sockaddr));
|
NetworkAddress addr(&r.ifr_broadaddr, sizeof(sockaddr));
|
||||||
|
if (!broadcast->Contains(addr)) *broadcast->Append() = addr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue