diff options
Diffstat (limited to 'src/trinitycore')
| -rw-r--r-- | src/trinitycore/CliRunnable.cpp | 355 | ||||
| -rw-r--r-- | src/trinitycore/CliRunnable.h | 35 | ||||
| -rw-r--r-- | src/trinitycore/Main.cpp | 165 | ||||
| -rw-r--r-- | src/trinitycore/Makefile.am | 85 | ||||
| -rw-r--r-- | src/trinitycore/Master.cpp | 517 | ||||
| -rw-r--r-- | src/trinitycore/Master.h | 52 | ||||
| -rw-r--r-- | src/trinitycore/RASocket.cpp | 259 | ||||
| -rw-r--r-- | src/trinitycore/RASocket.h | 67 | ||||
| -rw-r--r-- | src/trinitycore/TrinityCore.ico | bin | 136606 -> 0 bytes | |||
| -rw-r--r-- | src/trinitycore/TrinityCore.rc | 85 | ||||
| -rw-r--r-- | src/trinitycore/WorldRunnable.cpp | 86 | ||||
| -rw-r--r-- | src/trinitycore/WorldRunnable.h | 35 | ||||
| -rw-r--r-- | src/trinitycore/monitor-mangosd | 18 | ||||
| -rw-r--r-- | src/trinitycore/resource.h | 15 | ||||
| -rw-r--r-- | src/trinitycore/run-mangosd | 14 |
15 files changed, 0 insertions, 1788 deletions
diff --git a/src/trinitycore/CliRunnable.cpp b/src/trinitycore/CliRunnable.cpp deleted file mode 100644 index 7fe2ab784a6..00000000000 --- a/src/trinitycore/CliRunnable.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/// \addtogroup Trinityd -/// @{ -/// \file - -#include "Common.h" -#include "Language.h" -#include "Log.h" -#include "World.h" -#include "ScriptCalls.h" -#include "ObjectMgr.h" -#include "WorldSession.h" -#include "Config/ConfigEnv.h" -#include "Util.h" -#include "AccountMgr.h" -#include "CliRunnable.h" -#include "MapManager.h" -#include "Player.h" -#include "Chat.h" - -void utf8print(const char* str) -{ -#if PLATFORM == PLATFORM_WINDOWS - wchar_t wtemp_buf[6000]; - size_t wtemp_len = 6000-1; - if(!Utf8toWStr(str,strlen(str),wtemp_buf,wtemp_len)) - return; - - char temp_buf[6000]; - CharToOemBuffW(&wtemp_buf[0],&temp_buf[0],wtemp_len+1); - printf(temp_buf); -#else - printf(str); -#endif -} - -/// Delete a user account and all associated characters in this realm -/// \todo This function has to be enhanced to respect the login/realm split (delete char, delete account chars in realm, delete account chars in realm then delete account -bool ChatHandler::HandleAccountDeleteCommand(const char* args) -{ - if(!*args) - return false; - - ///- Get the account name from the command line - char *account_name_str=strtok ((char*)args," "); - if (!account_name_str) - return false; - - std::string account_name = account_name_str; - if(!AccountMgr::normilizeString(account_name)) - { - PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str()); - SetSentErrorMessage(true); - return false; - } - - uint32 account_id = accmgr.GetId(account_name); - if(!account_id) - { - PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str()); - SetSentErrorMessage(true); - return false; - } - - /// Commands not recommended call from chat, but support anyway - if(m_session) - { - uint32 targetSecurity = accmgr.GetSecurity(account_id); - - /// can delete only for account with less security - /// This is also reject self apply in fact - if (targetSecurity >= m_session->GetSecurity()) - { - SendSysMessage (LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage (true); - return false; - } - } - - AccountOpResult result = accmgr.DeleteAccount(account_id); - switch(result) - { - case AOR_OK: - PSendSysMessage(LANG_ACCOUNT_DELETED,account_name.c_str()); - break; - case AOR_NAME_NOT_EXIST: - PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,account_name.c_str()); - SetSentErrorMessage(true); - return false; - case AOR_DB_INTERNAL_ERROR: - PSendSysMessage(LANG_ACCOUNT_NOT_DELETED_SQL_ERROR,account_name.c_str()); - SetSentErrorMessage(true); - return false; - default: - PSendSysMessage(LANG_ACCOUNT_NOT_DELETED,account_name.c_str()); - SetSentErrorMessage(true); - return false; - } - - return true; -} - -bool ChatHandler::HandleCharacterDeleteCommand(const char* args) -{ - if(!*args) - return false; - - char *character_name_str = strtok((char*)args," "); - if(!character_name_str) - return false; - - std::string character_name = character_name_str; - if(!normalizePlayerName(character_name)) - return false; - - uint64 character_guid; - uint32 account_id; - - Player *player = objmgr.GetPlayer(character_name.c_str()); - if(player) - { - character_guid = player->GetGUID(); - account_id = player->GetSession()->GetAccountId(); - player->GetSession()->KickPlayer(); - } - else - { - character_guid = objmgr.GetPlayerGUIDByName(character_name); - if(!character_guid) - { - PSendSysMessage(LANG_NO_PLAYER,character_name.c_str()); - SetSentErrorMessage(true); - return false; - } - - account_id = objmgr.GetPlayerAccountIdByGUID(character_guid); - } - - std::string account_name; - accmgr.GetName (account_id,account_name); - - Player::DeleteFromDB(character_guid, account_id, true); - PSendSysMessage(LANG_CHARACTER_DELETED,character_name.c_str(),GUID_LOPART(character_guid),account_name.c_str(), account_id); - return true; -} - -/// Exit the realm -bool ChatHandler::HandleServerExitCommand(const char* args) -{ - SendSysMessage(LANG_COMMAND_EXIT); - World::StopNow(SHUTDOWN_EXIT_CODE); - return true; -} - -/// Display info on users currently in the realm -bool ChatHandler::HandleAccountOnlineListCommand(const char* args) -{ - ///- Get the list of accounts ID logged to the realm - QueryResult *resultDB = CharacterDatabase.Query("SELECT name,account FROM characters WHERE online > 0"); - if (!resultDB) - return true; - - ///- Display the list of account/characters online - SendSysMessage("====================================================================="); - SendSysMessage(LANG_ACCOUNT_LIST_HEADER); - SendSysMessage("====================================================================="); - - ///- Circle through accounts - do - { - Field *fieldsDB = resultDB->Fetch(); - std::string name = fieldsDB[0].GetCppString(); - uint32 account = fieldsDB[1].GetUInt32(); - - ///- Get the username, last IP and GM level of each account - // No SQL injection. account is uint32. - // 0 1 2 3 - QueryResult *resultLogin = loginDatabase.PQuery("SELECT username, last_ip, gmlevel, expansion FROM account WHERE id = '%u'",account); - - if(resultLogin) - { - Field *fieldsLogin = resultLogin->Fetch(); - PSendSysMessage("|%15s| %20s | %15s |%4d|%5d|", - fieldsLogin[0].GetString(),name.c_str(),fieldsLogin[1].GetString(),fieldsLogin[2].GetUInt32(),fieldsLogin[3].GetUInt32()); - - delete resultLogin; - } - else - PSendSysMessage(LANG_ACCOUNT_LIST_ERROR,name.c_str()); - - }while(resultDB->NextRow()); - - delete resultDB; - - SendSysMessage("====================================================================="); - return true; -} - -/// Create an account -bool ChatHandler::HandleAccountCreateCommand(const char* args) -{ - if(!*args) - return false; - - ///- %Parse the command line arguments - char *szAcc = strtok((char*)args, " "); - char *szPassword = strtok(NULL, " "); - if(!szAcc || !szPassword) - return false; - - // normilized in accmgr.CreateAccount - std::string account_name = szAcc; - std::string password = szPassword; - - AccountOpResult result = accmgr.CreateAccount(account_name, password); - switch(result) - { - case AOR_OK: - PSendSysMessage(LANG_ACCOUNT_CREATED,account_name.c_str()); - break; - case AOR_NAME_TOO_LONG: - SendSysMessage(LANG_ACCOUNT_TOO_LONG); - SetSentErrorMessage(true); - return false; - case AOR_NAME_ALREDY_EXIST: - SendSysMessage(LANG_ACCOUNT_ALREADY_EXIST); - SetSentErrorMessage(true); - return false; - case AOR_DB_INTERNAL_ERROR: - PSendSysMessage(LANG_ACCOUNT_NOT_CREATED_SQL_ERROR,account_name.c_str()); - SetSentErrorMessage(true); - return false; - default: - PSendSysMessage(LANG_ACCOUNT_NOT_CREATED,account_name.c_str()); - SetSentErrorMessage(true); - return false; - } - - return true; -} - -/// Set the level of logging -bool ChatHandler::HandleServerSetLogLevelCommand(const char *args) -{ - if(!*args) - return false; - - char *NewLevel = strtok((char*)args, " "); - if (!NewLevel) - return false; - - sLog.SetLogLevel(NewLevel); - return true; -} - -/// @} - -#ifdef linux -// Non-blocking keypress detector, when return pressed, return 1, else always return 0 -int kb_hit_return() -{ - struct timeval tv; - fd_set fds; - tv.tv_sec = 0; - tv.tv_usec = 0; - FD_ZERO(&fds); - FD_SET(STDIN_FILENO, &fds); - select(STDIN_FILENO+1, &fds, NULL, NULL, &tv); - return FD_ISSET(STDIN_FILENO, &fds); -} -#endif - -/// %Thread start -void CliRunnable::run() -{ - ///- Init new SQL thread for the world database (one connection call enough) - WorldDatabase.ThreadStart(); // let thread do safe mySQL requests - - char commandbuf[256]; - - ///- Display the list of available CLI functions then beep - sLog.outString(); - - if(sConfig.GetBoolDefault("BeepAtStart", true)) - printf("\a"); // \a = Alert - - // print this here the first time - // later it will be printed after command queue updates - printf("TC>"); - - ///- As long as the World is running (no World::m_stopEvent), get the command line and handle it - while (!World::IsStopped()) - { - fflush(stdout); - #ifdef linux - while (!kb_hit_return() && !World::IsStopped()) - // With this, we limit CLI to 10commands/second - usleep(100); - if (World::IsStopped()) - break; - #endif - char *command_str = fgets(commandbuf,sizeof(commandbuf),stdin); - if (command_str != NULL) - { - for(int x=0;command_str[x];x++) - if(command_str[x]=='\r'||command_str[x]=='\n') - { - command_str[x]=0; - break; - } - - - if(!*command_str) - { - printf("TC>"); - continue; - } - - std::string command; - if(!consoleToUtf8(command_str,command)) // convert from console encoding to utf8 - { - printf("TC>"); - continue; - } - - sWorld.QueueCliCommand(&utf8print,command.c_str()); - } - else if (feof(stdin)) - { - World::StopNow(SHUTDOWN_EXIT_CODE); - } - } - - ///- End the database thread - WorldDatabase.ThreadEnd(); // free mySQL thread resources -} diff --git a/src/trinitycore/CliRunnable.h b/src/trinitycore/CliRunnable.h deleted file mode 100644 index c3c1792b6e8..00000000000 --- a/src/trinitycore/CliRunnable.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/// \addtogroup Trinityd -/// @{ -/// \file - -#ifndef __CLIRUNNABLE_H -#define __CLIRUNNABLE_H - -/// Command Line Interface handling thread -class CliRunnable : public ZThread::Runnable -{ - public: - void run(); -}; -#endif -/// @} diff --git a/src/trinitycore/Main.cpp b/src/trinitycore/Main.cpp deleted file mode 100644 index 3767e73b844..00000000000 --- a/src/trinitycore/Main.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/// \addtogroup Trinityd Trinity Daemon -/// @{ -/// \file - -#include "Common.h" -#include "Database/DatabaseEnv.h" -#include "Config/ConfigEnv.h" -#include "Log.h" -#include "Master.h" - -#ifndef _TRINITY_CORE_CONFIG -# define _TRINITY_CORE_CONFIG "trinitycore.conf" -#endif //_TRINITY_CORE_CONFIG - -// Format is YYYYMMDDRR where RR is the change in the conf file -// for that day. -#ifndef _TRINITY_CORE_CONFVER -# define _TRINITY_CORE_CONFVER 2008022901 -#endif //_TRINITY_CORE_CONFVER - -#ifdef WIN32 -#include "ServiceWin32.h" -char serviceName[] = "Trinityd"; -char serviceLongName[] = "Trinity core service"; -char serviceDescription[] = "Massive Network Game Object Server"; -/* - * -1 - not in service mode - * 0 - stopped - * 1 - running - * 2 - paused - */ -int m_ServiceStatus = -1; -#endif - -DatabaseType WorldDatabase; ///< Accessor to the world database -DatabaseType CharacterDatabase; ///< Accessor to the character database -DatabaseType loginDatabase; ///< Accessor to the realm/login database - -uint32 realmID; ///< Id of the realm - -/// Print out the usage string for this program on the console. -void usage(const char *prog) -{ - sLog.outString("Usage: \n %s [<options>]\n" - " -c config_file use config_file as configuration file\n\r" - #ifdef WIN32 - " Running as service functions:\n\r" - " --service run as service\n\r" - " -s install install service\n\r" - " -s uninstall uninstall service\n\r" - #endif - ,prog); -} - -/// Launch the Trinity server -extern int main(int argc, char **argv) -{ - ///- Command line parsing to get the configuration file name - char const* cfg_file = _TRINITY_CORE_CONFIG; - int c=1; - while( c < argc ) - { - if( strcmp(argv[c],"-c") == 0) - { - if( ++c >= argc ) - { - sLog.outError("Runtime-Error: -c option requires an input argument"); - usage(argv[0]); - return 1; - } - else - cfg_file = argv[c]; - } - - #ifdef WIN32 - //////////// - //Services// - //////////// - if( strcmp(argv[c],"-s") == 0) - { - if( ++c >= argc ) - { - sLog.outError("Runtime-Error: -s option requires an input argument"); - usage(argv[0]); - return 1; - } - if( strcmp(argv[c],"install") == 0) - { - if (WinServiceInstall()) - sLog.outString("Installing service"); - return 1; - } - else if( strcmp(argv[c],"uninstall") == 0) - { - if(WinServiceUninstall()) - sLog.outString("Uninstalling service"); - return 1; - } - else - { - sLog.outError("Runtime-Error: unsupported option %s",argv[c]); - usage(argv[0]); - return 1; - } - } - if( strcmp(argv[c],"--service") == 0) - { - WinServiceRun(); - } - //// - #endif - ++c; - } - - if (!sConfig.SetSource(cfg_file)) - { - sLog.outError("Could not find configuration file %s.", cfg_file); - return 1; - } - sLog.outString("Using configuration file %s.", cfg_file); - - uint32 confVersion = sConfig.GetIntDefault("ConfVersion", 0); - if (confVersion < _TRINITY_CORE_CONFVER) - { - sLog.outError("*****************************************************************************"); - sLog.outError(" WARNING: Your trinitycore.conf version indicates your conf file is out of date!"); - sLog.outError(" Please check for updates, as your current default values may cause"); - sLog.outError(" strange behavior."); - sLog.outError("*****************************************************************************"); - clock_t pause = 3000 + clock(); - - while (pause > clock()) {} - } - - ///- and run the 'Master' - /// \todo Why do we need this 'Master'? Can't all of this be in the Main as for Realmd? - return sMaster.Run(); - - // at sMaster return function exist with codes - // 0 - normal shutdown - // 1 - shutdown at error - // 2 - restart command used, this code can be used by restarter for restart Trinityd -} - -/// @} diff --git a/src/trinitycore/Makefile.am b/src/trinitycore/Makefile.am deleted file mode 100644 index ad1b78d9033..00000000000 --- a/src/trinitycore/Makefile.am +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> -# -# Copyright (C) 2008 Trinity <http://www.trinitycore.org/> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## Process this file with automake to produce Makefile.in - -## Build world list daemon as standalone program -bin_PROGRAMS = trinity-core - -## Preprocessor flags -trinity_core_CPPFLAGS = \ -$(MYSQL_INCLUDES) \ -$(POSTGRE_INCLUDES) \ -$(TRINI_INCLUDES) \ --I$(top_srcdir)/dep/include \ --I$(top_srcdir)/src/shared \ --I$(top_srcdir)/src/framework \ --I$(top_srcdir)/src/game \ --D_TRINITY_CORE_CONFIG='"$(sysconfdir)/trinitycore.conf"' - -## Sources -trinity_core_SOURCES = \ -$(srcdir)/CliRunnable.cpp \ -$(srcdir)/CliRunnable.h \ -$(srcdir)/Main.cpp \ -$(srcdir)/Master.cpp \ -$(srcdir)/Master.h \ -$(srcdir)/RASocket.cpp \ -$(srcdir)/RASocket.h \ -$(srcdir)/WorldRunnable.cpp \ -$(srcdir)/WorldRunnable.h - -## Convenience libs to add -trinity_core_LDADD = \ -$(top_builddir)/src/game/libgame.a \ -$(top_builddir)/src/shared/libshared.a \ -$(top_builddir)/src/shared/vmap/libvmaps.a \ -$(top_builddir)/src/framework/libmangosframework.a \ -$(top_builddir)/dep/src/sockets/libmangossockets.a \ -$(top_builddir)/dep/src/zthread/libZThread.la \ -$(top_builddir)/dep/src/g3dlite/libg3dlite.a - -if USE_TSCRIPTS -trinity_core_LDADD += $(top_builddir)/src/bindings/scripts/libtrinityscript.la -else -trinity_core_LDADD += $(top_builddir)/src/bindings/interface/libtrinityscript.la -endif - -## Linker flags -trinity_core_LDFLAGS = $(MYSQL_LIBS) $(POSTGRE_LIBS) $(ZLIB) $(COMPATLIB) $(SSLLIB) $(TRINI_LIBS) -export-dynamic - -## Additional files to install -sysconf_DATA = \ - trinitycore.conf.dist - -EXTRA_DIST = \ - trinitycore.conf.dist - -## Prevend overwrite of the config file, if its already installed -install-data-hook: - @list='$(sysconf_DATA)'; for p in $$list; do \ - dest=`echo $$p | sed -e s/.dist//`; \ - if test -f $(DESTDIR)$(sysconfdir)/$$dest; then \ - echo "$@ will not overwrite existing $(DESTDIR)$(sysconfdir)/$$dest"; \ - else \ - echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$dest"; \ - $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$dest; \ - fi; \ - done - - diff --git a/src/trinitycore/Master.cpp b/src/trinitycore/Master.cpp deleted file mode 100644 index eea1606256c..00000000000 --- a/src/trinitycore/Master.cpp +++ /dev/null @@ -1,517 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/** \file - \ingroup Trinityd -*/ - -#include <ace/OS_NS_signal.h> - -#include "WorldSocketMgr.h" -#include "Common.h" -#include "Master.h" -#include "WorldSocket.h" -#include "WorldRunnable.h" -#include "World.h" -#include "Log.h" -#include "Timer.h" -#include "Policies/SingletonImp.h" -#include "SystemConfig.h" -#include "Config/ConfigEnv.h" -#include "Database/DatabaseEnv.h" -#include "CliRunnable.h" -#include "RASocket.h" -#include "ScriptCalls.h" -#include "Util.h" - -#include "sockets/TcpSocket.h" -#include "sockets/Utility.h" -#include "sockets/Parse.h" -#include "sockets/Socket.h" -#include "sockets/SocketHandler.h" -#include "sockets/ListenSocket.h" - -#ifdef WIN32 -#include "ServiceWin32.h" -extern int m_ServiceStatus; -#endif - -/// \todo Warning disabling not useful under VC++2005. Can somebody say on which compiler it is useful? -#pragma warning(disable:4305) - -INSTANTIATE_SINGLETON_1( Master ); - -volatile uint32 Master::m_masterLoopCounter = 0; - -class FreezeDetectorRunnable : public ZThread::Runnable -{ -public: - FreezeDetectorRunnable() { _delaytime = 0; } - uint32 m_loops, m_lastchange; - uint32 w_loops, w_lastchange; - uint32 _delaytime; - void SetDelayTime(uint32 t) { _delaytime = t; } - void run(void) - { - if(!_delaytime) - return; - sLog.outString("Starting up anti-freeze thread (%u seconds max stuck time)...",_delaytime/1000); - m_loops = 0; - w_loops = 0; - m_lastchange = 0; - w_lastchange = 0; - while(!World::IsStopped()) - { - ZThread::Thread::sleep(1000); - uint32 curtime = getMSTime(); - //DEBUG_LOG("anti-freeze: time=%u, counters=[%u; %u]",curtime,Master::m_masterLoopCounter,World::m_worldLoopCounter); - - // There is no Master anymore - // TODO: clear the rest of the code -// // normal work -// if(m_loops != Master::m_masterLoopCounter) -// { -// m_lastchange = curtime; -// m_loops = Master::m_masterLoopCounter; -// } -// // possible freeze -// else if(getMSTimeDiff(m_lastchange,curtime) > _delaytime) -// { -// sLog.outError("Main/Sockets Thread hangs, kicking out server!"); -// *((uint32 volatile*)NULL) = 0; // bang crash -// } - - // normal work - if(w_loops != World::m_worldLoopCounter) - { - w_lastchange = curtime; - w_loops = World::m_worldLoopCounter; - } - // possible freeze - else if(getMSTimeDiff(w_lastchange,curtime) > _delaytime) - { - sLog.outError("World Thread hangs, kicking out server!"); - *((uint32 volatile*)NULL) = 0; // bang crash - } - } - sLog.outString("Anti-freeze thread exiting without problems."); - } -}; - -class RARunnable : public ZThread::Runnable -{ -public: - uint32 numLoops, loopCounter; - - RARunnable () - { - uint32 socketSelecttime = sWorld.getConfig (CONFIG_SOCKET_SELECTTIME); - numLoops = (sConfig.GetIntDefault ("MaxPingTime", 30) * (MINUTE * 1000000 / socketSelecttime)); - loopCounter = 0; - } - - void - checkping () - { - // ping if need - if ((++loopCounter) == numLoops) - { - loopCounter = 0; - sLog.outDetail ("Ping MySQL to keep connection alive"); - delete WorldDatabase.Query ("SELECT 1 FROM command LIMIT 1"); - delete loginDatabase.Query ("SELECT 1 FROM realmlist LIMIT 1"); - delete CharacterDatabase.Query ("SELECT 1 FROM bugreport LIMIT 1"); - } - } - - void - run (void) - { - SocketHandler h; - - // Launch the RA listener socket - ListenSocket<RASocket> RAListenSocket (h); - bool usera = sConfig.GetBoolDefault ("Ra.Enable", false); - - if (usera) - { - port_t raport = sConfig.GetIntDefault ("Ra.Port", 3443); - std::string stringip = sConfig.GetStringDefault ("Ra.IP", "0.0.0.0"); - ipaddr_t raip; - if (!Utility::u2ip (stringip, raip)) - sLog.outError ("Trinity RA can not bind to ip %s", stringip.c_str ()); - else if (RAListenSocket.Bind (raip, raport)) - sLog.outError ("Trinity RA can not bind to port %d on %s", raport, stringip.c_str ()); - else - { - h.Add (&RAListenSocket); - - sLog.outString ("Starting Remote access listner on port %d on %s", raport, stringip.c_str ()); - } - } - - // Socket Selet time is in microseconds , not miliseconds!! - uint32 socketSelecttime = sWorld.getConfig (CONFIG_SOCKET_SELECTTIME); - - // if use ra spend time waiting for io, if not use ra ,just sleep - if (usera) - while (!World::IsStopped()) - { - h.Select (0, socketSelecttime); - checkping (); - } - else - while (!World::IsStopped()) - { - ZThread::Thread::sleep (static_cast<unsigned long> (socketSelecttime / 1000)); - checkping (); - } - } -}; - -Master::Master() -{ -} - -Master::~Master() -{ -} - -/// Main function -int Master::Run() -{ - sLog.outString( "%s (core-daemon)", _FULLVERSION ); - sLog.outString( "<Ctrl-C> to stop.\n" ); - - sLog.outTitle( " ______ __"); - sLog.outTitle( "/\\__ _\\ __ __/\\ \\__"); - sLog.outTitle( "\\/_/\\ \\/ _ __ /\\_\\ ___ /\\_\\ \\ ,_\\ __ __"); - sLog.outTitle( " \\ \\ \\/\\`'__\\/\\ \\ /' _ `\\/\\ \\ \\ \\/ /\\ \\/\\ \\"); - sLog.outTitle( " \\ \\ \\ \\ \\/ \\ \\ \\/\\ \\/\\ \\ \\ \\ \\ \\_\\ \\ \\_\\ \\"); - sLog.outTitle( " \\ \\_\\ \\_\\ \\ \\_\\ \\_\\ \\_\\ \\_\\ \\__\\\\/`____ \\"); - sLog.outTitle( " \\/_/\\/_/ \\/_/\\/_/\\/_/\\/_/\\/__/ `/___/> \\"); - sLog.outTitle( " C O R E /\\___/"); - sLog.outTitle( "http://TrinityCore.org \\/__/\n"); - - /// worldd PID file creation - std::string pidfile = sConfig.GetStringDefault("PidFile", ""); - if(!pidfile.empty()) - { - uint32 pid = CreatePIDFile(pidfile); - if( !pid ) - { - sLog.outError( "Cannot create PID file %s.\n", pidfile.c_str() ); - return 1; - } - - sLog.outString( "Daemon PID: %u\n", pid ); - } - - ///- Start the databases - if (!_StartDB()) - return 1; - - ///- Initialize the World - sWorld.SetInitialWorldSettings(); - - ///- Catch termination signals - _HookSignals(); - - ///- Launch WorldRunnable thread - ZThread::Thread t(new WorldRunnable); - t.setPriority ((ZThread::Priority )2); - - // set server online - loginDatabase.PExecute("UPDATE realmlist SET color = 0, population = 0 WHERE id = '%d'",realmID); - -#ifdef WIN32 - if (sConfig.GetBoolDefault("Console.Enable", true) && (m_ServiceStatus == -1)/* need disable console in service mode*/) -#else - if (sConfig.GetBoolDefault("Console.Enable", true)) -#endif - { - ///- Launch CliRunnable thread - ZThread::Thread td1(new CliRunnable); - } - - ZThread::Thread td2(new RARunnable); - - ///- Handle affinity for multiple processors and process priority on Windows - #ifdef WIN32 - { - HANDLE hProcess = GetCurrentProcess(); - - uint32 Aff = sConfig.GetIntDefault("UseProcessors", 0); - if(Aff > 0) - { - ULONG_PTR appAff; - ULONG_PTR sysAff; - - if(GetProcessAffinityMask(hProcess,&appAff,&sysAff)) - { - ULONG_PTR curAff = Aff & appAff; // remove non accessible processors - - if(!curAff ) - { - sLog.outError("Processors marked in UseProcessors bitmask (hex) %x not accessible for Trinityd. Accessible processors bitmask (hex): %x",Aff,appAff); - } - else - { - if(SetProcessAffinityMask(hProcess,curAff)) - sLog.outString("Using processors (bitmask, hex): %x", curAff); - else - sLog.outError("Can't set used processors (hex): %x",curAff); - } - } - sLog.outString(); - } - - bool Prio = sConfig.GetBoolDefault("ProcessPriority", false); - -// if(Prio && (m_ServiceStatus == -1)/* need set to default process priority class in service mode*/) - if(Prio) - { - if(SetPriorityClass(hProcess,HIGH_PRIORITY_CLASS)) - sLog.outString("TrinityCore process priority class set to HIGH"); - else - sLog.outError("ERROR: Can't set Trinityd process priority class."); - sLog.outString(); - } - } - #endif - - uint32 realCurrTime, realPrevTime; - realCurrTime = realPrevTime = getMSTime(); - - uint32 socketSelecttime = sWorld.getConfig(CONFIG_SOCKET_SELECTTIME); - - // maximum counter for next ping - uint32 numLoops = (sConfig.GetIntDefault( "MaxPingTime", 30 ) * (MINUTE * 1000000 / socketSelecttime)); - uint32 loopCounter = 0; - - ///- Start up freeze catcher thread - uint32 freeze_delay = sConfig.GetIntDefault("MaxCoreStuckTime", 0); - if(freeze_delay) - { - FreezeDetectorRunnable *fdr = new FreezeDetectorRunnable(); - fdr->SetDelayTime(freeze_delay*1000); - ZThread::Thread t(fdr); - t.setPriority(ZThread::High); - } - - ///- Launch the world listener socket - port_t wsport = sWorld.getConfig (CONFIG_PORT_WORLD); - std::string bind_ip = sConfig.GetStringDefault ("BindIP", "0.0.0.0"); - - if (sWorldSocketMgr->StartNetwork (wsport, bind_ip.c_str ()) == -1) - { - sLog.outError ("Failed to start network"); - World::StopNow(ERROR_EXIT_CODE); - // go down and shutdown the server - } - - sWorldSocketMgr->Wait (); - - // set server offline - loginDatabase.PExecute("UPDATE realmlist SET color = 2 WHERE id = '%d'",realmID); - - ///- Remove signal handling before leaving - _UnhookSignals(); - - // when the main thread closes the singletons get unloaded - // since worldrunnable uses them, it will crash if unloaded after master - t.wait(); - td2.wait (); - - ///- Clean database before leaving - clearOnlineAccounts(); - - ///- Wait for delay threads to end - CharacterDatabase.HaltDelayThread(); - WorldDatabase.HaltDelayThread(); - loginDatabase.HaltDelayThread(); - - sLog.outString( "Halting process..." ); - - #ifdef WIN32 - if (sConfig.GetBoolDefault("Console.Enable", true)) - { - // this only way to terminate CLI thread exist at Win32 (alt. way exist only in Windows Vista API) - //_exit(1); - // send keyboard input to safely unblock the CLI thread - INPUT_RECORD b[5]; - HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); - b[0].EventType = KEY_EVENT; - b[0].Event.KeyEvent.bKeyDown = TRUE; - b[0].Event.KeyEvent.uChar.AsciiChar = 'X'; - b[0].Event.KeyEvent.wVirtualKeyCode = 'X'; - b[0].Event.KeyEvent.wRepeatCount = 1; - - b[1].EventType = KEY_EVENT; - b[1].Event.KeyEvent.bKeyDown = FALSE; - b[1].Event.KeyEvent.uChar.AsciiChar = 'X'; - b[1].Event.KeyEvent.wVirtualKeyCode = 'X'; - b[1].Event.KeyEvent.wRepeatCount = 1; - - b[2].EventType = KEY_EVENT; - b[2].Event.KeyEvent.bKeyDown = TRUE; - b[2].Event.KeyEvent.dwControlKeyState = 0; - b[2].Event.KeyEvent.uChar.AsciiChar = '\r'; - b[2].Event.KeyEvent.wVirtualKeyCode = VK_RETURN; - b[2].Event.KeyEvent.wRepeatCount = 1; - b[2].Event.KeyEvent.wVirtualScanCode = 0x1c; - - b[3].EventType = KEY_EVENT; - b[3].Event.KeyEvent.bKeyDown = FALSE; - b[3].Event.KeyEvent.dwControlKeyState = 0; - b[3].Event.KeyEvent.uChar.AsciiChar = '\r'; - b[3].Event.KeyEvent.wVirtualKeyCode = VK_RETURN; - b[3].Event.KeyEvent.wVirtualScanCode = 0x1c; - b[3].Event.KeyEvent.wRepeatCount = 1; - DWORD numb; - BOOL ret = WriteConsoleInput(hStdIn, b, 4, &numb); - } - #endif - - // for some unknown reason, unloading scripts here and not in worldrunnable - // fixes a memory leak related to detaching threads from the module - UnloadScriptingModule(); - - // Exit the process with specified return value - return World::GetExitCode(); -} - -/// Initialize connection to the databases -bool Master::_StartDB() -{ - ///- Get world database info from configuration file - std::string dbstring; - if(!sConfig.GetString("WorldDatabaseInfo", &dbstring)) - { - sLog.outError("Database not specified in configuration file"); - return false; - } - sLog.outString("World Database: %s", dbstring.c_str()); - - ///- Initialise the world database - if(!WorldDatabase.Initialize(dbstring.c_str())) - { - sLog.outError("Cannot connect to world database %s",dbstring.c_str()); - return false; - } - - if(!sConfig.GetString("CharacterDatabaseInfo", &dbstring)) - { - sLog.outError("Character Database not specified in configuration file"); - return false; - } - sLog.outString("Character Database: %s", dbstring.c_str()); - - ///- Initialise the Character database - if(!CharacterDatabase.Initialize(dbstring.c_str())) - { - sLog.outError("Cannot connect to Character database %s",dbstring.c_str()); - return false; - } - - ///- Get login database info from configuration file - if(!sConfig.GetString("LoginDatabaseInfo", &dbstring)) - { - sLog.outError("Login database not specified in configuration file"); - return false; - } - - ///- Initialise the login database - sLog.outString("Login Database: %s", dbstring.c_str() ); - if(!loginDatabase.Initialize(dbstring.c_str())) - { - sLog.outError("Cannot connect to login database %s",dbstring.c_str()); - return false; - } - - ///- Get the realm Id from the configuration file - realmID = sConfig.GetIntDefault("RealmID", 0); - if(!realmID) - { - sLog.outError("Realm ID not defined in configuration file"); - return false; - } - sLog.outString("Realm running as realm ID %d", realmID); - - ///- Clean the database before starting - clearOnlineAccounts(); - - sWorld.LoadDBVersion(); - - sLog.outString("Using %s", sWorld.GetDBVersion()); - return true; -} - -/// Clear 'online' status for all accounts with characters in this realm -void Master::clearOnlineAccounts() -{ - // Cleanup online status for characters hosted at current realm - /// \todo Only accounts with characters logged on *this* realm should have online status reset. Move the online column from 'account' to 'realmcharacters'? - loginDatabase.PExecute( - "UPDATE account SET online = 0 WHERE online > 0 " - "AND id IN (SELECT acctid FROM realmcharacters WHERE realmid = '%d')",realmID); - - - CharacterDatabase.Execute("UPDATE characters SET online = 0 WHERE online<>0"); -} - -/// Handle termination signals -void Master::_OnSignal(int s) -{ - switch (s) - { - case SIGINT: - World::StopNow(RESTART_EXIT_CODE); - break; - case SIGTERM: - #ifdef _WIN32 - case SIGBREAK: - #endif - World::StopNow(SHUTDOWN_EXIT_CODE); - break; - } - - signal(s, _OnSignal); -} - -/// Define hook '_OnSignal' for all termination signals -void Master::_HookSignals() -{ - signal(SIGINT, _OnSignal); - signal(SIGTERM, _OnSignal); - #ifdef _WIN32 - signal(SIGBREAK, _OnSignal); - #endif -} - -/// Unhook the signals before leaving -void Master::_UnhookSignals() -{ - signal(SIGINT, 0); - signal(SIGTERM, 0); - #ifdef _WIN32 - signal(SIGBREAK, 0); - #endif -} diff --git a/src/trinitycore/Master.h b/src/trinitycore/Master.h deleted file mode 100644 index 2485dd456b1..00000000000 --- a/src/trinitycore/Master.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/// \addtogroup Trinityd -/// @{ -/// \file - -#ifndef _MASTER_H -#define _MASTER_H - -#include "Common.h" -#include "Policies/Singleton.h" - -/// Start the server -class Master -{ - public: - Master(); - ~Master(); - int Run(); - static volatile uint32 m_masterLoopCounter; - - private: - bool _StartDB(); - - void _HookSignals(); - void _UnhookSignals(); - static void _OnSignal(int s); - - void clearOnlineAccounts(); -}; - -#define sMaster Trinity::Singleton<Master>::Instance() -#endif -/// @} diff --git a/src/trinitycore/RASocket.cpp b/src/trinitycore/RASocket.cpp deleted file mode 100644 index f953dc3f592..00000000000 --- a/src/trinitycore/RASocket.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/** \file - \ingroup Trinityd -*/ - -#include "Common.h" -#include "Database/DatabaseEnv.h" -#include "Log.h" -#include "RASocket.h" -#include "World.h" -#include "Config/ConfigEnv.h" -#include "Util.h" -#include "AccountMgr.h" - -/// \todo Make this thread safe if in the future 2 admins should be able to log at the same time. -SOCKET r; - -#define dropclient {Sendf("I'm busy right now, come back later."); \ - SetCloseAndDelete(); \ - return; \ - } - -uint32 iSession=0; ///< Session number (incremented each time a new connection is made) -unsigned int iUsers=0; ///< Number of active administrators - -typedef int(* pPrintf)(const char*,...); - -void ParseCommand(CliCommandHolder::Print*, char*command); - -/// RASocket constructor -RASocket::RASocket(ISocketHandler &h): TcpSocket(h) -{ - - ///- Increment the session number - iSess =iSession++ ; - - ///- Get the config parameters - bSecure = sConfig.GetBoolDefault( "RA.Secure", true ); - iMinLevel = sConfig.GetIntDefault( "RA.MinLevel", 3 ); - - ///- Initialize buffer and data - iInputLength=0; - buff=new char[RA_BUFF_SIZE]; - stage=NONE; -} - -/// RASocket destructor -RASocket::~RASocket() -{ - ///- Delete buffer and decrease active admins count - delete [] buff; - - sLog.outRALog("Connection was closed.\n"); - - if(stage==OK) - iUsers--; -} - -/// Accept an incoming connection -void RASocket::OnAccept() -{ - std::string ss=GetRemoteAddress(); - sLog.outRALog("Incoming connection from %s.\n",ss.c_str()); - ///- If there is already an active admin, drop the connection - if(iUsers) - dropclient - - ///- Else print Motd - Sendf("%s\r\n",sWorld.GetMotd()); -} - -/// Read data from the network -void RASocket::OnRead() -{ - ///- Read data and check input length - TcpSocket::OnRead(); - - unsigned int sz=ibuf.GetLength(); - if(iInputLength+sz>=RA_BUFF_SIZE) - { - sLog.outRALog("Input buffer overflow, possible DOS attack.\n"); - SetCloseAndDelete(); - return; - } - - ///- If there is already an active admin (other than you), drop the connection - if(stage!=OK && iUsers) - dropclient - - char *inp = new char [sz+1]; - ibuf.Read(inp,sz); - - /// \todo Can somebody explain this 'Linux bugfix'? - if(stage==NONE) - if(sz>4) //linux remote telnet - if(memcmp(inp ,"USER ",5)) - { - delete [] inp;return; - printf("lin bugfix"); - } //linux bugfix - - ///- Discard data after line break or line feed - bool gotenter=false; - unsigned int y=0; - for(;y<sz;y++) - if(inp[y]=='\r'||inp[y]=='\n') - { - gotenter=true; - break; - } - - //No buffer overflow (checked above) - memcpy(&buff[iInputLength],inp,y); - iInputLength+=y; - delete [] inp; - if(gotenter) - { - - buff[iInputLength]=0; - iInputLength=0; - switch(stage) - { - /// <ul> <li> If the input is 'USER <username>' - case NONE: - if(!memcmp(buff,"USER ",5)) //got "USER" cmd - { - szLogin=&buff[5]; - - ///- Get the gmlevel and password from the account table - std::string login = szLogin; - - ///- Convert Account name to Upper Format - AccountMgr::normilizeString(login); - - ///- Escape the Login to allow quotes in names - loginDatabase.escape_string(login); - - QueryResult* result = loginDatabase.PQuery("SELECT gmlevel FROM account WHERE username = '%s'",login.c_str()); - - ///- If the user is not found, deny access - if(!result) - { - Sendf("-No such user.\r\n"); - sLog.outRALog("User %s does not exist.\n",szLogin.c_str()); - if(bSecure)SetCloseAndDelete(); - } - else - { - Field *fields = result->Fetch(); - - //szPass=fields[0].GetString(); - - ///- if gmlevel is too low, deny access - if(fields[0].GetUInt32()<iMinLevel) - { - Sendf("-Not enough privileges.\r\n"); - sLog.outRALog("User %s has no privilege.\n",szLogin.c_str()); - if(bSecure)SetCloseAndDelete(); - } else - { - stage=LG; - } - delete result; - } - } - break; - ///<li> If the input is 'PASS <password>' (and the user already gave his username) - case LG: - if(!memcmp(buff,"PASS ",5)) //got "PASS" cmd - { //login+pass ok - ///- If password is correct, increment the number of active administrators - std::string login = szLogin; - std::string pw = &buff[5]; - - AccountMgr::normilizeString(login); - AccountMgr::normilizeString(pw); - loginDatabase.escape_string(login); - loginDatabase.escape_string(pw); - - QueryResult *check = loginDatabase.PQuery( - "SELECT 1 FROM account WHERE username = '%s' AND sha_pass_hash=SHA1(CONCAT(username,':','%s'))", - login.c_str(), pw.c_str()); - - if(check) - { - delete check; - r=GetSocket(); - stage=OK; - ++iUsers; - - Sendf("+Logged in.\r\n"); - sLog.outRALog("User %s has logged in.\n",szLogin.c_str()); - Sendf("TC>"); - } - else - { - ///- Else deny access - Sendf("-Wrong pass.\r\n"); - sLog.outRALog("User %s has failed to log in.\n",szLogin.c_str()); - if(bSecure)SetCloseAndDelete(); - } - } - break; - ///<li> If user is logged, parse and execute the command - case OK: - if(strlen(buff)) - { - sLog.outRALog("Got '%s' cmd.\n",buff); - sWorld.QueueCliCommand(&RASocket::zprint , buff); - } - else - Sendf("TC>"); - break; - ///</ul> - }; - - } -} - -/// Output function -void RASocket::zprint( const char * szText ) -{ - if( !szText ) - return; - - #ifdef RA_CRYPT - - char *megabuffer=strdup(szText); - unsigned int sz=strlen(megabuffer); - Encrypt(megabuffer,sz); - send(r,megabuffer,sz,0); - delete [] megabuffer; - - #else - - unsigned int sz=strlen(szText); - send(r,szText,sz,0); - - #endif -} diff --git a/src/trinitycore/RASocket.h b/src/trinitycore/RASocket.h deleted file mode 100644 index a164c9d3aa2..00000000000 --- a/src/trinitycore/RASocket.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/// \addtogroup Trinityd -/// @{ -/// \file - -#ifndef _RASOCKET_H -#define _RASOCKET_H - -#include "Common.h" -#include "sockets/TcpSocket.h" - -#define RA_BUFF_SIZE 1024 - -class ISocketHandler; - -/// Remote Administration socket -class RASocket: public TcpSocket -{ - public: - - RASocket(ISocketHandler& h); - ~RASocket(); - - void OnAccept(); - void OnRead(); - - private: - - char * buff; - std::string szLogin; - uint32 iSess; - unsigned int iInputLength; - bool bLog; - bool bSecure; //kick on wrong pass, non exist. user, user with no priv - //will protect from DOS, bruteforce attacks - //some 'smart' protection must be added for more security - uint8 iMinLevel; - enum - { - NONE, //initial value - LG, //only login was entered - OK, //both login and pass were given, and they are correct and user have enough priv. - }stage; - - static void zprint( const char * szText ); -}; -#endif -/// @} diff --git a/src/trinitycore/TrinityCore.ico b/src/trinitycore/TrinityCore.ico Binary files differdeleted file mode 100644 index 6f0a5721957..00000000000 --- a/src/trinitycore/TrinityCore.ico +++ /dev/null diff --git a/src/trinitycore/TrinityCore.rc b/src/trinitycore/TrinityCore.rc deleted file mode 100644 index 4e6510c0407..00000000000 --- a/src/trinitycore/TrinityCore.rc +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "windows.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_APPICON ICON "TrinityCore.ico" - -///////////////////////////////////////////////////////////////////////////// -// Neutre (Par défaut système) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUSD) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_SYS_DEFAULT -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,4,6743,685 - PRODUCTVERSION 0,4,6743,685 - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x0L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080004b0" - BEGIN - VALUE "FileDescription", "TrinityCore" - VALUE "FileVersion", "0, 4, 6743, 685" - VALUE "InternalName", "TrinityCore" - VALUE "LegalCopyright", "Copyright (C) 2008" - VALUE "OriginalFilename", "TrinityCore.exe" - VALUE "ProductName", "TrinityCore" - VALUE "ProductVersion", "0, 4, 6743, 685" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x800, 1200 - END -END -#endif diff --git a/src/trinitycore/WorldRunnable.cpp b/src/trinitycore/WorldRunnable.cpp deleted file mode 100644 index b57dbc6bce2..00000000000 --- a/src/trinitycore/WorldRunnable.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/** \file - \ingroup Trinityd -*/ - -#include "WorldSocketMgr.h" -#include "Common.h" -#include "World.h" -#include "WorldRunnable.h" -#include "Timer.h" -#include "ObjectAccessor.h" -#include "MapManager.h" - -#include "Database/DatabaseEnv.h" - -#ifdef WIN32 -#define WORLD_SLEEP_CONST 50 -#else -#define WORLD_SLEEP_CONST 100 //Is this still needed?? [On linux some time ago not working 50ms] -#endif - -/// Heartbeat for the World -void WorldRunnable::run() -{ - ///- Init new SQL thread for the world database - WorldDatabase.ThreadStart(); // let thread do safe mySQL requests (one connection call enough) - sWorld.InitResultQueue(); - - uint32 realCurrTime = 0; - uint32 realPrevTime = getMSTime(); - - uint32 prevSleepTime = 0; // used for balanced full tick time length near WORLD_SLEEP_CONST - - ///- While we have not World::m_stopEvent, update the world - while (!World::IsStopped()) - { - ++World::m_worldLoopCounter; - realCurrTime = getMSTime(); - - uint32 diff = getMSTimeDiff(realPrevTime,realCurrTime); - - sWorld.Update( diff ); - realPrevTime = realCurrTime; - - // diff (D0) include time of previous sleep (d0) + tick time (t0) - // we want that next d1 + t1 == WORLD_SLEEP_CONST - // we can't know next t1 and then can use (t0 + d1) == WORLD_SLEEP_CONST requirement - // d1 = WORLD_SLEEP_CONST - t0 = WORLD_SLEEP_CONST - (D0 - d0) = WORLD_SLEEP_CONST + d0 - D0 - if (diff <= WORLD_SLEEP_CONST+prevSleepTime) - { - prevSleepTime = WORLD_SLEEP_CONST+prevSleepTime-diff; - ZThread::Thread::sleep(prevSleepTime); - } - else - prevSleepTime = 0; - } - - sWorld.KickAll(); // save and kick all players - sWorld.UpdateSessions( 1 ); // real players unload required UpdateSessions call - - sWorldSocketMgr->StopNetwork(); - - MapManager::Instance().UnloadAll(); // unload all grids (including locked in memory) - - ///- End the database thread - WorldDatabase.ThreadEnd(); // free mySQL thread resources -} diff --git a/src/trinitycore/WorldRunnable.h b/src/trinitycore/WorldRunnable.h deleted file mode 100644 index 8891186dec4..00000000000 --- a/src/trinitycore/WorldRunnable.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> - * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/// \addtogroup Trinityd -/// @{ -/// \file - -#ifndef __WORLDRUNNABLE_H -#define __WORLDRUNNABLE_H - -/// Heartbeat thread for the World -class WorldRunnable : public ZThread::Runnable -{ - public: - void run(); -}; -#endif -/// @} diff --git a/src/trinitycore/monitor-mangosd b/src/trinitycore/monitor-mangosd deleted file mode 100644 index a740ae5e8fa..00000000000 --- a/src/trinitycore/monitor-mangosd +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# Massive Network Game Object Server -# Monitoring Script - -pid=`ps ax | awk '($5 ~ /mangos-worldd/) { print $1 }'` -cpu=`top -b -n 1 -p $pid | awk '($12 ~ /mangos-worldd/) { print $9 }'` -#echo $pid -#echo $cpu -intcpu=${cpu%.*} -#echo $intcpu -if [ "$intcpu" -gt "95" ] -then - kill -9 $pid - echo "Killed MaNGOS for exceeding it's cpu limit." - echo `date` ", Killed MaNGOS for $intcpu% CPU Usage." >> serverlog -else - echo "MaNGOS Passes the cpu test." -fi diff --git a/src/trinitycore/resource.h b/src/trinitycore/resource.h deleted file mode 100644 index 7e7d8e4b76f..00000000000 --- a/src/trinitycore/resource.h +++ /dev/null @@ -1,15 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by TrinityCore.rc -// - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/trinitycore/run-mangosd b/src/trinitycore/run-mangosd deleted file mode 100644 index f307bd9e1ad..00000000000 --- a/src/trinitycore/run-mangosd +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# Trinity Server -# autorestart Script - -while : -do - echo "TrinityCore daemon restarted" - echo `date` >> crash.log & - ./mangosd | tail -n 20 >> crash.log - echo " " >> crash.log & - pid=`ps ax | awk '($5 ~ /trinitycore/) { print $1 }'` - wait $pid - echo `date` ", TrinityCore daemon crashed and restarted." >> serverlog -done |
