mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-06-22 10:29:35 +03:00
lsteamclient: Allocate server list request handles on the PE side.
This commit is contained in:
parent
1a0811b6cc
commit
47d5d59f1b
@ -12,11 +12,21 @@ void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_Request
|
||||
.nFilters = nFilters,
|
||||
.pRequestServersResponse = pRequestServersResponse,
|
||||
};
|
||||
struct w_request *request;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
if (!(request = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*request) ))) return NULL;
|
||||
params._ret = request;
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_RequestInternetServerList, ¶ms );
|
||||
return params._ret;
|
||||
if (!request->u_request.handle)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList( struct w_iface *_this, uint32_t iApp, w_ISteamMatchmakingServerListResponse_106 *pRequestServersResponse )
|
||||
@ -27,11 +37,21 @@ void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_Request
|
||||
.iApp = iApp,
|
||||
.pRequestServersResponse = pRequestServersResponse,
|
||||
};
|
||||
struct w_request *request;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
if (!(request = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*request) ))) return NULL;
|
||||
params._ret = request;
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_RequestLANServerList, ¶ms );
|
||||
return params._ret;
|
||||
if (!request->u_request.handle)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList( struct w_iface *_this, uint32_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32_t nFilters, w_ISteamMatchmakingServerListResponse_106 *pRequestServersResponse )
|
||||
@ -44,11 +64,21 @@ void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_Request
|
||||
.nFilters = nFilters,
|
||||
.pRequestServersResponse = pRequestServersResponse,
|
||||
};
|
||||
struct w_request *request;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
if (!(request = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*request) ))) return NULL;
|
||||
params._ret = request;
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_RequestFriendsServerList, ¶ms );
|
||||
return params._ret;
|
||||
if (!request->u_request.handle)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList( struct w_iface *_this, uint32_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32_t nFilters, w_ISteamMatchmakingServerListResponse_106 *pRequestServersResponse )
|
||||
@ -61,11 +91,21 @@ void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_Request
|
||||
.nFilters = nFilters,
|
||||
.pRequestServersResponse = pRequestServersResponse,
|
||||
};
|
||||
struct w_request *request;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
if (!(request = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*request) ))) return NULL;
|
||||
params._ret = request;
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_RequestFavoritesServerList, ¶ms );
|
||||
return params._ret;
|
||||
if (!request->u_request.handle)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList( struct w_iface *_this, uint32_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32_t nFilters, w_ISteamMatchmakingServerListResponse_106 *pRequestServersResponse )
|
||||
@ -78,11 +118,21 @@ void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_Request
|
||||
.nFilters = nFilters,
|
||||
.pRequestServersResponse = pRequestServersResponse,
|
||||
};
|
||||
struct w_request *request;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
if (!(request = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*request) ))) return NULL;
|
||||
params._ret = request;
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_RequestHistoryServerList, ¶ms );
|
||||
return params._ret;
|
||||
if (!request->u_request.handle)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList( struct w_iface *_this, uint32_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32_t nFilters, w_ISteamMatchmakingServerListResponse_106 *pRequestServersResponse )
|
||||
@ -95,11 +145,21 @@ void * __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_Request
|
||||
.nFilters = nFilters,
|
||||
.pRequestServersResponse = pRequestServersResponse,
|
||||
};
|
||||
struct w_request *request;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
if (!(request = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*request) ))) return NULL;
|
||||
params._ret = request;
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_RequestSpectatorServerList, ¶ms );
|
||||
return params._ret;
|
||||
if (!request->u_request.handle)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest( struct w_iface *_this, void *hServerListRequest )
|
||||
@ -109,10 +169,12 @@ void __thiscall winISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRe
|
||||
.u_iface = _this->u_iface,
|
||||
.hServerListRequest = hServerListRequest,
|
||||
};
|
||||
struct w_request *request = hServerListRequest;
|
||||
|
||||
TRACE( "%p\n", _this );
|
||||
|
||||
execute_pending_callbacks(); /* execute any pending callbacks that might still need to use the request */
|
||||
|
||||
STEAMCLIENT_CALL( ISteamMatchmakingServers_SteamMatchMakingServers002_ReleaseRequest, ¶ms );
|
||||
|
||||
HeapFree( GetProcessHeap(), 0, request );
|
||||
}
|
||||
|
@ -77,4 +77,13 @@ struct u_buffer
|
||||
#endif /* __cplusplus */
|
||||
};
|
||||
|
||||
struct u_request
|
||||
{
|
||||
UINT64 handle;
|
||||
#ifdef __cplusplus
|
||||
struct u_request &operator=(const void* value) { this->handle = (UINT_PTR)value; return *this; }
|
||||
operator void*() const { return (void*)(UINT_PTR)this->handle; }
|
||||
#endif /* __cplusplus */
|
||||
};
|
||||
|
||||
#endif /* __STEAMCLIENT_STRUCTS_H */
|
||||
|
@ -88,8 +88,11 @@ u_ISteamMatchmakingServerListResponse_099u *create_LinuxISteamMatchmakingServerL
|
||||
struct SteamMatchmakingServerListResponse_106 : u_ISteamMatchmakingServerListResponse_106
|
||||
{
|
||||
struct w_iface *w_iface;
|
||||
struct w_request *w_request;
|
||||
static class callback_obj_tracker<SteamMatchmakingServerListResponse_106> track;
|
||||
|
||||
SteamMatchmakingServerListResponse_106( w_ISteamMatchmakingServerListResponse_106 *w_iface, void *w_request );
|
||||
|
||||
void add_request( void *hrequest)
|
||||
{
|
||||
if (hrequest) track.add_request( hrequest, this );
|
||||
@ -110,35 +113,28 @@ struct SteamMatchmakingServerListResponse_106 : u_ISteamMatchmakingServerListRes
|
||||
};
|
||||
class callback_obj_tracker<SteamMatchmakingServerListResponse_106> SteamMatchmakingServerListResponse_106::track;
|
||||
|
||||
SteamMatchmakingServerListResponse_106::SteamMatchmakingServerListResponse_106( w_ISteamMatchmakingServerListResponse_106 *w_iface, void *w_request )
|
||||
: w_iface( (struct w_iface *)w_iface ), w_request( (struct w_request *)w_request )
|
||||
{
|
||||
TRACE( "%p, %p -> %p\n", w_iface, w_request, this );
|
||||
}
|
||||
|
||||
void SteamMatchmakingServerListResponse_106::ServerResponded( void *hRequest, int32_t iServer )
|
||||
{
|
||||
queue_vtable_callback( this->w_iface, CALL_IFACE_VTABLE_0_2, (intptr_t)hRequest, (intptr_t)iServer );
|
||||
queue_vtable_callback( this->w_iface, CALL_IFACE_VTABLE_0_2, (intptr_t)this->w_request, (intptr_t)iServer );
|
||||
}
|
||||
|
||||
void SteamMatchmakingServerListResponse_106::ServerFailedToRespond( void *hRequest, int32_t iServer )
|
||||
{
|
||||
queue_vtable_callback( this->w_iface, CALL_IFACE_VTABLE_1_2, (intptr_t)hRequest, (intptr_t)iServer );
|
||||
queue_vtable_callback( this->w_iface, CALL_IFACE_VTABLE_1_2, (intptr_t)this->w_request, (intptr_t)iServer );
|
||||
}
|
||||
|
||||
void SteamMatchmakingServerListResponse_106::RefreshComplete( void *hRequest, uint32_t response )
|
||||
{
|
||||
queue_vtable_callback( this->w_iface, CALL_IFACE_VTABLE_2_2, (intptr_t)hRequest, (intptr_t)response );
|
||||
queue_vtable_callback( this->w_iface, CALL_IFACE_VTABLE_2_2, (intptr_t)this->w_request, (intptr_t)response );
|
||||
TRACE( "RefreshComplete this %p, w_iface %p.\n", this, this->w_iface );
|
||||
}
|
||||
|
||||
SteamMatchmakingServerListResponse_106 *create_LinuxISteamMatchmakingServerListResponse_106( void *win )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *ret;
|
||||
|
||||
if (!win) return NULL;
|
||||
|
||||
if (!(ret = new SteamMatchmakingServerListResponse_106())) return NULL;
|
||||
ret->w_iface = (struct w_iface *)win;
|
||||
|
||||
TRACE("-> %p.\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct SteamMatchmakingPingResponse : u_ISteamMatchmakingPingResponse
|
||||
{
|
||||
struct w_iface *w_iface;
|
||||
@ -301,60 +297,66 @@ static NTSTATUS ISteamMatchmakingServers_RequestSpectatorServerList( u_ISteamMat
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RequestInternetServerList( Iface *iface, Params *params )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *u_response = create_LinuxISteamMatchmakingServerListResponse_106( params->pRequestServersResponse );
|
||||
params->_ret = iface->RequestInternetServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!params->_ret) delete u_response;
|
||||
else u_response->add_request( params->_ret );
|
||||
SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret );
|
||||
struct w_request *w_request = u_response->w_request;
|
||||
w_request->u_request = iface->RequestInternetServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!w_request->u_request) delete u_response;
|
||||
else u_response->add_request( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RequestLANServerList( Iface *iface, Params *params )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *u_response = create_LinuxISteamMatchmakingServerListResponse_106( params->pRequestServersResponse );
|
||||
params->_ret = iface->RequestLANServerList( params->iApp, u_response );
|
||||
if (!params->_ret) delete u_response;
|
||||
else u_response->add_request( params->_ret );
|
||||
SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret );
|
||||
struct w_request *w_request = u_response->w_request;
|
||||
w_request->u_request = iface->RequestLANServerList( params->iApp, u_response );
|
||||
if (!w_request->u_request) delete u_response;
|
||||
else u_response->add_request( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RequestFriendsServerList( Iface *iface, Params *params )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *u_response = create_LinuxISteamMatchmakingServerListResponse_106( params->pRequestServersResponse );
|
||||
params->_ret = iface->RequestFriendsServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!params->_ret) delete u_response;
|
||||
else u_response->add_request( params->_ret );
|
||||
SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret );
|
||||
struct w_request *w_request = u_response->w_request;
|
||||
w_request->u_request = iface->RequestFriendsServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!w_request->u_request) delete u_response;
|
||||
else u_response->add_request( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RequestFavoritesServerList( Iface *iface, Params *params )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *u_response = create_LinuxISteamMatchmakingServerListResponse_106( params->pRequestServersResponse );
|
||||
params->_ret = iface->RequestFavoritesServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!params->_ret) delete u_response;
|
||||
else u_response->add_request( params->_ret );
|
||||
SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret );
|
||||
struct w_request *w_request = u_response->w_request;
|
||||
w_request->u_request = iface->RequestFavoritesServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!w_request->u_request) delete u_response;
|
||||
else u_response->add_request( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RequestHistoryServerList( Iface *iface, Params *params )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *u_response = create_LinuxISteamMatchmakingServerListResponse_106( params->pRequestServersResponse );
|
||||
params->_ret = iface->RequestHistoryServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!params->_ret) delete u_response;
|
||||
else u_response->add_request( params->_ret );
|
||||
SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret );
|
||||
struct w_request *w_request = u_response->w_request;
|
||||
w_request->u_request = iface->RequestHistoryServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!w_request->u_request) delete u_response;
|
||||
else u_response->add_request( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RequestSpectatorServerList( Iface *iface, Params *params )
|
||||
{
|
||||
SteamMatchmakingServerListResponse_106 *u_response = create_LinuxISteamMatchmakingServerListResponse_106( params->pRequestServersResponse );
|
||||
params->_ret = iface->RequestSpectatorServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!params->_ret) delete u_response;
|
||||
else u_response->add_request( params->_ret );
|
||||
SteamMatchmakingServerListResponse_106 *u_response = new SteamMatchmakingServerListResponse_106( params->pRequestServersResponse, params->_ret );
|
||||
struct w_request *w_request = u_response->w_request;
|
||||
w_request->u_request = iface->RequestSpectatorServerList( params->iApp, params->ppchFilters, params->nFilters, u_response );
|
||||
if (!w_request->u_request) delete u_response;
|
||||
else u_response->add_request( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -385,50 +387,57 @@ static NTSTATUS ISteamMatchmakingServers_ServerRules( Iface *iface, Params *para
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_ReleaseRequest( Iface *iface, Params *params )
|
||||
{
|
||||
iface->ReleaseRequest( params->hServerListRequest );
|
||||
SteamMatchmakingServerListResponse_106::request_released( params->hServerListRequest );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hServerListRequest;
|
||||
iface->ReleaseRequest( w_request ? (void *)w_request->u_request : nullptr );
|
||||
SteamMatchmakingServerListResponse_106::request_released( w_request );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_GetServerDetails( Iface *iface, Params *params )
|
||||
{
|
||||
params->_ret = iface->GetServerDetails( params->hRequest, params->iServer );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hRequest;
|
||||
params->_ret = iface->GetServerDetails( w_request ? (void *)w_request->u_request : nullptr, params->iServer );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_CancelQuery( Iface *iface, Params *params )
|
||||
{
|
||||
iface->CancelQuery( params->hRequest );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hRequest;
|
||||
iface->CancelQuery( w_request ? (void *)w_request->u_request : nullptr );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RefreshQuery( Iface *iface, Params *params )
|
||||
{
|
||||
iface->RefreshQuery( params->hRequest );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hRequest;
|
||||
iface->RefreshQuery( w_request ? (void *)w_request->u_request : nullptr );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_IsRefreshing( Iface *iface, Params *params )
|
||||
{
|
||||
params->_ret = iface->IsRefreshing( params->hRequest );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hRequest;
|
||||
params->_ret = iface->IsRefreshing( w_request ? (void *)w_request->u_request : nullptr );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_GetServerCount( Iface *iface, Params *params )
|
||||
{
|
||||
params->_ret = iface->GetServerCount( params->hRequest );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hRequest;
|
||||
params->_ret = iface->GetServerCount( w_request ? (void *)w_request->u_request : nullptr );
|
||||
return 0;
|
||||
}
|
||||
|
||||
template< typename Iface, typename Params >
|
||||
static NTSTATUS ISteamMatchmakingServers_RefreshServer( Iface *iface, Params *params )
|
||||
{
|
||||
iface->RefreshServer( params->hRequest, params->iServer );
|
||||
struct w_request *w_request = (struct w_request *)(void *)params->hRequest;
|
||||
iface->RefreshServer( w_request ? (void *)w_request->u_request : nullptr, params->iServer );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -225,6 +225,11 @@ struct networking_message
|
||||
};
|
||||
};
|
||||
|
||||
struct w_request
|
||||
{
|
||||
struct u_request u_request;
|
||||
};
|
||||
|
||||
#include <poppack.h>
|
||||
|
||||
NTSTATUS steamclient_call( unsigned int code, void *args, const char *name );
|
||||
|
Loading…
x
Reference in New Issue
Block a user