Codechange: Use CargoArray for linkgraph refresher. (#13165)
[openttd-github.git] / src / network / core / core.h
bloba9d12b1f116c05b78ba84386303c9ca0e0eb885e
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 */
8 /**
9 * @file core.h Base for all network types (UDP and TCP)
12 #ifndef NETWORK_CORE_CORE_H
13 #define NETWORK_CORE_CORE_H
15 #include "../../newgrf_config.h"
16 #include "../network_crypto.h"
17 #include "config.h"
19 bool NetworkCoreInitialize();
20 void NetworkCoreShutdown();
22 /** Status of a network client; reasons why a client has quit */
23 enum NetworkRecvStatus {
24 NETWORK_RECV_STATUS_OKAY, ///< Everything is okay.
25 NETWORK_RECV_STATUS_DESYNC, ///< A desync did occur.
26 NETWORK_RECV_STATUS_NEWGRF_MISMATCH, ///< We did not have the required NewGRFs.
27 NETWORK_RECV_STATUS_SAVEGAME, ///< Something went wrong (down)loading the savegame.
28 NETWORK_RECV_STATUS_CLIENT_QUIT, ///< The connection is lost gracefully. Other clients are already informed of this leaving client.
29 NETWORK_RECV_STATUS_MALFORMED_PACKET, ///< We apparently send a malformed packet.
30 NETWORK_RECV_STATUS_SERVER_ERROR, ///< The server told us we made an error.
31 NETWORK_RECV_STATUS_SERVER_FULL, ///< The server is full.
32 NETWORK_RECV_STATUS_SERVER_BANNED, ///< The server has banned us.
33 NETWORK_RECV_STATUS_CLOSE_QUERY, ///< Done querying the server.
34 NETWORK_RECV_STATUS_CONNECTION_LOST, ///< The connection is lost unexpectedly.
37 /** Forward declaration due to circular dependencies */
38 struct Packet;
40 /**
41 * SocketHandler for all network sockets in OpenTTD.
43 class NetworkSocketHandler {
44 private:
45 bool has_quit; ///< Whether the current client has quit/send a bad packet
47 protected:
48 friend struct Packet;
49 std::unique_ptr<class NetworkEncryptionHandler> receive_encryption_handler; ///< The handler for decrypting received packets.
50 std::unique_ptr<class NetworkEncryptionHandler> send_encryption_handler; ///< The handler for encrypting sent packets.
52 public:
53 /** Create a new unbound socket */
54 NetworkSocketHandler() { this->has_quit = false; }
56 /** Close the socket when destructing the socket handler */
57 virtual ~NetworkSocketHandler() = default;
59 /**
60 * Mark the connection as closed.
62 * This doesn't mean the actual connection is closed, but just that we
63 * act like it is. This is useful for UDP, which doesn't normally close
64 * a socket, but its handler might need to pretend it does.
66 void MarkClosed() { this->has_quit = true; }
68 /**
69 * Whether the current client connected to the socket has quit.
70 * In the case of UDP, for example, once a client quits (send bad
71 * data), the socket in not closed; only the packet is dropped.
72 * @return true when the current client has quit, false otherwise
74 bool HasClientQuit() const { return this->has_quit; }
76 /**
77 * Reopen the socket so we can send/receive stuff again.
79 void Reopen() { this->has_quit = false; }
82 #endif /* NETWORK_CORE_CORE_H */