/* Copyright (C) 2019 Mr Goldberg
This file is part of the Goldberg Emulator
The Goldberg Emulator is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
The Goldberg Emulator is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the Goldberg Emulator; if not, see
. */
#include "dll/steam_client.h"
// retrieves the ISteamTimeline interface associated with the handle
ISteamTimeline *Steam_Client::GetISteamTimeline( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return nullptr;
if (strcmp(pchVersion, STEAMTIMELINE_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_timeline));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// retrieves the ISteamGameStats interface associated with the handle
ISteamGameStats *Steam_Client::GetISteamGameStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return nullptr;
Steam_GameStats *steam_gamestats_tmp{};
if (steam_pipes[hSteamPipe] == Steam_Pipe::SERVER) {
steam_gamestats_tmp = steam_gameserver_gamestats;
} else {
steam_gamestats_tmp = steam_gamestats;
}
if (strcmp(pchVersion, STEAMGAMESTATS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_gamestats_tmp));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// retrieves the ISteamUser interface associated with the handle
ISteamUser *Steam_Client::GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
if (strcmp(pchVersion, "SteamUser009") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser010") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser011") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser012") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser013") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser014") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser015") == 0) {
return reinterpret_cast(static_cast(steam_user)); // SteamUser015 Not found in public Archive, must be between 1.12-1.13
} else if (strcmp(pchVersion, "SteamUser016") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser017") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser018") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser019") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser020") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser021") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, "SteamUser022") == 0) {
return reinterpret_cast(static_cast(steam_user));
} else if (strcmp(pchVersion, STEAMUSER_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_user));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// retrieves the ISteamGameServer interface associated with the handle
ISteamGameServer *Steam_Client::GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
if (strcmp(pchVersion, "SteamGameServer004") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer005") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer006") == 0) {
return reinterpret_cast(static_cast(steam_gameserver)); // SteamGameServer006 Not exists
} else if (strcmp(pchVersion, "SteamGameServer007") == 0) {
return reinterpret_cast(static_cast(steam_gameserver)); // SteamGameServer007 Not exists
} else if (strcmp(pchVersion, "SteamGameServer008") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer009") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer010") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer011") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer012") == 0) {
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer013") == 0) {
gameserver_has_ipv6_functions = true;
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, "SteamGameServer014") == 0) {
gameserver_has_ipv6_functions = true;
return reinterpret_cast(static_cast(steam_gameserver));
} else if (strcmp(pchVersion, STEAMGAMESERVER_INTERFACE_VERSION) == 0) {
gameserver_has_ipv6_functions = true;
return reinterpret_cast(static_cast(steam_gameserver));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the ISteamFriends interface
ISteamFriends *Steam_Client::GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
if (strcmp(pchVersion, "SteamFriends003") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends004") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends005") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends006") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends007") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends008") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends009") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends010") == 0) {
return reinterpret_cast(static_cast(steam_friends)); // SteamFriends010 Not found in public Archive, must be between 1.16-1.17
} else if (strcmp(pchVersion, "SteamFriends011") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends012") == 0) {
return reinterpret_cast(static_cast(steam_friends)); // SteamFriends012 Not found in public Archive, must be between 1.19-1.20
} else if (strcmp(pchVersion, "SteamFriends013") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends014") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends015") == 0) {
return reinterpret_cast(static_cast(steam_friends));
} else if (strcmp(pchVersion, "SteamFriends016") == 0) {
return reinterpret_cast(static_cast(steam_friends)); // SteamFriends016 Not found in public Archive, must be between 1.42-1.43
} else if (strcmp(pchVersion, STEAMFRIENDS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_friends));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the ISteamUtils interface
ISteamUtils *Steam_Client::GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe)) return NULL;
Steam_Utils *steam_utils_temp{};
if (steam_pipes[hSteamPipe] == Steam_Pipe::SERVER) {
steam_utils_temp = steam_gameserver_utils;
} else {
steam_utils_temp = steam_utils;
}
if (strcmp(pchVersion, "SteamUtils002") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, "SteamUtils003") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp)); // ISteamUtils003 Not found in public Archive, must be between 1.02-1.03
} else if (strcmp(pchVersion, "SteamUtils004") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, "SteamUtils005") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, "SteamUtils006") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, "SteamUtils007") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, "SteamUtils008") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, "SteamUtils009") == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
} else if (strcmp(pchVersion, STEAMUTILS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_utils_temp));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the ISteamMatchmaking interface
ISteamMatchmaking *Steam_Client::GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
if (strcmp(pchVersion, "SteamMatchMaking001") == 0) { // SteamMatchMaking001 Not found in public Archive, must be before 1.00
//TODO
return reinterpret_cast(static_cast(steam_matchmaking));
} else if (strcmp(pchVersion, "SteamMatchMaking002") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking));
} else if (strcmp(pchVersion, "SteamMatchMaking003") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking)); // SteamMatchMaking003 Not found in public Archive, must be between 1.01-1.02
} else if (strcmp(pchVersion, "SteamMatchMaking004") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking));
} else if (strcmp(pchVersion, "SteamMatchMaking005") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking)); // SteamMatchMaking005 Not found in public Archive, must be between 1.02-1.03
} else if (strcmp(pchVersion, "SteamMatchMaking006") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking));
} else if (strcmp(pchVersion, "SteamMatchMaking007") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking));
} else if (strcmp(pchVersion, "SteamMatchMaking008") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking));
} else if (strcmp(pchVersion, STEAMMATCHMAKING_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_matchmaking));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the ISteamMatchmakingServers interface
ISteamMatchmakingServers *Steam_Client::GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
if (strcmp(pchVersion, "SteamMatchMakingServers001") == 0) {
return reinterpret_cast(static_cast(steam_matchmaking_servers));
} else if (strcmp(pchVersion, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_matchmaking_servers));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the a generic interface
void *Steam_Client::GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("'%s' %i %i", pchVersion, hSteamUser, hSteamPipe);
if (!steam_pipes.count(hSteamPipe)) return NULL;
bool server = false;
if (steam_pipes[hSteamPipe] == Steam_Pipe::SERVER) {
// PRINT_DEBUG("requesting interface with server pipe");
server = true;
} else {
// PRINT_DEBUG("requesting interface with client pipe");
// if this is a user pipe, and version != "SteamNetworkingUtils", and version != "SteamUtils"
if ((strstr(pchVersion, "SteamNetworkingUtils") != pchVersion) && (strstr(pchVersion, "SteamUtils") != pchVersion)) {
if (!hSteamUser) return NULL;
}
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// NOTE: you must try to read the one with the most characters first
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (strstr(pchVersion, "SteamNetworkingSocketsSerialized") == pchVersion) {
Steam_Networking_Sockets_Serialized *steam_networking_sockets_serialized_temp{};
if (server) {
steam_networking_sockets_serialized_temp = steam_gameserver_networking_sockets_serialized;
} else {
steam_networking_sockets_serialized_temp = steam_networking_sockets_serialized;
}
if (strcmp(pchVersion, "SteamNetworkingSocketsSerialized002") == 0) {
return reinterpret_cast(static_cast(steam_networking_sockets_serialized_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSocketsSerialized003") == 0) {
return reinterpret_cast(static_cast(steam_networking_sockets_serialized_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSocketsSerialized004") == 0) {
return reinterpret_cast(static_cast(steam_networking_sockets_serialized_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSocketsSerialized005") == 0) {
return reinterpret_cast(static_cast(steam_networking_sockets_serialized_temp));
}
} else if (strstr(pchVersion, "SteamNetworkingSockets") == pchVersion) {
Steam_Networking_Sockets *steam_networking_sockets_temp{};
if (server) {
steam_networking_sockets_temp = steam_gameserver_networking_sockets;
} else {
steam_networking_sockets_temp = steam_networking_sockets;
}
if (strcmp(pchVersion, "SteamNetworkingSockets001") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp)); // SteamNetworkingSockets001 Not found in public Archive, must be before 1.44
} else if (strcmp(pchVersion, "SteamNetworkingSockets002") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSockets003") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSockets004") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSockets006") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
// SteamNetworkingSockets007 Not found in public Archive, must be between 1.47-1.48
} else if (strcmp(pchVersion, "SteamNetworkingSockets008") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
} else if (strcmp(pchVersion, "SteamNetworkingSockets009") == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
// SteamNetworkingSockets010-011 Not found in public Archive, must be between 1.52-1.53
} else if (strcmp(pchVersion, STEAMNETWORKINGSOCKETS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast( steam_networking_sockets_temp));
}
} else if (strstr(pchVersion, "SteamNetworkingMessages") == pchVersion) {
Steam_Networking_Messages *steam_networking_messages_temp{};
if (server) {
steam_networking_messages_temp = steam_gameserver_networking_messages;
} else {
steam_networking_messages_temp = steam_networking_messages;
}
if (strcmp(pchVersion, STEAMNETWORKINGMESSAGES_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_networking_messages_temp));
}
} else if (strstr(pchVersion, "SteamNetworkingUtils") == pchVersion) {
if (strcmp(pchVersion, "SteamNetworkingUtils001") == 0) {
return reinterpret_cast(static_cast(steam_networking_utils));
} else if (strcmp(pchVersion, "SteamNetworkingUtils002") == 0) {
return reinterpret_cast(static_cast(steam_networking_utils));
} else if (strcmp(pchVersion, "SteamNetworkingUtils003") == 0) {
return reinterpret_cast(static_cast(steam_networking_utils));
} else if (strcmp(pchVersion, STEAMNETWORKINGUTILS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_networking_utils));
}
} else if (strstr(pchVersion, "SteamNetworking") == pchVersion) {
return GetISteamNetworking(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamGameCoordinator") == pchVersion) {
Steam_Game_Coordinator *steam_game_coordinator_temp{};
if (server) {
steam_game_coordinator_temp = steam_gameserver_game_coordinator;
} else {
steam_game_coordinator_temp = steam_game_coordinator;
}
if (strcmp(pchVersion, STEAMGAMECOORDINATOR_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_game_coordinator_temp));
}
} else if (strstr(pchVersion, "STEAMTV_INTERFACE_V") == pchVersion) {
if (strcmp(pchVersion, STEAMTV_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_tv));
}
} else if (strstr(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION") == pchVersion) {
return GetISteamRemoteStorage(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamGameServerStats") == pchVersion) {
return GetISteamGameServerStats(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamGameServer") == pchVersion) {
return GetISteamGameServer(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamGameStats") == pchVersion) {
return GetISteamGameStats(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamMatchMakingServers") == pchVersion) {
return GetISteamMatchmakingServers(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamMatchMaking") == pchVersion) {
return GetISteamMatchmaking(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamFriends") == pchVersion) {
return GetISteamFriends(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamController") == pchVersion || strstr(pchVersion, "STEAMCONTROLLER_INTERFACE_VERSION") == pchVersion) {
return GetISteamController(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMUGC_INTERFACE_VERSION") == pchVersion) {
return GetISteamUGC(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMINVENTORY_INTERFACE") == pchVersion) {
return GetISteamInventory(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION") == pchVersion) {
return GetISteamUserStats(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamUser") == pchVersion) {
return GetISteamUser(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamUtils") == pchVersion) {
return GetISteamUtils(hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMAPPS_INTERFACE_VERSION") == pchVersion) {
return GetISteamApps(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMSCREENSHOTS_INTERFACE_VERSION") == pchVersion) {
return GetISteamScreenshots(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMHTTP_INTERFACE_VERSION") == pchVersion) {
return GetISteamHTTP(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION") == pchVersion) {
return DEPRECATED_GetISteamUnifiedMessages(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMAPPLIST_INTERFACE_VERSION") == pchVersion) {
return GetISteamAppList(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMMUSIC_INTERFACE_VERSION") == pchVersion) {
return GetISteamMusic(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMMUSICREMOTE_INTERFACE_VERSION") == pchVersion) {
return GetISteamMusicRemote(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMHTMLSURFACE_INTERFACE_VERSION") == pchVersion) {
return GetISteamHTMLSurface(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMVIDEO_INTERFACE") == pchVersion) {
return GetISteamVideo(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamMasterServerUpdater") == pchVersion) {
return GetISteamMasterServerUpdater(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamMatchGameSearch") == pchVersion) {
return GetISteamGameSearch(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamParties") == pchVersion) {
return GetISteamParties(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "SteamInput") == pchVersion) {
return GetISteamInput(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMREMOTEPLAY_INTERFACE_VERSION") == pchVersion) {
return GetISteamRemotePlay(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMPARENTALSETTINGS_INTERFACE_VERSION") == pchVersion) {
return GetISteamParentalSettings(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMAPPTICKET_INTERFACE_VERSION") == pchVersion) {
return GetAppTicket(hSteamUser, hSteamPipe, pchVersion);
} else if (strstr(pchVersion, "STEAMTIMELINE_INTERFACE") == pchVersion) {
return GetISteamTimeline(hSteamUser, hSteamPipe, pchVersion);
}
PRINT_DEBUG("No interface: %s", pchVersion);
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the ISteamUserStats interface
ISteamUserStats *Steam_Client::GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
// v001, v002 Not found in public Archive, must be before 1.00
if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION003") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION004") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION005") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION006") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION007") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION008") == 0) {
return reinterpret_cast(static_cast(steam_user_stats)); // Not found in public Archive, must be between 1.11-1.12
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION009") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION010") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, "STEAMUSERSTATS_INTERFACE_VERSION011") == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
} else if (strcmp(pchVersion, STEAMUSERSTATS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_user_stats));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns the ISteamGameServerStats interface
ISteamGameServerStats *Steam_Client::GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamuser) return NULL;
if (strcmp(pchVersion, STEAMGAMESERVERSTATS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_gameserverstats));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// returns apps interface
ISteamApps *Steam_Client::GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
Steam_Apps *steam_apps_temp{};
if (steam_pipes[hSteamPipe] == Steam_Pipe::SERVER) {
steam_apps_temp = steam_gameserver_apps;
} else {
steam_apps_temp = steam_apps;
}
if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION001") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION002") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION003") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION004") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION005") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION006") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION007") == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
} else if (strcmp(pchVersion, STEAMAPPS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_apps_temp));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// networking
ISteamNetworking *Steam_Client::GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
Steam_Networking *steam_networking_temp{};
if (steam_pipes[hSteamPipe] == Steam_Pipe::SERVER) {
steam_networking_temp = steam_gameserver_networking;
} else {
steam_networking_temp = steam_networking;
}
if (strcmp(pchVersion, "SteamNetworking001") == 0) {
return reinterpret_cast(static_cast(steam_networking_temp));
} else if (strcmp(pchVersion, "SteamNetworking002") == 0) {
return reinterpret_cast(static_cast(steam_networking_temp));
} else if (strcmp(pchVersion, "SteamNetworking003") == 0) {
return reinterpret_cast(static_cast(steam_networking_temp));
} else if (strcmp(pchVersion, "SteamNetworking004") == 0) {
return reinterpret_cast(static_cast(steam_networking_temp));
} else if (strcmp(pchVersion, "SteamNetworking005") == 0) {
return reinterpret_cast(static_cast(steam_networking_temp));
} else if (strcmp(pchVersion, STEAMNETWORKING_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_networking_temp));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// remote storage
ISteamRemoteStorage *Steam_Client::GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamuser) return NULL;
if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION001") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage)); //Not found in public Archive, must be before 1.00
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION002") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION003") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage)); //Not found in public Archive, must be between 1.11-1.12
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION004") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION005") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION006") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION007") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage)); //Not found in public Archive, must be between 1.19-1.20
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION008") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION009") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage)); //Not found in public Archive, must be between 1.21-1.22
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION010") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION011") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION012") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION013") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
} else if (strcmp(pchVersion, "STEAMREMOTESTORAGE_INTERFACE_VERSION014") == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
// STEAMREMOTESTORAGE_INTERFACE_VERSION015 Not found in public Archive, must be between 1.51-1.52
} else if (strcmp(pchVersion, STEAMREMOTESTORAGE_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_remote_storage));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// user screenshots
ISteamScreenshots *Steam_Client::GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamuser) return NULL;
if (strcmp(pchVersion, "STEAMSCREENSHOTS_INTERFACE_VERSION001") == 0) {
return reinterpret_cast(static_cast(steam_screenshots));
} else if (strcmp(pchVersion, "STEAMSCREENSHOTS_INTERFACE_VERSION002") == 0) {
return reinterpret_cast(static_cast(steam_screenshots));
} else if (strcmp(pchVersion, STEAMSCREENSHOTS_INTERFACE_VERSION) == 0) {
return reinterpret_cast(static_cast(steam_screenshots));
}
report_missing_impl_and_exit(pchVersion, EMU_FUNC_NAME);
}
// Expose HTTP interface
ISteamHTTP *Steam_Client::GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion )
{
PRINT_DEBUG("%s", pchVersion);
if (!steam_pipes.count(hSteamPipe) || !hSteamuser) return NULL;
Steam_HTTP *steam_http_temp{};
if (steam_pipes[hSteamPipe] == Steam_Pipe::SERVER) {
steam_http_temp = steam_gameserver_http;
} else {
steam_http_temp = steam_http;
}
if (strcmp(pchVersion, "STEAMHTTP_INTERFACE_VERSION001") == 0) {
return reinterpret_cast(static_cast(steam_http_temp));
} else if (strcmp(pchVersion, "STEAMHTTP_INTERFACE_VERSION002") == 0) {
return reinterpret_cast