OpenTTD Source: src/network/core/tcp_game.cpp Source File

OpenTTD Source 15.3

tcp_game.cpp
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
12#include "../../stdafx.h"
13
14#include "../network.h"
15#include "../network_internal.h"
16#include "../../debug.h"
17#include "../../error.h"
18#include "../../strings_func.h"
19
20#include "table/strings.h"
21
22#include "../../safeguards.h"
23
24static std::vector<std::unique_ptr<NetworkGameSocketHandler>> _deferred_deletions;
25
30NetworkGameSocketHandler::NetworkGameSocketHandler(SOCKET s) : NetworkTCPSocketHandler(s),
31 last_frame(_frame_counter), last_frame_server(_frame_counter), last_packet(std::chrono::steady_clock::now()) {}
32
40 NetworkRecvStatus NetworkGameSocketHandler::CloseConnection(bool)
41{
42 /* Clients drop back to the main menu */
43 if (!_network_server && _networking) {
44 ClientNetworkEmergencySave();
45 _switch_mode = SM_MENU;
46 _networking = false;
47 ShowErrorMessage(GetEncodedString(STR_NETWORK_ERROR_LOSTCONNECTION), {}, WL_CRITICAL);
48
49 return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
50 }
51
52 return this->CloseConnection(NETWORK_RECV_STATUS_CONNECTION_LOST);
53}
54
55
61 NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet &p)
62{
63 PacketGameType type = (PacketGameType)p.Recv_uint8();
64
65 if (this->HasClientQuit()) {
66 Debug(net, 0, "[tcp/game] Received invalid packet from client {}", this->client_id);
67 this->CloseConnection();
68 return NETWORK_RECV_STATUS_MALFORMED_PACKET;
69 }
70
71 this->last_packet = std::chrono::steady_clock::now();
72
73 switch (type) {
74 case PACKET_SERVER_FULL: return this->Receive_SERVER_FULL(p);
75 case PACKET_SERVER_BANNED: return this->Receive_SERVER_BANNED(p);
76 case PACKET_CLIENT_JOIN: return this->Receive_CLIENT_JOIN(p);
77 case PACKET_SERVER_ERROR: return this->Receive_SERVER_ERROR(p);
78 case PACKET_CLIENT_GAME_INFO: return this->Receive_CLIENT_GAME_INFO(p);
79 case PACKET_SERVER_GAME_INFO: return this->Receive_SERVER_GAME_INFO(p);
80 case PACKET_SERVER_CLIENT_INFO: return this->Receive_SERVER_CLIENT_INFO(p);
81 case PACKET_CLIENT_IDENTIFY: return this->Receive_CLIENT_IDENTIFY(p);
82 case PACKET_SERVER_AUTH_REQUEST: return this->Receive_SERVER_AUTH_REQUEST(p);
83 case PACKET_CLIENT_AUTH_RESPONSE: return this->Receive_CLIENT_AUTH_RESPONSE(p);
84 case PACKET_SERVER_ENABLE_ENCRYPTION: return this->Receive_SERVER_ENABLE_ENCRYPTION(p);
85 case PACKET_SERVER_WELCOME: return this->Receive_SERVER_WELCOME(p);
86 case PACKET_CLIENT_GETMAP: return this->Receive_CLIENT_GETMAP(p);
87 case PACKET_SERVER_WAIT: return this->Receive_SERVER_WAIT(p);
88 case PACKET_SERVER_MAP_BEGIN: return this->Receive_SERVER_MAP_BEGIN(p);
89 case PACKET_SERVER_MAP_SIZE: return this->Receive_SERVER_MAP_SIZE(p);
90 case PACKET_SERVER_MAP_DATA: return this->Receive_SERVER_MAP_DATA(p);
91 case PACKET_SERVER_MAP_DONE: return this->Receive_SERVER_MAP_DONE(p);
92 case PACKET_CLIENT_MAP_OK: return this->Receive_CLIENT_MAP_OK(p);
93 case PACKET_SERVER_JOIN: return this->Receive_SERVER_JOIN(p);
94 case PACKET_SERVER_FRAME: return this->Receive_SERVER_FRAME(p);
95 case PACKET_SERVER_SYNC: return this->Receive_SERVER_SYNC(p);
96 case PACKET_CLIENT_ACK: return this->Receive_CLIENT_ACK(p);
97 case PACKET_CLIENT_COMMAND: return this->Receive_CLIENT_COMMAND(p);
98 case PACKET_SERVER_COMMAND: return this->Receive_SERVER_COMMAND(p);
99 case PACKET_CLIENT_CHAT: return this->Receive_CLIENT_CHAT(p);
100 case PACKET_SERVER_CHAT: return this->Receive_SERVER_CHAT(p);
101 case PACKET_SERVER_EXTERNAL_CHAT: return this->Receive_SERVER_EXTERNAL_CHAT(p);
102 case PACKET_CLIENT_SET_NAME: return this->Receive_CLIENT_SET_NAME(p);
103 case PACKET_CLIENT_QUIT: return this->Receive_CLIENT_QUIT(p);
104 case PACKET_CLIENT_ERROR: return this->Receive_CLIENT_ERROR(p);
105 case PACKET_SERVER_QUIT: return this->Receive_SERVER_QUIT(p);
106 case PACKET_SERVER_ERROR_QUIT: return this->Receive_SERVER_ERROR_QUIT(p);
107 case PACKET_SERVER_SHUTDOWN: return this->Receive_SERVER_SHUTDOWN(p);
108 case PACKET_SERVER_NEWGAME: return this->Receive_SERVER_NEWGAME(p);
109 case PACKET_SERVER_RCON: return this->Receive_SERVER_RCON(p);
110 case PACKET_CLIENT_RCON: return this->Receive_CLIENT_RCON(p);
111 case PACKET_SERVER_CHECK_NEWGRFS: return this->Receive_SERVER_CHECK_NEWGRFS(p);
112 case PACKET_CLIENT_NEWGRFS_CHECKED: return this->Receive_CLIENT_NEWGRFS_CHECKED(p);
113 case PACKET_SERVER_MOVE: return this->Receive_SERVER_MOVE(p);
114 case PACKET_CLIENT_MOVE: return this->Receive_CLIENT_MOVE(p);
115 case PACKET_SERVER_CONFIG_UPDATE: return this->Receive_SERVER_CONFIG_UPDATE(p);
116
117 default:
118 Debug(net, 0, "[tcp/game] Received invalid packet type {} from client {}", type, this->client_id);
119 this->CloseConnection();
120 return NETWORK_RECV_STATUS_MALFORMED_PACKET;
121 }
122}
123
131 NetworkRecvStatus NetworkGameSocketHandler::ReceivePackets()
132{
133 std::unique_ptr<Packet> p;
134 while ((p = this->ReceivePacket()) != nullptr) {
135 NetworkRecvStatus res = HandlePacket(*p);
136 if (res != NETWORK_RECV_STATUS_OKAY) return res;
137 }
138
139 return NETWORK_RECV_STATUS_OKAY;
140}
141
147 NetworkRecvStatus NetworkGameSocketHandler::ReceiveInvalidPacket(PacketGameType type)
148{
149 Debug(net, 0, "[tcp/game] Received illegal packet type {} from client {}", type, this->client_id);
150 return NETWORK_RECV_STATUS_MALFORMED_PACKET;
151}
152
153 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_FULL(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_FULL); }
154 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_BANNED(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_BANNED); }
155 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_JOIN); }
156 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ERROR(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_ERROR); }
157 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GAME_INFO); }
158 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_GAME_INFO); }
159 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CLIENT_INFO); }
160 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_IDENTIFY); }
161 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_AUTH_REQUEST); }
162 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_AUTH_RESPONSE); }
163 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_ENABLE_ENCRYPTION); }
164 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_WELCOME); }
165 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GETMAP); }
166 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_WAIT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_WAIT); }
167 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_MAP_BEGIN); }
168 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MAP_SIZE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_MAP_SIZE); }
169 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MAP_DATA(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_MAP_DATA); }
170 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_MAP_DONE); }
171 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_MAP_OK); }
172 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_JOIN(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_JOIN); }
173 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_FRAME(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_FRAME); }
174 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_SYNC(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_SYNC); }
175 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_ACK(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_ACK); }
176 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_COMMAND(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_COMMAND); }
177 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMMAND(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_COMMAND); }
178 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_CHAT); }
179 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CHAT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CHAT); }
180 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_EXTERNAL_CHAT); }
181 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_NAME); }
182 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_QUIT); }
183 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_ERROR); }
184 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_QUIT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_QUIT); }
185 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_ERROR_QUIT); }
186 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_SHUTDOWN(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_SHUTDOWN); }
187 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEWGAME(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEWGAME); }
188 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_RCON(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_RCON); }
189 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_RCON(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_RCON); }
190 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CHECK_NEWGRFS); }
191 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_NEWGRFS_CHECKED); }
192 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MOVE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_MOVE); }
193 NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet &) { return this->ReceiveInvalidPacket(PACKET_CLIENT_MOVE); }
194 NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(Packet &) { return this->ReceiveInvalidPacket(PACKET_SERVER_CONFIG_UPDATE); }
195
196void NetworkGameSocketHandler::DeferDeletion()
197{
198 _deferred_deletions.emplace_back(this);
199 this->is_pending_deletion = true;
200}
201
202/* static */ void NetworkGameSocketHandler::ProcessDeferredDeletions()
203{
204 /* Calls deleter on all items */
205 _deferred_deletions.clear();
206}
NetworkGameSocketHandler::Receive_CLIENT_MOVE
virtual NetworkRecvStatus Receive_CLIENT_MOVE(Packet &p)
Request the server to move this client into another company: uint8_t ID of the company the client wan...
Definition tcp_game.cpp:193
NetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN
virtual NetworkRecvStatus Receive_SERVER_MAP_BEGIN(Packet &p)
Sends that the server will begin with sending the map to the client: uint32_t Current frame.
Definition tcp_game.cpp:167
NetworkGameSocketHandler::Receive_SERVER_MAP_SIZE
virtual NetworkRecvStatus Receive_SERVER_MAP_SIZE(Packet &p)
Sends the size of the map to the client.
Definition tcp_game.cpp:168
NetworkGameSocketHandler::ReceivePackets
NetworkRecvStatus ReceivePackets()
Do the actual receiving of packets.
Definition tcp_game.cpp:131
NetworkGameSocketHandler::is_pending_deletion
bool is_pending_deletion
Whether this socket is pending deletion.
Definition tcp_game.h:144
NetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE
virtual NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE(Packet &p)
Update the clients knowledge of the max settings: uint8_t Maximum number of companies allowed.
Definition tcp_game.cpp:194
NetworkGameSocketHandler::Receive_SERVER_BANNED
virtual NetworkRecvStatus Receive_SERVER_BANNED(Packet &p)
Notification that the client trying to join is banned.
Definition tcp_game.cpp:154
NetworkGameSocketHandler::Receive_SERVER_SYNC
virtual NetworkRecvStatus Receive_SERVER_SYNC(Packet &p)
Sends a sync-check to the client: uint32_t Frame counter.
Definition tcp_game.cpp:174
NetworkGameSocketHandler::Receive_SERVER_COMMAND
virtual NetworkRecvStatus Receive_SERVER_COMMAND(Packet &p)
Sends a DoCommand to the client: uint8_t ID of the company (0..MAX_COMPANIES-1).
Definition tcp_game.cpp:177
NetworkGameSocketHandler::Receive_SERVER_MAP_DONE
virtual NetworkRecvStatus Receive_SERVER_MAP_DONE(Packet &p)
Sends that all data of the map are sent to the client:
Definition tcp_game.cpp:170
NetworkGameSocketHandler::NetworkGameSocketHandler
NetworkGameSocketHandler(SOCKET s)
Create a new socket for the game connection.
Definition tcp_game.cpp:30
NetworkGameSocketHandler::Receive_CLIENT_ACK
virtual NetworkRecvStatus Receive_CLIENT_ACK(Packet &p)
Tell the server we are done with this frame: uint32_t Current frame counter of the client.
Definition tcp_game.cpp:175
NetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION
virtual NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p)
Indication to the client that authentication is complete and encryption has to be used from here on f...
Definition tcp_game.cpp:163
NetworkGameSocketHandler::Receive_SERVER_GAME_INFO
virtual NetworkRecvStatus Receive_SERVER_GAME_INFO(Packet &p)
Sends information about the game.
Definition tcp_game.cpp:158
NetworkGameSocketHandler::Receive_SERVER_WELCOME
virtual NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p)
The client is joined and ready to receive their map: uint32_t Own client ID.
Definition tcp_game.cpp:164
NetworkGameSocketHandler::Receive_CLIENT_QUIT
virtual NetworkRecvStatus Receive_CLIENT_QUIT(Packet &p)
The client is quitting the game.
Definition tcp_game.cpp:182
NetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED
virtual NetworkRecvStatus Receive_CLIENT_NEWGRFS_CHECKED(Packet &p)
Tell the server that we have the required GRFs.
Definition tcp_game.cpp:191
NetworkGameSocketHandler::Receive_SERVER_SHUTDOWN
virtual NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet &p)
Let the clients know that the server is closing.
Definition tcp_game.cpp:186
NetworkGameSocketHandler::Receive_SERVER_FRAME
virtual NetworkRecvStatus Receive_SERVER_FRAME(Packet &p)
Sends the current frame counter to the client: uint32_t Frame counter uint32_t Frame counter max (how...
Definition tcp_game.cpp:173
NetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE
virtual NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE(Packet &p)
Send the response to the authentication request: 32 * uint8_t Public key of the client.
Definition tcp_game.cpp:162
NetworkGameSocketHandler::Receive_SERVER_MOVE
virtual NetworkRecvStatus Receive_SERVER_MOVE(Packet &p)
Move a client from one company into another: uint32_t ID of the client.
Definition tcp_game.cpp:192
NetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST
virtual NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p)
Indication to the client that it needs to authenticate: uint8_t The NetworkAuthenticationMethod to us...
Definition tcp_game.cpp:161
NetworkGameSocketHandler::Receive_SERVER_QUIT
virtual NetworkRecvStatus Receive_SERVER_QUIT(Packet &p)
Notification that a client left the game: uint32_t ID of the client.
Definition tcp_game.cpp:184
NetworkGameSocketHandler::ReceiveInvalidPacket
NetworkRecvStatus ReceiveInvalidPacket(PacketGameType type)
Helper for logging receiving invalid packets.
Definition tcp_game.cpp:147
NetworkGameSocketHandler::Receive_CLIENT_GETMAP
virtual NetworkRecvStatus Receive_CLIENT_GETMAP(Packet &p)
Request the map from the server.
Definition tcp_game.cpp:165
NetworkGameSocketHandler::client_id
ClientID client_id
Client identifier.
Definition tcp_game.h:485
NetworkGameSocketHandler::last_packet
std::chrono::steady_clock::time_point last_packet
Time we received the last frame.
Definition tcp_game.h:489
NetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS
virtual NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS(Packet &p)
Sends information about all used GRFs to the client: uint8_t Amount of GRFs (the following data is re...
Definition tcp_game.cpp:190
NetworkGameSocketHandler::Receive_CLIENT_JOIN
virtual NetworkRecvStatus Receive_CLIENT_JOIN(Packet &p)
Try to join the server: string OpenTTD revision (norev0000 if no revision).
Definition tcp_game.cpp:155
NetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT
virtual NetworkRecvStatus Receive_SERVER_ERROR_QUIT(Packet &p)
Inform all clients that one client made an error and thus has quit/been disconnected: uint32_t ID of ...
Definition tcp_game.cpp:185
NetworkGameSocketHandler::Receive_CLIENT_RCON
virtual NetworkRecvStatus Receive_CLIENT_RCON(Packet &p)
Send an RCon command to the server: string RCon password.
Definition tcp_game.cpp:189
NetworkGameSocketHandler::Receive_SERVER_ERROR
virtual NetworkRecvStatus Receive_SERVER_ERROR(Packet &p)
The client made an error: uint8_t Error code caused (see NetworkErrorCode).
Definition tcp_game.cpp:156
NetworkGameSocketHandler::Receive_CLIENT_CHAT
virtual NetworkRecvStatus Receive_CLIENT_CHAT(Packet &p)
Sends a chat-packet to the server: uint8_t ID of the action (see NetworkAction).
Definition tcp_game.cpp:178
NetworkGameSocketHandler::HandlePacket
NetworkRecvStatus HandlePacket(Packet &p)
Handle the given packet, i.e.
Definition tcp_game.cpp:61
NetworkGameSocketHandler::Receive_CLIENT_GAME_INFO
virtual NetworkRecvStatus Receive_CLIENT_GAME_INFO(Packet &p)
Request game information.
Definition tcp_game.cpp:157
NetworkGameSocketHandler::Receive_CLIENT_MAP_OK
virtual NetworkRecvStatus Receive_CLIENT_MAP_OK(Packet &p)
Tell the server that we are done receiving/loading the map.
Definition tcp_game.cpp:171
NetworkGameSocketHandler::Receive_SERVER_CHAT
virtual NetworkRecvStatus Receive_SERVER_CHAT(Packet &p)
Sends a chat-packet to the client: uint8_t ID of the action (see NetworkAction).
Definition tcp_game.cpp:179
NetworkGameSocketHandler::Receive_SERVER_RCON
virtual NetworkRecvStatus Receive_SERVER_RCON(Packet &p)
Send the result of an issues RCon command back to the client: uint16_t Colour code.
Definition tcp_game.cpp:188
NetworkGameSocketHandler::Receive_CLIENT_COMMAND
virtual NetworkRecvStatus Receive_CLIENT_COMMAND(Packet &p)
Send a DoCommand to the Server: uint8_t ID of the company (0..MAX_COMPANIES-1).
Definition tcp_game.cpp:176
NetworkGameSocketHandler::Receive_SERVER_JOIN
virtual NetworkRecvStatus Receive_SERVER_JOIN(Packet &p)
A client joined (PACKET_CLIENT_MAP_OK), what usually directly follows is a PACKET_SERVER_CLIENT_INFO:...
Definition tcp_game.cpp:172
NetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO
virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p)
Send information about a client: uint32_t ID of the client (always unique on a server.
Definition tcp_game.cpp:159
NetworkGameSocketHandler::Receive_SERVER_WAIT
virtual NetworkRecvStatus Receive_SERVER_WAIT(Packet &p)
Notification that another client is currently receiving the map: uint8_t Number of clients waiting in...
Definition tcp_game.cpp:166
NetworkGameSocketHandler::Receive_CLIENT_IDENTIFY
virtual NetworkRecvStatus Receive_CLIENT_IDENTIFY(Packet &p)
The client tells the server about the identity of the client: string Name of the client (max NETWORK_...
Definition tcp_game.cpp:160
NetworkGameSocketHandler::Receive_SERVER_FULL
virtual NetworkRecvStatus Receive_SERVER_FULL(Packet &p)
Notification that the server is full.
Definition tcp_game.cpp:153
NetworkGameSocketHandler::CloseConnection
NetworkRecvStatus CloseConnection(bool error=true) override
Functions to help ReceivePacket/SendPacket a bit A socket can make errors.
Definition tcp_game.cpp:40
NetworkGameSocketHandler::Receive_SERVER_MAP_DATA
virtual NetworkRecvStatus Receive_SERVER_MAP_DATA(Packet &p)
Sends the data of the map to the client: Contains a part of the map (until max size of packet).
Definition tcp_game.cpp:169
NetworkGameSocketHandler::Receive_CLIENT_ERROR
virtual NetworkRecvStatus Receive_CLIENT_ERROR(Packet &p)
The client made an error and is quitting the game.
Definition tcp_game.cpp:183
NetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT
virtual NetworkRecvStatus Receive_SERVER_EXTERNAL_CHAT(Packet &p)
Sends a chat-packet for external source to the client: string Name of the source this message came fr...
Definition tcp_game.cpp:180
NetworkGameSocketHandler::Receive_SERVER_NEWGAME
virtual NetworkRecvStatus Receive_SERVER_NEWGAME(Packet &p)
Let the clients know that the server is loading a new map.
Definition tcp_game.cpp:187
NetworkGameSocketHandler::Receive_CLIENT_SET_NAME
virtual NetworkRecvStatus Receive_CLIENT_SET_NAME(Packet &p)
Gives the client a new name: string New name of the client.
Definition tcp_game.cpp:181
NetworkSocketHandler::HasClientQuit
bool HasClientQuit() const
Whether the current client connected to the socket has quit.
Definition core.h:74
NetworkTCPSocketHandler
Base socket handler for all TCP sockets.
Definition tcp.h:31
NetworkTCPSocketHandler::ReceivePacket
virtual std::unique_ptr< Packet > ReceivePacket()
Receives a packet for the given client.
Definition tcp.cpp:119
NetworkRecvStatus
NetworkRecvStatus
Status of a network client; reasons why a client has quit.
Definition core.h:23
NETWORK_RECV_STATUS_CLIENT_QUIT
@ NETWORK_RECV_STATUS_CLIENT_QUIT
The connection is lost gracefully. Other clients are already informed of this leaving client.
Definition core.h:28
NETWORK_RECV_STATUS_OKAY
@ NETWORK_RECV_STATUS_OKAY
Everything is okay.
Definition core.h:24
NETWORK_RECV_STATUS_CONNECTION_LOST
@ NETWORK_RECV_STATUS_CONNECTION_LOST
The connection is lost unexpectedly.
Definition core.h:34
NETWORK_RECV_STATUS_MALFORMED_PACKET
@ NETWORK_RECV_STATUS_MALFORMED_PACKET
We apparently send a malformed packet.
Definition core.h:29
Debug
#define Debug(category, level, format_string,...)
Output a line of debugging information.
Definition debug.h:37
WL_CRITICAL
@ WL_CRITICAL
Critical errors, the MessageBox is shown in all cases.
Definition error.h:27
ShowErrorMessage
void ShowErrorMessage(EncodedString &&summary_msg, int x, int y, CommandCost &cc)
Display an error message in a window.
Definition error_gui.cpp:296
_switch_mode
SwitchMode _switch_mode
The next mainloop command.
Definition gfx.cpp:49
_frame_counter
uint32_t _frame_counter
The current frame.
Definition network.cpp:80
_networking
bool _networking
are we in networking mode?
Definition network.cpp:67
_network_server
bool _network_server
network-server is active
Definition network.cpp:68
ClientNetworkEmergencySave
void ClientNetworkEmergencySave()
Create an emergency savegame when the network connection is lost.
Definition network_client.cpp:91
SM_MENU
@ SM_MENU
Switch to game intro menu.
Definition openttd.h:33
GetEncodedString
EncodedString GetEncodedString(StringID str)
Encode a string with no parameters into an encoded string.
Definition strings.cpp:90
Packet
Internal entity of a packet.
Definition packet.h:43
Packet::Recv_uint8
uint8_t Recv_uint8()
Read a 8 bits integer from the packet.
Definition packet.cpp:318
PacketGameType
PacketGameType
Enum with all types of TCP packets.
Definition tcp_game.h:24
PACKET_CLIENT_IDENTIFY
@ PACKET_CLIENT_IDENTIFY
Client telling the server the client's name and requested company.
Definition tcp_game.h:67
PACKET_SERVER_JOIN
@ PACKET_SERVER_JOIN
Tells clients that a new client has joined.
Definition tcp_game.h:86
PACKET_SERVER_MAP_SIZE
@ PACKET_SERVER_MAP_SIZE
Server tells the client what the (compressed) size of the map is.
Definition tcp_game.h:81
PACKET_SERVER_RCON
@ PACKET_SERVER_RCON
Response of the executed command on the server.
Definition tcp_game.h:110
PACKET_SERVER_MAP_BEGIN
@ PACKET_SERVER_MAP_BEGIN
Server tells the client that it is beginning to send the map.
Definition tcp_game.h:80
PACKET_SERVER_SYNC
@ PACKET_SERVER_SYNC
Server tells the client what the random state should be.
Definition tcp_game.h:97
PACKET_CLIENT_GETMAP
@ PACKET_CLIENT_GETMAP
Client requests the actual map.
Definition tcp_game.h:78
PACKET_CLIENT_ERROR
@ PACKET_CLIENT_ERROR
A client reports an error to the server.
Definition tcp_game.h:123
PACKET_SERVER_WAIT
@ PACKET_SERVER_WAIT
Server tells the client there are some people waiting for the map as well.
Definition tcp_game.h:79
PACKET_SERVER_CONFIG_UPDATE
@ PACKET_SERVER_CONFIG_UPDATE
Some network configuration important to the client changed.
Definition tcp_game.h:118
PACKET_CLIENT_JOIN
@ PACKET_CLIENT_JOIN
The client telling the server it wants to join.
Definition tcp_game.h:36
PACKET_CLIENT_AUTH_RESPONSE
@ PACKET_CLIENT_AUTH_RESPONSE
The client responds to the authentication request.
Definition tcp_game.h:63
PACKET_CLIENT_NEWGRFS_CHECKED
@ PACKET_CLIENT_NEWGRFS_CHECKED
Client acknowledges that it has all required NewGRFs.
Definition tcp_game.h:71
PACKET_SERVER_ENABLE_ENCRYPTION
@ PACKET_SERVER_ENABLE_ENCRYPTION
The server tells that authentication has completed and requests to enable encryption with the keys of...
Definition tcp_game.h:64
PACKET_SERVER_GAME_INFO
@ PACKET_SERVER_GAME_INFO
Information about the server.
Definition tcp_game.h:44
PACKET_CLIENT_COMMAND
@ PACKET_CLIENT_COMMAND
Client executed a command and sends it to the server.
Definition tcp_game.h:100
PACKET_SERVER_ERROR_QUIT
@ PACKET_SERVER_ERROR_QUIT
A server tells that a client has hit an error and did quit.
Definition tcp_game.h:124
PACKET_SERVER_CLIENT_INFO
@ PACKET_SERVER_CLIENT_INFO
Server sends you information about a client.
Definition tcp_game.h:75
PACKET_CLIENT_SET_NAME
@ PACKET_CLIENT_SET_NAME
A client changes its name.
Definition tcp_game.h:117
PACKET_SERVER_WELCOME
@ PACKET_SERVER_WELCOME
Server welcomes you and gives you your ClientID.
Definition tcp_game.h:74
PACKET_CLIENT_ACK
@ PACKET_CLIENT_ACK
The client tells the server which frame it has executed.
Definition tcp_game.h:96
PACKET_SERVER_BANNED
@ PACKET_SERVER_BANNED
The server has banned you.
Definition tcp_game.h:33
PACKET_SERVER_FRAME
@ PACKET_SERVER_FRAME
Server tells the client what frame it is in, and thus to where the client may progress.
Definition tcp_game.h:95
PACKET_SERVER_EXTERNAL_CHAT
@ PACKET_SERVER_EXTERNAL_CHAT
Server distributing the message from external source.
Definition tcp_game.h:106
PACKET_SERVER_CHAT
@ PACKET_SERVER_CHAT
Server distributing the message of a client (or itself).
Definition tcp_game.h:105
PACKET_SERVER_COMMAND
@ PACKET_SERVER_COMMAND
Server distributes a command to (all) the clients.
Definition tcp_game.h:101
PACKET_SERVER_SHUTDOWN
@ PACKET_SERVER_SHUTDOWN
The server is shutting down.
Definition tcp_game.h:49
PACKET_SERVER_AUTH_REQUEST
@ PACKET_SERVER_AUTH_REQUEST
The server requests the client to authenticate using a number of methods.
Definition tcp_game.h:62
PACKET_CLIENT_RCON
@ PACKET_CLIENT_RCON
Client asks the server to execute some command.
Definition tcp_game.h:109
PACKET_SERVER_NEWGAME
@ PACKET_SERVER_NEWGAME
The server is preparing to start a new game.
Definition tcp_game.h:48
PACKET_SERVER_MOVE
@ PACKET_SERVER_MOVE
Server tells everyone that someone is moved to another company.
Definition tcp_game.h:114
PACKET_SERVER_MAP_DATA
@ PACKET_SERVER_MAP_DATA
Server sends bits of the map to the client.
Definition tcp_game.h:82
PACKET_CLIENT_MAP_OK
@ PACKET_CLIENT_MAP_OK
Client tells the server that it received the whole map.
Definition tcp_game.h:84
PACKET_CLIENT_QUIT
@ PACKET_CLIENT_QUIT
A client tells the server it is going to quit.
Definition tcp_game.h:121
PACKET_CLIENT_MOVE
@ PACKET_CLIENT_MOVE
A client would like to be moved to another company.
Definition tcp_game.h:113
PACKET_SERVER_FULL
@ PACKET_SERVER_FULL
The server is full and has no place for you.
Definition tcp_game.h:32
PACKET_SERVER_QUIT
@ PACKET_SERVER_QUIT
A server tells that a client has quit.
Definition tcp_game.h:122
PACKET_SERVER_ERROR
@ PACKET_SERVER_ERROR
Server sending an error message to the client.
Definition tcp_game.h:37
PACKET_SERVER_CHECK_NEWGRFS
@ PACKET_SERVER_CHECK_NEWGRFS
Server sends NewGRF IDs and MD5 checksums for the client to check.
Definition tcp_game.h:70
PACKET_SERVER_MAP_DONE
@ PACKET_SERVER_MAP_DONE
Server tells it has just sent the last bits of the map to the client.
Definition tcp_game.h:83
PACKET_CLIENT_CHAT
@ PACKET_CLIENT_CHAT
Client said something that should be distributed.
Definition tcp_game.h:104
PACKET_CLIENT_GAME_INFO
@ PACKET_CLIENT_GAME_INFO
Request information about the server.
Definition tcp_game.h:45