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

OpenTTD Source 12.0-beta1

udp.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_UDP_H
13 #define NETWORK_CORE_UDP_H
14
15 #include "address.h"
16 #include "packet.h"
17
19 enum PacketUDPType {
20 PACKET_UDP_CLIENT_FIND_SERVER,
21 PACKET_UDP_SERVER_RESPONSE,
22 PACKET_UDP_END,
23 };
24
26 class NetworkUDPSocketHandler : public NetworkSocketHandler {
27 protected:
29 NetworkAddressList bind;
31 SocketList sockets;
32
33 void ReceiveInvalidPacket(PacketUDPType, NetworkAddress *client_addr);
34
40 virtual void Receive_CLIENT_FIND_SERVER(Packet *p, NetworkAddress *client_addr);
41
47 virtual void Receive_SERVER_RESPONSE(Packet *p, NetworkAddress *client_addr);
48
49 void HandleUDPPacket(Packet *p, NetworkAddress *client_addr);
50 public:
51 NetworkUDPSocketHandler(NetworkAddressList *bind = nullptr);
52
54 virtual ~NetworkUDPSocketHandler() { this->CloseSocket(); }
55
56 bool Listen();
57 void CloseSocket();
58
59 void SendPacket(Packet *p, NetworkAddress *recv, bool all = false, bool broadcast = false);
60 void ReceivePackets();
61 };
62
63 #endif /* NETWORK_CORE_UDP_H */
NetworkUDPSocketHandler
Base socket handler for all UDP sockets.
Definition: udp.h:26
NetworkSocketHandler
SocketHandler for all network sockets in OpenTTD.
Definition: core.h:42
PACKET_UDP_CLIENT_FIND_SERVER
@ PACKET_UDP_CLIENT_FIND_SERVER
Queries a game server for game information.
Definition: udp.h:20
NetworkUDPSocketHandler::CloseSocket
void CloseSocket()
Close the actual UDP socket.
Definition: udp.cpp:59
NetworkUDPSocketHandler::NetworkUDPSocketHandler
NetworkUDPSocketHandler(NetworkAddressList *bind=nullptr)
Create an UDP socket but don't listen yet.
Definition: udp.cpp:24
NetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER
virtual void Receive_CLIENT_FIND_SERVER(Packet *p, NetworkAddress *client_addr)
Queries to the server for information about the game.
Definition: udp.cpp:186
SmallMap< NetworkAddress, SOCKET >
NetworkUDPSocketHandler::~NetworkUDPSocketHandler
virtual ~NetworkUDPSocketHandler()
On destructing of this class, the socket needs to be closed.
Definition: udp.h:54
NetworkAddressList
std::vector< NetworkAddress > NetworkAddressList
Type for a list of addresses.
Definition: address.h:21
address.h
NetworkUDPSocketHandler::sockets
SocketList sockets
The opened sockets.
Definition: udp.h:31
PACKET_UDP_END
@ PACKET_UDP_END
Must ALWAYS be on the end of this list!! (period)
Definition: udp.h:22
NetworkUDPSocketHandler::bind
NetworkAddressList bind
The address to bind to.
Definition: udp.h:29
Packet
Internal entity of a packet.
Definition: packet.h:44
NetworkUDPSocketHandler::ReceiveInvalidPacket
void ReceiveInvalidPacket(PacketUDPType, NetworkAddress *client_addr)
Helper for logging receiving invalid packets.
Definition: udp.cpp:181
PACKET_UDP_SERVER_RESPONSE
@ PACKET_UDP_SERVER_RESPONSE
Reply of the game server with game information.
Definition: udp.h:21
NetworkAddress
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string a...
Definition: address.h:30
packet.h
NetworkUDPSocketHandler::HandleUDPPacket
void HandleUDPPacket(Packet *p, NetworkAddress *client_addr)
Handle an incoming packets by sending it to the correct function.
Definition: udp.cpp:153
NetworkUDPSocketHandler::Listen
bool Listen()
Start listening on the given host and port.
Definition: udp.cpp:44
NetworkUDPSocketHandler::ReceivePackets
void ReceivePackets()
Receive a packet at UDP level.
Definition: udp.cpp:110
NetworkUDPSocketHandler::Receive_SERVER_RESPONSE
virtual void Receive_SERVER_RESPONSE(Packet *p, NetworkAddress *client_addr)
Response to a query letting the client know we are here.
Definition: udp.cpp:187
PacketUDPType
PacketUDPType
Enum with all types of UDP packets.
Definition: udp.h:19
NetworkUDPSocketHandler::SendPacket
void SendPacket(Packet *p, NetworkAddress *recv, bool all=false, bool broadcast=false)
Send a packet over UDP.
Definition: udp.cpp:74