diff options
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/src/server.cpp b/src/server.cpp index 93767da9d..b5f00a784 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -391,8 +391,17 @@ Server::~Server() } } +inline uint64_t microtime(void) { + struct timeval tv; + struct timezone tz = {0}; + + gettimeofday(&tv, &tz); + return (tv.tv_sec * 1000000) + tv.tv_usec; +} + void Server::init() { + uint64_t start_time = microtime(); infostream << "Server created for gameid \"" << m_gamespec.id << "\""; if (m_simple_singleplayer_mode) infostream << " in simple singleplayer mode" << std::endl; @@ -423,6 +432,9 @@ void Server::init() m_mod_storage_database = openModStorageDatabase(m_path_world); m_mod_storage_database->beginSave(); + fprintf(stderr, "0: %17luus\n", microtime() - start_time); + start_time = microtime(); + m_modmgr = std::make_unique<ServerModManager>(m_path_world); std::vector<ModSpec> unsatisfied_mods = m_modmgr->getUnsatisfiedMods(); @@ -447,14 +459,23 @@ void Server::init() m_script = new ServerScripting(this); + fprintf(stderr, "1: %17luus\n", microtime() - start_time); + start_time = microtime(); + // Must be created before mod loading because we have some inventory creation m_inventory_mgr = std::make_unique<ServerInventoryManager>(); m_script->loadMod(getBuiltinLuaPath() + DIR_DELIM "init.lua", BUILTIN_MOD_NAME); + fprintf(stderr, "2: %17luus\n", microtime() - start_time); + start_time = microtime(); + m_gamespec.checkAndLog(); m_modmgr->loadMods(m_script); + fprintf(stderr, "3: %17luus\n", microtime() - start_time); + start_time = microtime(); + // Read Textures and calculate sha1 sums fillMediaCache(); @@ -490,6 +511,9 @@ void Server::init() m_inventory_mgr->setEnv(m_env); m_clients.setEnv(m_env); + fprintf(stderr, "4: %17luus\n", microtime() - start_time); + start_time = microtime(); + if (!servermap->settings_mgr.makeMapgenParams()) FATAL_ERROR("Couldn't create any mapgen type"); @@ -518,6 +542,9 @@ void Server::init() m_max_chatmessage_length = g_settings->getU16("chat_message_max_size"); m_csm_restriction_flags = g_settings->getU64("csm_restriction_flags"); m_csm_restriction_noderange = g_settings->getU32("csm_restriction_noderange"); + + fprintf(stderr, "5: %17luus\n", microtime() - start_time); + start_time = microtime(); } void Server::start() @@ -1167,14 +1194,14 @@ void Server::ProcessData(NetworkPacket *pkt) std::string addr_s = address.serializeString(); // FIXME: Isn't it a bit excessive to check this for every packet? - if (m_banmanager->isIpBanned(addr_s)) { - std::string ban_name = m_banmanager->getBanName(addr_s); - infostream << "Server: A banned client tried to connect from " - << addr_s << "; banned name was " << ban_name << std::endl; - DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING, - "Your IP is banned. Banned name was " + ban_name); - return; - } +// if (m_banmanager->isIpBanned(addr_s)) { +// std::string ban_name = m_banmanager->getBanName(addr_s); +// infostream << "Server: A banned client tried to connect from " +// << addr_s << "; banned name was " << ban_name << std::endl; +// DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING, +// "Your IP is banned. Banned name was " + ban_name); +// return; +// } } catch (con::PeerNotFoundException &e) { /* * no peer for this packet found |