diff options
Diffstat (limited to 'NorthstarDedicatedTest/masterserver.cpp')
-rw-r--r-- | NorthstarDedicatedTest/masterserver.cpp | 133 |
1 files changed, 99 insertions, 34 deletions
diff --git a/NorthstarDedicatedTest/masterserver.cpp b/NorthstarDedicatedTest/masterserver.cpp index 63ae49a9..8cb4f9bb 100644 --- a/NorthstarDedicatedTest/masterserver.cpp +++ b/NorthstarDedicatedTest/masterserver.cpp @@ -146,8 +146,14 @@ const char* HttplibErrorToString(httplib::Error error) } RemoteServerInfo::RemoteServerInfo( - const char* newId, const char* newName, const char* newDescription, const char* newMap, const char* newPlaylist, int newPlayerCount, - int newMaxPlayers, bool newRequiresPassword) + const char* newId, + const char* newName, + const char* newDescription, + const char* newMap, + const char* newPlaylist, + int newPlayerCount, + int newMaxPlayers, + bool newRequiresPassword) { // passworded servers don't have public ips requiresPassword = newRequiresPassword; @@ -216,7 +222,8 @@ void MasterServerManager::AuthenticateOriginWithMasterServer(char* uid, char* or SetCommonHttpClientOptions(curl); std::string readBuffer; curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format("{}/client/origin_auth?id={}&token={}", Cvar_ns_masterserver_hostname->GetString(), uidStr, tokenStr).c_str()); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlWriteToStringBufferCallback); @@ -363,8 +370,13 @@ void MasterServerManager::RequestServerList() if (!strncmp((const char*)server.id, id, 32)) { server = RemoteServerInfo( - id, serverObj["name"].GetString(), serverObj["description"].GetString(), serverObj["map"].GetString(), - serverObj["playlist"].GetString(), serverObj["playerCount"].GetInt(), serverObj["maxPlayers"].GetInt(), + id, + serverObj["name"].GetString(), + serverObj["description"].GetString(), + serverObj["map"].GetString(), + serverObj["playlist"].GetString(), + serverObj["playerCount"].GetInt(), + serverObj["maxPlayers"].GetInt(), serverObj["hasPassword"].IsTrue()); newServer = &server; createNewServerInfo = false; @@ -375,8 +387,13 @@ void MasterServerManager::RequestServerList() // server didn't exist if (createNewServerInfo) newServer = &m_remoteServers.emplace_back( - id, serverObj["name"].GetString(), serverObj["description"].GetString(), serverObj["map"].GetString(), - serverObj["playlist"].GetString(), serverObj["playerCount"].GetInt(), serverObj["maxPlayers"].GetInt(), + id, + serverObj["name"].GetString(), + serverObj["description"].GetString(), + serverObj["map"].GetString(), + serverObj["playlist"].GetString(), + serverObj["playerCount"].GetInt(), + serverObj["maxPlayers"].GetInt(), serverObj["hasPassword"].IsTrue()); newServer->requiredMods.clear(); @@ -406,7 +423,8 @@ void MasterServerManager::RequestServerList() } std::sort( - m_remoteServers.begin(), m_remoteServers.end(), + m_remoteServers.begin(), + m_remoteServers.end(), [](RemoteServerInfo& a, RemoteServerInfo& b) { return a.playerCount > b.playerCount; }); } else @@ -557,7 +575,8 @@ void MasterServerManager::AuthenticateWithOwnServer(char* uid, char* playerToken std::string readBuffer; curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format("{}/client/auth_with_self?id={}&playerToken={}", Cvar_ns_masterserver_hostname->GetString(), uidStr, tokenStr) .c_str()); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); @@ -697,10 +716,15 @@ void MasterServerManager::AuthenticateWithServer(char* uid, char* playerToken, c char* escapedPassword = curl_easy_escape(curl, passwordStr.c_str(), passwordStr.length()); curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format( - "{}/client/auth_with_server?id={}&playerToken={}&server={}&password={}", Cvar_ns_masterserver_hostname->GetString(), - uidStr, tokenStr, serverIdStr, escapedPassword) + "{}/client/auth_with_server?id={}&playerToken={}&server={}&password={}", + Cvar_ns_masterserver_hostname->GetString(), + uidStr, + tokenStr, + serverIdStr, + escapedPassword) .c_str()); curl_free(escapedPassword); @@ -830,11 +854,19 @@ void MasterServerManager::AddSelfToServerList( char* passwordEscaped = curl_easy_escape(curl, strPassword.c_str(), strPassword.length()); curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format( "{}/server/add_server?port={}&authPort={}&name={}&description={}&map={}&playlist={}&maxPlayers={}&password={}", - Cvar_ns_masterserver_hostname->GetString(), port, authPort, nameEscaped, descEscaped, mapEscaped, playlistEscaped, - maxPlayers, passwordEscaped) + Cvar_ns_masterserver_hostname->GetString(), + port, + authPort, + nameEscaped, + descEscaped, + mapEscaped, + playlistEscaped, + maxPlayers, + passwordEscaped) .c_str()); curl_free(nameEscaped); @@ -930,14 +962,22 @@ void MasterServerManager::AddSelfToServerList( maxPlayers = std::stoi(maxPlayersVar); curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format( "{}/server/" "update_values?id={}&port={}&authPort={}&name={}&description={}&map={}&playlist={}&playerCount={}&" "maxPlayers={}&password={}", - Cvar_ns_masterserver_hostname->GetString(), m_ownServerId, Cvar_hostport->GetInt(), - Cvar_ns_player_auth_port->GetInt(), escapedNameNew, escapedDescNew, escapedMapNew, - escapedPlaylistNew, g_ServerAuthenticationManager->m_additionalPlayerData.size(), maxPlayers, + Cvar_ns_masterserver_hostname->GetString(), + m_ownServerId, + Cvar_hostport->GetInt(), + Cvar_ns_player_auth_port->GetInt(), + escapedNameNew, + escapedDescNew, + escapedMapNew, + escapedPlaylistNew, + g_ServerAuthenticationManager->m_additionalPlayerData.size(), + maxPlayers, escapedPasswordNew) .c_str()); @@ -980,7 +1020,8 @@ void MasterServerManager::AddSelfToServerList( if (serverAddedJson.HasMember("serverAuthToken") && serverAddedJson["serverAuthToken"].IsString()) { strncpy( - m_ownServerAuthToken, serverAddedJson["serverAuthToken"].GetString(), + m_ownServerAuthToken, + serverAddedJson["serverAuthToken"].GetString(), sizeof(m_ownServerAuthToken)); m_ownServerAuthToken[sizeof(m_ownServerAuthToken) - 1] = 0; } @@ -1036,10 +1077,15 @@ void MasterServerManager::UpdateServerMapAndPlaylist(char* map, char* playlist, char* playlistEscaped = curl_easy_escape(curl, strPlaylist.c_str(), strPlaylist.length()); curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format( - "{}/server/update_values?id={}&map={}&playlist={}&maxPlayers={}", Cvar_ns_masterserver_hostname->GetString(), - m_ownServerId, mapEscaped, playlistEscaped, maxPlayers) + "{}/server/update_values?id={}&map={}&playlist={}&maxPlayers={}", + Cvar_ns_masterserver_hostname->GetString(), + m_ownServerId, + mapEscaped, + playlistEscaped, + maxPlayers) .c_str()); curl_free(mapEscaped); @@ -1076,7 +1122,8 @@ void MasterServerManager::UpdateServerPlayerCount(int playerCount) curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlWriteToStringBufferCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format( "{}/server/update_values?id={}&playerCount={}", Cvar_ns_masterserver_hostname->GetString(), m_ownServerId, playerCount) .c_str()); @@ -1115,9 +1162,12 @@ void MasterServerManager::WritePlayerPersistentData(char* playerId, char* pdata, std::string readBuffer; curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format( - "{}/accounts/write_persistence?id={}&serverId={}", Cvar_ns_masterserver_hostname->GetString(), strPlayerId, + "{}/accounts/write_persistence?id={}&serverId={}", + Cvar_ns_masterserver_hostname->GetString(), + strPlayerId, m_ownServerId) .c_str()); curl_easy_setopt(curl, CURLOPT_POST, 1L); @@ -1166,7 +1216,8 @@ void MasterServerManager::RemoveSelfFromServerList() curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlWriteToStringBufferCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); curl_easy_setopt( - curl, CURLOPT_URL, + curl, + CURLOPT_URL, fmt::format("{}/server/remove_server?id={}", Cvar_ns_masterserver_hostname->GetString(), m_ownServerId).c_str()); *m_ownServerId = 0; @@ -1183,7 +1234,10 @@ void MasterServerManager::RemoveSelfFromServerList() requestThread.detach(); } -void ConCommand_ns_fetchservers(const CCommand& args) { g_MasterServerManager->RequestServerList(); } +void ConCommand_ns_fetchservers(const CCommand& args) +{ + g_MasterServerManager->RequestServerList(); +} void CHostState__State_NewGameHook(CHostState* hostState) { @@ -1215,8 +1269,13 @@ void CHostState__State_NewGameHook(CHostState* hostState) UpdateServerInfoFromUnicodeToUTF8(); g_MasterServerManager->AddSelfToServerList( - Cvar_hostport->GetInt(), Cvar_ns_player_auth_port->GetInt(), (char*)Cvar_ns_server_name->GetString(), - (char*)Cvar_ns_server_desc->GetString(), hostState->m_levelName, (char*)GetCurrentPlaylistName(), maxPlayers, + Cvar_hostport->GetInt(), + Cvar_ns_player_auth_port->GetInt(), + (char*)Cvar_ns_server_name->GetString(), + (char*)Cvar_ns_server_desc->GetString(), + hostState->m_levelName, + (char*)GetCurrentPlaylistName(), + maxPlayers, (char*)Cvar_ns_server_password->GetString()); g_ServerAuthenticationManager->StartPlayerAuthServer(); g_ServerAuthenticationManager->m_bNeedLocalAuthForNewgame = false; @@ -1264,7 +1323,7 @@ void CHostState__State_GameShutdownHook(CHostState* hostState) CHostState__State_GameShutdown(hostState); } -MasterServerManager::MasterServerManager() : m_pendingConnectionInfo{}, m_ownServerId{""}, m_ownClientAuthToken{""} {} +MasterServerManager::MasterServerManager() : m_pendingConnectionInfo {}, m_ownServerId {""}, m_ownClientAuthToken {""} {} void InitialiseSharedMasterServer(HMODULE baseAddress) { @@ -1290,12 +1349,18 @@ void InitialiseSharedMasterServer(HMODULE baseAddress) ENABLER_CREATEHOOK( hook, (char*)baseAddress + 0x16E7D0, CHostState__State_NewGameHook, reinterpret_cast<LPVOID*>(&CHostState__State_NewGame)); ENABLER_CREATEHOOK( - hook, (char*)baseAddress + 0x16E520, CHostState__State_ChangeLevelMPHook, + hook, + (char*)baseAddress + 0x16E520, + CHostState__State_ChangeLevelMPHook, reinterpret_cast<LPVOID*>(&CHostState__State_ChangeLevelMP)); ENABLER_CREATEHOOK( - hook, (char*)baseAddress + 0x16E5D0, CHostState__State_ChangeLevelSPHook, + hook, + (char*)baseAddress + 0x16E5D0, + CHostState__State_ChangeLevelSPHook, reinterpret_cast<LPVOID*>(&CHostState__State_ChangeLevelSP)); ENABLER_CREATEHOOK( - hook, (char*)baseAddress + 0x16E640, CHostState__State_GameShutdownHook, + hook, + (char*)baseAddress + 0x16E640, + CHostState__State_GameShutdownHook, reinterpret_cast<LPVOID*>(&CHostState__State_GameShutdown)); } |