diff --git a/src/core/libraries/network/net.cpp b/src/core/libraries/network/net.cpp index 4a76f5b41..e3230a49e 100644 --- a/src/core/libraries/network/net.cpp +++ b/src/core/libraries/network/net.cpp @@ -1686,9 +1686,25 @@ int PS4_SYSV_ABI sceNetResolverStartNtoa6() { return ORBIS_OK; } -int PS4_SYSV_ABI sceNetResolverStartNtoaMultipleRecords() { - LOG_ERROR(Lib_Net, "(STUBBED) called"); - return ORBIS_OK; +int PS4_SYSV_ABI sceNetResolverStartNtoaMultipleRecords(OrbisNetId resolverid, const char* hostname, + OrbisNetResolverInfo* info, int timeout, int retry, int flags) { + LOG_WARNING(Lib_Net, "redirected to sceNetResolverStartNtoa"); + + OrbisNetInAddr addr{}; + auto result = sceNetResolverStartNtoa(resolverid, hostname, &addr, timeout, retry, flags); + + if (result == ORBIS_OK) { + info->addrs[0] = { + .u = { + .addr = addr + }, + .af = ORBIS_NET_AF_INET + }; + info->records = 1; + info->recordsv4 = 1; + } + + return result; } int PS4_SYSV_ABI sceNetResolverStartNtoaMultipleRecordsEx() { diff --git a/src/core/libraries/network/net.h b/src/core/libraries/network/net.h index b3c93d7d9..8aa2a7c0e 100644 --- a/src/core/libraries/network/net.h +++ b/src/core/libraries/network/net.h @@ -152,6 +152,24 @@ struct OrbisNetEpollEvent { OrbisNetEpollData data; }; +union OrbisNetAddrUnion { + OrbisNetInAddr addr; + u8 addr6[16]; +}; + +struct OrbisNetResolverAddr { + OrbisNetAddrUnion u; + u32 af; + u32 pad[3]; +}; + +struct OrbisNetResolverInfo { + OrbisNetResolverAddr addrs[10]; + u32 records; + u32 recordsv4; + u32 pad[14]; +}; + int PS4_SYSV_ABI in6addr_any(); int PS4_SYSV_ABI in6addr_loopback(); int PS4_SYSV_ABI sce_net_dummy(); @@ -331,7 +349,8 @@ int PS4_SYSV_ABI sceNetResolverStartAton6(); int PS4_SYSV_ABI sceNetResolverStartNtoa(OrbisNetId resolverid, const char* hostname, OrbisNetInAddr* addr, int timeout, int retry, int flags); int PS4_SYSV_ABI sceNetResolverStartNtoa6(); -int PS4_SYSV_ABI sceNetResolverStartNtoaMultipleRecords(); +int PS4_SYSV_ABI sceNetResolverStartNtoaMultipleRecords(OrbisNetId resolverid, const char* hostname, + OrbisNetResolverInfo* info, int timeout, int retry, int flags); int PS4_SYSV_ABI sceNetResolverStartNtoaMultipleRecordsEx(); int PS4_SYSV_ABI sceNetSend(OrbisNetId s, const void* buf, u64 len, int flags); int PS4_SYSV_ABI sceNetSendmsg(OrbisNetId s, const OrbisNetMsghdr* msg, int flags);