OpenTTD Source: src/network/core/tcp_coordinator.h Source File

OpenTTD Source 15.0-beta1

tcp_coordinator.h
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 <http://www.gnu.org/licenses/>.
6 */
7
12#ifndef NETWORK_CORE_TCP_COORDINATOR_H
13#define NETWORK_CORE_TCP_COORDINATOR_H
14
15#include "os_abstraction.h"
16#include "tcp.h"
17#include "packet.h"
18#include "network_game_info.h"
19
28 enum PacketCoordinatorType : uint8_t {
29 PACKET_COORDINATOR_GC_ERROR,
30 PACKET_COORDINATOR_SERVER_REGISTER,
31 PACKET_COORDINATOR_GC_REGISTER_ACK,
32 PACKET_COORDINATOR_SERVER_UPDATE,
33 PACKET_COORDINATOR_CLIENT_LISTING,
34 PACKET_COORDINATOR_GC_LISTING,
35 PACKET_COORDINATOR_CLIENT_CONNECT,
36 PACKET_COORDINATOR_GC_CONNECTING,
37 PACKET_COORDINATOR_SERCLI_CONNECT_FAILED,
38 PACKET_COORDINATOR_GC_CONNECT_FAILED,
39 PACKET_COORDINATOR_CLIENT_CONNECTED,
40 PACKET_COORDINATOR_GC_DIRECT_CONNECT,
41 PACKET_COORDINATOR_GC_STUN_REQUEST,
42 PACKET_COORDINATOR_SERCLI_STUN_RESULT,
43 PACKET_COORDINATOR_GC_STUN_CONNECT,
44 PACKET_COORDINATOR_GC_NEWGRF_LOOKUP,
45 PACKET_COORDINATOR_GC_TURN_CONNECT,
46 PACKET_COORDINATOR_END,
47};
48
52 enum ConnectionType {
53 CONNECTION_TYPE_UNKNOWN,
54 CONNECTION_TYPE_ISOLATED,
55 CONNECTION_TYPE_DIRECT,
56 CONNECTION_TYPE_STUN,
57 CONNECTION_TYPE_TURN,
58};
59
63 enum NetworkCoordinatorErrorType {
64 NETWORK_COORDINATOR_ERROR_UNKNOWN,
65 NETWORK_COORDINATOR_ERROR_REGISTRATION_FAILED,
66 NETWORK_COORDINATOR_ERROR_INVALID_INVITE_CODE,
67 NETWORK_COORDINATOR_ERROR_REUSE_OF_INVITE_CODE,
68};
69
71 class NetworkCoordinatorSocketHandler : public NetworkTCPSocketHandler {
72protected:
73 bool ReceiveInvalidPacket(PacketCoordinatorType type);
74
86 virtual bool Receive_GC_ERROR(Packet &p);
87
101 virtual bool Receive_SERVER_REGISTER(Packet &p);
102
113 virtual bool Receive_GC_REGISTER_ACK(Packet &p);
114
124 virtual bool Receive_SERVER_UPDATE(Packet &p);
125
137 virtual bool Receive_CLIENT_LISTING(Packet &p);
138
152 virtual bool Receive_GC_LISTING(Packet &p);
153
163 virtual bool Receive_CLIENT_CONNECT(Packet &p);
164
175 virtual bool Receive_GC_CONNECTING(Packet &p);
176
187 virtual bool Receive_SERCLI_CONNECT_FAILED(Packet &p);
188
199 virtual bool Receive_GC_CONNECT_FAILED(Packet &p);
200
211 virtual bool Receive_CLIENT_CONNECTED(Packet &p);
212
225 virtual bool Receive_GC_DIRECT_CONNECT(Packet &p);
226
240 virtual bool Receive_GC_STUN_REQUEST(Packet &p);
241
253 virtual bool Receive_SERCLI_STUN_RESULT(Packet &p);
254
269 virtual bool Receive_GC_STUN_CONNECT(Packet &p);
270
292 virtual bool Receive_GC_NEWGRF_LOOKUP(Packet &p);
293
306 virtual bool Receive_GC_TURN_CONNECT(Packet &p);
307
308 bool HandlePacket(Packet &p);
309public:
314 NetworkCoordinatorSocketHandler(SOCKET s = INVALID_SOCKET) : NetworkTCPSocketHandler(s) {}
315
316 bool ReceivePackets();
317};
318
319#endif /* NETWORK_CORE_TCP_COORDINATOR_H */
NetworkCoordinatorSocketHandler
Base socket handler for all Game Coordinator TCP sockets.
Definition tcp_coordinator.h:71
NetworkCoordinatorSocketHandler::Receive_SERCLI_STUN_RESULT
virtual bool Receive_SERCLI_STUN_RESULT(Packet &p)
Client/server informs the Game Coordinator the result of a STUN request.
Definition tcp_coordinator.cpp:102
NetworkCoordinatorSocketHandler::Receive_CLIENT_LISTING
virtual bool Receive_CLIENT_LISTING(Packet &p)
Client requests a list of all public servers.
Definition tcp_coordinator.cpp:93
NetworkCoordinatorSocketHandler::ReceiveInvalidPacket
bool ReceiveInvalidPacket(PacketCoordinatorType type)
Helper for logging receiving invalid packets.
Definition tcp_coordinator.cpp:83
NetworkCoordinatorSocketHandler::Receive_GC_ERROR
virtual bool Receive_GC_ERROR(Packet &p)
Game Coordinator indicates there was an error.
Definition tcp_coordinator.cpp:89
NetworkCoordinatorSocketHandler::Receive_CLIENT_CONNECTED
virtual bool Receive_CLIENT_CONNECTED(Packet &p)
Client informs the Game Coordinator the connection with the Server is established.
Definition tcp_coordinator.cpp:99
NetworkCoordinatorSocketHandler::Receive_GC_STUN_CONNECT
virtual bool Receive_GC_STUN_CONNECT(Packet &p)
Game Coordinator informs the client/server of its STUN peer (the host:ip of the other side).
Definition tcp_coordinator.cpp:103
NetworkCoordinatorSocketHandler::Receive_GC_NEWGRF_LOOKUP
virtual bool Receive_GC_NEWGRF_LOOKUP(Packet &p)
Game Coordinator informs the client of updates for the NewGRFs lookup table as used by the NewGRF des...
Definition tcp_coordinator.cpp:104
NetworkCoordinatorSocketHandler::Receive_GC_REGISTER_ACK
virtual bool Receive_GC_REGISTER_ACK(Packet &p)
Game Coordinator acknowledges the registration.
Definition tcp_coordinator.cpp:91
NetworkCoordinatorSocketHandler::Receive_GC_TURN_CONNECT
virtual bool Receive_GC_TURN_CONNECT(Packet &p)
Game Coordinator requests that we make a connection to the indicated peer, which is a TURN server.
Definition tcp_coordinator.cpp:105
NetworkCoordinatorSocketHandler::Receive_GC_LISTING
virtual bool Receive_GC_LISTING(Packet &p)
Game Coordinator replies with a list of all public servers.
Definition tcp_coordinator.cpp:94
NetworkCoordinatorSocketHandler::Receive_GC_DIRECT_CONNECT
virtual bool Receive_GC_DIRECT_CONNECT(Packet &p)
Game Coordinator requests that the Client makes a direct connection to the indicated peer,...
Definition tcp_coordinator.cpp:100
NetworkCoordinatorSocketHandler::Receive_CLIENT_CONNECT
virtual bool Receive_CLIENT_CONNECT(Packet &p)
Client wants to connect to a Server.
Definition tcp_coordinator.cpp:95
NetworkCoordinatorSocketHandler::Receive_SERCLI_CONNECT_FAILED
virtual bool Receive_SERCLI_CONNECT_FAILED(Packet &p)
Client or Server failed to connect to the remote side.
Definition tcp_coordinator.cpp:97
NetworkCoordinatorSocketHandler::Receive_GC_CONNECTING
virtual bool Receive_GC_CONNECTING(Packet &p)
Game Coordinator informs the Client under what token it will start the attempt to connect the Server ...
Definition tcp_coordinator.cpp:96
NetworkCoordinatorSocketHandler::Receive_GC_STUN_REQUEST
virtual bool Receive_GC_STUN_REQUEST(Packet &p)
Game Coordinator requests the client/server to do a STUN request to the STUN server.
Definition tcp_coordinator.cpp:101
NetworkCoordinatorSocketHandler::Receive_SERVER_REGISTER
virtual bool Receive_SERVER_REGISTER(Packet &p)
Server is starting a multiplayer game and wants to let the Game Coordinator know.
Definition tcp_coordinator.cpp:90
NetworkCoordinatorSocketHandler::Receive_GC_CONNECT_FAILED
virtual bool Receive_GC_CONNECT_FAILED(Packet &p)
Game Coordinator informs the Client that it failed to find a way to connect the Client to the Server.
Definition tcp_coordinator.cpp:98
NetworkCoordinatorSocketHandler::HandlePacket
bool HandlePacket(Packet &p)
Handle the given packet, i.e.
Definition tcp_coordinator.cpp:25
NetworkCoordinatorSocketHandler::Receive_SERVER_UPDATE
virtual bool Receive_SERVER_UPDATE(Packet &p)
Send an update of the current state of the server to the Game Coordinator.
Definition tcp_coordinator.cpp:92
NetworkCoordinatorSocketHandler::NetworkCoordinatorSocketHandler
NetworkCoordinatorSocketHandler(SOCKET s=INVALID_SOCKET)
Create a new cs socket handler for a given cs.
Definition tcp_coordinator.h:314
NetworkCoordinatorSocketHandler::ReceivePackets
bool ReceivePackets()
Receive a packet at TCP level.
Definition tcp_coordinator.cpp:58
NetworkTCPSocketHandler
Base socket handler for all TCP sockets.
Definition tcp.h:31
os_abstraction.h
Network stuff has many things that needs to be included and/or implemented by default.
packet.h
Basic functions to create, fill and read packets.
Packet
Internal entity of a packet.
Definition packet.h:42
tcp.h
Basic functions to receive and send TCP packets.
PacketCoordinatorType
PacketCoordinatorType
Enum with all types of TCP Game Coordinator packets.
Definition tcp_coordinator.h:28
PACKET_COORDINATOR_GC_STUN_CONNECT
@ PACKET_COORDINATOR_GC_STUN_CONNECT
Game Coordinator tells client/server to connect() reusing the STUN local address.
Definition tcp_coordinator.h:43
PACKET_COORDINATOR_GC_LISTING
@ PACKET_COORDINATOR_GC_LISTING
Game Coordinator returns a listing of all public servers.
Definition tcp_coordinator.h:34
PACKET_COORDINATOR_SERCLI_CONNECT_FAILED
@ PACKET_COORDINATOR_SERCLI_CONNECT_FAILED
Client/server tells the Game Coordinator the current connection attempt failed.
Definition tcp_coordinator.h:37
PACKET_COORDINATOR_GC_TURN_CONNECT
@ PACKET_COORDINATOR_GC_TURN_CONNECT
Game Coordinator tells client/server to connect to a specific TURN server.
Definition tcp_coordinator.h:45
PACKET_COORDINATOR_SERCLI_STUN_RESULT
@ PACKET_COORDINATOR_SERCLI_STUN_RESULT
Client/server informs the Game Coordinator of the result of the STUN request.
Definition tcp_coordinator.h:42
PACKET_COORDINATOR_CLIENT_LISTING
@ PACKET_COORDINATOR_CLIENT_LISTING
Client is requesting a listing of all public servers.
Definition tcp_coordinator.h:33
PACKET_COORDINATOR_GC_STUN_REQUEST
@ PACKET_COORDINATOR_GC_STUN_REQUEST
Game Coordinator tells client/server to initiate a STUN request.
Definition tcp_coordinator.h:41
PACKET_COORDINATOR_GC_DIRECT_CONNECT
@ PACKET_COORDINATOR_GC_DIRECT_CONNECT
Game Coordinator tells client to directly connect to the hostname:port of the server.
Definition tcp_coordinator.h:40
PACKET_COORDINATOR_GC_NEWGRF_LOOKUP
@ PACKET_COORDINATOR_GC_NEWGRF_LOOKUP
Game Coordinator informs client about NewGRF lookup table updates needed for GC_LISTING.
Definition tcp_coordinator.h:44
PACKET_COORDINATOR_SERVER_REGISTER
@ PACKET_COORDINATOR_SERVER_REGISTER
Server registration.
Definition tcp_coordinator.h:30
PACKET_COORDINATOR_END
@ PACKET_COORDINATOR_END
Must ALWAYS be on the end of this list!! (period)
Definition tcp_coordinator.h:46
PACKET_COORDINATOR_GC_REGISTER_ACK
@ PACKET_COORDINATOR_GC_REGISTER_ACK
Game Coordinator accepts the registration.
Definition tcp_coordinator.h:31
PACKET_COORDINATOR_CLIENT_CONNECT
@ PACKET_COORDINATOR_CLIENT_CONNECT
Client wants to connect to a server based on an invite code.
Definition tcp_coordinator.h:35
PACKET_COORDINATOR_GC_CONNECTING
@ PACKET_COORDINATOR_GC_CONNECTING
Game Coordinator informs the client of the token assigned to the connection attempt.
Definition tcp_coordinator.h:36
PACKET_COORDINATOR_GC_ERROR
@ PACKET_COORDINATOR_GC_ERROR
Game Coordinator indicates there was an error.
Definition tcp_coordinator.h:29
PACKET_COORDINATOR_CLIENT_CONNECTED
@ PACKET_COORDINATOR_CLIENT_CONNECTED
Client informs the Game Coordinator the connection with the server is established.
Definition tcp_coordinator.h:39
PACKET_COORDINATOR_GC_CONNECT_FAILED
@ PACKET_COORDINATOR_GC_CONNECT_FAILED
Game Coordinator informs client/server it has given up on the connection attempt.
Definition tcp_coordinator.h:38
PACKET_COORDINATOR_SERVER_UPDATE
@ PACKET_COORDINATOR_SERVER_UPDATE
Server sends an set intervals an update of the server.
Definition tcp_coordinator.h:32
NetworkCoordinatorErrorType
NetworkCoordinatorErrorType
The type of error from the Game Coordinator.
Definition tcp_coordinator.h:63
NETWORK_COORDINATOR_ERROR_UNKNOWN
@ NETWORK_COORDINATOR_ERROR_UNKNOWN
There was an unknown error.
Definition tcp_coordinator.h:64
NETWORK_COORDINATOR_ERROR_REGISTRATION_FAILED
@ NETWORK_COORDINATOR_ERROR_REGISTRATION_FAILED
Your request for registration failed.
Definition tcp_coordinator.h:65
NETWORK_COORDINATOR_ERROR_INVALID_INVITE_CODE
@ NETWORK_COORDINATOR_ERROR_INVALID_INVITE_CODE
The invite code given is invalid.
Definition tcp_coordinator.h:66
NETWORK_COORDINATOR_ERROR_REUSE_OF_INVITE_CODE
@ NETWORK_COORDINATOR_ERROR_REUSE_OF_INVITE_CODE
The invite code is used by another (newer) server.
Definition tcp_coordinator.h:67
ConnectionType
ConnectionType
The type of connection the Game Coordinator can detect we have.
Definition tcp_coordinator.h:52
CONNECTION_TYPE_ISOLATED
@ CONNECTION_TYPE_ISOLATED
The Game Coordinator failed to find a way to connect to your server. Nobody will be able to join.
Definition tcp_coordinator.h:54
CONNECTION_TYPE_DIRECT
@ CONNECTION_TYPE_DIRECT
The Game Coordinator can directly connect to your server.
Definition tcp_coordinator.h:55
CONNECTION_TYPE_STUN
@ CONNECTION_TYPE_STUN
The Game Coordinator can connect to your server via a STUN request.
Definition tcp_coordinator.h:56
CONNECTION_TYPE_UNKNOWN
@ CONNECTION_TYPE_UNKNOWN
The Game Coordinator hasn't informed us yet what type of connection we have.
Definition tcp_coordinator.h:53
CONNECTION_TYPE_TURN
@ CONNECTION_TYPE_TURN
The Game Coordinator needs you to connect to a relay.
Definition tcp_coordinator.h:57