OpenTTD Source  20241108-master-g80f628063a
network_func.h File Reference

Network functions used by other parts of OpenTTD. More...

#include "network_type.h"
#include "../console_type.h"
#include "../gfx_type.h"
#include "../openttd.h"
#include "../company_type.h"
#include "../string_type.h"

Go to the source code of this file.

Functions

uint8_t NetworkSpectatorCount ()
 
bool NetworkIsValidClientName (const std::string_view client_name)
 Check whether the given client name is deemed valid for use in network games. More...
 
bool NetworkValidateOurClientName ()
 Convenience method for NetworkValidateClientName on _settings_client.network.client_name. More...
 
bool NetworkValidateClientName (std::string &client_name)
 Trim the given client name in place, i.e. More...
 
bool NetworkValidateServerName (std::string &server_name)
 Trim the given server name in place, i.e. More...
 
void NetworkUpdateClientName (const std::string &client_name)
 Send the server our name as callback from the setting. More...
 
void NetworkUpdateServerGameType ()
 The setting server_game_type was updated; possibly we need to take some action.
 
bool NetworkCompanyHasClients (CompanyID company)
 Check whether a particular company has clients. More...
 
void NetworkReboot ()
 
void NetworkDisconnect (bool close_admins=true)
 We want to disconnect from the host/clients. More...
 
void NetworkGameLoop ()
 
void NetworkBackgroundLoop ()
 We have to do some (simple) background stuff that runs normally, even when we are not in multiplayer. More...
 
std::string_view ParseFullConnectionString (const std::string &connection_string, uint16_t &port, CompanyID *company_id=nullptr)
 Converts a string to ip/port/company Format: IP:port::company. More...
 
void NetworkPopulateCompanyStats (NetworkCompanyStats *stats)
 Populate the company stats. More...
 
void NetworkUpdateClientInfo (ClientID client_id)
 Send updated client info of a particular client. More...
 
void NetworkClientsToSpectators (CompanyID cid)
 Move the clients of a company to the spectators. More...
 
bool NetworkClientConnectGame (const std::string &connection_string, CompanyID default_company, const std::string &join_server_password="")
 Join a client to the server at with the given connection string. More...
 
void NetworkClientJoinGame ()
 Actually perform the joining to the server. More...
 
void NetworkClientRequestMove (CompanyID company)
 Notify the server of this client wanting to be moved to another company. More...
 
void NetworkClientSendRcon (const std::string &password, const std::string &command)
 Send a remote console command. More...
 
void NetworkClientSendChat (NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data=0)
 Send a chat message. More...
 
bool NetworkClientPreferTeamChat (const NetworkClientInfo *cio)
 Tell whether the client has team members who they can chat to. More...
 
uint NetworkMaxCompaniesAllowed ()
 Get the maximum number of companies that are allowed by the server. More...
 
bool NetworkMaxCompaniesReached ()
 Check if max_companies has been reached on the server (local check only). More...
 
void NetworkPrintClients ()
 Print all the clients to the console.
 
std::string_view NetworkGetPublicKeyOfClient (ClientID client_id)
 Get the public key of the client with the given id. More...
 
void NetworkHandlePauseChange (PauseMode prev_mode, PauseMode changed_mode)
 Handle the pause mode change so we send the right messages to the chat. More...
 
void NetworkOnGameStart ()
 Perform tasks when the server is started. More...
 
void NetworkServerSendConfigUpdate ()
 Send Config Update.
 
void NetworkServerUpdateGameInfo ()
 Update the server's NetworkServerGameInfo due to changes in settings.
 
void NetworkServerShowStatusToConsole ()
 Show the status message of all clients on the console.
 
bool NetworkServerStart ()
 
void NetworkServerNewCompany (const Company *company, NetworkClientInfo *ci)
 Perform all the server specific administration of a new company. More...
 
bool NetworkServerChangeClientName (ClientID client_id, const std::string &new_name)
 Change the client name of the given client. More...
 
bool NetworkCanJoinCompany (CompanyID company_id)
 Returns whether the given company can be joined by this client. More...
 
void NetworkServerDoMove (ClientID client_id, CompanyID company_id)
 Handle the tid-bits of moving a client from one company to another. More...
 
void NetworkServerSendRcon (ClientID client_id, TextColour colour_code, const std::string &string)
 Send an rcon reply to the client. More...
 
