|
|
|
@ -513,12 +513,13 @@ void SOC_U::Accept(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
socklen_t addr_len = sizeof(addr);
|
|
|
|
|
u32 ret = static_cast<u32>(::accept(socket_handle, &addr, &addr_len));
|
|
|
|
|
|
|
|
|
|
if ((s32)ret != SOCKET_ERROR_VALUE)
|
|
|
|
|
if (static_cast<s32>(ret) != SOCKET_ERROR_VALUE) {
|
|
|
|
|
open_sockets[ret] = {ret, true};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CTRSockAddr ctr_addr;
|
|
|
|
|
std::vector<u8> ctr_addr_buf(sizeof(ctr_addr));
|
|
|
|
|
if ((s32)ret == SOCKET_ERROR_VALUE) {
|
|
|
|
|
if (static_cast<s32>(ret) == SOCKET_ERROR_VALUE) {
|
|
|
|
|
ret = TranslateError(GET_ERRNO);
|
|
|
|
|
} else {
|
|
|
|
|
ctr_addr = CTRSockAddr::FromPlatform(addr);
|
|
|
|
@ -528,7 +529,7 @@ void SOC_U::Accept(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.PushStaticBuffer(ctr_addr_buf, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(ctr_addr_buf), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::GetHostId(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -636,7 +637,7 @@ void SOC_U::RecvFromOther(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 4);
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.PushStaticBuffer(addr_buff, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(addr_buff), 0);
|
|
|
|
|
rb.PushMappedBuffer(buffer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -685,8 +686,8 @@ void SOC_U::RecvFrom(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.Push(total_received);
|
|
|
|
|
rb.PushStaticBuffer(output_buff, 0);
|
|
|
|
|
rb.PushStaticBuffer(addr_buff, 1);
|
|
|
|
|
rb.PushStaticBuffer(std::move(output_buff), 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(addr_buff), 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::Poll(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -720,7 +721,7 @@ void SOC_U::Poll(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.PushStaticBuffer(output_fds, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(output_fds), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::GetSockName(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -743,7 +744,7 @@ void SOC_U::GetSockName(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.PushStaticBuffer(dest_addr_buff, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(dest_addr_buff), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::Shutdown(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -781,7 +782,7 @@ void SOC_U::GetPeerName(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.PushStaticBuffer(dest_addr_buff, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(dest_addr_buff), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::Connect(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -857,7 +858,7 @@ void SOC_U::GetSockOpt(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(err);
|
|
|
|
|
rb.Push(static_cast<u32>(optlen));
|
|
|
|
|
rb.PushStaticBuffer(optval, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(optval), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::SetSockOpt(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -948,7 +949,7 @@ void SOC_U::GetAddrInfoImpl(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.Push(count);
|
|
|
|
|
rb.PushStaticBuffer(out_buff, 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(out_buff), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOC_U::GetNameInfoImpl(Kernel::HLERequestContext& ctx) {
|
|
|
|
@ -976,8 +977,8 @@ void SOC_U::GetNameInfoImpl(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestBuilder rb = rp.MakeBuilder(2, 4);
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push(ret);
|
|
|
|
|
rb.PushStaticBuffer(host, 0);
|
|
|
|
|
rb.PushStaticBuffer(serv, 1);
|
|
|
|
|
rb.PushStaticBuffer(std::move(host), 0);
|
|
|
|
|
rb.PushStaticBuffer(std::move(serv), 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SOC_U::SOC_U() : ServiceFramework("soc:U") {
|
|
|
|
|