aboutsummaryrefslogtreecommitdiff
path: root/src/trinitycore
diff options
context:
space:
mode:
Diffstat (limited to 'src/trinitycore')
-rw-r--r--src/trinitycore/CliRunnable.cpp355
-rw-r--r--src/trinitycore/CliRunnable.h35
-rw-r--r--src/trinitycore/Main.cpp165
-rw-r--r--src/trinitycore/Makefile.am85
-rw-r--r--src/trinitycore/Master.cpp517
-rw-r--r--src/trinitycore/Master.h52
-rw-r--r--src/trinitycore/RASocket.cpp259
-rw-r--r--src/trinitycore/RASocket.h67
-rw-r--r--src/trinitycore/TrinityCore.icobin136606 -> 0 bytes
-rw-r--r--src/trinitycore/TrinityCore.rc85
-rw-r--r--src/trinitycore/WorldRunnable.cpp86
-rw-r--r--src/trinitycore/WorldRunnable.h35
-rw-r--r--src/trinitycore/monitor-mangosd18
-rw-r--r--src/trinitycore/resource.h15
-rw-r--r--src/trinitycore/run-mangosd14
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
deleted file mode 100644
index 6f0a5721957..00000000000
--- a/src/trinitycore/TrinityCore.ico
+++ /dev/null
Binary files differ
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