OpenTTD Source  12.0-beta2
network_internal.h
Go to the documentation of this file.
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  */
7 
10 #ifndef NETWORK_INTERNAL_H
11 #define NETWORK_INTERNAL_H
12 
13 #include "network_func.h"
14 #include "core/tcp_coordinator.h"
15 #include "core/tcp_game.h"
16 
17 #include "../command_type.h"
18 
19 #ifdef RANDOM_DEBUG
20 
29 #define ENABLE_NETWORK_SYNC_EVERY_FRAME
30 
35 #define NETWORK_SEND_DOUBLE_SEED
36 #endif /* RANDOM_DEBUG */
37 
45 #ifdef DEBUG_DUMP_COMMANDS
46 extern bool _ddc_fastforward;
47 #else
48 #define _ddc_fastforward (false)
49 #endif /* DEBUG_DUMP_COMMANDS */
50 
51 typedef class ServerNetworkGameSocketHandler NetworkClientSocket;
52 
55  NETWORK_JOIN_STATUS_CONNECTING,
56  NETWORK_JOIN_STATUS_AUTHORIZING,
57  NETWORK_JOIN_STATUS_WAITING,
58  NETWORK_JOIN_STATUS_DOWNLOADING,
59  NETWORK_JOIN_STATUS_PROCESSING,
60  NETWORK_JOIN_STATUS_REGISTERING,
61 
62  NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO,
63  NETWORK_JOIN_STATUS_END,
64 };
65 
66 extern uint32 _frame_counter_server; // The frame_counter of the server, if in network-mode
67 extern uint32 _frame_counter_max; // To where we may go with our clients
68 extern uint32 _frame_counter;
69 
70 extern uint32 _last_sync_frame; // Used in the server to store the last time a sync packet was sent to clients.
71 
72 /* networking settings */
74 
75 extern uint32 _sync_seed_1;
76 #ifdef NETWORK_SEND_DOUBLE_SEED
77 extern uint32 _sync_seed_2;
78 #endif
79 extern uint32 _sync_frame;
80 extern bool _network_first_time;
81 /* Vars needed for the join-GUI */
83 extern uint8 _network_join_waiting;
84 extern uint32 _network_join_bytes;
85 extern uint32 _network_join_bytes_total;
87 extern std::string _network_server_invite_code;
88 
89 /* Variable available for clients. */
90 extern std::string _network_server_name;
91 
92 extern uint8 _network_reconnect;
93 
94 extern CompanyMask _network_company_passworded;
95 
96 void NetworkQueryServer(const std::string &connection_string);
97 
98 void GetBindAddresses(NetworkAddressList *addresses, uint16 port);
99 struct NetworkGameList *NetworkAddServer(const std::string &connection_string, bool manually = true, bool never_expire = false);
100 void NetworkRebuildHostList();
102 
103 /* From network_command.cpp */
109  CommandPacket() : next(nullptr), company(INVALID_COMPANY), frame(0), my_cmd(false) {}
112  uint32 frame;
113  bool my_cmd;
114 };
115 
119 void NetworkSyncCommandQueue(NetworkClientSocket *cs);
120 
121 void ShowNetworkError(StringID error_string);
122 void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const std::string &name, const std::string &str = "", int64 data = 0);
123 uint NetworkCalculateLag(const NetworkClientSocket *cs);
125 bool NetworkMakeClientNameUnique(std::string &new_name);
126 std::string GenerateCompanyPasswordHash(const std::string &password, const std::string &password_server_id, uint32 password_game_seed);
127 
128 std::string_view ParseCompanyFromConnectionString(const std::string &connection_string, CompanyID *company_id);
129 NetworkAddress ParseConnectionString(const std::string &connection_string, uint16 default_port);
130 std::string NormalizeConnectionString(const std::string &connection_string, uint16 default_port);
131 
132 #endif /* NETWORK_INTERNAL_H */
NetworkGameList::connection_string
std::string connection_string
Address of the server.
Definition: network_gamelist.h:22
_network_join_waiting
uint8 _network_join_waiting
The number of clients waiting in front of us.
Definition: network_gui.cpp:2115
NetworkQueryServer
void NetworkQueryServer(const std::string &connection_string)
Query a server to fetch the game-info.
Definition: network.cpp:651
_network_reconnect
uint8 _network_reconnect
Reconnect timeout.
Definition: network.cpp:64
NormalizeConnectionString
std::string NormalizeConnectionString(const std::string &connection_string, uint16 default_port)
Normalize a connection string.
Definition: network.cpp:523
NetworkAction
NetworkAction
Actions that can be used for NetworkTextMessage.
Definition: network_type.h:99
CommandPacket::frame
uint32 frame
the frame in which this packet is executed
Definition: network_internal.h:112
NetworkJoinStatus
NetworkJoinStatus
Status of the clients during joining.
Definition: network_internal.h:54
_network_join_bytes
uint32 _network_join_bytes
The number of bytes we already downloaded.
Definition: network_gui.cpp:2116
_network_server_invite_code
std::string _network_server_invite_code
Our invite code as indicated by the Game Coordinator.
Definition: network_coordinator.cpp:32
TextColour
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
Definition: gfx_type.h:250
NetworkDistributeCommands
void NetworkDistributeCommands()
Distribute the commands of ourself and the clients.
Definition: network_command.cpp:278
ParseCompanyFromConnectionString
std::string_view ParseCompanyFromConnectionString(const std::string &connection_string, CompanyID *company_id)
Parse the company part ("#company" postfix) of a connecting string.
Definition: network.cpp:459
CommandContainer
Structure for buffering the build command when selecting a station to join.
Definition: command_type.h:479
_network_first_time
bool _network_first_time
Whether we have finished joining or not.
Definition: network.cpp:78
CommandPacket::next
CommandPacket * next
the next command packet (if in queue)
Definition: network_internal.h:110
Owner
Owner
Enum for all companies/owners.
Definition: company_type.h:18
CommandPacket::company
CompanyID company
company that is executing the command
Definition: network_internal.h:111
CommandPacket
Everything we need to know about a command to be able to execute it.
Definition: network_internal.h:107
NetworkAddressList
std::vector< NetworkAddress > NetworkAddressList
Type for a list of addresses.
Definition: address.h:21
NetworkAddServer
struct NetworkGameList * NetworkAddServer(const std::string &connection_string, bool manually=true, bool never_expire=false)
Validates an address entered as a string and adds the server to the list.
Definition: network.cpp:669
GenerateCompanyPasswordHash
std::string GenerateCompanyPasswordHash(const std::string &password, const std::string &password_server_id, uint32 password_game_seed)
Hash the given password using server ID and game seed.
Definition: network.cpp:175
NetworkGameList::manually
bool manually
True if the server was added manually.
Definition: network_gamelist.h:24
_network_server_name
std::string _network_server_name
The current name of the server you are on.
Definition: network_client.cpp:318
_network_company_passworded
CompanyMask _network_company_passworded
Bitmask of the password status of all companies.
Definition: network.cpp:79
CommandPacket::my_cmd
bool my_cmd
did the command originate from "me"
Definition: network_internal.h:113
GetBindAddresses
void GetBindAddresses(NetworkAddressList *addresses, uint16 port)
Get the addresses to bind to.
Definition: network.cpp:695
ConnectionType
ConnectionType
The type of connection the Game Coordinator can detect we have.
Definition: tcp_coordinator.h:52
ParseConnectionString
NetworkAddress ParseConnectionString(const std::string &connection_string, uint16 default_port)
Convert a string containing either "hostname" or "hostname:ip" to a NetworkAddress.
Definition: network.cpp:538
ServerNetworkGameSocketHandler
Class for handling the server side of the game connection.
Definition: network_server.h:24
StringID
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
_ddc_fastforward
#define _ddc_fastforward
Helper variable to make the dedicated server go fast until the (first) join.
Definition: network_internal.h:48
NetworkAddress
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string a...
Definition: address.h:30
_last_sync_frame
uint32 _last_sync_frame
Used in the server to store the last time a sync packet was sent to clients.
Definition: network.cpp:71
CommandPacket::CommandPacket
CommandPacket()
Make sure the pointer is nullptr.
Definition: network_internal.h:109
NetworkSyncCommandQueue
void NetworkSyncCommandQueue(NetworkClientSocket *cs)
Sync our local command queue to the command queue of the given socket.
Definition: network_command.cpp:178
_sync_seed_1
uint32 _sync_seed_1
Seed to compare during sync checks.
Definition: network.cpp:73
tcp_coordinator.h
_sync_frame
uint32 _sync_frame
The frame to perform the sync check.
Definition: network.cpp:77
NetworkGameList
Structure with information shown in the game list (GUI)
Definition: network_gamelist.h:18
_network_join_status
NetworkJoinStatus _network_join_status
The status of joining.
Definition: network_gui.cpp:2114
_frame_counter
uint32 _frame_counter
The current frame.
Definition: network.cpp:70
_network_server_connection_type
ConnectionType _network_server_connection_type
What type of connection the Game Coordinator detected we are on.
Definition: network_coordinator.cpp:31
INVALID_COMPANY
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
NetworkExecuteLocalCommandQueue
void NetworkExecuteLocalCommandQueue()
Execute all commands on the local command queue that ought to be executed this frame.
Definition: network_command.cpp:190
GetNetworkErrorMsg
StringID GetNetworkErrorMsg(NetworkErrorCode err)
Retrieve the string id of an internal error number.
Definition: network.cpp:297
_broadcast_list
NetworkAddressList _broadcast_list
List of broadcast addresses.
Definition: network.cpp:72
UpdateNetworkGameWindow
void UpdateNetworkGameWindow()
Update the network new window because a new server is found on the network.
Definition: network_gui.cpp:66
tcp_game.h
NetworkMakeClientNameUnique
bool NetworkMakeClientNameUnique(std::string &new_name)
Check whether a name is unique, and otherwise try to make it unique.
Definition: network_server.cpp:1541
_frame_counter_server
uint32 _frame_counter_server
The frame_counter of the server, if in network-mode.
Definition: network.cpp:68
NetworkFreeLocalCommandQueue
void NetworkFreeLocalCommandQueue()
Free the local command queues.
Definition: network_command.cpp:224
_network_join_bytes_total
uint32 _network_join_bytes_total
The total number of bytes to download.
Definition: network_gui.cpp:2117
_frame_counter_max
uint32 _frame_counter_max
To where we may go with our clients.
Definition: network.cpp:69
network_func.h
NetworkErrorCode
NetworkErrorCode
The error codes we send around in the protocols.
Definition: network_type.h:118