OpenTTD Source
20241108-master-g80f628063a
|
Server part of the network protocol. More...
#include "../stdafx.h"
#include "../strings_func.h"
#include "core/network_game_info.h"
#include "network_admin.h"
#include "network_server.h"
#include "network_udp.h"
#include "network_base.h"
#include "../console_func.h"
#include "../company_base.h"
#include "../command_func.h"
#include "../saveload/saveload.h"
#include "../saveload/saveload_filter.h"
#include "../station_base.h"
#include "../genworld.h"
#include "../company_func.h"
#include "../company_gui.h"
#include "../company_cmd.h"
#include "../roadveh.h"
#include "../order_backup.h"
#include "../core/pool_func.hpp"
#include "../core/random_func.hpp"
#include "../rev.h"
#include "../timer/timer.h"
#include "../timer/timer_game_calendar.h"
#include "../timer/timer_game_economy.h"
#include "../timer/timer_game_realtime.h"
#include <mutex>
#include <condition_variable>
#include "../safeguards.h"
Go to the source code of this file.
Data Structures | |
struct | PacketWriter |
Writing a savegame directly to a number of packets. More... | |
Functions | |
static NetworkAuthenticationDefaultPasswordProvider | _password_provider (_settings_client.network.server_password) |
Provides the password validation for the game's password. | |
static NetworkAuthenticationDefaultAuthorizedKeyHandler | _authorized_key_handler (_settings_client.network.server_authorized_keys) |
Provides the authorized key handling for the game authentication. | |
static NetworkAuthenticationDefaultAuthorizedKeyHandler | _rcon_authorized_key_handler (_settings_client.network.rcon_authorized_keys) |
Provides the authorized key validation for rcon. | |
static void | NetworkHandleCommandQueue (NetworkClientSocket *cs) |
Handle the command-queue of a socket. More... | |
static NetworkErrorCode | GetErrorForAuthenticationMethod (NetworkAuthenticationMethod method) |
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. 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 | NetworkPopulateCompanyStats (NetworkCompanyStats *stats) |
Populate the company stats. More... | |
void | NetworkUpdateClientInfo (ClientID client_id) |
Send updated client info of a particular client. More... | |
static void | NetworkAutoCleanCompanies () |
Remove companies that have not been used depending on the autoclean_companies setting and values for autoclean_protected , which removes any company, and autoclean_novehicles , which removes companies without vehicles. | |
bool | NetworkMakeClientNameUnique (std::string &name) |
Check whether a name is unique, and otherwise try to make it unique. More... | |
bool | NetworkServerChangeClientName (ClientID client_id, const std::string &new_name) |
Change the client name of the given client. More... | |
void | NetworkServer_Tick (bool send_frame) |
This is called every tick if this is a _network_server. More... | |
static void | NetworkRestartMap () |
Helper function to restart the map. | |
void | ChangeNetworkRestartTime (bool reset) |
Reset the automatic network restart time interval. More... | |
static void | NetworkCheckRestartMapYear () |
Check if we want to restart the map based on the year. | |
void | NetworkServerShowStatusToConsole () |
Show the status message of all clients on the console. | |
void | NetworkServerSendConfigUpdate () |
Send Config Update. | |
void | NetworkServerUpdateGameInfo () |
Update the server's NetworkServerGameInfo due to changes in settings. | |
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 | 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... | |
bool | NetworkCompanyHasClients (CompanyID company) |
Check whether a particular company has clients. 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 | NetworkServerNewCompany (const Company *c, NetworkClientInfo *ci) |
Perform all the server specific administration of a new company. More... | |
Server part of the network protocol.
Definition in file network_server.cpp.
void ChangeNetworkRestartTime | ( | bool | reset | ) |
Reset the automatic network restart time interval.
reset | Whether to reset the timer to zero. |
Definition at line 1853 of file network_server.cpp.
References _network_restart_map_timer, _network_server, _settings_client, ClientSettings::network, NetworkSettings::restart_hours, and TimerGameRealtime::UNPAUSED.
Referenced by NetworkOnGameStart().
bool NetworkCompanyHasClients | ( | CompanyID | company | ) |
Check whether a particular company has clients.
company | The company to check. |
Definition at line 2091 of file network_server.cpp.
Referenced by AdminCompanyResetCallback().
std::string_view NetworkGetPublicKeyOfClient | ( | ClientID | client_id | ) |
Get the public key of the client with the given id.
client_id | The id of the client. |
Definition at line 2139 of file network_server.cpp.
|
static |
Handle the command-queue of a socket.
cs | The socket to handle the queue for. |
Definition at line 1675 of file network_server.cpp.
bool NetworkMakeClientNameUnique | ( | std::string & | name | ) |
Check whether a name is unique, and otherwise try to make it unique.
new_name | The name to check/modify. |
Definition at line 1614 of file network_server.cpp.
References CLIENT_ID_SERVER, NetworkClientInfo::client_name, NetworkClientInfo::GetByClientID(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate(), MAX_CLIENTS, and NETWORK_CLIENT_NAME_LENGTH.
Referenced by NetworkUpdateClientName().
void NetworkPopulateCompanyStats | ( | NetworkCompanyStats * | stats | ) |
Populate the company stats.
stats | the stats to update |
Definition at line 1499 of file network_server.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Iterate(), MAX_COMPANIES, and VEH_TRAIN.
Referenced by ServerNetworkAdminSocketHandler::SendCompanyStats().
void NetworkServer_Tick | ( | bool | send_frame | ) |
This is called every tick if this is a _network_server.
send_frame | Whether to send the frame to the clients. |
Definition at line 1685 of file network_server.cpp.
References _frame_counter, _last_sync_frame, _settings_client, NetworkSettings::bytes_per_frame, NetworkSettings::bytes_per_frame_burst, ClientSettings::network, and NetworkSettings::sync_freq.
bool NetworkServerChangeClientName | ( | ClientID | client_id, |
const std::string & | new_name | ||
) |
Change the client name of the given client.
client_id | the client to change the name of |
new_name | the new name for the client |
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().
Handle the tid-bits of moving a client from one company to another.
client_id | id of the client we want to move. |
company_id | id of the company we want to move the client to. |
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().
void NetworkServerKickClient | ( | ClientID | client_id, |
const std::string & | reason | ||
) |
Kick a single client.
client_id | The client to kick. |
reason | In 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().
uint NetworkServerKickOrBanIP | ( | ClientID | client_id, |
bool | ban, | ||
const std::string & | reason | ||
) |
Ban, or kick, everyone joined from the given client's IP.
client_id | The client to check for. |
ban | Whether to ban or kick. |
reason | In 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().
uint NetworkServerKickOrBanIP | ( | const std::string & | ip, |
bool | ban, | ||
const std::string & | reason | ||
) |
Kick or ban someone based on an IP address.
ip | The IP address/range to ban/kick. |
ban | Whether to ban or just kick. |
reason | In 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().
void NetworkServerNewCompany | ( | const Company * | c, |
NetworkClientInfo * | ci | ||
) |
Perform all the server specific administration of a new company.
c | The newly created company; can't be nullptr. |
ci | The 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().
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.
action | The action that's performed. |
desttype | The type of destination. |
dest | The actual destination index. |
msg | The actual message. |
from_id | The origin of the message. |
data | Arbitrary data. |
from_admin | Whether 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().
void NetworkServerSendExternalChat | ( | const std::string & | source, |
TextColour | colour, | ||
const std::string & | user, | ||
const std::string & | msg | ||
) |
Send a chat message from external source.
source | Name of the source this message came from. |
colour | TextColour to use for the message. |
user | Name of the user who sent the messsage. |
msg | The actual message. |
Definition at line 1376 of file network_server.cpp.
References ServerNetworkGameSocketHandler::STATUS_AUTHORIZED.
void NetworkServerSendRcon | ( | ClientID | client_id, |
TextColour | colour_code, | ||
const std::string & | string | ||
) |
Send an rcon reply to the client.
client_id | The identifier of the client. |
colour_code | The colour of the text. |
string | The actual reply. |
Definition at line 2020 of file network_server.cpp.
Referenced by IConsolePrint().
void NetworkUpdateClientInfo | ( | ClientID | client_id | ) |
Send updated client info of a particular client.
client_id | The client to send it for. |
Definition at line 1535 of file network_server.cpp.
References NetworkClientInfo::client_playas, TimerGameEconomy::date, TimerGameEconomy::date_fract, Debug, NetworkClientInfo::GetByClientID(), NetworkAdminClientUpdate(), and ServerNetworkGameSocketHandler::STATUS_AUTHORIZED.
Referenced by CmdCompanyCtrl(), NetworkServerDoMove(), and NetworkServerNewCompany().
|
static |
Calendar yearly "callback".
Called whenever the calendar year changes.
|
static |
Daily "callback".
Called whenever the economy date changes.
|
static |
Economy yearly "callback".
Called whenever the economy year changes.
|
static |
Economy monthly "callback".
Called whenever the economy month changes.
|
static |
Quarterly "callback".
Called whenever the economy quarter changes.
|
static |
Timer to restart a network server automatically based on real-time hours played.
Initialized at zero to disable until settings are loaded.
Referenced by ChangeNetworkRestartTime().
|
static |
Economy weekly "callback".
Called whenever the economy week changes.
NetworkClientSocketPool _networkclientsocket_pool("NetworkClientSocket") | ( | "NetworkClientSocket" | ) |
Make very sure the preconditions given in network_type.h are actually followed.
Yes... The pool with clients.