void NetworkServerSendChat (NetworkAction action, DestType type, int dest, const std::string &msg, ClientID from_id, int64_t data=0, bool from_admin=false)
 Send an actual chat message. More...
 
void NetworkServerSendExternalChat (const std::string &source, TextColour colour, const std::string &user, const std::string &msg)
 Send a chat message from external source. More...
 
void NetworkServerKickClient (ClientID client_id, const std::string &reason)
 Kick a single client. More...
 
uint NetworkServerKickOrBanIP (ClientID client_id, bool ban, const std::string &reason)
 Ban, or kick, everyone joined from the given client's IP. More...
 
uint NetworkServerKickOrBanIP (const std::string &ip, bool ban, const std::string &reason)
 Kick or ban someone based on an IP address. More...
 
void NetworkInitChatMessage ()
 Initialize all buffers of the chat visualisation.
 
void NetworkReInitChatBoxSize ()
 Initialize all font-dependent chat box sizes.
 
void CDECL NetworkAddChatMessage (TextColour colour, uint duration, const std::string &message)
 Add a text message to the 'chat window' to be shown. More...
 
void NetworkUndrawChatMessage ()
 Hide the chatbox.
 
void NetworkAfterNewGRFScan ()
 Rebuild the GRFConfig's of the servers in the game list as we did a rescan and might have found new NewGRFs.
 

Variables

ClientID _network_own_client_id
 Uncomment the following define to enable command replaying. More...
 
ClientID _redirect_console_to_client
 If not invalid, redirect the console output to a client.
 
uint8_t _network_reconnect
 Reconnect timeout.
 
StringList _network_bind_list
 The addresses to bind on.
 
StringList _network_host_list
 The servers we know.
 
StringList _network_ban_list
 The banned clients.
 

Detailed Description

Network functions used by other parts of OpenTTD.

Definition in file network_func.h.

Function Documentation

◆ NetworkAddChatMessage()

void CDECL NetworkAddChatMessage ( TextColour  colour,
uint  duration,
const std::string &  message 
)

Add a text message to the 'chat window' to be shown.

Parameters
colourThe colour this message is to be shown in
durationThe duration of the chat message in seconds
messagemessage itself

Definition at line 86 of file network_chat_gui.cpp.

References _chatmessage_dirty, _chatmessage_dirty_time, _chatmsg_list, ChatMessage::colour, MAX_CHAT_MESSAGES, ChatMessage::message, and ChatMessage::remove_time.

◆ NetworkBackgroundLoop()

void NetworkBackgroundLoop ( )

We have to do some (simple) background stuff that runs normally, even when we are not in multiplayer.

For example stuff needed for finding servers or downloading content.

Definition at line 1082 of file network.cpp.

References _network_content_client, _network_coordinator_client, TCPConnecter::CheckCallbacks(), NetworkHTTPSocketHandler::HTTPReceive(), NetworkBackgroundUDPLoop(), ClientNetworkContentSocketHandler::SendReceive(), ClientNetworkCoordinatorSocketHandler::SendReceive(), and QueryNetworkGameSocketHandler::SendReceive().

◆ NetworkCanJoinCompany()

bool NetworkCanJoinCompany ( CompanyID  company_id)

Returns whether the given company can be joined by this client.

Parameters
company_idThe id of the company.
Returns
true when this company is allowed to join, otherwise false.

Definition at line 143 of file network.cpp.

References _network_own_client_id, NetworkClientInfo::CanJoinCompany(), and NetworkClientInfo::GetByClientID().

Referenced by CompanyWindow::OnPaint().

◆ NetworkClientConnectGame()

bool NetworkClientConnectGame ( const std::string &  connection_string,
CompanyID  default_company,
const std::string &  join_server_password 
)

Join a client to the server at with the given connection string.

The default for the passwords is nullptr. When the server needs a password and none is given, the user is asked to enter the password in the GUI. This function will return false whenever some information required to join is not correct such as the company number or the client's name, or when there is not networking avalabile at all. If the function returns false the connection with the existing server is not disconnected. It will return true when it starts the actual join process, i.e. when it actually shows the join status window.

Parameters
connection_stringThe IP address, port and company number to join as.
default_companyThe company number to join as when none is given.
join_server_passwordThe password for the server.
Returns
Whether the join has started.

Definition at line 787 of file network.cpp.

References _network_available, _network_join, NetworkJoinInfo::company, ServerAddress::connection_string, NetworkJoinInfo::connection_string, Debug, NETWORK_DEFAULT_PORT, NetworkValidateOurClientName(), ServerAddress::Parse(), and NetworkJoinInfo::server_password.

