From e8e3c29f371b550077b672680f284a9ab8ebe896 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 2 Apr 2018 16:30:39 +0200 Subject: [PATCH] Refactor IpAddressImpl.cpp (Windows) + update changelog --- ChangeLog.md | 1 + src/Nazara/Network/Win32/IpAddressImpl.cpp | 13 +++---------- 2 files changed, 4 insertions(+), 10 deletions(-) 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)); }