From 3a20f26df9435295913c5b8f290412b2a9a3a8d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 16 Jan 2025 11:04:29 +0100 Subject: [PATCH] lsteamclient: Manually wrap some unix side ISteamMatchmakingServers methods. This avoids returning unix-side server info structures from the PE-side. For the v2 API requests are wrapped entirely and for v1 API as there is no explicit release function, results are cached forvever using the buffer cache. --- ...kingServers_SteamMatchMakingServers002.cpp | 48 ------------------- lsteamclient/gen_wrapper.py | 6 +++ .../unix_steam_matchmaking_manual.cpp | 48 +++++++++++++++++++ 3 files changed, 54 insertions(+), 48 deletions(-) diff --git a/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp index 383a05d9..655d56f4 100644 --- a/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp +++ b/lsteamclient/cppISteamMatchmakingServers_SteamMatchMakingServers002.cpp @@ -5,54 +5,6 @@ #pragma makedep unix #endif -NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails( void *args ) -{ - struct ISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_GetServerDetails_params *)args; - struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *iface = (struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *)params->u_iface; - params->_ret = iface->GetServerDetails( params->hRequest, params->iServer ); - return 0; -} - -NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery( void *args ) -{ - struct ISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_CancelQuery_params *)args; - struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *iface = (struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *)params->u_iface; - iface->CancelQuery( params->hRequest ); - return 0; -} - -NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery( void *args ) -{ - struct ISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_RefreshQuery_params *)args; - struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *iface = (struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *)params->u_iface; - iface->RefreshQuery( params->hRequest ); - return 0; -} - -NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing( void *args ) -{ - struct ISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_IsRefreshing_params *)args; - struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *iface = (struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *)params->u_iface; - params->_ret = iface->IsRefreshing( params->hRequest ); - return 0; -} - -NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount( void *args ) -{ - struct ISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_GetServerCount_params *)args; - struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *iface = (struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *)params->u_iface; - params->_ret = iface->GetServerCount( params->hRequest ); - return 0; -} - -NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer( void *args ) -{ - struct ISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_RefreshServer_params *)args; - struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *iface = (struct u_ISteamMatchmakingServers_SteamMatchMakingServers002 *)params->u_iface; - iface->RefreshServer( params->hRequest, params->iServer ); - return 0; -} - NTSTATUS ISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery( void *args ) { struct ISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery_params *params = (struct ISteamMatchmakingServers_SteamMatchMakingServers002_CancelServerQuery_params *)args; diff --git a/lsteamclient/gen_wrapper.py b/lsteamclient/gen_wrapper.py index a0309e25..7b1b3195 100755 --- a/lsteamclient/gen_wrapper.py +++ b/lsteamclient/gen_wrapper.py @@ -237,8 +237,14 @@ MANUAL_METHODS = { "ISteamNetworkingSockets_ConnectP2PCustomSignaling": lambda ver, abi: abi == 'u' and ver <= 8, "ISteamNetworkingSockets_ReceivedP2PCustomSignal": lambda ver, abi: abi == 'u' and ver <= 8, + "ISteamMatchmakingServers_CancelQuery": lambda ver, abi: abi == 'u' and ver >= 2, + "ISteamMatchmakingServers_GetServerCount": lambda ver, abi: abi == 'u' and ver >= 2, + "ISteamMatchmakingServers_GetServerDetails": lambda ver, abi: abi == 'u' and ver >= 2, + "ISteamMatchmakingServers_IsRefreshing": lambda ver, abi: abi == 'u' and ver >= 2, "ISteamMatchmakingServers_PingServer": lambda ver, abi: abi == 'u', "ISteamMatchmakingServers_PlayerDetails": lambda ver, abi: abi == 'u', + "ISteamMatchmakingServers_RefreshQuery": lambda ver, abi: abi == 'u' and ver >= 2, + "ISteamMatchmakingServers_RefreshServer": lambda ver, abi: abi == 'u' and ver >= 2, "ISteamMatchmakingServers_ReleaseRequest": lambda ver, abi: abi == 'w' or abi == 'u', "ISteamMatchmakingServers_RequestFavoritesServerList": lambda ver, abi: abi == 'u', "ISteamMatchmakingServers_RequestFriendsServerList": lambda ver, abi: abi == 'u', diff --git a/lsteamclient/unix_steam_matchmaking_manual.cpp b/lsteamclient/unix_steam_matchmaking_manual.cpp index 33513305..d90b9000 100644 --- a/lsteamclient/unix_steam_matchmaking_manual.cpp +++ b/lsteamclient/unix_steam_matchmaking_manual.cpp @@ -390,6 +390,48 @@ static NTSTATUS ISteamMatchmakingServers_ReleaseRequest( Iface *iface, Params *p return 0; } +template< typename Iface, typename Params > +static NTSTATUS ISteamMatchmakingServers_GetServerDetails( Iface *iface, Params *params ) +{ + params->_ret = iface->GetServerDetails( params->hRequest, params->iServer ); + return 0; +} + +template< typename Iface, typename Params > +static NTSTATUS ISteamMatchmakingServers_CancelQuery( Iface *iface, Params *params ) +{ + iface->CancelQuery( params->hRequest ); + return 0; +} + +template< typename Iface, typename Params > +static NTSTATUS ISteamMatchmakingServers_RefreshQuery( Iface *iface, Params *params ) +{ + iface->RefreshQuery( params->hRequest ); + return 0; +} + +template< typename Iface, typename Params > +static NTSTATUS ISteamMatchmakingServers_IsRefreshing( Iface *iface, Params *params ) +{ + params->_ret = iface->IsRefreshing( params->hRequest ); + return 0; +} + +template< typename Iface, typename Params > +static NTSTATUS ISteamMatchmakingServers_GetServerCount( Iface *iface, Params *params ) +{ + params->_ret = iface->GetServerCount( params->hRequest ); + return 0; +} + +template< typename Iface, typename Params > +static NTSTATUS ISteamMatchmakingServers_RefreshServer( Iface *iface, Params *params ) +{ + iface->RefreshServer( params->hRequest, params->iServer ); + return 0; +} + LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers001, RequestInternetServerList ); LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers001, RequestLANServerList ); LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers001, RequestFriendsServerList ); @@ -410,3 +452,9 @@ LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, Pi LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, PlayerDetails ); LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, ServerRules ); LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, ReleaseRequest ); +LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, GetServerDetails ); +LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, CancelQuery ); +LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, RefreshQuery ); +LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, IsRefreshing ); +LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, GetServerCount ); +LSTEAMCLIENT_UNIX_IMPL( ISteamMatchmakingServers, SteamMatchMakingServers002, RefreshServer );