◆ NetworkClientJoinGame()

void NetworkClientJoinGame ( )

Actually perform the joining to the server.

Use NetworkClientConnectGame when you want to connect to a specific server/company. This function assumes _network_join is already fully set up.

Definition at line 820 of file network.cpp.

References NetworkDisconnect().

◆ NetworkClientPreferTeamChat()

bool NetworkClientPreferTeamChat ( const NetworkClientInfo cio)

◆ NetworkClientRequestMove()

void NetworkClientRequestMove ( CompanyID  company_id)

Notify the server of this client wanting to be moved to another company.

Parameters
company_idid of the company the client wishes to be moved to.

Definition at line 1256 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendMove().

Referenced by NetworkClientListWindow::OnClickCompanyJoin().

◆ NetworkClientSendChat()

void NetworkClientSendChat ( NetworkAction  action,
DestType  type,
int  dest,
const std::string &  msg,
int64_t  data 
)

Send a chat message.

Parameters
actionThe action associated with the message.
typeThe destination type.
destThe destination index, be it a company index or client id.
msgThe actual message.
dataArbitrary extra data.

Definition at line 1363 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendChat().

◆ NetworkClientSendRcon()

void NetworkClientSendRcon ( const std::string &  password,
const std::string &  command 
)

Send a remote console command.

Parameters
passwordThe password.
commandThe command to execute.

Definition at line 1247 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendRCon().

◆ NetworkClientsToSpectators()

void NetworkClientsToSpectators ( CompanyID  cid)

Move the clients of a company to the spectators.

Parameters
cidThe company to move the clients of.

Definition at line 1265 of file network_client.cpp.

References _current_company, _local_company, COMPANY_SPECTATOR, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate(), and SetLocalCompany().

Referenced by ChangeOwnershipOfCompanyItems().

◆ NetworkCompanyHasClients()

bool NetworkCompanyHasClients ( CompanyID  company)

Check whether a particular company has clients.

Parameters
companyThe company to check.
Returns
True if at least one client is joined to the company.

Definition at line 2091 of file network_server.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate().

Referenced by AdminCompanyResetCallback().

◆ NetworkDisconnect()

void NetworkDisconnect ( bool  close_admins)

We want to disconnect from the host/clients.

Parameters
close_adminsWhether the admin sockets need to be closed as well.

Definition at line 1001 of file network.cpp.

References _network_server, CloseWindowById(), ServerNetworkAdminSocketHandler::IterateActive(), NetworkClose(), NetworkUDPInitialize(), WC_NETWORK_STATUS_WINDOW, and WN_NETWORK_STATUS_WINDOW_JOIN.

Referenced by NetworkClientJoinGame(), and NetworkShutDown().

◆ NetworkGetPublicKeyOfClient()

std::string_view NetworkGetPublicKeyOfClient ( ClientID  client_id)

Get the public key of the client with the given id.

Parameters
client_idThe id of the client.
Returns
View of the public key, which is empty when the client does not exist.

Definition at line 2139 of file network_server.cpp.

◆ NetworkHandlePauseChange()

void NetworkHandlePauseChange ( PauseMode  prev_mode,
PauseMode  changed_mode 
)

Handle the pause mode change so we send the right messages to the chat.

Parameters
prev_modeThe previous pause mode.
changed_modeThe pause mode that got changed.

Definition at line 356 of file network.cpp.

References _networking, _pause_mode, PM_PAUSED_ACTIVE_CLIENTS, PM_PAUSED_GAME_SCRIPT, PM_PAUSED_JOIN, PM_PAUSED_LINK_GRAPH, PM_PAUSED_NORMAL, PM_UNPAUSED, and SetDParam().

Referenced by CmdPause().

◆ NetworkIsValidClientName()

bool NetworkIsValidClientName ( const std::string_view  client_name)

Check whether the given client name is deemed valid for use in network games.

An empty name (null or '') is not valid as that is essentially no name at all. A name starting with white space is not valid for tab completion purposes.

Parameters
client_nameThe client name to check for validity.
Returns
True iff the name is valid.

Definition at line 1287 of file network_client.cpp.

Referenced by NetworkValidateClientName().

◆ NetworkMaxCompaniesAllowed()

uint NetworkMaxCompaniesAllowed ( )

Get the maximum number of companies that are allowed by the server.

