OpenTTD Source: src/network/network_server.cpp File Reference

OpenTTD Source 1.11.0-RC1

Data Structures | Functions | Variables
network_server.cpp File Reference
`#include "../stdafx.h"`
`#include "../strings_func.h"`
`#include "../date_func.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 "../roadveh.h"`
`#include "../order_backup.h"`
`#include "../core/pool_func.hpp"`
`#include "../core/random_func.hpp"`
`#include "../rev.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 void | NetworkHandleCommandQueue (NetworkClientSocket *cs)
| Handle the command-queue of a socket. More...
void | NetworkServerSendChat (NetworkAction action, DestType desttype, int dest, const char *msg, ClientID from_id, int64 data, bool from_admin)
| Send an actual chat message. 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 | NetworkCheckRestartMap ()
| Check if we want to restart the map.
static void | NetworkAutoCleanCompanies ()
| Check if the server has autoclean_companies activated Two things happen: 1) If a company is not protected, it is closed after 1 year (for example) 2) If a company is protected, protection is disabled after 3 years (for example) (and item 1. More...
bool | NetworkFindName (char *new_name, const char *last)
| Check whether a name is unique, and otherwise try to make it unique. More...
bool | NetworkServerChangeClientName (ClientID client_id, const char *new_name)
| Change the client name of the given client. More...
void | NetworkServerSetCompanyPassword (CompanyID company_id, const char *password, bool already_hashed)
| Set/Reset a company password on the server end. More...
void | NetworkServer_Tick (bool send_frame)
| This is called every tick if this is a _network_server. More...
void | NetworkServerYearlyLoop ()
| Yearly "callback". More...
void | NetworkServerMonthlyLoop ()
| Monthly "callback". More...
void | NetworkServerDailyLoop ()
| Daily "callback". More...
void | NetworkServerShowStatusToConsole ()
| Show the status message of all clients on the console.
void | NetworkServerSendConfigUpdate ()
| Send Config Update.
void | NetworkServerUpdateCompanyPassworded (CompanyID company_id, bool passworded)
| Tell that a particular company is (not) passworded. 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 char *string)
| Send an rcon reply to the client. More...
void | NetworkServerKickClient (ClientID client_id, const char *reason)
| Kick a single client. More...
uint | NetworkServerKickOrBanIP (ClientID client_id, bool ban, const char *reason)
| Ban, or kick, everyone joined from the given client's IP. More...
uint | NetworkServerKickOrBanIP (const char *ip, bool ban, const char *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.
void | NetworkServerNewCompany (const Company *c, NetworkClientInfo *ci)
| Perform all the server specific administration of a new company. More...

## Variables
static ClientID | _network_client_id = CLIENT_ID_FIRST
| The identifier counter for new clients (is never decreased)
NetworkClientSocketPool | _networkclientsocket_pool ("NetworkClientSocket")
| Make very sure the preconditions given in network_type.h are actually followed. More...

## Detailed Description

Server part of the network protocol.

Definition in file network_server.cpp.

## Function Documentation

## ◆ NetworkAutoCleanCompanies()

static void NetworkAutoCleanCompanies | ( |  | ) |
| static

Check if the server has autoclean_companies activated Two things happen: 1) If a company is not protected, it is closed after 1 year (for example) 2) If a company is protected, protection is disabled after 3 years (for example) (and item 1.

happens a year later)

Definition at line 1645 of file network_server.cpp.

References _network_company_states, _network_dedicated, _settings_client, NetworkSettings::autoclean_companies, NetworkSettings::autoclean_novehicles, NetworkSettings::autoclean_protected, NetworkSettings::autoclean_unprotected, CC_DEFAULT, CCA_DELETE, CLIENT_ID_SERVER, NetworkClientInfo::client_playas, CMD_COMPANY_CTRL, CRR_AUTOCLEAN, DoCommandP(), NetworkClientInfo::GetByClientID(), IConsolePrintF(), 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(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate(), MAX_COMPANIES, NetworkCompanyState::months_empty, ClientSettings::network, NetworkServerUpdateCompanyPassworded(), NetworkCompanyState::password, and StrEmpty().

Referenced by NetworkServerMonthlyLoop().

## ◆ NetworkCompanyHasClients()

bool NetworkCompanyHasClients | ( | CompanyID | company | ) |

Check whether a particular company has clients.

Parameters

  company | The company to check.

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

Definition at line 2145 of file network_server.cpp.

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

## ◆ NetworkFindName()

bool NetworkFindName | ( | char * | new_name,
|  | const char * | last
| ) |  |

Check whether a name is unique, and otherwise try to make it unique.

Parameters

  new_name | The name to check/modify.
  last | The last writeable element of the buffer.

Returns
  True if an unique name was achieved.

Definition at line 1715 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(), lastof, MAX_CLIENTS, NETWORK_CLIENT_NAME_LENGTH, seprintf(), and strecpy().

Referenced by NetworkUpdateClientName().

## ◆ NetworkHandleCommandQueue()

static void NetworkHandleCommandQueue | ( | NetworkClientSocket * | cs | ) |
| static

Handle the command-queue of a socket.

Parameters

  cs | The socket to handle the queue for.

Definition at line 1796 of file network_server.cpp.

References free().

## ◆ NetworkPopulateCompanyStats()

void NetworkPopulateCompanyStats | ( | NetworkCompanyStats * | stats | ) |

Populate the company stats.

Parameters

  stats | the stats to update

Definition at line 1565 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 ServerNetworkUDPSocketHandler::Receive_CLIENT_DETAIL_INFO(), ServerNetworkGameSocketHandler::SendCompanyInfo(), and ServerNetworkAdminSocketHandler::SendCompanyStats().

## ◆ NetworkServer_Tick()

void NetworkServer_Tick | ( | bool | send_frame | ) |

This is called every tick if this is a _network_server.

Parameters

  send_frame | Whether to send the frame to the clients.

Definition at line 1809 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.

## ◆ NetworkServerChangeClientName()

bool NetworkServerChangeClientName | ( | ClientID | client_id,
|  | const char * | new_name
| ) |  |

Change the client name of the given client.

Parameters

  client_id | the client to change the name of
  new_name | the new name for the client

Returns
  true iff the name was changed

Definition at line 1756 of file network_server.cpp.

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

## ◆ NetworkServerDailyLoop()

void NetworkServerDailyLoop | ( |  | ) |

Daily "callback".

Called whenever the date changes.

Definition at line 1959 of file network_server.cpp.

References _date, ADMIN_FREQUENCY_DAILY, ADMIN_FREQUENCY_WEEKLY, and NetworkAdminUpdate().

## ◆ NetworkServerDoMove()

void NetworkServerDoMove | ( | ClientID | client_id,
|  | CompanyID | company_id
| ) |  |

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

Parameters

  client_id | id of the client we want to move.
  company_id | id of the company we want to move the client to.

Returns
  void

Definition at line 2040 of file network_server.cpp.

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

## ◆ NetworkServerKickClient()

void NetworkServerKickClient | ( | ClientID | client_id,
|  | const char * | reason
| ) |  |

Kick a single client.

Parameters

  client_id | The client to kick.
  reason | In case of kicking a client, specifies the reason for kicking the client.

Definition at line 2084 of file network_server.cpp.

References CLIENT_ID_SERVER.

Referenced by NetworkServerKickOrBanIP().

## ◆ NetworkServerKickOrBanIP() [1/2]

uint NetworkServerKickOrBanIP | ( | ClientID | client_id,
|  | bool | ban,
|  | const char * | reason
| ) |  |

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

Parameters

  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 2096 of file network_server.cpp.

## ◆ NetworkServerKickOrBanIP() [2/2]

uint NetworkServerKickOrBanIP | ( | const char * | ip,
|  | bool | ban,
|  | const char * | reason
| ) |  |

Kick or ban someone based on an IP address.

Parameters

  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 2107 of file network_server.cpp.

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

## ◆ NetworkServerMonthlyLoop()

void NetworkServerMonthlyLoop | ( |  | ) |

Monthly "callback".

Called whenever the month changes.

Definition at line 1951 of file network_server.cpp.

References _cur_month, ADMIN_FREQUENCY_MONTHLY, ADMIN_FREQUENCY_QUARTERLY, NetworkAdminUpdate(), and NetworkAutoCleanCompanies().

## ◆ NetworkServerNewCompany()

void NetworkServerNewCompany | ( | const Company * | c,
|  | NetworkClientInfo * | ci
| ) |  |

Perform all the server specific administration of a new company.

Parameters

  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 2196 of file network_server.cpp.

References _network_company_states, _network_server, NetworkClientInfo::client_id, NetworkClientInfo::client_name, NetworkClientInfo::client_playas, CMD_RENAME_PRESIDENT, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, NetworkCompanyState::months_empty, NetworkAdminCompanyInfo(), NetworkSendCommand(), NetworkServerSendChat(), NetworkServerUpdateCompanyPassworded(), NetworkUpdateClientInfo(), and NetworkCompanyState::password.

## ◆ NetworkServerSendChat()

void NetworkServerSendChat | ( | NetworkAction | action,
|  | DestType | desttype,
|  | int | dest,
|  | const char * | msg,
|  | ClientID | from_id,
|  | int64 | data,
|  | bool | from_admin
| ) |  |

Send an actual chat message.

Parameters

  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 1273 of file network_server.cpp.

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

Referenced by NetworkServerNewCompany().

## ◆ NetworkServerSendRcon()

void NetworkServerSendRcon | ( | ClientID | client_id,
|  | TextColour | colour_code,
|  | const char * | string
| ) |  |

Send an rcon reply to the client.

Parameters

  client_id | The identifier of the client.
  colour_code | The colour of the text.
  string | The actual reply.

Definition at line 2074 of file network_server.cpp.

Referenced by IConsolePrint().

## ◆ NetworkServerSetCompanyPassword()

void NetworkServerSetCompanyPassword | ( | CompanyID | company_id,
|  | const char * | password,
|  | bool | already_hashed
| ) |  |

Set/Reset a company password on the server end.

Parameters

  company_id | ID of the company the password should be changed for.
  password | The new password.
  already_hashed | Is the given password already hashed?

Definition at line 1780 of file network_server.cpp.

References _network_company_states, _settings_client, _settings_game, GameSettings::game_creation, GenerateCompanyPasswordHash(), GameCreationSettings::generation_seed, Company::IsValidHumanID(), lastof, ClientSettings::network, NetworkSettings::network_id, NetworkServerUpdateCompanyPassworded(), strecpy(), and StrEmpty().

Referenced by NetworkChangeCompanyPassword().

## ◆ NetworkServerUpdateCompanyPassworded()

void NetworkServerUpdateCompanyPassworded | ( | CompanyID | company_id,
|  | bool | passworded
| ) |  |

Tell that a particular company is (not) passworded.

Parameters

  company_id | The company that got/removed the password.
  passworded | Whether the password was received or removed.

Definition at line 2020 of file network_server.cpp.

References _network_company_passworded, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), NetworkAdminCompanyUpdate(), NetworkCompanyIsPassworded(), SB(), SetWindowClassesDirty(), and WC_COMPANY.

Referenced by NetworkAutoCleanCompanies(), NetworkServerNewCompany(), and NetworkServerSetCompanyPassword().

## ◆ NetworkServerYearlyLoop()

void NetworkServerYearlyLoop | ( |  | ) |

Yearly "callback".

Called whenever the year changes.

Definition at line 1944 of file network_server.cpp.

References ADMIN_FREQUENCY_ANUALLY, NetworkAdminUpdate(), and NetworkCheckRestartMap().

## ◆ NetworkUpdateClientInfo()

void NetworkUpdateClientInfo | ( | ClientID | client_id | ) |

Send updated client info of a particular client.

Parameters

  client_id | The client to send it for.

Definition at line 1601 of file network_server.cpp.

References _date, _date_fract, NetworkClientInfo::client_playas, DEBUG, NetworkClientInfo::GetByClientID(), and NetworkAdminClientUpdate().

Referenced by NetworkServerDoMove(), and NetworkServerNewCompany().

## Variable Documentation

## ◆ _networkclientsocket_pool

NetworkClientSocketPool _networkclientsocket_pool("NetworkClientSocket")

Make very sure the preconditions given in network_type.h are actually followed.

Yes... The pool with clients.