service/soc_u: address review comments
This commit is contained in:
parent
08bf899d70
commit
1995e8ff32
|
@ -10,6 +10,7 @@
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/scope_exit.h"
|
#include "common/scope_exit.h"
|
||||||
|
#include "common/swap.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/kernel/shared_memory.h"
|
#include "core/hle/kernel/shared_memory.h"
|
||||||
|
@ -51,14 +52,6 @@
|
||||||
#define closesocket(x) close(x)
|
#define closesocket(x) close(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Some platforms seem to have these defined, they conflict with our function names
|
|
||||||
#ifdef GetAddrInfo
|
|
||||||
#undef GetAddrInfo
|
|
||||||
#endif
|
|
||||||
#ifdef GetNameInfo
|
|
||||||
#undef GetNameInfo
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Service::SOC {
|
namespace Service::SOC {
|
||||||
|
|
||||||
const s32 SOCKET_ERROR_VALUE = -1;
|
const s32 SOCKET_ERROR_VALUE = -1;
|
||||||
|
@ -329,18 +322,17 @@ union CTRSockAddr {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CTRAddrInfo {
|
struct CTRAddrInfo {
|
||||||
s32 ai_flags;
|
s32_le ai_flags;
|
||||||
s32 ai_family;
|
s32_le ai_family;
|
||||||
s32 ai_socktype;
|
s32_le ai_socktype;
|
||||||
s32 ai_protocol;
|
s32_le ai_protocol;
|
||||||
s32 ai_addrlen;
|
s32_le ai_addrlen;
|
||||||
char ai_canonname[256];
|
char ai_canonname[256];
|
||||||
CTRSockAddr ai_addr;
|
CTRSockAddr ai_addr;
|
||||||
|
|
||||||
/// Converts a platform-specific addrinfo to a 3ds addrinfo.
|
/// Converts a platform-specific addrinfo to a 3ds addrinfo.
|
||||||
static CTRAddrInfo FromPlatform(const addrinfo& addr) {
|
static CTRAddrInfo FromPlatform(const addrinfo& addr) {
|
||||||
CTRAddrInfo ctr_addr;
|
CTRAddrInfo ctr_addr{};
|
||||||
std::memset(&ctr_addr, 0, sizeof(ctr_addr));
|
|
||||||
|
|
||||||
ctr_addr.ai_flags = addr.ai_flags;
|
ctr_addr.ai_flags = addr.ai_flags;
|
||||||
ctr_addr.ai_family = addr.ai_family;
|
ctr_addr.ai_family = addr.ai_family;
|
||||||
|
@ -896,7 +888,7 @@ void SOC_U::SetSockOpt(Kernel::HLERequestContext& ctx) {
|
||||||
rb.Push(err);
|
rb.Push(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SOC_U::GetAddrInfo(Kernel::HLERequestContext& ctx) {
|
void SOC_U::GetAddrInfoImpl(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp(ctx, 0x0F, 4, 6);
|
IPC::RequestParser rp(ctx, 0x0F, 4, 6);
|
||||||
u32 node_length = rp.Pop<u32>();
|
u32 node_length = rp.Pop<u32>();
|
||||||
u32 service_length = rp.Pop<u32>();
|
u32 service_length = rp.Pop<u32>();
|
||||||
|
@ -956,12 +948,12 @@ void SOC_U::GetAddrInfo(Kernel::HLERequestContext& ctx) {
|
||||||
rb.PushStaticBuffer(out_buff, 0);
|
rb.PushStaticBuffer(out_buff, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SOC_U::GetNameInfo(Kernel::HLERequestContext& ctx) {
|
void SOC_U::GetNameInfoImpl(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp(ctx, 0x10, 4, 2);
|
IPC::RequestParser rp(ctx, 0x10, 4, 2);
|
||||||
u32 socklen = rp.Pop<u32>();
|
u32 socklen = rp.Pop<u32>();
|
||||||
u32 hostlen = rp.Pop<u32>();
|
u32 hostlen = rp.Pop<u32>();
|
||||||
u32 servlen = rp.Pop<u32>();
|
u32 servlen = rp.Pop<u32>();
|
||||||
int flags = static_cast<int>(rp.Pop<u32>());
|
s32 flags = rp.Pop<s32>();
|
||||||
auto sa_buff = rp.PopStaticBuffer();
|
auto sa_buff = rp.PopStaticBuffer();
|
||||||
|
|
||||||
CTRSockAddr ctr_sa;
|
CTRSockAddr ctr_sa;
|
||||||
|
@ -1001,8 +993,8 @@ SOC_U::SOC_U() : ServiceFramework("soc:U") {
|
||||||
{0x000C0082, &SOC_U::Shutdown, "Shutdown"},
|
{0x000C0082, &SOC_U::Shutdown, "Shutdown"},
|
||||||
{0x000D0082, nullptr, "GetHostByName"},
|
{0x000D0082, nullptr, "GetHostByName"},
|
||||||
{0x000E00C2, nullptr, "GetHostByAddr"},
|
{0x000E00C2, nullptr, "GetHostByAddr"},
|
||||||
{0x000F0106, &SOC_U::GetAddrInfo, "GetAddrInfo"},
|
{0x000F0106, &SOC_U::GetAddrInfoImpl, "GetAddrInfo"},
|
||||||
{0x00100102, &SOC_U::GetNameInfo, "GetNameInfo"},
|
{0x00100102, &SOC_U::GetNameInfoImpl, "GetNameInfo"},
|
||||||
{0x00110102, &SOC_U::GetSockOpt, "GetSockOpt"},
|
{0x00110102, &SOC_U::GetSockOpt, "GetSockOpt"},
|
||||||
{0x00120104, &SOC_U::SetSockOpt, "SetSockOpt"},
|
{0x00120104, &SOC_U::SetSockOpt, "SetSockOpt"},
|
||||||
{0x001300C2, &SOC_U::Fcntl, "Fcntl"},
|
{0x001300C2, &SOC_U::Fcntl, "Fcntl"},
|
||||||
|
|
|
@ -44,8 +44,11 @@ private:
|
||||||
void ShutdownSockets(Kernel::HLERequestContext& ctx);
|
void ShutdownSockets(Kernel::HLERequestContext& ctx);
|
||||||
void GetSockOpt(Kernel::HLERequestContext& ctx);
|
void GetSockOpt(Kernel::HLERequestContext& ctx);
|
||||||
void SetSockOpt(Kernel::HLERequestContext& ctx);
|
void SetSockOpt(Kernel::HLERequestContext& ctx);
|
||||||
void GetAddrInfo(Kernel::HLERequestContext& ctx);
|
|
||||||
void GetNameInfo(Kernel::HLERequestContext& ctx);
|
// Some platforms seem to have GetAddrInfo and GetNameInfo defined as macros,
|
||||||
|
// so we have to use a different name here.
|
||||||
|
void GetAddrInfoImpl(Kernel::HLERequestContext& ctx);
|
||||||
|
void GetNameInfoImpl(Kernel::HLERequestContext& ctx);
|
||||||
|
|
||||||
/// Close all open sockets
|
/// Close all open sockets
|
||||||
void CleanupSockets();
|
void CleanupSockets();
|
||||||
|
|
Reference in New Issue