diff --git a/source/mijin/net/ip.cpp b/source/mijin/net/ip.cpp index 5bfb027..cd2e99f 100644 --- a/source/mijin/net/ip.cpp +++ b/source/mijin/net/ip.cpp @@ -103,8 +103,8 @@ StreamResult> osResolveResult(os_resolve_handle_t& han struct WSAQueryContext { // WSA stuff - OVERLAPPED overlapped; - PADDRINFOEXA results; + OVERLAPPED overlapped = {}; + PADDRINFOEX results; HANDLE cancelHandle = nullptr; // my stuff @@ -122,7 +122,7 @@ void WINAPI getAddrComplete(DWORD error, DWORD bytes, LPOVERLAPPED overlapped) n queryContext.result = detail::translateWinError(error); } std::vector resultAddresses; - for (PADDRINFOEXA result = queryContext.results; result != nullptr; result = result->ai_next) + for (PADDRINFOEX result = queryContext.results; result != nullptr; result = result->ai_next) { switch (result->ai_family) { @@ -135,7 +135,12 @@ void WINAPI getAddrComplete(DWORD error, DWORD bytes, LPOVERLAPPED overlapped) n case AF_INET6: { sockaddr_in6& addr = *reinterpret_cast(result->ai_addr); - resultAddresses.emplace_back(std::bit_cast(addr.sin6_addr)); + IPv6Address addr6 = std::bit_cast(addr.sin6_addr); + for (std::uint16_t& hextet : addr6.hextets) + { + hextet = ntohs(hextet); + } + resultAddresses.emplace_back(addr6); } break; default: break; @@ -143,13 +148,9 @@ void WINAPI getAddrComplete(DWORD error, DWORD bytes, LPOVERLAPPED overlapped) n } if (queryContext.results != nullptr) { - // WTF is wrong with people at MS? - // you can't access FreeAddrInfoExA otherwise... -#if defined(FreeAddrInfoEx) -#undef FreeAddrInfoEx -#endif - FreeAddrInfoExA(queryContext.results); + FreeAddrInfoEx(queryContext.results); } + queryContext.result = std::move(resultAddresses); } StreamError osBeginResolve(const std::string& hostname, os_resolve_handle_t& queryContext) noexcept @@ -158,10 +159,11 @@ StreamError osBeginResolve(const std::string& hostname, os_resolve_handle_t& que { return detail::translateWSAError(); } - ADDRINFOEXA hints = {.ai_family = AF_UNSPEC}; + ADDRINFOEX hints = {.ai_family = AF_UNSPEC}; - const int error = GetAddrInfoExA( - /* pName = */ hostname.c_str(), + std::wstring hostnameW(hostname.begin(), hostname.end()); + const int error = GetAddrInfoEx( + /* pName = */ hostnameW.c_str(), /* pServiceName = */ nullptr, /* dwNameSpace = */ NS_DNS, /* lpNspId = */ nullptr,