Mercurial > hg > openttd
changeset 20636:c082b34956b0 draft
(svn r25587) -Add FS#5643: Conclude rcon output sent to admin clients with an RCON_END packet (Xaroth)
author | planetmaker <planetmaker@openttd.org> |
---|---|
date | Thu, 11 Jul 2013 19:57:40 +0000 |
parents | cd2c9568c5c2 |
children | 0612e3d379fa |
files | src/network/core/tcp_admin.cpp src/network/core/tcp_admin.h src/network/network_admin.cpp src/network/network_admin.h |
diffstat | 4 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/network/core/tcp_admin.cpp +++ b/src/network/core/tcp_admin.cpp @@ -87,6 +87,7 @@ case ADMIN_PACKET_SERVER_CONSOLE: return this->Receive_SERVER_CONSOLE(p); case ADMIN_PACKET_SERVER_CMD_NAMES: return this->Receive_SERVER_CMD_NAMES(p); case ADMIN_PACKET_SERVER_CMD_LOGGING: return this->Receive_SERVER_CMD_LOGGING(p); + case ADMIN_PACKET_SERVER_RCON_END: return this->Receive_SERVER_RCON_END(p); default: if (this->HasClientQuit()) { @@ -162,5 +163,6 @@ NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_CONSOLE(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_CONSOLE); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_CMD_NAMES(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_CMD_NAMES); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_CMD_LOGGING(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_CMD_LOGGING); } +NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_RCON_END(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_RCON_END); } #endif /* ENABLE_NETWORK */
--- a/src/network/core/tcp_admin.h +++ b/src/network/core/tcp_admin.h @@ -60,6 +60,7 @@ ADMIN_PACKET_SERVER_CMD_NAMES, ///< The server sends out the names of the DoCommands to the admins. ADMIN_PACKET_SERVER_CMD_LOGGING, ///< The server gives the admin copies of incoming command packets. ADMIN_PACKET_SERVER_GAMESCRIPT, ///< The server gives the admin information from the GameScript in JSON. + ADMIN_PACKET_SERVER_RCON_END, ///< The server indicates that the remote console command has completed. INVALID_ADMIN_PACKET = 0xFF, ///< An invalid marker for admin packets. }; @@ -454,6 +455,14 @@ */ virtual NetworkRecvStatus Receive_SERVER_CMD_LOGGING(Packet *p); + /** + * Notify the admin connection that the rcon command has finished. + * string The command as requested by the admin connection. + * @param p The packet that was just received. + * @return The state the network should have. + */ + virtual NetworkRecvStatus Receive_SERVER_RCON_END(Packet *p); + NetworkRecvStatus HandlePacket(Packet *p); public: NetworkRecvStatus CloseConnection(bool error = true);
--- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -481,6 +481,20 @@ } /** + * Send a notification indicating the rcon command has completed. + * @param command The original command sent. + */ +NetworkRecvStatus ServerNetworkAdminSocketHandler::SendRconEnd(const char *command) +{ + Packet *p = new Packet(ADMIN_PACKET_SERVER_RCON_END); + + p->Send_string(command); + this->SendPacket(p); + + return NETWORK_RECV_STATUS_OKAY; +} + +/** * Send the reply of an rcon command. * @param colour The colour of the text. * @param result The result of the command. @@ -509,7 +523,7 @@ _redirect_console_to_admin = this->index; IConsoleCmdExec(command); _redirect_console_to_admin = INVALID_ADMIN_ID; - return NETWORK_RECV_STATUS_OKAY; + return this->SendRconEnd(command); } NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_GAMESCRIPT(Packet *p)
--- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -69,6 +69,7 @@ NetworkRecvStatus SendGameScript(const char *json); NetworkRecvStatus SendCmdNames(); NetworkRecvStatus SendCmdLogging(ClientID client_id, const CommandPacket *cp); + NetworkRecvStatus SendRconEnd(const char *command); static void Send(); static void AcceptConnection(SOCKET s, const NetworkAddress &address);