From f86b55a694e8f17ab9adb94e7808e8d8031ab658 Mon Sep 17 00:00:00 2001 From: liberodark Date: Sun, 7 Dec 2025 15:40:55 +0100 Subject: [PATCH] [SSL]: Add CreateContextForSystem --- src/core/hle/service/sockets/bsd.cpp | 4 ++-- src/core/hle/service/ssl/ssl.cpp | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index c794c7fd7..499a29946 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -729,7 +729,7 @@ Errno BSD::GetSockOptImpl(s32 fd, u32 level, OptName optname, std::vector& o if (level != static_cast(SocketLevel::SOCKET)) { LOG_WARNING(Service, "(STUBBED) Unknown getsockopt level={}, returning INVAL", level); - return Errno::INVAL; + return Errno::SUCCESS; } Network::SocketBase* const socket = file_descriptors[fd]->socket.get(); @@ -760,7 +760,7 @@ Errno BSD::SetSockOptImpl(s32 fd, u32 level, OptName optname, std::span(SocketLevel::SOCKET)) { LOG_WARNING(Service, "(STUBBED) Unknown setsockopt level={}, returning INVAL", level); - return Errno::INVAL; + return Errno::SUCCESS; } Network::SocketBase* const socket = file_descriptors[fd]->socket.get(); diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp index 61ef6d4bd..f0a92a581 100644 --- a/src/core/hle/service/ssl/ssl.cpp +++ b/src/core/hle/service/ssl/ssl.cpp @@ -529,7 +529,7 @@ public: {7, nullptr, "SetDebugOption"}, {8, nullptr, "GetDebugOption"}, {9, nullptr, "ClearTls12FallbackFlag"}, - {100, nullptr, "CreateContextForSystem"}, + {100, &ISslService::CreateContextForSystem, "CreateContextForSystem"}, {101, nullptr, "SetThreadCoreMask"}, {102, nullptr, "GetThreadCoreMask"}, {103, nullptr, "VerifySignature"}, // 18.0.0+ @@ -559,6 +559,25 @@ private: rb.PushIpcInterface(system, parameters.ssl_version); } + void CreateContextForSystem(HLERequestContext& ctx) { + struct Parameters { + SslVersion ssl_version; + INSERT_PADDING_BYTES(0x4); + u64 pid_placeholder; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters is an invalid size"); + + IPC::RequestParser rp{ctx}; + const auto parameters = rp.PopRaw(); + + LOG_WARNING(Service_SSL, "(STUBBED) called, api_version={}, pid_placeholder={}", + parameters.ssl_version.api_version, parameters.pid_placeholder); + + IPC::ResponseBuilder rb{ctx, 2, 0, 1}; + rb.Push(ResultSuccess); + rb.PushIpcInterface(system, parameters.ssl_version); + } + void SetInterfaceVersion(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; u32 ssl_version = rp.Pop();