network_admin.h

Go to the documentation of this file.
00001 /* $Id$ */
00002 
00003 /*
00004  * This file is part of OpenTTD.
00005  * 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.
00006  * 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.
00007  * 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/>.
00008  */
00009 
00012 #ifndef NETWORK_ADMIN_H
00013 #define NETWORK_ADMIN_H
00014 
00015 #ifdef ENABLE_NETWORK
00016 
00017 #include "network_internal.h"
00018 #include "core/tcp_listen.h"
00019 #include "core/tcp_admin.h"
00020 
00021 extern AdminIndex _redirect_console_to_admin;
00022 
00023 class ServerNetworkAdminSocketHandler;
00025 typedef Pool<ServerNetworkAdminSocketHandler, AdminIndex, 2, MAX_ADMINS, PT_NADMIN> NetworkAdminSocketPool;
00026 extern NetworkAdminSocketPool _networkadminsocket_pool;
00027 
00029 class ServerNetworkAdminSocketHandler : public NetworkAdminSocketPool::PoolItem<&_networkadminsocket_pool>, public NetworkAdminSocketHandler, public TCPListenHandler<ServerNetworkAdminSocketHandler, ADMIN_PACKET_SERVER_FULL, ADMIN_PACKET_SERVER_BANNED> {
00030 protected:
00031   virtual NetworkRecvStatus Receive_ADMIN_JOIN(Packet *p);
00032   virtual NetworkRecvStatus Receive_ADMIN_QUIT(Packet *p);
00033   virtual NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p);
00034   virtual NetworkRecvStatus Receive_ADMIN_POLL(Packet *p);
00035   virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p);
00036   virtual NetworkRecvStatus Receive_ADMIN_RCON(Packet *p);
00037 
00038   NetworkRecvStatus SendProtocol();
00039 public:
00040   AdminUpdateFrequency update_frequency[ADMIN_UPDATE_END]; 
00041   uint32 realtime_connect;                                 
00042   NetworkAddress address;                                  
00043 
00044   ServerNetworkAdminSocketHandler(SOCKET s);
00045   ~ServerNetworkAdminSocketHandler();
00046 
00047   NetworkRecvStatus SendError(NetworkErrorCode error);
00048   NetworkRecvStatus SendWelcome();
00049   NetworkRecvStatus SendNewGame();
00050   NetworkRecvStatus SendShutdown();
00051 
00052   NetworkRecvStatus SendDate();
00053   NetworkRecvStatus SendClientJoin(ClientID client_id);
00054   NetworkRecvStatus SendClientInfo(const NetworkClientSocket *cs);
00055   NetworkRecvStatus SendClientUpdate(const NetworkClientInfo *ci);
00056   NetworkRecvStatus SendClientQuit(ClientID client_id);
00057   NetworkRecvStatus SendClientError(ClientID client_id, NetworkErrorCode error);
00058   NetworkRecvStatus SendCompanyNew(CompanyID company_id);
00059   NetworkRecvStatus SendCompanyInfo(const Company *c);
00060   NetworkRecvStatus SendCompanyUpdate(const Company *c);
00061   NetworkRecvStatus SendCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
00062   NetworkRecvStatus SendCompanyEconomy();
00063   NetworkRecvStatus SendCompanyStats();
00064 
00065   NetworkRecvStatus SendChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data);
00066   NetworkRecvStatus SendRcon(uint16 colour, const char *command);
00067   NetworkRecvStatus SendConsole(const char *origin, const char *command);
00068   NetworkRecvStatus SendCmdNames();
00069   NetworkRecvStatus SendCmdLogging(ClientID client_id, const CommandPacket *cp);
00070 
00071   static void Send();
00072   static void AcceptConnection(SOCKET s, const NetworkAddress &address);
00073   static bool AllowConnection();
00074   static void WelcomeAll();
00075 
00080   static const char *GetName()
00081   {
00082     return "admin";
00083   }
00084 };
00085 
00091 #define FOR_ALL_ADMIN_SOCKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(ServerNetworkAdminSocketHandler, adminsocket_index, var, start)
00092 
00097 #define FOR_ALL_ADMIN_SOCKETS(var) FOR_ALL_ADMIN_SOCKETS_FROM(var, 0)
00098 
00099 void NetworkAdminClientInfo(const NetworkClientSocket *cs, bool new_client = false);
00100 void NetworkAdminClientUpdate(const NetworkClientInfo *ci);
00101 void NetworkAdminClientQuit(ClientID client_id);
00102 void NetworkAdminClientError(ClientID client_id, NetworkErrorCode error_code);
00103 void NetworkAdminCompanyInfo(const Company *company, bool new_company);
00104 void NetworkAdminCompanyUpdate(const Company *company);
00105 void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
00106 
00107 void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data = 0, bool from_admin = false);
00108 void NetworkAdminUpdate(AdminUpdateFrequency freq);
00109 void NetworkServerSendAdminRcon(AdminIndex admin_index, TextColour colour_code, const char *string);
00110 void NetworkAdminConsole(const char *origin, const char *string);
00111 void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacket *cp);
00112 
00113 #endif /* ENABLE_NETWORK */
00114 #endif /* NETWORK_ADMIN_H */