diff --git a/ChangeLog.md b/ChangeLog.md index 2c6552db1..2f8c7a77f 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -78,6 +78,7 @@ Nazara Engine: - Added Collider3D::ForEachPolygon method, allowing construction of a debug mesh based on the physics collider - Fixed ConvexCollider3D::GetType returning Compound instead of ConvexHull. - Dual-stack sockets are now supported (by using NetProtocol_Any at creation/opening) +- Fixed IPv6 addresses not being correctly encoded/decoded from the socket API. Nazara Development Kit: - Added ImageWidget (#139) diff --git a/src/Nazara/Network/Win32/IpAddressImpl.cpp b/src/Nazara/Network/Win32/IpAddressImpl.cpp index 6003a4aaa..853dae840 100644 --- a/src/Nazara/Network/Win32/IpAddressImpl.cpp +++ b/src/Nazara/Network/Win32/IpAddressImpl.cpp @@ -93,21 +93,14 @@ namespace Nz { sockaddr_in* ipv4 = reinterpret_cast(info->ai_addr); - auto& rawIpV4 = ipv4->sin_addr; - return IpAddress(rawIpV4.s_net, rawIpV4.s_host, rawIpV4.s_lh, rawIpV4.s_impno, ntohs(ipv4->sin_port)); + return FromSockAddr(ipv4); } case AF_INET6: { sockaddr_in6* ipv6 = reinterpret_cast(info->ai_addr); - auto& rawIpV6 = ipv6->sin6_addr.s6_addr; - - IpAddress::IPv6 structIpV6; - for (unsigned int i = 0; i < 8; ++i) - structIpV6[i] = UInt16(rawIpV6[i * 2]) << 8 | UInt16(rawIpV6[i * 2 + 1]); - - return IpAddress(structIpV6, ntohs(ipv6->sin6_port)); + return FromSockAddr(ipv6); } } @@ -164,7 +157,7 @@ namespace Nz IpAddress::IPv6 ipv6; for (unsigned int i = 0; i < 8; ++i) - ipv6[i] = rawIpV6[i*2] << 8 | rawIpV6[i*2+1]; + ipv6[i] = rawIpV6[i * 2] << 8 | rawIpV6[i * 2 + 1]; return IpAddress(ipv6, ntohs(addressv6->sin6_port)); }