From 17100ec9680b132903015d552460abf8f9443ab0 Mon Sep 17 00:00:00 2001 From: nmzik Date: Wed, 30 Sep 2026 19:36:49 +0400 Subject: [PATCH] shareplay: return initialized connection information --- src/libs/libNet.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/libs/libNet.cpp b/src/libs/libNet.cpp index 35488c2b4..f9086c3fb 100644 --- a/src/libs/libNet.cpp +++ b/src/libs/libNet.cpp @@ -3834,6 +3834,27 @@ namespace LibSharePlay { LIB_VERSION("SharePlay", 1, "SharePlay", 1, 1); +constexpr int SHARE_PLAY_ERROR_INVALID_ARGS = -2129788927; +constexpr int SHARE_PLAY_ERROR_ALREADY_INITIALIZED = -2129788925; +constexpr int SHARE_PLAY_ERROR_NOT_INITIALIZED = -2129788924; + +struct SharePlayConnectionInfoA { + int32_t status; + int32_t mode; + char host_online_id[20]; + char visitor_online_id[20]; + uint64_t host_account_id; + uint64_t visitor_account_id; + int32_t host_user_id; + int32_t visitor_user_id; +}; + +static_assert(sizeof(SharePlayConnectionInfoA) == 72); +static_assert(offsetof(SharePlayConnectionInfoA, host_account_id) == 48); +static_assert(offsetof(SharePlayConnectionInfoA, host_user_id) == 64); + +static bool g_share_play_initialized = false; + static int KYTY_SYSV_ABI SharePlayInitialize(void* heap, size_t heap_size) { PRINT_NAME(); @@ -3841,18 +3862,41 @@ static int KYTY_SYSV_ABI SharePlayInitialize(void* heap, size_t heap_size) { "\t heap_size = %" PRIu64 "\n", reinterpret_cast(heap), static_cast(heap_size)); + if (g_share_play_initialized) { + return SHARE_PLAY_ERROR_ALREADY_INITIALIZED; + } + if (heap != nullptr && heap_size < 6u * 1024u) { + return SHARE_PLAY_ERROR_INVALID_ARGS; + } + g_share_play_initialized = true; return 0; } static int KYTY_SYSV_ABI SharePlayTerminate() { PRINT_NAME(); + if (!g_share_play_initialized) { + return SHARE_PLAY_ERROR_NOT_INITIALIZED; + } + g_share_play_initialized = false; + return 0; +} + +static int KYTY_SYSV_ABI SharePlayGetCurrentConnectionInfoA(SharePlayConnectionInfoA* info) { + if (!g_share_play_initialized) { + return SHARE_PLAY_ERROR_NOT_INITIALIZED; + } + if (info == nullptr) { + return SHARE_PLAY_ERROR_INVALID_ARGS; + } + *info = {.status = 0, .host_user_id = -1, .visitor_user_id = -1}; return 0; } LIB_DEFINE(InitPlatform_1_SharePlay) { LIB_FUNC("isruqthpYcw", LibSharePlay::SharePlayInitialize); LIB_FUNC("UaLjloJinow", LibSharePlay::SharePlayTerminate); + LIB_FUNC("+MCXJlWdi+s", LibSharePlay::SharePlayGetCurrentConnectionInfoA); } } // namespace LibSharePlay