summaryrefslogtreecommitdiff
path: root/src/network/core/udp.cpp
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-04-26 15:18:10 +0200
committerPatric Stout <github@truebrain.nl>2021-04-27 20:18:53 +0200
commitcb2ef1ea4b74c3d73ba86d978c001784d398bf27 (patch)
tree347ae80dcbb00bda1fe7cf3d12643ea46236db70 /src/network/core/udp.cpp
parent8fa53f543a5929bdbb12c8776ae9577594f9eba7 (diff)
downloadopenttd-cb2ef1ea4b74c3d73ba86d978c001784d398bf27.tar.xz
Codechange: move all NetworkGameInfo related functions to a single file
It currently was a bit scattered over the place. Part of NetworkGameInfo is also the GRF Identifiers that goes with it.
Diffstat (limited to 'src/network/core/udp.cpp')
-rw-r--r--src/network/core/udp.cpp137
1 files changed, 1 insertions, 136 deletions
diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp
index df5140e2b..ffc86d825 100644
--- a/src/network/core/udp.cpp
+++ b/src/network/core/udp.cpp
@@ -12,6 +12,7 @@
#include "../../stdafx.h"
#include "../../date_func.h"
#include "../../debug.h"
+#include "game_info.h"
#include "udp.h"
#include "../../safeguards.h"
@@ -150,142 +151,6 @@ void NetworkUDPSocketHandler::ReceivePackets()
}
}
-
-/**
- * Serializes the NetworkGameInfo struct to the packet
- * @param p the packet to write the data to
- * @param info the NetworkGameInfo struct to serialize
- */
-void NetworkUDPSocketHandler::SendNetworkGameInfo(Packet *p, const NetworkGameInfo *info)
-{
- p->Send_uint8 (NETWORK_GAME_INFO_VERSION);
-
- /*
- * Please observe the order.
- * The parts must be read in the same order as they are sent!
- */
-
- /* Update the documentation in udp.h on changes
- * to the NetworkGameInfo wire-protocol! */
-
- /* NETWORK_GAME_INFO_VERSION = 4 */
- {
- /* Only send the GRF Identification (GRF_ID and MD5 checksum) of
- * the GRFs that are needed, i.e. the ones that the server has
- * selected in the NewGRF GUI and not the ones that are used due
- * to the fact that they are in [newgrf-static] in openttd.cfg */
- const GRFConfig *c;
- uint count = 0;
-
- /* Count number of GRFs to send information about */
- for (c = info->grfconfig; c != nullptr; c = c->next) {
- if (!HasBit(c->flags, GCF_STATIC)) count++;
- }
- p->Send_uint8 (count); // Send number of GRFs
-
- /* Send actual GRF Identifications */
- for (c = info->grfconfig; c != nullptr; c = c->next) {
- if (!HasBit(c->flags, GCF_STATIC)) this->SendGRFIdentifier(p, &c->ident);
- }
- }
-
- /* NETWORK_GAME_INFO_VERSION = 3 */
- p->Send_uint32(info->game_date);
- p->Send_uint32(info->start_date);
-
- /* NETWORK_GAME_INFO_VERSION = 2 */
- p->Send_uint8 (info->companies_max);
- p->Send_uint8 (info->companies_on);
- p->Send_uint8 (info->spectators_max);
-
- /* NETWORK_GAME_INFO_VERSION = 1 */
- p->Send_string(info->server_name);
- p->Send_string(info->server_revision);
- p->Send_uint8 (0); // Used to be server-lang.
- p->Send_bool (info->use_password);
- p->Send_uint8 (info->clients_max);
- p->Send_uint8 (info->clients_on);
- p->Send_uint8 (info->spectators_on);
- p->Send_string(""); // Used to be map-name.
- p->Send_uint16(info->map_width);
- p->Send_uint16(info->map_height);
- p->Send_uint8 (info->map_set);
- p->Send_bool (info->dedicated);
-}
-
-/**
- * Deserializes the NetworkGameInfo struct from the packet
- * @param p the packet to read the data from
- * @param info the NetworkGameInfo to deserialize into
- */
-void NetworkUDPSocketHandler::ReceiveNetworkGameInfo(Packet *p, NetworkGameInfo *info)
-{
- static const Date MAX_DATE = ConvertYMDToDate(MAX_YEAR, 11, 31); // December is month 11
-
- info->game_info_version = p->Recv_uint8();
-
- /*
- * Please observe the order.
- * The parts must be read in the same order as they are sent!
- */
-
- /* Update the documentation in udp.h on changes
- * to the NetworkGameInfo wire-protocol! */
-
- switch (info->game_info_version) {
- case 4: {
- GRFConfig **dst = &info->grfconfig;
- uint i;
- uint num_grfs = p->Recv_uint8();
-
- /* Broken/bad data. It cannot have that many NewGRFs. */
- if (num_grfs > NETWORK_MAX_GRF_COUNT) return;
-
- for (i = 0; i < num_grfs; i++) {
- GRFConfig *c = new GRFConfig();
- this->ReceiveGRFIdentifier(p, &c->ident);
- this->HandleIncomingNetworkGameInfoGRFConfig(c);
-
- /* Append GRFConfig to the list */
- *dst = c;
- dst = &c->next;
- }
- FALLTHROUGH;
- }
-
- case 3:
- info->game_date = Clamp(p->Recv_uint32(), 0, MAX_DATE);
- info->start_date = Clamp(p->Recv_uint32(), 0, MAX_DATE);
- FALLTHROUGH;
-
- case 2:
- info->companies_max = p->Recv_uint8 ();
- info->companies_on = p->Recv_uint8 ();
- info->spectators_max = p->Recv_uint8 ();
- FALLTHROUGH;
-
- case 1:
- p->Recv_string(info->server_name, sizeof(info->server_name));
- p->Recv_string(info->server_revision, sizeof(info->server_revision));
- p->Recv_uint8 (); // Used to contain server-lang.
- info->use_password = p->Recv_bool ();
- info->clients_max = p->Recv_uint8 ();
- info->clients_on = p->Recv_uint8 ();
- info->spectators_on = p->Recv_uint8 ();
- if (info->game_info_version < 3) { // 16 bits dates got scrapped and are read earlier
- info->game_date = p->Recv_uint16() + DAYS_TILL_ORIGINAL_BASE_YEAR;
- info->start_date = p->Recv_uint16() + DAYS_TILL_ORIGINAL_BASE_YEAR;
- }
- while (p->Recv_uint8() != 0) {} // Used to contain the map-name.
- info->map_width = p->Recv_uint16();
- info->map_height = p->Recv_uint16();
- info->map_set = p->Recv_uint8 ();
- info->dedicated = p->Recv_bool ();
-
- if (info->map_set >= NETWORK_NUM_LANDSCAPES) info->map_set = 0;
- }
-}
-
/**
* Handle an incoming packets by sending it to the correct function.
* @param p the received packet