Returns
The number of companies allowed.

Definition at line 1389 of file network_client.cpp.

References _network_server, _network_server_max_companies, _settings_client, NetworkSettings::max_companies, and ClientSettings::network.

Referenced by NetworkMaxCompaniesReached().

◆ NetworkMaxCompaniesReached()

bool NetworkMaxCompaniesReached ( )

Check if max_companies has been reached on the server (local check only).

Returns
true if the max value has been reached or exceeded, false otherwise.

Definition at line 1398 of file network_client.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetNumItems(), and NetworkMaxCompaniesAllowed().

Referenced by NetworkClientListWindow::RebuildList().

◆ NetworkOnGameStart()

◆ NetworkPopulateCompanyStats()

◆ NetworkServerChangeClientName()

bool NetworkServerChangeClientName ( ClientID  client_id,
const std::string &  new_name 
)

Change the client name of the given client.

Parameters
client_idthe client to change the name of
new_namethe new name for the client
Returns
true iff the name was changed

Definition at line 1653 of file network_server.cpp.

References NetworkClientInfo::GetByClientID(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate().

◆ NetworkServerDoMove()

void NetworkServerDoMove ( ClientID  client_id,
CompanyID  company_id 
)

Handle the tid-bits of moving a client from one company to another.

Parameters
client_idid of the client we want to move.
company_idid of the company we want to move the client to.
Returns
void

Definition at line 1983 of file network_server.cpp.

References _network_dedicated, CLIENT_ID_SERVER, NetworkClientInfo::client_playas, COMPANY_SPECTATOR, NetworkClientInfo::GetByClientID(), NetworkUpdateClientInfo(), and SetLocalCompany().

Referenced by NetworkClientListWindow::OnClickCompanyJoin().

◆ NetworkServerKickClient()

void NetworkServerKickClient ( ClientID  client_id,
const std::string &  reason 
)

Kick a single client.

Parameters
client_idThe client to kick.
reasonIn case of kicking a client, specifies the reason for kicking the client.

Definition at line 2030 of file network_server.cpp.

References CLIENT_ID_SERVER.

Referenced by AdminClientKickCallback(), and NetworkServerKickOrBanIP().

◆ NetworkServerKickOrBanIP() [1/2]

uint NetworkServerKickOrBanIP ( ClientID  client_id,
bool  ban,
const std::string &  reason 
)

Ban, or kick, everyone joined from the given client's IP.

Parameters
client_idThe client to check for.
banWhether to ban or kick.
reasonIn case of kicking a client, specifies the reason for kicking the client.

Definition at line 2042 of file network_server.cpp.

References NetworkServerKickOrBanIP().

Referenced by AdminClientBanCallback(), and NetworkServerKickOrBanIP().

◆ NetworkServerKickOrBanIP() [2/2]

uint NetworkServerKickOrBanIP ( const std::string &  ip,
bool  ban,
const std::string &  reason 
)

Kick or ban someone based on an IP address.

Parameters
ipThe IP address/range to ban/kick.
banWhether to ban or just kick.
reasonIn case of kicking a client, specifies the reason for kicking the client.

Definition at line 2053 of file network_server.cpp.

References _network_ban_list, _redirect_console_to_client, CLIENT_ID_SERVER, and NetworkServerKickClient().

◆ NetworkServerNewCompany()

void NetworkServerNewCompany ( const Company c,
NetworkClientInfo ci 
)

Perform all the server specific administration of a new company.

Parameters
cThe newly created company; can't be nullptr.
ciThe client information of the client that made the company; can be nullptr.

Definition at line 2151 of file network_server.cpp.

References _network_server, CALCA_ADD, NetworkClientInfo::client_id, NetworkClientInfo::client_name, NetworkClientInfo::client_playas, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, NetworkServerSendChat(), NetworkUpdateClientInfo(), and NetworkClientInfo::public_key.

Referenced by CmdCompanyCtrl(), and NetworkOnGameStart().

◆ NetworkServerSendChat()

void NetworkServerSendChat ( NetworkAction  action,
DestType  desttype,
int  dest,
const std::string &  msg,
ClientID  from_id,
int64_t  data,
bool  from_admin 
)

Send an actual chat message.

Parameters
actionThe action that's performed.
desttypeThe type of destination.
destThe actual destination index.
msgThe actual message.
from_idThe origin of the message.
dataArbitrary data.
from_adminWhether the origin is an admin or not.

Definition at line 1258 of file network_server.cpp.

References CLIENT_ID_SERVER, DESTTYPE_CLIENT, and NetworkClientInfo::GetByClientID().

Referenced by NetworkServerNewCompany().

◆ NetworkServerSendExternalChat()

void NetworkServerSendExternalChat ( const std::string &  source,
TextColour  colour,
const std::string &  user,
const std::string &  msg 
)

Send a chat message from external source.

Parameters
sourceName of the source this message came from.
colourTextColour to use for the message.
userName of the user who sent the messsage.
msgThe actual message.

Definition at line 1376 of file network_server.cpp.

References ServerNetworkGameSocketHandler::STATUS_AUTHORIZED.

◆ NetworkServerSendRcon()

void NetworkServerSendRcon ( ClientID  client_id,
TextColour  colour_code,
const std::string &  string 
)

Send an rcon reply to the client.

Parameters
client_idThe identifier of the client.
colour_codeThe colour of the text.
stringThe actual reply.

Definition at line 2020 of file network_server.cpp.

Referenced by IConsolePrint().

◆ NetworkUpdateClientInfo()

void NetworkUpdateClientInfo ( ClientID  client_id)

◆ NetworkUpdateClientName()

void NetworkUpdateClientName ( const std::string &  client_name)

Send the server our name as callback from the setting.

Parameters
newnameThe new client name.

Definition at line 1334 of file network_client.cpp.

References _network_own_client_id, _network_server, NetworkClientInfo::client_name, NetworkClientInfo::GetByClientID(), NetworkMakeClientNameUnique(), and ClientNetworkGameSocketHandler::SendSetName().

◆ NetworkValidateClientName()

bool NetworkValidateClientName ( std::string &  client_name)

Trim the given client name in place, i.e.

remove leading and trailing spaces. After the trim check whether the client name is valid. A client name is valid whenever the name is not empty and does not start with spaces. This check is done via NetworkIsValidClientName. When the client name is valid, this function returns true. When the client name is not valid a GUI error message is shown telling the user to set the client name and this function returns false.

This function is not suitable for ensuring a valid client name at the server as the error message will then be shown to the host instead of the client.

Parameters
client_nameThe client name to validate. It will be trimmed of leading and trailing spaces.
Returns
True iff the client name is valid.

Definition at line 1309 of file network_client.cpp.

References INVALID_STRING_ID, NetworkIsValidClientName(), ShowErrorMessage(), StrTrimInPlace(), and WL_ERROR.

Referenced by NetworkValidateOurClientName().

◆ NetworkValidateOurClientName()

bool NetworkValidateOurClientName ( )

Convenience method for NetworkValidateClientName on _settings_client.network.client_name.

It trims the client name and checks whether it is empty. When it is empty an error message is shown to the GUI user. See NetworkValidateClientName(char*) for details about the functionality.

Returns
True iff the client name is valid.

Definition at line 1325 of file network_client.cpp.

References _settings_client, NetworkSettings::client_name, ClientSettings::network, and NetworkValidateClientName().

Referenced by NetworkClientConnectGame().

◆ NetworkValidateServerName()

bool NetworkValidateServerName ( std::string &  server_name)

Trim the given server name in place, i.e.

remove leading and trailing spaces. After the trim check whether the server name is not empty. When the server name is empty a GUI error message is shown telling the user to set the servername and this function returns false.

Parameters
server_nameThe server name to validate. It will be trimmed of leading and trailing spaces.
Returns
True iff the server name is valid.

Definition at line 860 of file network.cpp.

References INVALID_STRING_ID, ShowErrorMessage(), StrTrimInPlace(), and WL_ERROR.

◆ ParseFullConnectionString()

std::string_view ParseFullConnectionString ( const std::string &  connection_string,
uint16_t &  port,
CompanyID company_id 
)

Converts a string to ip/port/company Format: IP:port::company.

Returns the IP part as a string view into the passed string. This view is valid as long the passed connection string is valid. If there is no port present in the connection string, the port reference will not be touched. When there is no company ID present in the connection string or company_id is nullptr, then company ID will not be touched.

Parameters
connection_stringThe string with the connection data.
portThe port reference to set.
company_idThe company ID to set, if available.
Returns
A std::string_view into the connection string with the (IP) address part.

Definition at line 523 of file network.cpp.

Variable Documentation

◆ _network_own_client_id

ClientID _network_own_client_id
extern