remove material strings from hostnames

This commit is contained in:
Diavolo 2023-04-23 12:02:16 +02:00
parent 6fecdeb68d
commit c3d29e6675
3 changed files with 41 additions and 8 deletions

View File

@ -28,6 +28,13 @@ namespace steam
::utils::concurrency::container<servers> queried_servers{}; ::utils::concurrency::container<servers> queried_servers{};
std::atomic<matchmaking_server_list_response*> current_response{}; std::atomic<matchmaking_server_list_response*> current_response{};
template <typename T>
void copy_safe(T& dest, const char* in)
{
::utils::string::copy(dest, in);
::utils::string::strip_material(dest, dest, std::extent<T>::value);
}
gameserveritem_t create_server_item(const game::netadr_t& address, const ::utils::info_string& info, gameserveritem_t create_server_item(const game::netadr_t& address, const ::utils::info_string& info,
const uint32_t ping, const bool success) const uint32_t ping, const bool success)
{ {
@ -40,9 +47,11 @@ namespace steam
server.m_nPing = static_cast<int>(ping); server.m_nPing = static_cast<int>(ping);
server.m_bHadSuccessfulResponse = success; server.m_bHadSuccessfulResponse = success;
server.m_bDoNotRefresh = false; server.m_bDoNotRefresh = false;
::utils::string::copy(server.m_szGameDir, "");
::utils::string::copy(server.m_szMap, info.get("mapname").data()); copy_safe(server.m_szGameDir, "");
::utils::string::copy(server.m_szGameDescription, info.get("description").data()); copy_safe(server.m_szMap, info.get("mapname").data());
copy_safe(server.m_szGameDescription, info.get("description").data());
server.m_nAppID = (sub_protocol == SUB_PROTOCOL || sub_protocol == (SUB_PROTOCOL - 1)) ? 311210 : 0; server.m_nAppID = (sub_protocol == SUB_PROTOCOL || sub_protocol == (SUB_PROTOCOL - 1)) ? 311210 : 0;
server.m_nPlayers = atoi(info.get("clients").data()); server.m_nPlayers = atoi(info.get("clients").data());
server.m_nMaxPlayers = atoi(info.get("sv_maxclients").data()); server.m_nMaxPlayers = atoi(info.get("sv_maxclients").data());
@ -51,7 +60,8 @@ namespace steam
server.m_bSecure = true; server.m_bSecure = true;
server.m_ulTimeLastPlayed = 0; server.m_ulTimeLastPlayed = 0;
server.m_nServerVersion = 1000; server.m_nServerVersion = 1000;
::utils::string::copy(server.m_szServerName, info.get("hostname").data());
copy_safe(server.m_szServerName, info.get("hostname").data());
const auto playmode = info.get("playmode"); const auto playmode = info.get("playmode");
const auto mode = game::eModes(std::atoi(playmode.data())); const auto mode = game::eModes(std::atoi(playmode.data()));
@ -66,7 +76,8 @@ namespace steam
atoi(info.get("bots").data()), atoi(info.get("bots").data()),
info.get("modname").data()); info.get("modname").data());
::utils::string::copy(server.m_szGameTags, tags); copy_safe(server.m_szGameTags, tags);
server.m_steamID.bits = strtoull(info.get("xuid").data(), nullptr, 16); server.m_steamID.bits = strtoull(info.get("xuid").data(), nullptr, 16);
return server; return server;

View File

@ -1,7 +1,8 @@
#include "string.hpp" #include "string.hpp"
#include <sstream>
#include <cstdarg>
#include <algorithm> #include <algorithm>
#include <cassert>
#include <cstdarg>
#include <sstream>
#include "nt.hpp" #include "nt.hpp"
@ -107,11 +108,12 @@ namespace utils::string
void strip(const char* in, char* out, size_t max) void strip(const char* in, char* out, size_t max)
{ {
assert(max);
if (!in || !out) return; if (!in || !out) return;
max--; max--;
size_t current = 0; size_t current = 0;
while (*in != 0 && current < max) while (*in != '\0' && current < max)
{ {
const auto color_index = (*(in + 1) - 48) >= 0xC ? 7 : (*(in + 1) - 48); const auto color_index = (*(in + 1) - 48) >= 0xC ? 7 : (*(in + 1) - 48);
@ -132,6 +134,25 @@ namespace utils::string
*out = '\0'; *out = '\0';
} }
void strip_material(const char* in, char* out, size_t max)
{
assert(max);
if (!in || !out) return;
size_t i = 0;
while (*in != '\0' && i < max - 1)
{
if (*in != '$' && *in != '{' && *in != '}')
{
*out++ = *in;
i++;
}
in++;
}
*out = '\0';
}
std::string convert(const std::wstring& wstr) std::string convert(const std::wstring& wstr)
{ {
std::string result; std::string result;

View File

@ -89,6 +89,7 @@ namespace utils::string
std::string get_clipboard_data(); std::string get_clipboard_data();
void strip(const char* in, char* out, size_t max); void strip(const char* in, char* out, size_t max);
void strip_material(const char* in, char* out, size_t max);
std::string convert(const std::wstring& wstr); std::string convert(const std::wstring& wstr);
std::wstring convert(const std::string& str); std::wstring convert(const std::string& str);