Minetest  5.4.0
server.h
Go to the documentation of this file.
1 /*
2 Minetest
3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14 
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 
20 #pragma once
21 
22 #include "irr_v3d.h"
23 #include "map.h"
24 #include "hud.h"
25 #include "gamedef.h"
26 #include "serialization.h" // For SER_FMT_VER_INVALID
27 #include "content/mods.h"
28 #include "inventorymanager.h"
29 #include "content/subgames.h"
30 #include "tileanimation.h" // TileAnimationParams
31 #include "particles.h" // ParticleParams
32 #include "network/peerhandler.h"
33 #include "network/address.h"
34 #include "util/numeric.h"
35 #include "util/thread.h"
36 #include "util/basic_macros.h"
37 #include "util/metricsbackend.h"
38 #include "serverenvironment.h"
39 #include "clientiface.h"
40 #include "chatmessage.h"
41 #include "translation.h"
42 #include <string>
43 #include <list>
44 #include <map>
45 #include <vector>
46 
47 class ChatEvent;
48 struct ChatEventChat;
49 struct ChatInterface;
51 class NodeDefManager;
53 class BanManager;
54 class EventManager;
55 class Inventory;
56 class ModChannelMgr;
57 class RemotePlayer;
58 class PlayerSAO;
60 class IRollbackManager;
61 struct RollbackAction;
62 class EmergeManager;
63 class ServerScripting;
64 class ServerEnvironment;
65 struct SimpleSoundSpec;
66 struct CloudParams;
67 struct SkyboxParams;
68 struct SunParams;
69 struct MoonParams;
70 struct StarParams;
71 class ServerThread;
72 class ServerModManager;
74 
78  CDR_DENY
79 };
80 
81 struct MediaInfo
82 {
83  std::string path;
84  std::string sha1_digest;
85 
86  MediaInfo(const std::string &path_="",
87  const std::string &sha1_digest_=""):
88  path(path_),
89  sha1_digest(sha1_digest_)
90  {
91  }
92 };
93 
95 {
96  enum Type {
101  float gain = 1.0f;
102  float fade = 0.0f;
103  float pitch = 1.0f;
104  bool loop = false;
105  float max_hear_distance = 32 * BS;
107  u16 object = 0;
108  std::string to_player = "";
109  std::string exclude_player = "";
110 
111  v3f getPos(ServerEnvironment *env, bool *pos_exists) const;
112 };
113 
115 {
118  std::unordered_set<session_t> clients; // peer ids
119 };
120 
121 struct MinimapMode {
123  std::string label;
124  u16 size = 0;
125  std::string texture;
126  u16 scale = 1;
127 };
128 
129 // structure for everything getClientInfo returns, for convenience
130 struct ClientInfo {
133  u32 uptime;
137  std::string vers_string, lang_code;
138 };
139 
140 class Server : public con::PeerHandler, public MapEventReceiver,
141  public IGameDef
142 {
143 public:
144  /*
145  NOTE: Every public method should be thread-safe
146  */
147 
148  Server(
149  const std::string &path_world,
150  const SubgameSpec &gamespec,
151  bool simple_singleplayer_mode,
152  Address bind_addr,
153  bool dedicated,
154  ChatInterface *iface = nullptr,
155  std::string *on_shutdown_errmsg = nullptr
156  );
157  ~Server();
159 
160  void start();
161  void stop();
162  // This is mainly a way to pass the time to the server.
163  // Actual processing is done in an another thread.
164  void step(float dtime);
165  // This is run by ServerThread and does the actual processing
166  void AsyncRunStep(bool initial_step=false);
167  void Receive();
169 
170  /*
171  * Command Handlers
172  */
173 
174  void handleCommand(NetworkPacket* pkt);
175 
200 
201  void ProcessData(NetworkPacket *pkt);
202 
203  void Send(NetworkPacket *pkt);
204  void Send(session_t peer_id, NetworkPacket *pkt);
205 
206  // Helper for handleCommand_PlayerPos and handleCommand_Interact
207  void process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
208  NetworkPacket *pkt);
209 
210  // Both setter and getter need no envlock,
211  // can be called freely from threads
212  void setTimeOfDay(u32 time);
213 
214  /*
215  Shall be called with the environment locked.
216  This is accessed by the map, which is inside the environment,
217  so it shouldn't be a problem.
218  */
219  void onMapEditEvent(const MapEditEvent &event);
220 
221  // Connection must be locked when called
222  std::string getStatusString();
223  inline double getUptime() const { return m_uptime_counter->get(); }
224 
225  // read shutdown state
226  inline bool isShutdownRequested() const { return m_shutdown_state.is_requested; }
227 
228  // request server to shutdown
229  void requestShutdown(const std::string &msg, bool reconnect, float delay = 0.0f);
230 
231  // Returns -1 if failed, sound handle on success
232  // Envlock
233  s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams &params,
234  bool ephemeral=false);
235  void stopSound(s32 handle);
236  void fadeSound(s32 handle, float step, float gain);
237 
238  // Envlock
239  std::set<std::string> getPlayerEffectivePrivs(const std::string &name);
240  bool checkPriv(const std::string &name, const std::string &priv);
241  void reportPrivsModified(const std::string &name=""); // ""=all
242  void reportInventoryFormspecModified(const std::string &name);
243  void reportFormspecPrependModified(const std::string &name);
244 
245  void setIpBanned(const std::string &ip, const std::string &name);
246  void unsetIpBanned(const std::string &ip_or_name);
247  std::string getBanDescription(const std::string &ip_or_name);
248 
249  void notifyPlayer(const char *name, const std::wstring &msg);
250  void notifyPlayers(const std::wstring &msg);
251 
252  void spawnParticle(const std::string &playername,
253  const ParticleParameters &p);
254 
256  ServerActiveObject *attached, const std::string &playername);
257 
258  void deleteParticleSpawner(const std::string &playername, u32 id);
259 
260  bool dynamicAddMedia(const std::string &filepath, std::vector<RemotePlayer*> &sent_to);
261 
263  void sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id);
264 
265  // Envlock and conlock should be locked when using scriptapi
267 
268  // actions: time-reversed list
269  // Return value: success/failure
270  bool rollbackRevertActions(const std::list<RollbackAction> &actions,
271  std::list<std::string> *log);
272 
273  // IGameDef interface
274  // Under envlock
276  virtual const NodeDefManager* getNodeDefManager();
278  virtual u16 allocateUnknownNodeId(const std::string &name);
280  virtual EmergeManager *getEmergeManager() { return m_emerge; }
281 
285 
286  virtual const std::vector<ModSpec> &getMods() const;
287  virtual const ModSpec* getModSpec(const std::string &modname) const;
288  void getModNames(std::vector<std::string> &modlist);
289  std::string getBuiltinLuaPath();
290  virtual std::string getWorldPath() const { return m_path_world; }
291  virtual std::string getModStoragePath() const;
292 
293  inline bool isSingleplayer()
294  { return m_simple_singleplayer_mode; }
295 
296  inline void setAsyncFatalError(const std::string &error)
298 
299  bool showFormspec(const char *name, const std::string &formspec, const std::string &formname);
300  Map & getMap() { return m_env->getMap(); }
301  ServerEnvironment & getEnv() { return *m_env; }
302  v3f findSpawnPos();
303 
304  u32 hudAdd(RemotePlayer *player, HudElement *element);
305  bool hudRemove(RemotePlayer *player, u32 id);
306  bool hudChange(RemotePlayer *player, u32 id, HudElementStat stat, void *value);
307  bool hudSetFlags(RemotePlayer *player, u32 flags, u32 mask);
308  bool hudSetHotbarItemcount(RemotePlayer *player, s32 hotbar_itemcount);
309  void hudSetHotbarImage(RemotePlayer *player, const std::string &name);
310  void hudSetHotbarSelectedImage(RemotePlayer *player, const std::string &name);
311 
313 
314  void setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4],
315  f32 frame_speed);
316  void setPlayerEyeOffset(RemotePlayer *player, const v3f &first, const v3f &third);
317 
318  void setSky(RemotePlayer *player, const SkyboxParams &params);
319  void setSun(RemotePlayer *player, const SunParams &params);
320  void setMoon(RemotePlayer *player, const MoonParams &params);
321  void setStars(RemotePlayer *player, const StarParams &params);
322 
323  void setClouds(RemotePlayer *player, const CloudParams &params);
324 
325  void overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
326 
327  /* con::PeerHandler implementation. */
328  void peerAdded(con::Peer *peer);
329  void deletingPeer(con::Peer *peer, bool timeout);
330 
331  void DenySudoAccess(session_t peer_id);
332  void DenyAccessVerCompliant(session_t peer_id, u16 proto_ver, AccessDeniedCode reason,
333  const std::string &str_reason = "", bool reconnect = false);
334  void DenyAccess(session_t peer_id, AccessDeniedCode reason,
335  const std::string &custom_reason = "");
336  void acceptAuth(session_t peer_id, bool forSudoMode);
337  void DenyAccess_Legacy(session_t peer_id, const std::wstring &reason);
338  void DisconnectPeer(session_t peer_id);
339  bool getClientConInfo(session_t peer_id, con::rtt_stat_type type, float *retval);
340  bool getClientInfo(session_t peer_id, ClientInfo &ret);
341 
342  void printToConsoleOnly(const std::string &text);
343 
344  void SendPlayerHPOrDie(PlayerSAO *player, const PlayerHPChangeReason &reason);
345  void SendPlayerBreath(PlayerSAO *sao);
346  void SendInventory(PlayerSAO *playerSAO, bool incremental);
347  void SendMovePlayer(session_t peer_id);
348  void SendPlayerSpeed(session_t peer_id, const v3f &added_vel);
349  void SendPlayerFov(session_t peer_id);
350 
351  void SendMinimapModes(session_t peer_id,
352  std::vector<MinimapMode> &modes,
353  size_t wanted_mode);
354 
355  void sendDetachedInventories(session_t peer_id, bool incremental);
356 
357  virtual bool registerModStorage(ModMetadata *storage);
358  virtual void unregisterModStorage(const std::string &name);
359 
360  bool joinModChannel(const std::string &channel);
361  bool leaveModChannel(const std::string &channel);
362  bool sendModChannelMessage(const std::string &channel, const std::string &message);
363  ModChannel *getModChannel(const std::string &channel);
364 
365  // Send block to specific player only
366  bool SendBlock(session_t peer_id, const v3s16 &blockpos);
367 
368  // Get or load translations for a language
369  Translations *getTranslationLanguage(const std::string &lang_code);
370 
371  // Bind address
373 
374  // Environment mutex (envlock)
375  std::mutex m_env_mutex;
376 
377 private:
378  friend class EmergeThread;
379  friend class RemoteClient;
381 
382  struct ShutdownState {
384  public:
385  bool is_requested = false;
386  bool should_reconnect = false;
387  std::string message;
388 
389  void reset();
390  void trigger(float delay, const std::string &msg, bool reconnect);
391  void tick(float dtime, Server *server);
392  std::wstring getShutdownTimerMessage() const;
393  bool isTimerRunning() const { return m_timer > 0.0f; }
394  private:
395  float m_timer = 0.0f;
396  };
397 
398  void init();
399 
400  void SendMovement(session_t peer_id);
401  void SendHP(session_t peer_id, u16 hp);
402  void SendBreath(session_t peer_id, u16 breath);
403  void SendAccessDenied(session_t peer_id, AccessDeniedCode reason,
404  const std::string &custom_reason, bool reconnect = false);
405  void SendAccessDenied_Legacy(session_t peer_id, const std::wstring &reason);
406  void SendDeathscreen(session_t peer_id, bool set_camera_point_target,
407  v3f camera_point_target);
408  void SendItemDef(session_t peer_id, IItemDefManager *itemdef, u16 protocol_version);
409  void SendNodeDef(session_t peer_id, const NodeDefManager *nodedef,
410  u16 protocol_version);
411 
412  /* mark blocks not sent for all clients */
413  void SetBlocksNotSent(std::map<v3s16, MapBlock *>& block);
414 
415 
416  virtual void SendChatMessage(session_t peer_id, const ChatMessage &message);
417  void SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed);
418  void SendPlayerHP(session_t peer_id);
419 
420  void SendLocalPlayerAnimations(session_t peer_id, v2s32 animation_frames[4],
421  f32 animation_speed);
422  void SendEyeOffset(session_t peer_id, v3f first, v3f third);
423  void SendPlayerPrivileges(session_t peer_id);
425  void SendPlayerFormspecPrepend(session_t peer_id);
426  void SendShowFormspecMessage(session_t peer_id, const std::string &formspec,
427  const std::string &formname);
428  void SendHUDAdd(session_t peer_id, u32 id, HudElement *form);
429  void SendHUDRemove(session_t peer_id, u32 id);
430  void SendHUDChange(session_t peer_id, u32 id, HudElementStat stat, void *value);
431  void SendHUDSetFlags(session_t peer_id, u32 flags, u32 mask);
432  void SendHUDSetParam(session_t peer_id, u16 param, const std::string &value);
433  void SendSetSky(session_t peer_id, const SkyboxParams &params);
434  void SendSetSun(session_t peer_id, const SunParams &params);
435  void SendSetMoon(session_t peer_id, const MoonParams &params);
436  void SendSetStars(session_t peer_id, const StarParams &params);
437  void SendCloudParams(session_t peer_id, const CloudParams &params);
438  void SendOverrideDayNightRatio(session_t peer_id, bool do_override, float ratio);
439  void broadcastModChannelMessage(const std::string &channel,
440  const std::string &message, session_t from_peer);
441 
442  /*
443  Send a node removal/addition event to all clients except ignore_id.
444  Additionally, if far_players!=NULL, players further away than
445  far_d_nodes are ignored and their peer_ids are added to far_players
446  */
447  // Envlock and conlock should be locked when calling these
448  void sendRemoveNode(v3s16 p, std::unordered_set<u16> *far_players = nullptr,
449  float far_d_nodes = 100);
450  void sendAddNode(v3s16 p, MapNode n,
451  std::unordered_set<u16> *far_players = nullptr,
452  float far_d_nodes = 100, bool remove_metadata = true);
453 
454  void sendMetadataChanged(const std::list<v3s16> &meta_updates,
455  float far_d_nodes = 100);
456 
457  // Environment and Connection must be locked when called
458  void SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver, u16 net_proto_version);
459 
460  // Sends blocks to clients (locks env and con on its own)
461  void SendBlocks(float dtime);
462 
463  bool addMediaFile(const std::string &filename, const std::string &filepath,
464  std::string *filedata = nullptr, std::string *digest = nullptr);
465  void fillMediaCache();
466  void sendMediaAnnouncement(session_t peer_id, const std::string &lang_code);
467  void sendRequestedMedia(session_t peer_id,
468  const std::vector<std::string> &tosend);
469 
470  // Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all)
471  void SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
472  const ParticleSpawnerParameters &p, u16 attached_id, u32 id);
473 
474  void SendDeleteParticleSpawner(session_t peer_id, u32 id);
475 
476  // Spawns particle on peer with peer_id (PEER_ID_INEXISTENT == all)
477  void SendSpawnParticle(session_t peer_id, u16 protocol_version,
478  const ParticleParameters &p);
479 
481  void SendActiveObjectMessages(session_t peer_id, const std::string &datas,
482  bool reliable = true);
483  void SendCSMRestrictionFlags(session_t peer_id);
484 
485  /*
486  Something random
487  */
488 
489  void DiePlayer(session_t peer_id, const PlayerHPChangeReason &reason);
490  void RespawnPlayer(session_t peer_id);
491  void DeleteClient(session_t peer_id, ClientDeletionReason reason);
492  void UpdateCrafting(RemotePlayer *player);
493  bool checkInteractDistance(RemotePlayer *player, const f32 d, const std::string &what);
494 
496 
497  // This returns the answer to the sender of wmessage, or "" if there is none
498  std::wstring handleChat(const std::string &name, std::wstring wmessage_input,
499  bool check_shout_priv = false, RemotePlayer *player = nullptr);
500  void handleAdminChat(const ChatEventChat *evt);
501 
502  // When called, connection mutex should be locked
503  RemoteClient* getClient(session_t peer_id, ClientState state_min = CS_Active);
505 
506  // When called, environment mutex should be locked
507  std::string getPlayerName(session_t peer_id);
508  PlayerSAO *getPlayerSAO(session_t peer_id);
509 
510  /*
511  Get a player from memory or creates one.
512  If player is already connected, return NULL
513  Does not verify/modify auth info and password.
514 
515  Call with env and con locked.
516  */
517  PlayerSAO *emergePlayer(const char *name, session_t peer_id, u16 proto_version);
518 
519  void handlePeerChanges();
520 
521  /*
522  Variables
523  */
524  // World directory
525  std::string m_path_world;
526  // Subgame specification
528  // If true, do not allow multiple players and hide some multiplayer
529  // functionality
532  // For "dedicated" server list flag
535 
536  // Thread can set; step() will throw as ServerError
538 
539  // Some timers
542  float m_masterserver_timer = 0.0f;
544  float m_savemap_timer = 0.0f;
546 
547  // Environment
549 
550  // Reference to the server map until ServerEnvironment is initialized
551  // after that this variable must be a nullptr
553 
554  // server connection
555  std::shared_ptr<con::Connection> m_con;
556 
557  // Ban checking
559 
560  // Rollback manager (behind m_env_mutex)
562 
563  // Emerge manager
565 
566  // Scripting
567  // Envlock and conlock should be locked when using Lua
569 
570  // Item definition manager
572 
573  // Node definition manager
575 
576  // Craft definition manager
578 
579  // Mods
580  std::unique_ptr<ServerModManager> m_modmgr;
581 
582  std::unordered_map<std::string, Translations> server_translations;
583 
584  /*
585  Threads
586  */
587  // A buffer for time steps
588  // step() increments and AsyncRunStep() run by m_thread reads it.
589  float m_step_dtime = 0.0f;
590  std::mutex m_step_dtime_mutex;
591 
592  // The server mainly operates in this thread
593  ServerThread *m_thread = nullptr;
594 
595  /*
596  Time related stuff
597  */
598  // Timer for sending time of day over network
600 
601  /*
602  Client interface
603  */
605 
606  /*
607  Peer change queue.
608  Queues stuff from peerAdded() and deletingPeer() to
609  handlePeerChanges()
610  */
611  std::queue<con::PeerChange> m_peer_change_queue;
612 
613  std::unordered_map<session_t, std::string> m_formspec_state_data;
614 
615  /*
616  Random stuff
617  */
618 
620 
622  std::string m_admin_nick;
623 
624  // if a mod-error occurs in the on_shutdown callback, the error message will
625  // be written into this
626  std::string *const m_on_shutdown_errmsg;
627 
628  /*
629  Map edit event queue. Automatically receives all map edits.
630  The constructor of this class registers us to receive them through
631  onMapEditEvent
632 
633  NOTE: Should these be moved to actually be members of
634  ServerEnvironment?
635  */
636 
637  /*
638  Queue of map edits from the environment for sending to the clients
639  This is behind m_env_mutex
640  */
641  std::queue<MapEditEvent*> m_unsent_map_edit_queue;
642  /*
643  If a non-empty area, map edit events contained within are left
644  unsent. Done at map generation time to speed up editing of the
645  generated area, as it will be sent anyway.
646  This is behind m_env_mutex
647  */
649 
650  // media files known to server
651  std::unordered_map<std::string, MediaInfo> m_media;
652 
653  /*
654  Sounds
655  */
656  std::unordered_map<s32, ServerPlayingSound> m_playing_sounds;
657  s32 m_next_sound_id = 0; // positive values only
658  s32 nextSoundId();
659 
660  std::unordered_map<std::string, ModMetadata *> m_mod_storages;
662 
663  // CSM restrictions byteflag
666 
667  // ModChannel manager
668  std::unique_ptr<ModChannelMgr> m_modchannel_mgr;
669 
670  // Inventory manager
671  std::unique_ptr<ServerInventoryManager> m_inventory_mgr;
672 
673  // Global server metrics backend
674  std::unique_ptr<MetricsBackend> m_metrics_backend;
675 
676  // Server metrics
680  // current server step lag
685 };
686 
687 /*
688  Runs a simple dedicated server loop.
689 
690  Shuts down when kill is set to true.
691 */
692 void dedicated_server_loop(Server &server, bool &kill);
Definition: address.h:47
Definition: ban.h:30
Definition: chat_interface.h:34
Definition: clientiface.h:439
Definition: emerge.h:113
Definition: emerge.cpp:48
Definition: event_manager.h:27
Definition: craftdef.h:405
Definition: gamedef.h:49
Definition: itemdef.h:105
Definition: rollback_interface.h:112
Definition: craftdef.h:434
Definition: itemdef.h:139
Definition: numeric.h:319
Definition: inventory.h:282
Definition: mapblock.h:74
Definition: map.h:116
Definition: map.h:123
Definition: modchannels.h:67
Definition: modchannels.h:38
Definition: mods.h:144
void set(const T &value)
Definition: thread.h:43
Definition: networkpacket.h:28
This class is for getting the actual properties of nodes from their content ID.
Definition: nodedef.h:510
Definition: player_sao.h:70
Definition: clientiface.h:224
Definition: remoteplayer.h:40
Definition: serveractiveobject.h:52
Definition: serverenvironment.h:194
Map & getMap()
Definition: serverenvironment.cpp:491
Definition: serverinventorymgr.h:28
Definition: map.h:315
Manage server mods.
Definition: mods.h:35
Definition: scripting_server.h:45
Definition: server.cpp:79
Definition: server.h:142
void handleCommand_Respawn(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:867
void setIpBanned(const std::string &ip, const std::string &name)
Definition: server.cpp:3185
void getModNames(std::vector< std::string > &modlist)
Definition: server.cpp:3599
PlayerSAO * emergePlayer(const char *name, session_t peer_id, u16 proto_version)
Definition: server.cpp:3719
void DisconnectPeer(session_t peer_id)
Definition: server.cpp:2804
IRollbackManager * m_rollback
Definition: server.h:561
void stop()
Definition: server.cpp:509
void handleCommand_FirstSrp(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1468
void RespawnPlayer(session_t peer_id)
Definition: server.cpp:2747
float m_liquid_transform_timer
Definition: server.h:540
void setStars(RemotePlayer *player, const StarParams &params)
Definition: server.cpp:3366
void setSun(RemotePlayer *player, const SunParams &params)
Definition: server.cpp:3352
RemoteClient * getClientNoEx(session_t peer_id, ClientState state_min=CS_Active)
Definition: server.cpp:3072
Translations * getTranslationLanguage(const std::string &lang_code)
Definition: server.cpp:3895
void handleCommand_PlayerItem(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:826
std::mutex m_env_mutex
Definition: server.h:375
std::unordered_map< session_t, std::string > m_formspec_state_data
Definition: server.h:613
void SendPlayerFormspecPrepend(session_t peer_id)
Definition: server.cpp:1904
bool rollbackRevertActions(const std::list< RollbackAction > &actions, std::list< std::string > *log)
Definition: server.cpp:3510
std::string m_admin_nick
Definition: server.h:622
void init()
Definition: server.cpp:363
u16 m_max_chatmessage_length
Definition: server.h:531
void requestShutdown(const std::string &msg, bool reconnect, float delay=0.0f)
Definition: server.cpp:3685
void SendShowFormspecMessage(session_t peer_id, const std::string &formspec, const std::string &formname)
Definition: server.cpp:1502
void SendPlayerSpeed(session_t peer_id, const v3f &added_vel)
Definition: server.cpp:2036
ServerScripting * m_script
Definition: server.h:568
Address getPeerAddress(session_t peer_id)
Definition: server.cpp:3323
void SendHP(session_t peer_id, u16 hp)
Definition: server.cpp:1363
void overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness)
Definition: server.cpp:3380
void SendPlayerInventoryFormspec(session_t peer_id)
Definition: server.cpp:1891
void peerAdded(con::Peer *peer)
Definition: server.cpp:1225
void DenySudoAccess(session_t peer_id)
Definition: server.cpp:2770
void SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver, u16 net_proto_version)
Definition: server.cpp:2330
void SendPlayerBreath(PlayerSAO *sao)
Definition: server.cpp:1809
IWritableCraftDefManager * m_craftdef
Definition: server.h:577
void spawnParticle(const std::string &playername, const ParticleParameters &p)
Definition: server.cpp:3393
virtual IItemDefManager * getItemDefManager()
Definition: server.cpp:3554
MutexedVariable< std::string > m_async_fatal_error
Definition: server.h:537
void SendSetSky(session_t peer_id, const SkyboxParams &params)
Definition: server.cpp:1705
void SendHUDChange(session_t peer_id, u32 id, HudElementStat stat, void *value)
Definition: server.cpp:1653
void SendMovePlayer(session_t peer_id)
Definition: server.cpp:1817
std::unordered_map< std::string, MediaInfo > m_media
Definition: server.h:651
void SendDeleteParticleSpawner(session_t peer_id, u32 id)
Definition: server.cpp:1621
u64 m_csm_restriction_flags
Definition: server.h:664
bool checkInteractDistance(RemotePlayer *player, const f32 d, const std::string &what)
Definition: serverpackethandler.cpp:894
void reportPrivsModified(const std::string &name="")
Definition: server.cpp:3147
void sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id)
Definition: server.cpp:2683
void handleCommand_Null(NetworkPacket *pkt)
Definition: server.h:176
void handleCommand_SrpBytesA(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1536
void fadeSound(s32 handle, float step, float gain)
Definition: server.cpp:2156
std::queue< MapEditEvent * > m_unsent_map_edit_queue
Definition: server.h:641
void SendDeathscreen(session_t peer_id, bool set_camera_point_target, v3f camera_point_target)
Definition: server.cpp:1399
void hudSetHotbarSelectedImage(RemotePlayer *player, const std::string &name)
Definition: server.cpp:3314
void printToConsoleOnly(const std::string &text)
Definition: server.cpp:1304
void setTimeOfDay(u32 time)
Definition: server.cpp:1199
void DeleteClient(session_t peer_id, ClientDeletionReason reason)
Definition: server.cpp:2839
void ProcessData(NetworkPacket *pkt)
Definition: server.cpp:1113
void setAsyncFatalError(const std::string &error)
Definition: server.h:296
BanManager * m_banmanager
Definition: server.h:558
void setSky(RemotePlayer *player, const SkyboxParams &params)
Definition: server.cpp:3345
void DenyAccess_Legacy(session_t peer_id, const std::wstring &reason)
Definition: server.cpp:2797
bool m_dedicated
Definition: server.h:533
void SendSpawnParticle(session_t peer_id, u16 protocol_version, const ParticleParameters &p)
Definition: server.cpp:1524
DISABLE_CLASS_COPY(Server)
bool addMediaFile(const std::string &filename, const std::string &filepath, std::string *filedata=nullptr, std::string *digest=nullptr)
Definition: server.cpp:2432
ModChannel * getModChannel(const std::string &channel)
Definition: server.cpp:3855
void handleCommand_InventoryAction(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:582
void SendPlayerHP(session_t peer_id)
Definition: server.cpp:1797
void handleCommand_Interact(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:916
virtual ICraftDefManager * getCraftDefManager()
Definition: server.cpp:3564
v3f findSpawnPos()
Definition: server.cpp:3614
ServerEnvironment & getEnv()
Definition: server.h:301
VoxelArea m_ignore_map_edit_events_area
Definition: server.h:648
std::set< std::string > getPlayerEffectivePrivs(const std::string &name)
Definition: server.cpp:3134
s32 nextSoundId()
Definition: server.cpp:2043
bool SendBlock(session_t peer_id, const v3s16 &blockpos)
Definition: server.cpp:2413
void Receive()
Definition: server.cpp:985
virtual const ModSpec * getModSpec(const std::string &modname) const
Definition: server.cpp:3594
IntervalLimiter m_map_timer_and_unload_interval
Definition: server.h:545
void handleCommand_PlayerPos(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:521
void step(float dtime)
Definition: server.cpp:522
void SendHUDSetFlags(session_t peer_id, u32 flags, u32 mask)
Definition: server.cpp:1687
~Server()
Definition: server.cpp:277
Map & getMap()
Definition: server.h:300
std::unique_ptr< ServerModManager > m_modmgr
Definition: server.h:580
void sendDetachedInventories(session_t peer_id, bool incremental)
Definition: server.cpp:2709
PlayerSAO * getPlayerSAO(session_t peer_id)
Definition: server.cpp:3085
void handleCommand(NetworkPacket *pkt)
Definition: server.cpp:1107
void SendPlayerPrivileges(session_t peer_id)
Definition: server.cpp:1871
float m_step_dtime
Definition: server.h:589
std::wstring handleChat(const std::string &name, std::wstring wmessage_input, bool check_shout_priv=false, RemotePlayer *player=nullptr)
Definition: server.cpp:2965
MetricGaugePtr m_lag_gauge
Definition: server.h:681
void notifyPlayer(const char *name, const std::wstring &msg)
Definition: server.cpp:3200
void SendLocalPlayerAnimations(session_t peer_id, v2s32 animation_frames[4], f32 animation_speed)
Definition: server.cpp:1852
void setMoon(RemotePlayer *player, const MoonParams &params)
Definition: server.cpp:3359
bool isSingleplayer()
Definition: server.h:293
ClientInterface m_clients
Definition: server.h:604
void sendRequestedMedia(session_t peer_id, const std::vector< std::string > &tosend)
Definition: server.cpp:2567
void stopSound(s32 handle)
Definition: server.cpp:2135
float m_time_of_day_send_timer
Definition: server.h:599
void handleCommand_SrpBytesM(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1642
void handleCommand_InventoryFields(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1404
bool getClientConInfo(session_t peer_id, con::rtt_stat_type type, float *retval)
Definition: server.cpp:1242
MetricGaugePtr m_player_gauge
Definition: server.h:678
IRollbackManager * getRollbackManager()
Definition: server.h:279
float m_mod_storage_save_timer
Definition: server.h:661
void SendOverrideDayNightRatio(session_t peer_id, bool do_override, float ratio)
Definition: server.cpp:1773
bool sendModChannelMessage(const std::string &channel, const std::string &message)
Definition: server.cpp:3846
void setPlayerEyeOffset(RemotePlayer *player, const v3f &first, const v3f &third)
Definition: server.cpp:3337
std::string getBanDescription(const std::string &ip_or_name)
Definition: server.cpp:3195
std::unordered_map< s32, ServerPlayingSound > m_playing_sounds
Definition: server.h:656
virtual const NodeDefManager * getNodeDefManager()
Definition: server.cpp:3559
s32 m_next_sound_id
Definition: server.h:657
void onMapEditEvent(const MapEditEvent &event)
Definition: server.cpp:1205
MetricCounterPtr m_packet_recv_processed_counter
Definition: server.h:684
float m_masterserver_timer
Definition: server.h:542
void SendSetSun(session_t peer_id, const SunParams &params)
Definition: server.cpp:1737
void SendSetMoon(session_t peer_id, const MoonParams &params)
Definition: server.cpp:1746
void UpdateCrafting(RemotePlayer *player)
Definition: server.cpp:2921
bool checkPriv(const std::string &name, const std::string &priv)
Definition: server.cpp:3141
bool leaveModChannel(const std::string &channel)
Definition: server.cpp:3841
NodeDefManager * getWritableNodeDefManager()
Definition: server.cpp:3579
ShutdownState m_shutdown_state
Definition: server.h:619
MetricCounterPtr m_uptime_counter
Definition: server.h:677
void SendInventory(PlayerSAO *playerSAO, bool incremental)
Definition: server.cpp:1458
IWritableItemDefManager * getWritableItemDefManager()
Definition: server.cpp:3574
void handleCommand_ModChannelLeave(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1753
void handleCommand_ClientReady(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:370
bool dynamicAddMedia(const std::string &filepath, std::vector< RemotePlayer * > &sent_to)
Definition: server.cpp:3460
void handleAdminChat(const ChatEventChat *evt)
Definition: server.cpp:3051
void SendItemDef(session_t peer_id, IItemDefManager *itemdef, u16 protocol_version)
Definition: server.cpp:1407
RemoteClient * getClient(session_t peer_id, ClientState state_min=CS_Active)
Definition: server.cpp:3064
void SetBlocksNotSent(std::map< v3s16, MapBlock * > &block)
Definition: server.cpp:1213
void SendEyeOffset(session_t peer_id, v3f first, v3f third)
Definition: server.cpp:1864
bool hudSetFlags(RemotePlayer *player, u32 flags, u32 mask)
Definition: server.cpp:3272
void SendAccessDenied(session_t peer_id, AccessDeniedCode reason, const std::string &custom_reason, bool reconnect=false)
Definition: server.cpp:1377
void start()
Definition: server.cpp:478
MetricCounterPtr m_packet_recv_counter
Definition: server.h:683
IWritableCraftDefManager * getWritableCraftDefManager()
Definition: server.cpp:3584
void SendHUDAdd(session_t peer_id, u32 id, HudElement *form)
Definition: server.cpp:1634
std::unique_ptr< ModChannelMgr > m_modchannel_mgr
Definition: server.h:668
bool isShutdownRequested() const
Definition: server.h:226
std::unique_ptr< ServerInventoryManager > m_inventory_mgr
Definition: server.h:671
virtual const std::vector< ModSpec > & getMods() const
Definition: server.cpp:3589
void sendRemoveNode(v3s16 p, std::unordered_set< u16 > *far_players=nullptr, float far_d_nodes=100)
Definition: server.cpp:2202
void SendCloudParams(session_t peer_id, const CloudParams &params)
Definition: server.cpp:1765
virtual u16 allocateUnknownNodeId(const std::string &name)
Definition: server.cpp:3569
bool showFormspec(const char *name, const std::string &formspec, const std::string &formname)
Definition: server.cpp:3221
bool hudRemove(RemotePlayer *player, u32 id)
Definition: server.cpp:3248
void broadcastModChannelMessage(const std::string &channel, const std::string &message, session_t from_peer)
Definition: server.cpp:3860
void unsetIpBanned(const std::string &ip_or_name)
Definition: server.cpp:3190
u32 hudAdd(RemotePlayer *player, HudElement *element)
Definition: server.cpp:3236
std::mutex m_step_dtime_mutex
Definition: server.h:590
float m_savemap_timer
Definition: server.h:544
float m_liquid_transform_every
Definition: server.h:541
void SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed)
Definition: server.cpp:1784
void process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao, NetworkPacket *pkt)
Definition: serverpackethandler.cpp:457
Address m_bind_addr
Definition: server.h:372
bool getClientInfo(session_t peer_id, ClientInfo &ret)
Definition: server.cpp:1248
void SendHUDRemove(session_t peer_id, u32 id)
Definition: server.cpp:1646
std::string getBuiltinLuaPath()
Definition: server.cpp:3604
s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams &params, bool ephemeral=false)
Definition: server.cpp:2053
void deleteParticleSpawner(const std::string &playername, u32 id)
Definition: server.cpp:3442
IWritableItemDefManager * m_itemdef
Definition: server.h:571
void handleCommand_ModChannelMsg(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1777
void handleCommand_Init2(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:282
void SendHUDSetParam(session_t peer_id, u16 param, const std::string &value)
Definition: server.cpp:1698
void handleCommand_GotBlocks(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:425
std::unique_ptr< MetricsBackend > m_metrics_backend
Definition: server.h:674
void handleCommand_Init(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:50
virtual void unregisterModStorage(const std::string &name)
Definition: server.cpp:3774
void acceptAuth(session_t peer_id, bool forSudoMode)
Definition: server.cpp:2810
void reportFormspecPrependModified(const std::string &name)
Definition: server.cpp:3177
void handleCommand_DeletedBlocks(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:552
void deletingPeer(con::Peer *peer, bool timeout)
Definition: server.cpp:1233
void SendMovement(session_t peer_id)
Definition: server.cpp:1327
void handleCommand_Damage(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:782
void handleCommand_RemovedSounds(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1330
void handleCommand_Deprecated(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:44
void handleCommand_ChatMessage(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:757
void handleChatInterfaceEvent(ChatEvent *evt)
Definition: server.cpp:2946
ServerThread * m_thread
Definition: server.h:593
void SendActiveObjectMessages(session_t peer_id, const std::string &datas, bool reliable=true)
Definition: server.cpp:2015
double getUptime() const
Definition: server.h:223
ServerScripting * getScriptIface()
Definition: server.h:266
void handleCommand_NodeMetaFields(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1351
PlayerSAO * StageTwoClientInit(session_t peer_id)
Definition: server.cpp:1029
void sendMetadataChanged(const std::list< v3s16 > &meta_updates, float far_d_nodes=100)
Definition: server.cpp:2279
void SendAddParticleSpawner(session_t peer_id, u16 protocol_version, const ParticleSpawnerParameters &p, u16 attached_id, u32 id)
Definition: server.cpp:1567
virtual std::string getModStoragePath() const
Definition: server.cpp:3609
void sendAddNode(v3s16 p, MapNode n, std::unordered_set< u16 > *far_players=nullptr, float far_d_nodes=100, bool remove_metadata=true)
Definition: server.cpp:2240
void SendCSMRestrictionFlags(session_t peer_id)
Definition: server.cpp:2028
void reportInventoryFormspecModified(const std::string &name)
Definition: server.cpp:3169
std::unordered_map< std::string, ModMetadata * > m_mod_storages
Definition: server.h:660
void SendSetStars(session_t peer_id, const StarParams &params)
Definition: server.cpp:1755
virtual void SendChatMessage(session_t peer_id, const ChatMessage &message)
Definition: server.cpp:1483
std::string getStatusString()
Definition: server.cpp:3093
EmergeManager * m_emerge
Definition: server.h:564
void SendActiveObjectRemoveAdd(RemoteClient *client, PlayerSAO *playersao)
Definition: server.cpp:1916
void setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4], f32 frame_speed)
Definition: server.cpp:3329
MetricGaugePtr m_timeofday_gauge
Definition: server.h:679
Settings * m_game_settings
Definition: server.h:534
SubgameSpec m_gamespec
Definition: server.h:527
bool joinModChannel(const std::string &channel)
Definition: server.cpp:3835
std::string getPlayerName(session_t peer_id)
Definition: server.cpp:3077
void hudSetHotbarImage(RemotePlayer *player, const std::string &name)
Definition: server.cpp:3305
std::string *const m_on_shutdown_errmsg
Definition: server.h:626
std::string m_path_world
Definition: server.h:525
void DiePlayer(session_t peer_id, const PlayerHPChangeReason &reason)
Definition: server.cpp:2728
void handleCommand_ModChannelJoin(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:1728
void DenyAccess(session_t peer_id, AccessDeniedCode reason, const std::string &custom_reason="")
Definition: server.cpp:2787
void Send(NetworkPacket *pkt)
Definition: server.cpp:1314
void handleCommand_RequestMedia(NetworkPacket *pkt)
Definition: serverpackethandler.cpp:345
virtual bool registerModStorage(ModMetadata *storage)
Definition: server.cpp:3762
u32 m_csm_restriction_noderange
Definition: server.h:665
Server(const std::string &path_world, const SubgameSpec &gamespec, bool simple_singleplayer_mode, Address bind_addr, bool dedicated, ChatInterface *iface=nullptr, std::string *on_shutdown_errmsg=nullptr)
Definition: server.cpp:210
std::queue< con::PeerChange > m_peer_change_queue
Definition: server.h:611
u32 addParticleSpawner(const ParticleSpawnerParameters &p, ServerActiveObject *attached, const std::string &playername)
Definition: server.cpp:3413
std::shared_ptr< con::Connection > m_con
Definition: server.h:555
void SendBlocks(float dtime)
Definition: server.cpp:2349
void DenyAccessVerCompliant(session_t peer_id, u16 proto_ver, AccessDeniedCode reason, const std::string &str_reason="", bool reconnect=false)
Definition: server.cpp:2777
void notifyPlayers(const std::wstring &msg)
Definition: server.cpp:3388
bool hudSetHotbarItemcount(RemotePlayer *player, s32 hotbar_itemcount)
Definition: server.cpp:3290
void SendNodeDef(session_t peer_id, const NodeDefManager *nodedef, u16 protocol_version)
Definition: server.cpp:1430
void SendAccessDenied_Legacy(session_t peer_id, const std::wstring &reason)
Definition: server.cpp:1392
MetricCounterPtr m_aom_buffer_counter
Definition: server.h:682
void SendPlayerHPOrDie(PlayerSAO *player, const PlayerHPChangeReason &reason)
Definition: server.cpp:1349
void SendBreath(session_t peer_id, u16 breath)
Definition: server.cpp:1370
void setClouds(RemotePlayer *player, const CloudParams &params)
Definition: server.cpp:3373
void handlePeerChanges()
Definition: server.cpp:1276
float m_emergethread_trigger_timer
Definition: server.h:543
ServerInventoryManager * getInventoryMgr() const
Definition: server.h:262
void sendMediaAnnouncement(session_t peer_id, const std::string &lang_code)
Definition: server.cpp:2524
void SendMinimapModes(session_t peer_id, std::vector< MinimapMode > &modes, size_t wanted_mode)
Definition: server.cpp:2666
ServerEnvironment * m_env
Definition: server.h:548
void fillMediaCache()
Definition: server.cpp:2493
ServerMap * m_startup_server_map
Definition: server.h:552
bool m_simple_singleplayer_mode
Definition: server.h:530
std::unordered_map< std::string, Translations > server_translations
Definition: server.h:582
virtual EmergeManager * getEmergeManager()
Definition: server.h:280
virtual std::string getWorldPath() const
Definition: server.h:290
ChatInterface * m_admin_chat
Definition: server.h:621
NodeDefManager * m_nodedef
Definition: server.h:574
void AsyncRunStep(bool initial_step=false)
Definition: server.cpp:543
bool hudChange(RemotePlayer *player, u32 id, HudElementStat stat, void *value)
Definition: server.cpp:3263
void SendPlayerFov(session_t peer_id)
Definition: server.cpp:1842
Definition: settings.h:101
Definition: test_server_shutdown_state.cpp:44
Definition: translation.h:31
Definition: voxel.h:59
Definition: peerhandler.h:40
Definition: connection.h:523
ClientState
Definition: clientiface.h:175
@ CS_Active
Definition: clientiface.h:184
#define BS
Definition: constants.h:74
MinimapType
Definition: hud.h:113
@ MINIMAP_TYPE_OFF
Definition: hud.h:114
HudElementStat
Definition: hud.h:67
core::vector2d< s32 > v2s32
Definition: irr_v2d.h:28
core::vector3d< s16 > v3s16
Definition: irr_v3d.h:28
core::vector3df v3f
Definition: irr_v3d.h:26
static LightingParams params
Definition: light.cpp:40
std::shared_ptr< MetricCounter > MetricCounterPtr
Definition: metricsbackend.h:36
std::shared_ptr< MetricGauge > MetricGaugePtr
Definition: metricsbackend.h:82
Definition: activeobjectmgr.cpp:25
rtt_stat_type
Definition: peerhandler.h:28
Definition: activeobjectmgr.cpp:26
error
Definition: treegen.h:33
AccessDeniedCode
Definition: networkprotocol.h:997
@ CSM_RF_NONE
Definition: networkprotocol.h:1042
u16 session_t
Definition: networkprotocol.h:234
ClientDeletionReason
Definition: server.h:75
@ CDR_LEAVE
Definition: server.h:76
@ CDR_DENY
Definition: server.h:78
@ CDR_TIMEOUT
Definition: server.h:77
void dedicated_server_loop(Server &server, bool &kill)
Definition: server.cpp:3784
Definition: chat_interface.h:64
Definition: chat_interface.h:76
Definition: chatmessage.h:35
Definition: server.h:130
u32 uptime
Definition: server.h:133
u8 ser_vers
Definition: server.h:134
u8 patch
Definition: server.h:136
u16 prot_vers
Definition: server.h:135
ClientState state
Definition: server.h:131
std::string vers_string
Definition: server.h:137
Address addr
Definition: server.h:132
std::string lang_code
Definition: server.h:137
u8 major
Definition: server.h:136
u8 minor
Definition: server.h:136
Definition: cloudparams.h:23
Definition: hud.h:90
Definition: map.h:75
Definition: mapnode.h:118
Definition: server.h:82
MediaInfo(const std::string &path_="", const std::string &sha1_digest_="")
Definition: server.h:86
std::string path
Definition: server.h:83
std::string sha1_digest
Definition: server.h:84
Definition: server.h:121
u16 size
Definition: server.h:124
MinimapType type
Definition: server.h:122
std::string texture
Definition: server.h:125
std::string label
Definition: server.h:123
u16 scale
Definition: server.h:126
Definition: mods.h:37
Definition: skyparams.h:56
Definition: particles.h:61
Definition: particles.h:72
Definition: player_sao.h:230
Definition: rollback_interface.h:55
Definition: server.h:115
std::unordered_set< session_t > clients
Definition: server.h:118
ServerSoundParams params
Definition: server.h:116
SimpleSoundSpec spec
Definition: server.h:117
Definition: server.h:95
float max_hear_distance
Definition: server.h:105
Type
Definition: server.h:96
@ SSP_LOCAL
Definition: server.h:97
@ SSP_POSITIONAL
Definition: server.h:98
@ SSP_OBJECT
Definition: server.h:99
float gain
Definition: server.h:101
enum ServerSoundParams::Type type
std::string to_player
Definition: server.h:108
v3f getPos(ServerEnvironment *env, bool *pos_exists) const
Definition: server.cpp:130
bool loop
Definition: server.h:104
float fade
Definition: server.h:102
v3f pos
Definition: server.h:106
float pitch
Definition: server.h:103
std::string exclude_player
Definition: server.h:109
Definition: server.h:382
void trigger(float delay, const std::string &msg, bool reconnect)
Definition: server.cpp:159
bool isTimerRunning() const
Definition: server.h:393
void tick(float dtime, Server *server)
Definition: server.cpp:166
void reset()
Definition: server.cpp:151
bool is_requested
Definition: server.h:385
bool should_reconnect
Definition: server.h:386
float m_timer
Definition: server.h:395
std::wstring getShutdownTimerMessage() const
Definition: server.cpp:198
std::string message
Definition: server.h:387
Definition: sound.h:28
Definition: skyparams.h:34
Definition: skyparams.h:64
Definition: subgames.h:29
Definition: skyparams.h:46
std::string p(std::string path)
Definition: test_filepath.cpp:59