network_internal.h

Go to the documentation of this file.
00001 /* $Id: network_internal.h 24075 2012-03-26 20:41:21Z rubidium $ */
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_INTERNAL_H
00013 #define NETWORK_INTERNAL_H
00014 
00015 #include "network_func.h"
00016 #include "core/tcp_game.h"
00017 
00018 #include "../command_type.h"
00019 
00020 #ifdef ENABLE_NETWORK
00021 
00022 #ifdef RANDOM_DEBUG
00023 
00032 #define ENABLE_NETWORK_SYNC_EVERY_FRAME
00033 
00038 #define NETWORK_SEND_DOUBLE_SEED
00039 #endif /* RANDOM_DEBUG */
00040 
00051 #ifdef DEBUG_DUMP_COMMANDS
00052 extern bool _ddc_fastforward;
00053 #else
00054 #define _ddc_fastforward (false)
00055 #endif /* DEBUG_DUMP_COMMANDS */
00056 
00057 typedef class ServerNetworkGameSocketHandler NetworkClientSocket;
00058 
00060 enum NetworkJoinStatus {
00061   NETWORK_JOIN_STATUS_CONNECTING,
00062   NETWORK_JOIN_STATUS_AUTHORIZING,
00063   NETWORK_JOIN_STATUS_WAITING,
00064   NETWORK_JOIN_STATUS_DOWNLOADING,
00065   NETWORK_JOIN_STATUS_PROCESSING,
00066   NETWORK_JOIN_STATUS_REGISTERING,
00067 
00068   NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO,
00069   NETWORK_JOIN_STATUS_END,
00070 };
00071 
00073 enum NetworkLanguage {
00074   NETLANG_ANY = 0,
00075   NETLANG_ENGLISH,
00076   NETLANG_GERMAN,
00077   NETLANG_FRENCH,
00078   NETLANG_BRAZILIAN,
00079   NETLANG_BULGARIAN,
00080   NETLANG_CHINESE,
00081   NETLANG_CZECH,
00082   NETLANG_DANISH,
00083   NETLANG_DUTCH,
00084   NETLANG_ESPERANTO,
00085   NETLANG_FINNISH,
00086   NETLANG_HUNGARIAN,
00087   NETLANG_ICELANDIC,
00088   NETLANG_ITALIAN,
00089   NETLANG_JAPANESE,
00090   NETLANG_KOREAN,
00091   NETLANG_LITHUANIAN,
00092   NETLANG_NORWEGIAN,
00093   NETLANG_POLISH,
00094   NETLANG_PORTUGUESE,
00095   NETLANG_ROMANIAN,
00096   NETLANG_RUSSIAN,
00097   NETLANG_SLOVAK,
00098   NETLANG_SLOVENIAN,
00099   NETLANG_SPANISH,
00100   NETLANG_SWEDISH,
00101   NETLANG_TURKISH,
00102   NETLANG_UKRAINIAN,
00103   NETLANG_AFRIKAANS,
00104   NETLANG_CROATIAN,
00105   NETLANG_CATALAN,
00106   NETLANG_ESTONIAN,
00107   NETLANG_GALICIAN,
00108   NETLANG_GREEK,
00109   NETLANG_LATVIAN,
00110   NETLANG_COUNT
00111 };
00112 
00113 extern uint32 _frame_counter_server; // The frame_counter of the server, if in network-mode
00114 extern uint32 _frame_counter_max; // To where we may go with our clients
00115 extern uint32 _frame_counter;
00116 
00117 extern uint32 _last_sync_frame; // Used in the server to store the last time a sync packet was sent to clients.
00118 
00119 /* networking settings */
00120 extern NetworkAddressList _broadcast_list;
00121 
00122 extern uint32 _sync_seed_1;
00123 #ifdef NETWORK_SEND_DOUBLE_SEED
00124 extern uint32 _sync_seed_2;
00125 #endif
00126 extern uint32 _sync_frame;
00127 extern bool _network_first_time;
00128 /* Vars needed for the join-GUI */
00129 extern NetworkJoinStatus _network_join_status;
00130 extern uint8 _network_join_waiting;
00131 extern uint32 _network_join_bytes;
00132 extern uint32 _network_join_bytes_total;
00133 
00134 extern uint8 _network_reconnect;
00135 
00136 extern bool _network_udp_server;
00137 extern uint16 _network_udp_broadcast;
00138 
00139 extern uint8 _network_advertise_retries;
00140 
00141 extern CompanyMask _network_company_passworded;
00142 
00143 void NetworkTCPQueryServer(NetworkAddress address);
00144 
00145 void GetBindAddresses(NetworkAddressList *addresses, uint16 port);
00146 void NetworkAddServer(const char *b);
00147 void NetworkRebuildHostList();
00148 void UpdateNetworkGameWindow();
00149 
00150 bool IsNetworkCompatibleVersion(const char *version);
00151 
00152 /* From network_command.cpp */
00156 struct CommandPacket : CommandContainer {
00157   CommandPacket *next; 
00158   CompanyByte company; 
00159   uint32 frame;        
00160   bool my_cmd;         
00161 };
00162 
00163 void NetworkDistributeCommands();
00164 void NetworkExecuteLocalCommandQueue();
00165 void NetworkFreeLocalCommandQueue();
00166 void NetworkSyncCommandQueue(NetworkClientSocket *cs);
00167 
00168 void NetworkError(StringID error_string);
00169 void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const char *name, const char *str = "", int64 data = 0);
00170 uint NetworkCalculateLag(const NetworkClientSocket *cs);
00171 StringID GetNetworkErrorMsg(NetworkErrorCode err);
00172 bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]);
00173 const char *GenerateCompanyPasswordHash(const char *password, const char *password_server_id, uint32 password_game_seed);
00174 
00175 #endif /* ENABLE_NETWORK */
00176 #endif /* NETWORK_INTERNAL_H */