From 77e83d193ad8327f6cc18d6f10e9139c9e5ac85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Mon, 2 Oct 2023 15:27:37 +0200 Subject: [PATCH] lsteamclient: Execute debug callbacks from within Steam_BGetCallback. CW-Bug-Id: #22729 --- lsteamclient/Makefile.in | 2 +- lsteamclient/gen_wrapper.py | 2 - lsteamclient/steam_client_manual.c | 426 ----------------------- lsteamclient/steamclient_main.c | 33 +- lsteamclient/steamclient_wrappers.c | 18 +- lsteamclient/unix_private.h | 5 + lsteamclient/unix_steam_utils_manual.cpp | 2 + lsteamclient/unixlib.cpp | 80 +++++ lsteamclient/unixlib.h | 31 +- lsteamclient/winISteamClient.c | 286 +++++++++++++++ 10 files changed, 422 insertions(+), 463 deletions(-) delete mode 100644 lsteamclient/steam_client_manual.c create mode 100644 lsteamclient/unixlib.cpp diff --git a/lsteamclient/Makefile.in b/lsteamclient/Makefile.in index 7bb7bcb1..fb90153b 100644 --- a/lsteamclient/Makefile.in +++ b/lsteamclient/Makefile.in @@ -5,7 +5,6 @@ EXTRADLLFLAGS = -mcygwin -static-libgcc -static-libstdc++ -ldl EXTRADEFS = -DWINE_NO_LONG_TYPES -DSTEAM_API_EXPORTS -Dprivate=public -Dprotected=public SOURCES = \ - steam_client_manual.c \ steam_input_manual.c \ steam_networking_manual.c \ steamclient_main.c \ @@ -284,4 +283,5 @@ SOURCES = \ unix_steam_input_manual.cpp \ unix_steam_networking_manual.cpp \ unix_steam_utils_manual.cpp \ + unixlib.cpp \ unixlib_generated.cpp \ diff --git a/lsteamclient/gen_wrapper.py b/lsteamclient/gen_wrapper.py index 1e7d4a8e..5e6cd255 100755 --- a/lsteamclient/gen_wrapper.py +++ b/lsteamclient/gen_wrapper.py @@ -227,8 +227,6 @@ MANUAL_METHODS = { "ISteamNetworkingFakeUDPPort_DestroyFakeUDPPort": lambda ver, abi: abi == 'w', "ISteamNetworkingFakeUDPPort_ReceiveMessages": True, - "ISteamClient_BShutdownIfAllPipesClosed": lambda ver, abi: abi == 'w', - "ISteamClient_CreateSteamPipe": lambda ver, abi: abi == 'w', "ISteamClient_Set_SteamAPI_CCheckCallbackRegisteredInProcess": lambda ver, abi: abi == 'u' and ver >= 20, "ISteamUtils_GetAPICallResult": lambda ver, abi: abi == 'u', diff --git a/lsteamclient/steam_client_manual.c b/lsteamclient/steam_client_manual.c deleted file mode 100644 index 3b0e77eb..00000000 --- a/lsteamclient/steam_client_manual.c +++ /dev/null @@ -1,426 +0,0 @@ -#include "steamclient_private.h" - -#include -#include - -#include "cppISteamClient_SteamClient006.h" -#include "cppISteamClient_SteamClient007.h" -#include "cppISteamClient_SteamClient008.h" -#include "cppISteamClient_SteamClient009.h" -#include "cppISteamClient_SteamClient010.h" -#include "cppISteamClient_SteamClient011.h" -#include "cppISteamClient_SteamClient012.h" -#include "cppISteamClient_SteamClient013.h" -#include "cppISteamClient_SteamClient014.h" -#include "cppISteamClient_SteamClient015.h" -#include "cppISteamClient_SteamClient016.h" -#include "cppISteamClient_SteamClient017.h" -#include "cppISteamClient_SteamClient018.h" -#include "cppISteamClient_SteamClient019.h" -#include "cppISteamClient_SteamClient020.h" - -WINE_DEFAULT_DEBUG_CHANNEL(steamclient); - -static HANDLE callback_thread_handle; - -#define MAX_CALLBACK_QUEUE_SIZE 4 -struct callback_data *callback_queue[MAX_CALLBACK_QUEUE_SIZE]; -static unsigned int callback_queue_size; -static bool callback_queue_done; -static pthread_mutex_t callback_queue_mutex; -static pthread_cond_t callback_queue_callback_event; -static pthread_cond_t callback_queue_ready_event; -static pthread_cond_t callback_queue_complete_event; - -void execute_callback( struct callback_data *cb_data ) -{ - /* No TRACEs or other Wine calls here, this is executed from Unix native thread - * which is not initialized by Wine. */ - cb_data->complete = FALSE; - pthread_mutex_lock( &callback_queue_mutex ); - while (!callback_queue_done && callback_queue_size == MAX_CALLBACK_QUEUE_SIZE) - pthread_cond_wait( &callback_queue_ready_event, &callback_queue_mutex ); - if (callback_queue_done) - { - pthread_mutex_unlock( &callback_queue_mutex ); - return; - } - callback_queue[callback_queue_size++] = cb_data; - pthread_cond_broadcast( &callback_queue_callback_event ); - while (!callback_queue_done && !cb_data->complete) - pthread_cond_wait( &callback_queue_complete_event, &callback_queue_mutex ); - pthread_mutex_unlock( &callback_queue_mutex ); -} - -static bool get_next_callback( struct callback_data *cb_data, uint64_t *cookie ) -{ - bool ret; - - pthread_mutex_lock( &callback_queue_mutex ); - while (!callback_queue_done && !callback_queue_size) - pthread_cond_wait( &callback_queue_callback_event, &callback_queue_mutex ); - - if ((ret = !callback_queue_done)) - { - assert( callback_queue_size ); - --callback_queue_size; - *cookie = (uint64_t)( ULONG_PTR)callback_queue[callback_queue_size]; - *cb_data = *callback_queue[callback_queue_size]; - } - pthread_cond_broadcast( &callback_queue_ready_event ); - pthread_mutex_unlock( &callback_queue_mutex ); - return ret; -} - -static void callback_complete( uint64_t cookie ) -{ - struct callback_data *cb_data = (struct callback_data *)( ULONG_PTR)cookie; - - pthread_mutex_lock( &callback_queue_mutex ); - cb_data->complete = TRUE; - pthread_cond_broadcast( &callback_queue_complete_event ); - pthread_mutex_unlock( &callback_queue_mutex ); -} - -static void finish_callback_thread(void) -{ - if (!callback_thread_handle) return; - pthread_mutex_lock( &callback_queue_mutex ); - callback_queue_done = TRUE; - pthread_cond_broadcast( &callback_queue_callback_event ); - pthread_cond_broadcast( &callback_queue_complete_event ); - pthread_mutex_unlock( &callback_queue_mutex ); - - WaitForSingleObject( callback_thread_handle, INFINITE ); - CloseHandle( callback_thread_handle ); - callback_thread_handle = NULL; -} - -typedef void (WINAPI *win_FSteamNetworkingSocketsDebugOutput)( uint32_t nType, const char *pszMsg ); -typedef void (CDECL *win_SteamAPIWarningMessageHook_t)( int, const char *pszMsg ); - -static DWORD WINAPI callback_thread( void *dummy ) -{ - struct callback_data cb_data; - uint64_t cookie; - - while (get_next_callback( &cb_data, &cookie )) - { - switch (cb_data.type) - { - case SOCKET_DEBUG_OUTPUT: - TRACE( "SOCKET_DEBUG_OUTPUT func %p, type %u, msg %s.\n", cb_data.func, - cb_data.sockets_debug_output.type, wine_dbgstr_a( cb_data.sockets_debug_output.msg ) ); - ((win_FSteamNetworkingSocketsDebugOutput)cb_data.func)( cb_data.sockets_debug_output.type, - cb_data.sockets_debug_output.msg ); - callback_complete( cookie ); - break; - case STEAM_API_WARNING_HOOK: - TRACE( "STEAM_API_WARNING_HOOK func %p, type %u, msg %s.\n", cb_data.func, - cb_data.steam_api_warning_hook.severity, - wine_dbgstr_a( cb_data.steam_api_warning_hook.msg ) ); - ((win_SteamAPIWarningMessageHook_t)cb_data.func)( cb_data.steam_api_warning_hook.severity, - cb_data.steam_api_warning_hook.msg ); - callback_complete( cookie ); - break; - default: - ERR( "Unexpected callback type %u.\n", cb_data.type ); - break; - } - } - TRACE( "exiting.\n" ); - return 0; -} - -void start_callback_thread(void) -{ - DWORD callback_thread_id; - - pthread_mutex_init( &callback_queue_mutex, NULL ); - pthread_cond_init( &callback_queue_callback_event, NULL ); - pthread_cond_init( &callback_queue_ready_event, NULL ); - pthread_cond_init( &callback_queue_complete_event, NULL ); - - callback_thread_handle = CreateThread( NULL, 0, callback_thread, NULL, 0, &callback_thread_id ); - TRACE( "Created callback thread 0x%04x.\n", callback_thread_id ); -} - -void stop_callback_thread(void) -{ - if (!callback_thread_handle) return; - - /* Unfortunately we don't have a clear place to shutdown the thread so just kill it. - * An explicit sync events and handle cleanup is to protect from unloading and loading .so - * again which may end up not actually reloading anyting and leaving the values of our - * static variables. */ - TerminateThread( callback_thread_handle, -1 ); - WaitForSingleObject( callback_thread_handle, INFINITE ); - pthread_mutex_destroy( &callback_queue_mutex ); - CloseHandle( callback_thread_handle ); - callback_thread_handle = NULL; - TRACE( "Terminated callback thread.\n" ); -} - -static bool after_shutdown( bool ret ) -{ - TRACE( "ret %d.\n", ret ); - - if (!ret) return 0; - finish_callback_thread(); - return ret; -} - -static int32_t after_steam_pipe_create( int32_t pipe ) -{ - DWORD callback_thread_id; - - TRACE( "pipe %#x.\n", pipe ); - - if (!pipe) return 0; - - if (callback_thread_handle) return pipe; - - callback_queue_done = FALSE; - callback_thread_handle = CreateThread( NULL, 0, callback_thread, NULL, 0, &callback_thread_id ); - TRACE( "Created callback thread 0x%04x.\n", callback_thread_id ); - - return pipe; -} - -/* ISteamClient_SteamClient006 */ - -int32_t __thiscall winISteamClient_SteamClient006_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient006_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient006_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -/* ISteamClient_SteamClient007 */ - -int32_t __thiscall winISteamClient_SteamClient007_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient007_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient007_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -/* ISteamClient_SteamClient008 */ - -int32_t __thiscall winISteamClient_SteamClient008_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient008_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient008_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -/* ISteamClient_SteamClient009 */ - -int32_t __thiscall winISteamClient_SteamClient009_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient009_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient009_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -/* ISteamClient_SteamClient010 */ - -int32_t __thiscall winISteamClient_SteamClient010_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient010_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient010_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient010_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient011 */ - -int32_t __thiscall winISteamClient_SteamClient011_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient011_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient011_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient011_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient012 */ - -int32_t __thiscall winISteamClient_SteamClient012_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient012_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient012_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient012_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient013 */ - -int32_t __thiscall winISteamClient_SteamClient013_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient013_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient013_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient013_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient013_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient013_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient014 */ - -int32_t __thiscall winISteamClient_SteamClient014_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient014_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient014_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient014_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient015 */ - -int32_t __thiscall winISteamClient_SteamClient015_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient015_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient015_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient015_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient016 */ - -int32_t __thiscall winISteamClient_SteamClient016_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient016_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient016_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient016_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient017 */ - -int32_t __thiscall winISteamClient_SteamClient017_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient017_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient017_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient017_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient018 */ - -int32_t __thiscall winISteamClient_SteamClient018_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient018_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient018_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient018_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient018_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient018_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient019 */ - -int32_t __thiscall winISteamClient_SteamClient019_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient019_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient019_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient019_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient019_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient019_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} - -/* ISteamClient_SteamClient020 */ - -int32_t __thiscall winISteamClient_SteamClient020_CreateSteamPipe( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient020_CreateSteamPipe_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient020_CreateSteamPipe( ¶ms ); - return after_steam_pipe_create( params._ret ); -} - -bool __thiscall winISteamClient_SteamClient020_BShutdownIfAllPipesClosed( struct w_steam_iface *_this ) -{ - struct cppISteamClient_SteamClient020_BShutdownIfAllPipesClosed_params params = {.linux_side = _this->u_iface}; - TRACE( "%p\n", _this ); - cppISteamClient_SteamClient020_BShutdownIfAllPipesClosed( ¶ms ); - return after_shutdown( params._ret ); -} diff --git a/lsteamclient/steamclient_main.c b/lsteamclient/steamclient_main.c index 5b47e311..aaf88645 100644 --- a/lsteamclient/steamclient_main.c +++ b/lsteamclient/steamclient_main.c @@ -38,7 +38,6 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) steam_overlay_event = CreateEventA(NULL, TRUE, FALSE, "__wine_steamclient_GameOverlayActivated"); break; case DLL_PROCESS_DETACH: - stop_callback_thread(); CloseHandle(steam_overlay_event); break; } @@ -773,8 +772,6 @@ static int load_steamclient(void) return 0; } - start_callback_thread(); - return 1; } @@ -788,6 +785,33 @@ void *CDECL CreateInterface(const char *name, int *return_code) return create_win_interface(name, steamclient_CreateInterface(name, return_code)); } +static void execute_pending_callbacks(void) +{ + struct callback *callback = NULL; + uint32_t callback_size = 0; + + while (unix_steamclient_next_callback( callback, &callback_size )) + { + if (!callback || callback_size > callback->size) + callback = realloc( callback, callback_size ); + else switch (callback->type) + { + case SOCKETS_DEBUG_OUTPUT: + TRACE( "SOCKETS_DEBUG_OUTPUT func %p, type %u, msg %s.\n", callback->sockets_debug_output.pfnFunc, + callback->sockets_debug_output.type, wine_dbgstr_a( callback->sockets_debug_output.msg ) ); + callback->sockets_debug_output.pfnFunc( callback->sockets_debug_output.type, callback->sockets_debug_output.msg ); + break; + case WARNING_MESSAGE_HOOK: + TRACE( "WARNING_MESSAGE_HOOK func %p, severity %d, msg %s.\n", callback->warning_message_hook.pFunction, + callback->warning_message_hook.severity, wine_dbgstr_a( callback->warning_message_hook.msg ) ); + callback->warning_message_hook.pFunction( callback->warning_message_hook.severity, callback->warning_message_hook.msg ); + break; + } + } + + free( callback ); +} + #include "cb_converters.h" #pragma pack( push, 8 ) @@ -812,6 +836,8 @@ bool CDECL Steam_BGetCallback( int32_t pipe, struct winCallbackMsg_t *win_msg, i if(!load_steamclient()) return 0; + execute_pending_callbacks(); + next_event: ret = steamclient_BGetCallback(pipe, &lin_msg, ignored); @@ -856,6 +882,7 @@ next_event: last_cb = win_msg->m_pubParam; } + execute_pending_callbacks(); return ret; } diff --git a/lsteamclient/steamclient_wrappers.c b/lsteamclient/steamclient_wrappers.c index 5b1cb4cc..d14fff43 100644 --- a/lsteamclient/steamclient_wrappers.c +++ b/lsteamclient/steamclient_wrappers.c @@ -311,14 +311,7 @@ static w_FSteamNetworkingSocketsDebugOutput stored_FSteamNetworkingSocketsDebugO static void lin_FSteamNetworkingSocketsDebugOutput( uint32_t nType, const char *pszMsg ) { - struct callback_data cb_data = { 0 }; - /* Only Unix native calls from here (not even TRACE): - * this is native Unix thread which is not initialized by Wine. */ - cb_data.type = SOCKET_DEBUG_OUTPUT; - cb_data.func = stored_FSteamNetworkingSocketsDebugOutput; - cb_data.sockets_debug_output.type = nType; - cb_data.sockets_debug_output.msg = pszMsg; - execute_callback(&cb_data); + queue_sockets_debug_output( stored_FSteamNetworkingSocketsDebugOutput, nType, pszMsg ); } u_FSteamNetworkingSocketsDebugOutput manual_convert_SetDebugOutputFunction_pfnFunc( w_FSteamNetworkingSocketsDebugOutput win_func ) @@ -332,14 +325,7 @@ static w_SteamAPIWarningMessageHook_t stored_SteamAPIWarningMessageHook_t; static void lin_SteamAPIWarningMessageHook_t(int severity, const char *msg) { - struct callback_data cb_data = { 0 }; - /* Only Unix native calls from here (not even TRACE): - * this is native Unix thread which is not initialized by Wine. */ - cb_data.type = STEAM_API_WARNING_HOOK; - cb_data.func = stored_SteamAPIWarningMessageHook_t; - cb_data.steam_api_warning_hook.severity = severity; - cb_data.steam_api_warning_hook.msg = msg; - execute_callback(&cb_data); + queue_warning_message_hook( stored_SteamAPIWarningMessageHook_t, severity, msg ); } u_SteamAPIWarningMessageHook_t manual_convert_SetWarningMessageHook_pFunction( w_SteamAPIWarningMessageHook_t win_func ) diff --git a/lsteamclient/unix_private.h b/lsteamclient/unix_private.h index 4e23f622..cfb2fc41 100644 --- a/lsteamclient/unix_private.h +++ b/lsteamclient/unix_private.h @@ -56,6 +56,11 @@ u_void_SteamAPI_PostAPIResultInProcess_t manual_convert_DEPRECATED_Remove_SteamA void *alloc_callback_wtou( int id, void *callback, int *callback_len ); void convert_callback_utow( int id, void *u_callback, int u_callback_len, void *w_callback, int w_callback_len ); +extern void queue_sockets_debug_output( void (*W_STDCALL pfnFunc)( uint32_t, const char * ), + uint32_t type, const char *msg ); +extern void queue_warning_message_hook( void (*W_CDECL pFunction)( int32_t, const char * ), + int32_t severity, const char *msg ); + #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ diff --git a/lsteamclient/unix_steam_utils_manual.cpp b/lsteamclient/unix_steam_utils_manual.cpp index bab63e12..765157a1 100644 --- a/lsteamclient/unix_steam_utils_manual.cpp +++ b/lsteamclient/unix_steam_utils_manual.cpp @@ -9,6 +9,8 @@ #include "cppISteamUtils_SteamUtils009.hpp" #include "cppISteamUtils_SteamUtils010.hpp" +WINE_DEFAULT_DEBUG_CHANNEL(steamclient); + /* ISteamUtils_SteamUtils002 */ void cppISteamUtils_SteamUtils002_GetAPICallResult( struct cppISteamUtils_SteamUtils002_GetAPICallResult_params *params ) diff --git a/lsteamclient/unixlib.cpp b/lsteamclient/unixlib.cpp new file mode 100644 index 00000000..ac7e4f29 --- /dev/null +++ b/lsteamclient/unixlib.cpp @@ -0,0 +1,80 @@ +#include "unix_private.h" + +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(steamclient); + +struct callback_entry +{ + struct list entry; + struct callback callback; +}; + +static struct list callbacks = LIST_INIT( callbacks ); +static pthread_mutex_t callbacks_lock = PTHREAD_MUTEX_INITIALIZER; + +void queue_sockets_debug_output( void (*W_STDCALL pfnFunc)( uint32_t, const char * ), uint32_t type, const char *msg ) +{ + uint32_t msg_size = strlen( msg ) + 1, size = msg_size; + struct callback_entry *entry; + + size += sizeof(struct callback_entry); + if (!(entry = (struct callback_entry *)malloc( size ))) return; + + entry->callback.type = SOCKETS_DEBUG_OUTPUT; + size -= offsetof( struct callback_entry, callback ); + entry->callback.size = size; + + entry->callback.sockets_debug_output.pfnFunc = pfnFunc; + entry->callback.sockets_debug_output.type = type; + memcpy( (char *)entry->callback.sockets_debug_output.msg, msg, msg_size ); + + pthread_mutex_lock( &callbacks_lock ); + list_add_tail( &callbacks, &entry->entry ); + pthread_mutex_unlock( &callbacks_lock ); +} + +void queue_warning_message_hook( void (*W_CDECL pFunction)( int32_t, const char * ), int32_t severity, const char *msg ) +{ + uint32_t msg_size = strlen( msg ) + 1, size = msg_size; + struct callback_entry *entry; + + size += sizeof(struct callback_entry); + if (!(entry = (struct callback_entry *)malloc( size ))) return; + + entry->callback.type = WARNING_MESSAGE_HOOK; + size -= offsetof( struct callback_entry, callback ); + entry->callback.size = size; + + entry->callback.warning_message_hook.pFunction = pFunction; + entry->callback.warning_message_hook.severity = severity; + memcpy( (char *)entry->callback.warning_message_hook.msg, msg, msg_size ); + + pthread_mutex_lock( &callbacks_lock ); + list_add_tail( &callbacks, &entry->entry ); + pthread_mutex_unlock( &callbacks_lock ); +} + +bool unix_steamclient_next_callback( struct callback *callback, uint32_t *size ) +{ + struct list *ptr; + + pthread_mutex_lock( &callbacks_lock ); + if ((ptr = list_head( &callbacks ))) + { + struct callback_entry *entry = LIST_ENTRY( ptr, struct callback_entry, entry ); + + if (entry->callback.size <= *size) + { + memcpy( callback, &entry->callback, entry->callback.size ); + list_remove( &entry->entry ); + free( entry ); + } + + *size = entry->callback.size; + } + pthread_mutex_unlock( &callbacks_lock ); + + return !!ptr; +} diff --git a/lsteamclient/unixlib.h b/lsteamclient/unixlib.h index 12793ddf..8e708199 100644 --- a/lsteamclient/unixlib.h +++ b/lsteamclient/unixlib.h @@ -29,37 +29,38 @@ extern void steamclient_free_path_array( const char **path_array ); #define PATH_MAX 4096 extern char g_tmppath[PATH_MAX]; +#ifndef STEAM_API_H enum callback_type { - SOCKET_DEBUG_OUTPUT = 1, - STEAM_API_WARNING_HOOK, + SOCKETS_DEBUG_OUTPUT = 1, + WARNING_MESSAGE_HOOK, }; -struct callback_data +struct callback { enum callback_type type; - void *func; - int complete; + uint32_t size; + union { struct { - unsigned int type; - const char *msg; - } - sockets_debug_output; + void (*W_STDCALL pfnFunc)( uint32_t, const char * ); + uint32_t type; + const char msg[1]; + } sockets_debug_output; + struct { - int severity; - const char *msg; - } - steam_api_warning_hook; + void (*W_CDECL pFunction)( int32_t, const char * ); + int32_t severity; + const char msg[1]; + } warning_message_hook; }; }; -void execute_callback(struct callback_data *cb_data); +extern bool unix_steamclient_next_callback( struct callback *callback, uint32_t *length ); -#ifndef STEAM_API_H struct networking_message_pool; struct networking_message { diff --git a/lsteamclient/winISteamClient.c b/lsteamclient/winISteamClient.c index 77556578..c25c1396 100644 --- a/lsteamclient/winISteamClient.c +++ b/lsteamclient/winISteamClient.c @@ -27,6 +27,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient006_GetISteamMatchmakingServe DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient006_RunFrame, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient006_GetIPCCallCount, 4) +int32_t __thiscall winISteamClient_SteamClient006_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient006_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient006_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient006_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient006_BReleaseSteamPipe_params params = @@ -358,6 +369,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamNetworking, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_SetWarningMessageHook, 8) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient007_GetISteamRemoteStorage, 16) +int32_t __thiscall winISteamClient_SteamClient007_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient007_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient007_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient007_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient007_BReleaseSteamPipe_params params = @@ -710,6 +732,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_RunFrame, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_GetIPCCallCount, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient008_SetWarningMessageHook, 8) +int32_t __thiscall winISteamClient_SteamClient008_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient008_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient008_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient008_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient008_BReleaseSteamPipe_params params = @@ -1048,6 +1081,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_RunFrame, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_GetIPCCallCount, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient009_SetWarningMessageHook, 8) +int32_t __thiscall winISteamClient_SteamClient009_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient009_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient009_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient009_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient009_BReleaseSteamPipe_params params = @@ -1404,6 +1448,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_SetWarningMessageHook, 8) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_BShutdownIfAllPipesClosed, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient010_GetISteamHTTP, 16) +int32_t __thiscall winISteamClient_SteamClient010_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient010_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient010_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient010_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient010_BReleaseSteamPipe_params params = @@ -1691,6 +1746,17 @@ void __thiscall winISteamClient_SteamClient010_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient010_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient010_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient010_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient010_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient010_GetISteamHTTP_params params = @@ -1778,6 +1844,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_SetWarningMessageHook, 8) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_BShutdownIfAllPipesClosed, 4) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient011_GetISteamHTTP, 16) +int32_t __thiscall winISteamClient_SteamClient011_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient011_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient011_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient011_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient011_BReleaseSteamPipe_params params = @@ -2080,6 +2157,17 @@ void __thiscall winISteamClient_SteamClient011_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient011_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient011_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient011_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient011_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient011_GetISteamHTTP_params params = @@ -2170,6 +2258,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUnifiedMessages, DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamController, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient012_GetISteamUGC, 16) +int32_t __thiscall winISteamClient_SteamClient012_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient012_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient012_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient012_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient012_BReleaseSteamPipe_params params = @@ -2457,6 +2556,17 @@ void __thiscall winISteamClient_SteamClient012_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient012_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient012_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient012_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient012_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient012_GetISteamHTTP_params params = @@ -2597,6 +2707,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient013_GetISteamInventory, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient013_GetISteamVideo, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient013_GetISteamAppList, 16) +int32_t __thiscall winISteamClient_SteamClient013_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient013_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient013_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient013_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient013_BReleaseSteamPipe_params params = @@ -2884,6 +3005,17 @@ void __thiscall winISteamClient_SteamClient013_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient013_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient013_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient013_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient013_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient013_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient013_GetISteamHTTP_params params = @@ -3069,6 +3201,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamUGC, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamAppList, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient014_GetISteamMusic, 16) +int32_t __thiscall winISteamClient_SteamClient014_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient014_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient014_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient014_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient014_BReleaseSteamPipe_params params = @@ -3356,6 +3499,17 @@ void __thiscall winISteamClient_SteamClient014_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient014_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient014_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient014_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient014_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient014_GetISteamHTTP_params params = @@ -3528,6 +3682,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamAppList, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamMusic, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient015_GetISteamMusicRemote, 16) +int32_t __thiscall winISteamClient_SteamClient015_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient015_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient015_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient015_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient015_BReleaseSteamPipe_params params = @@ -3815,6 +3980,17 @@ void __thiscall winISteamClient_SteamClient015_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient015_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient015_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient015_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient015_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient015_GetISteamHTTP_params params = @@ -4007,6 +4183,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_Set_SteamAPI_CPostAPIResu DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_Remove_SteamAPI_CPostAPIResultInProcess, 8) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient016_Set_SteamAPI_CCheckCallbackRegisteredInProcess, 8) +int32_t __thiscall winISteamClient_SteamClient016_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient016_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient016_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient016_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient016_BReleaseSteamPipe_params params = @@ -4294,6 +4481,17 @@ void __thiscall winISteamClient_SteamClient016_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient016_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient016_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient016_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient016_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient016_GetISteamHTTP_params params = @@ -4541,6 +4739,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamInventory, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamVideo, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient017_GetISteamParentalSettings, 16) +int32_t __thiscall winISteamClient_SteamClient017_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient017_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient017_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient017_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient017_BReleaseSteamPipe_params params = @@ -4828,6 +5037,17 @@ void __thiscall winISteamClient_SteamClient017_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient017_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient017_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient017_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient017_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient017_GetISteamHTTP_params params = @@ -5125,6 +5345,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient018_GetISteamParentalSettings DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient018_GetISteamInput, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient018_GetISteamParties, 16) +int32_t __thiscall winISteamClient_SteamClient018_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient018_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient018_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient018_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient018_BReleaseSteamPipe_params params = @@ -5427,6 +5658,17 @@ void __thiscall winISteamClient_SteamClient018_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient018_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient018_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient018_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient018_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient018_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient018_GetISteamHTTP_params params = @@ -5758,6 +6000,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient019_GetISteamInput, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient019_GetISteamParties, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient019_GetISteamRemotePlay, 16) +int32_t __thiscall winISteamClient_SteamClient019_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient019_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient019_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient019_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient019_BReleaseSteamPipe_params params = @@ -6060,6 +6313,17 @@ void __thiscall winISteamClient_SteamClient019_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient019_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient019_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient019_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient019_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient019_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient019_GetISteamHTTP_params params = @@ -6408,6 +6672,17 @@ DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient020_GetISteamParties, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient020_GetISteamRemotePlay, 16) DEFINE_THISCALL_WRAPPER(winISteamClient_SteamClient020_DestroyAllInterfaces, 4) +int32_t __thiscall winISteamClient_SteamClient020_CreateSteamPipe(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient020_CreateSteamPipe_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient020_CreateSteamPipe( ¶ms ); + return params._ret; +} + bool __thiscall winISteamClient_SteamClient020_BReleaseSteamPipe(struct w_steam_iface *_this, int32_t hSteamPipe) { struct cppISteamClient_SteamClient020_BReleaseSteamPipe_params params = @@ -6710,6 +6985,17 @@ void __thiscall winISteamClient_SteamClient020_SetWarningMessageHook(struct w_st cppISteamClient_SteamClient020_SetWarningMessageHook( ¶ms ); } +bool __thiscall winISteamClient_SteamClient020_BShutdownIfAllPipesClosed(struct w_steam_iface *_this) +{ + struct cppISteamClient_SteamClient020_BShutdownIfAllPipesClosed_params params = + { + .linux_side = _this->u_iface, + }; + TRACE("%p\n", _this); + cppISteamClient_SteamClient020_BShutdownIfAllPipesClosed( ¶ms ); + return params._ret; +} + void /*ISteamHTTP*/ * __thiscall winISteamClient_SteamClient020_GetISteamHTTP(struct w_steam_iface *_this, int32_t hSteamuser, int32_t hSteamPipe, const char *pchVersion) { struct cppISteamClient_SteamClient020_GetISteamHTTP_params params =