From f4dd2d88c721c085376f59908097500bc5f0c143 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 9 May 2021 19:07:58 +0200 Subject: Feature: raise the maximum NewGRF limit to 255 --- src/network/core/config.h | 15 +++++++++++++-- src/network/network_coordinator.cpp | 2 +- src/network/network_server.cpp | 4 ++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/network/core/config.h b/src/network/core/config.h index d64dec2d9..d37210e19 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -73,9 +73,20 @@ static const uint NETWORK_GRF_NAME_LENGTH = 80; ///< Maxim /** * Maximum number of GRFs that can be sent. - * This limit is reached when PACKET_UDP_SERVER_RESPONSE reaches the maximum size of UDP_MTU bytes. + * + * This limit exists to avoid that the SERVER_INFO packet exceeding the + * maximum MTU. At the time of writing this limit is 32767 (TCP_MTU). + * + * In the SERVER_INFO packet is the NetworkGameInfo struct, which is + * 142 bytes + 100 per NewGRF (under the assumption strings are used to + * their max). This brings us to roughly 326 possible NewGRFs. Round it + * down so people don't freak out because they see a weird value, and you + * get the limit: 255. + * + * PS: in case you ever want to raise this number, please be mindful that + * "amount of NewGRFs" in NetworkGameInfo is currently an uint8. */ -static const uint NETWORK_MAX_GRF_COUNT = 62; +static const uint NETWORK_MAX_GRF_COUNT = 255; /** * The number of landscapes in OpenTTD. diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index 5f1f9f9d1..b3d304952 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -205,7 +205,7 @@ void ClientNetworkCoordinatorSocketHandler::SendServerUpdate() Debug(net, 6, "Sending server update to Game Coordinator"); this->next_update = std::chrono::steady_clock::now() + NETWORK_COORDINATOR_DELAY_BETWEEN_UPDATES; - Packet *p = new Packet(PACKET_COORDINATOR_SERVER_UPDATE); + Packet *p = new Packet(PACKET_COORDINATOR_SERVER_UPDATE, TCP_MTU); p->Send_uint8(NETWORK_COORDINATOR_VERSION); SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo()); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 46d6918ac..25ce602f0 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -354,7 +354,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientIn /** Send the client information about the server. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo() { - Packet *p = new Packet(PACKET_SERVER_GAME_INFO); + Packet *p = new Packet(PACKET_SERVER_GAME_INFO, TCP_MTU); SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo()); this->SendPacket(p); @@ -470,7 +470,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err /** Send the check for the NewGRFs. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() { - Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS); + Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU); const GRFConfig *c; uint grf_count = 0; -- cgit v1.2.3-54-g00ecf