# HG changeset patch # User rubidium42 # Date 2021-05-06 14:19:00 # Node ID b4291ae45d231792427d2b0cff0f09123af5ab16 # Parent 65af9d4639ed56a60b356c3a143932a31de9c557 Codechange: [Network] Use std::string for NetworkGameInfo diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp --- a/src/network/core/game_info.cpp +++ b/src/network/core/game_info.cpp @@ -112,7 +112,7 @@ bool IsNetworkCompatibleVersion(const ch void CheckGameCompatibility(NetworkGameInfo &ngi) { /* Check if we are allowed on this server based on the revision-check. */ - ngi.version_compatible = IsNetworkCompatibleVersion(ngi.server_revision); + ngi.version_compatible = IsNetworkCompatibleVersion(ngi.server_revision.c_str()); ngi.compatible = ngi.version_compatible; /* Check if we have all the GRFs on the client-system too. */ @@ -138,8 +138,8 @@ void FillStaticNetworkServerGameInfo() _network_game_info.dedicated = _network_dedicated; _network_game_info.grfconfig = _grfconfig; - strecpy(_network_game_info.server_name, _settings_client.network.server_name, lastof(_network_game_info.server_name)); - strecpy(_network_game_info.server_revision, GetNetworkRevisionString(), lastof(_network_game_info.server_revision)); + _network_game_info.server_name = _settings_client.network.server_name; + _network_game_info.server_revision = GetNetworkRevisionString(); } /** @@ -295,8 +295,8 @@ void DeserializeNetworkGameInfo(Packet * FALLTHROUGH; case 1: - p->Recv_string(info->server_name, sizeof(info->server_name)); - p->Recv_string(info->server_revision, sizeof(info->server_revision)); + info->server_name = p->Recv_string(NETWORK_NAME_LENGTH); + info->server_revision = p->Recv_string(NETWORK_REVISION_LENGTH); p->Recv_uint8 (); // Used to contain server-lang. info->use_password = p->Recv_bool (); info->clients_max = p->Recv_uint8 (); diff --git a/src/network/core/game_info.h b/src/network/core/game_info.h --- a/src/network/core/game_info.h +++ b/src/network/core/game_info.h @@ -60,22 +60,22 @@ * The game information that is sent from the server to the client. */ struct NetworkServerGameInfo { - GRFConfig *grfconfig; ///< List of NewGRF files used - Date start_date; ///< When the game started - Date game_date; ///< Current date - uint16 map_width; ///< Map width - uint16 map_height; ///< Map height - char server_name[NETWORK_NAME_LENGTH]; ///< Server name - char server_revision[NETWORK_REVISION_LENGTH]; ///< The version number the server is using (e.g.: 'r304' or 0.5.0) - bool dedicated; ///< Is this a dedicated server? - bool use_password; ///< Is this server passworded? - byte clients_on; ///< Current count of clients on server - byte clients_max; ///< Max clients allowed on server - byte companies_on; ///< How many started companies do we have - byte companies_max; ///< Max companies allowed on server - byte spectators_on; ///< How many spectators do we have? - byte spectators_max; ///< Max spectators allowed on server - byte landscape; ///< The used landscape + GRFConfig *grfconfig; ///< List of NewGRF files used + Date start_date; ///< When the game started + Date game_date; ///< Current date + uint16 map_width; ///< Map width + uint16 map_height; ///< Map height + std::string server_name; ///< Server name + std::string server_revision; ///< The version number the server is using (e.g.: 'r304' or 0.5.0) + bool dedicated; ///< Is this a dedicated server? + bool use_password; ///< Is this server passworded? + byte clients_on; ///< Current count of clients on server + byte clients_max; ///< Max clients allowed on server + byte companies_on; ///< How many started companies do we have + byte companies_max; ///< Max companies allowed on server + byte spectators_on; ///< How many spectators do we have? + byte spectators_max; ///< Max spectators allowed on server + byte landscape; ///< The used landscape }; /** diff --git a/src/network/network.cpp b/src/network/network.cpp --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -656,9 +656,9 @@ NetworkGameList *NetworkAddServer(const /* Ensure the item already exists in the list */ NetworkGameList *item = NetworkGameListAddItem(connection_string); - if (StrEmpty(item->info.server_name)) { + if (item->info.server_name.empty()) { ClearGRFConfigList(&item->info.grfconfig); - strecpy(item->info.server_name, connection_string.c_str(), lastof(item->info.server_name)); + item->info.server_name = connection_string; item->manually = true; NetworkRebuildHostList(); @@ -1163,7 +1163,7 @@ void NetworkStartUp() /* Generate an server id when there is none yet */ if (StrEmpty(_settings_client.network.network_id)) NetworkGenerateServerId(); - memset(&_network_game_info, 0, sizeof(_network_game_info)); + _network_game_info = {}; NetworkInitialize(); DEBUG(net, 3, "[core] network online, multiplayer available"); diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -47,10 +47,10 @@ static void NetworkGameListHandleDelayed NetworkGameList *item = NetworkGameListAddItem(ins_item->connection_string); if (item != nullptr) { - if (StrEmpty(item->info.server_name)) { + if (item->info.server_name.empty()) { ClearGRFConfigList(&item->info.grfconfig); - memset(&item->info, 0, sizeof(item->info)); - strecpy(item->info.server_name, ins_item->info.server_name, lastof(item->info.server_name)); + item->info = {}; + item->info.server_name = ins_item->info.server_name; item->online = false; } item->manually |= ins_item->manually; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -271,7 +271,7 @@ protected: /** Sort servers by name. */ static bool NGameNameSorter(NetworkGameList * const &a, NetworkGameList * const &b) { - int r = strnatcmp(a->info.server_name, b->info.server_name, true); // Sort by name (natural sorting). + int r = strnatcmp(a->info.server_name.c_str(), b->info.server_name.c_str(), true); // Sort by name (natural sorting). if (r == 0) r = a->connection_string.compare(b->connection_string); return r < 0; @@ -324,7 +324,7 @@ protected: static bool NGameAllowedSorter(NetworkGameList * const &a, NetworkGameList * const &b) { /* The servers we do not know anything about (the ones that did not reply) should be at the bottom) */ - int r = StrEmpty(a->info.server_revision) - StrEmpty(b->info.server_revision); + int r = a->info.server_revision.empty() - b->info.server_revision.empty(); /* Reverse default as we are interested in version-compatible clients first */ if (r == 0) r = b->info.version_compatible - a->info.version_compatible; @@ -361,7 +361,7 @@ protected: assert((*item) != nullptr); sf.ResetState(); - sf.AddLine((*item)->info.server_name); + sf.AddLine((*item)->info.server_name.c_str()); return sf.GetState(); } diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -91,7 +91,7 @@ static void DoNetworkUDPQueryServer(cons { /* Clear item in gamelist */ NetworkGameList *item = new NetworkGameList(connection_string, manually); - strecpy(item->info.server_name, connection_string.c_str(), lastof(item->info.server_name)); + item->info.server_name = connection_string; NetworkGameListAddItemDelayed(item); std::unique_lock lock(_udp_client.mutex, std::defer_lock); @@ -362,7 +362,7 @@ void ClientNetworkUDPSocketHandler::Rece } if (client_addr->GetAddress()->ss_family == AF_INET6) { - strecat(item->info.server_name, " (IPv6)", lastof(item->info.server_name)); + item->info.server_name.append(" (IPv6)"); } UpdateNetworkGameWindow();