summaryrefslogtreecommitdiff
path: root/src/network/core/tcp_admin.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-10-17 17:31:03 +0000
committerrubidium <rubidium@openttd.org>2010-10-17 17:31:03 +0000
commit33ed4ddbfbdcd269c7234ea6093acc21e7a63e7c (patch)
tree528f610d0ebafba248bd2c9ebf962990afa30676 /src/network/core/tcp_admin.h
parent12a7e2fde0b53f8d3042f3ee248522e921b80d72 (diff)
downloadopenttd-33ed4ddbfbdcd269c7234ea6093acc21e7a63e7c.tar.xz
(svn r20963) -Add: stubs for a remote administration connection
Diffstat (limited to 'src/network/core/tcp_admin.h')
-rw-r--r--src/network/core/tcp_admin.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/network/core/tcp_admin.h b/src/network/core/tcp_admin.h
new file mode 100644
index 000000000..dae41c5f5
--- /dev/null
+++ b/src/network/core/tcp_admin.h
@@ -0,0 +1,137 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * 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.
+ * 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.
+ * 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/>.
+ */
+
+/**
+ * @file tcp_admin.h Basic functions to receive and send TCP packets to and from the admin network.
+ */
+
+#ifndef NETWORK_CORE_TCP_ADMIN_H
+#define NETWORK_CORE_TCP_ADMIN_H
+
+#include "os_abstraction.h"
+#include "tcp.h"
+#include "../network_type.h"
+#include "../../core/pool_type.hpp"
+
+#ifdef ENABLE_NETWORK
+
+/**
+ * Enum with types of TCP packets specific to the admin network.
+ * This protocol may only be extended to ensure stability.
+ */
+enum PacketAdminType {
+ ADMIN_PACKET_ADMIN_JOIN, ///< The admin announces and authenticates itself to the server.
+ ADMIN_PACKET_ADMIN_QUIT, ///< The admin tells the server that it is quitting.
+
+ ADMIN_PACKET_SERVER_FULL = 100, ///< The server tells the admin it cannot accept the admin.
+ ADMIN_PACKET_SERVER_BANNED, ///< The server tells the admin it is banned.
+ ADMIN_PACKET_SERVER_ERROR, ///< The server tells the admin an error has occurred.
+ ADMIN_PACKET_SERVER_PROTOCOL, ///< The server tells the admin its protocol version.
+ ADMIN_PACKET_SERVER_WELCOME, ///< The server welcomes the admin to a game.
+ ADMIN_PACKET_SERVER_NEWGAME, ///< The server tells the admin its going to start a new game.
+ ADMIN_PACKET_SERVER_SHUTDOWN, ///< The server tells the admin its shutting down.
+
+ INVALID_ADMIN_PACKET = 0xFF, ///< An invalid marker for admin packets.
+};
+
+/** Status of an admin. */
+enum AdminStatus {
+ ADMIN_STATUS_INACTIVE, ///< The admin is not connected nor active.
+ ADMIN_STATUS_ACTIVE, ///< The admin is active.
+ ADMIN_STATUS_END ///< Must ALWAYS be on the end of this list!! (period)
+};
+
+#define DECLARE_ADMIN_RECEIVE_COMMAND(type) virtual NetworkRecvStatus NetworkPacketReceive_## type ##_command(Packet *p)
+#define DEF_ADMIN_RECEIVE_COMMAND(cls, type) NetworkRecvStatus cls ##NetworkAdminSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p)
+
+/** Main socket handler for admin related connections. */
+class NetworkAdminSocketHandler : public NetworkTCPSocketHandler {
+protected:
+ char admin_name[NETWORK_CLIENT_NAME_LENGTH]; ///< Name of the admin.
+ char admin_version[NETWORK_REVISION_LENGTH]; ///< Version string of the admin.
+ AdminStatus status; ///< Status of this admin.
+
+ /**
+ * Join the admin network:
+ * string Password the server is expecting for this network.
+ * string Name of the application being used to connect.
+ * string Version string of the application being used to connect.
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_JOIN);
+
+ /**
+ * Notification to the server that this admin is quitting.
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_QUIT);
+
+ /**
+ * The server is full (connection gets closed).
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_FULL);
+
+ /**
+ * The source IP address is banned (connection gets closed).
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_BANNED);
+
+ /**
+ * An error was caused by this admin connection (connection gets closed).
+ * uint8 NetworkErrorCode the error caused.
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_ERROR);
+
+ /**
+ * Inform a just joined admin about the protocol specifics:
+ * uint8 Protocol version.
+ * bool Further protocol data follows (repeats through all update packet types).
+ * uint16 Update packet type.
+ * uint16 Frequencies allowed for this update packet (bitwise).
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_PROTOCOL);
+
+ /**
+ * Welcome a connected admin to the game:
+ * string Name of the Server (e.g. as advertised to master server).
+ * string OpenTTD version string.
+ * bool Server is dedicated.
+ * string Name of the Map.
+ * uint32 Random seed of the Map.
+ * uint8 Landscape of the Map.
+ * uint32 Start date of the Map.
+ * uint16 Map width.
+ * uint16 Map height.
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_WELCOME);
+
+ /**
+ * Notification about a newgame.
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_NEWGAME);
+
+ /**
+ * Notification about the server shutting down.
+ */
+ DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_SHUTDOWN);
+
+ NetworkRecvStatus HandlePacket(Packet *p);
+public:
+ NetworkRecvStatus CloseConnection(bool error = true);
+
+ NetworkAdminSocketHandler(SOCKET s);
+ ~NetworkAdminSocketHandler();
+
+ NetworkRecvStatus Recv_Packets();
+
+ const char *Recv_Command(Packet *p, CommandPacket *cp);
+ void Send_Command(Packet *p, const CommandPacket *cp);
+};
+
+#endif /* ENABLE_NETWORK */
+
+#endif /* NETWORK_CORE_TCP_ADMIN_H */