summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-05-09 19:07:58 +0200
committerPatric Stout <github@truebrain.nl>2021-07-11 12:16:07 +0200
commitf4dd2d88c721c085376f59908097500bc5f0c143 (patch)
treee7beb5f5a113006d64832deeae00b156c1fb16dd
parent6f0c6fb2aee54ac1b05cecd3f2e205b77ee4d0fc (diff)
downloadopenttd-f4dd2d88c721c085376f59908097500bc5f0c143.tar.xz
Feature: raise the maximum NewGRF limit to 255
-rw-r--r--src/network/core/config.h15
-rw-r--r--src/network/network_coordinator.cpp2
-rw-r--r--src/network/network_server.cpp4
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;