diff --git a/DB/updates/login_updates.sql b/DB/updates/login_updates.sql new file mode 100644 index 000000000..ab292ebaa --- /dev/null +++ b/DB/updates/login_updates.sql @@ -0,0 +1,3 @@ +alter table log_messages add column name text default null; +alter table log_messages add column version text default null; +alter table log_messages modify column log_type text not null default ''; \ No newline at end of file diff --git a/EQ2/source/LoginServer/client.cpp b/EQ2/source/LoginServer/client.cpp index 5e4556a38..866189a5a 100644 --- a/EQ2/source/LoginServer/client.cpp +++ b/EQ2/source/LoginServer/client.cpp @@ -48,7 +48,7 @@ Client::Client(EQStream* ieqnc) { lsadmin = 0; worldadmin = 0; lsstatus = 0; - origversion = version = 0; + version = 0; kicked = false; verified = false; memset(bannedreason, 0, sizeof(bannedreason)); @@ -168,12 +168,6 @@ bool Client::Process() { LogWrite(LOGIN__DEBUG, 0, "Login", "Client Version Provided: %i", version); - // Image 2020 Notes - // we keep the original version for special packets like char creation to pass to world server - origversion = version; - // forced version to 60085 for now since those structures seem to work best for steam AoM 12133L Aug 17 2015 11:19:13 build - version = 60085; - if (EQOpcodeManager.count(GetOpcodeVersion(version)) == 0) { LogWrite(LOGIN__ERROR, 0, "Login", "Incompatible client version provided: %i", version); SendLoginDenied(); @@ -181,7 +175,7 @@ bool Client::Process() { } if(EQOpcodeManager.count(GetOpcodeVersion(version)) > 0 && getConnection()){ - getConnection()->SetClientVersion(GetOrigVersion()); + getConnection()->SetClientVersion(GetVersion()); EQ2_16BitString username = packet->getType_EQ2_16BitString_ByName("username"); EQ2_16BitString password = packet->getType_EQ2_16BitString_ByName("password"); LoginAccount* acct = database.LoadAccount(username.data.c_str(),password.data.c_str(), net.IsAllowingAccountCreation()); @@ -231,7 +225,7 @@ bool Client::Process() { case OP_AllWSDescRequestMsg:{ SendWorldList(); needs_world_list = false; - database.LoadCharacters(GetLoginAccount(), GetOrigVersion()); + database.LoadCharacters(GetLoginAccount(), GetVersion()); SendCharList(); break; } @@ -259,7 +253,7 @@ bool Client::Process() { break; } case OP_CreateCharacterRequestMsg:{ - PacketStruct* packet = configReader.getStruct("CreateCharacter", GetOrigVersion()); + PacketStruct* packet = configReader.getStruct("CreateCharacter", GetVersion()); playWaitTimer = new Timer ( 15000 ); playWaitTimer->Start ( ); @@ -276,7 +270,7 @@ bool Client::Process() { else { ServerPacket* outpack = new ServerPacket(ServerOP_CharacterCreate, app->size+sizeof(int16)); - int16 out_version = GetOrigVersion(); + int16 out_version = GetVersion(); memcpy(outpack->pBuffer, &out_version, sizeof(int16)); memcpy(outpack->pBuffer + sizeof(int16), app->pBuffer, app->size); uchar* tmp = outpack->pBuffer; @@ -366,14 +360,11 @@ bool Client::Process() { break; } default: { - char* name = (char*)app->GetOpcodeName(); - if(name) - cout << name; + const char* name = app->GetOpcodeName(); + if (name) + LogWrite(OPCODE__DEBUG, 1, "Opcode", "%s Received %04X (%i)", name, app->GetRawOpcode(), app->GetRawOpcode()); else - cout << "Unknown"; - cout << " Packet: OPCode: 0x" << hex << setw(2) << setfill('0') << app->GetOpcode() << dec << ", size: " << setw(5) << setfill(' ') << app->Size() << " from " << GetAccountName() << endl; - if (app->Size() < 128) - DumpPacket(app); + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Received %04X (%i)", app->GetRawOpcode(), app->GetRawOpcode()); } } delete app; @@ -421,7 +412,7 @@ void Client::CharacterApproved(int32 server_id,int32 char_id) if(!world_server) return; - PacketStruct* packet = configReader.getStruct("LS_CreateCharacterReply", GetOrigVersion()); + PacketStruct* packet = configReader.getStruct("LS_CreateCharacterReply", GetVersion()); if(packet){ packet->setDataByName("account_id", GetAccountID()); packet->setDataByName("unknown", 0xFFFFFFFF); @@ -433,7 +424,7 @@ void Client::CharacterApproved(int32 server_id,int32 char_id) database.SaveCharacter(createRequest, GetLoginAccount(),char_id); // refresh characters for this account - database.LoadCharacters(GetLoginAccount(), GetOrigVersion()); + database.LoadCharacters(GetLoginAccount(), GetVersion()); SendCharList(); } @@ -500,8 +491,8 @@ void Client::SendCharList(){ safe_delete(packet);*/ LogWrite(LOGIN__INFO, 0, "Login", "[%s] sending character list.", GetAccountName()); LS_CharSelectList list; - list.loadData(GetAccountID(), GetLoginAccount()->charlist, GetOrigVersion()); - EQ2Packet* outapp = list.serialize(GetOrigVersion()); + list.loadData(GetAccountID(), GetLoginAccount()->charlist, GetVersion()); + EQ2Packet* outapp = list.serialize(GetVersion()); // DumpPacket(outapp); QueuePacket(outapp); @@ -524,7 +515,7 @@ void Client::SendLoginDenied(){ } void Client::SendLoginAccepted() { - PacketStruct* packet = configReader.getStruct("LS_LoginReplyMsg", GetOrigVersion()); + PacketStruct* packet = configReader.getStruct("LS_LoginReplyMsg", GetVersion()); int i = 0; if (packet) { @@ -559,7 +550,7 @@ void Client::SendLoginAccepted() { void Client::SendWorldList(){ EQ2Packet* pack = world_list.MakeServerListPacket(lsadmin, version); EQ2Packet* dupe = pack->Copy(); - DumpPacket(dupe->pBuffer,dupe->size); + //DumpPacket(dupe->pBuffer,dupe->size); QueuePacket(dupe); return; } @@ -704,7 +695,7 @@ void ClientList::Process() { struct in_addr in; in.s_addr = client->getConnection()->GetRemoteIP(); net.numclients--; - cout << Timer::GetCurrentTime2() << " Removing client from ip: " << inet_ntoa(in) << " port: " << ntohs(client->getConnection()->GetRemotePort()) << " Name: " << client->GetAccountName() << endl; + LogWrite(LOGIN__INFO, 0, "Login", "Removing client from ip: %s on port %i, Account Name: %s", inet_ntoa(in), ntohs(client->getConnection()->GetRemotePort()), client->GetAccountName()); client->getConnection()->SetState(CLOSED); net.UpdateWindowTitle(); client_list.erase(client); diff --git a/EQ2/source/LoginServer/client.h b/EQ2/source/LoginServer/client.h index 6e53e879b..0f9e736f5 100644 --- a/EQ2/source/LoginServer/client.h +++ b/EQ2/source/LoginServer/client.h @@ -44,7 +44,6 @@ public: account_id = in_account->getLoginAccountID(); } int16 GetVersion(){ return version; } - int16 GetOrigVersion(){ return origversion; } char* GetKey() { return key; } void SetKey(char* in_key) { strcpy(key,in_key); } int32 GetIP() { return ip; } @@ -95,7 +94,6 @@ private: bool start; bool needs_world_list; int16 version; - int16 origversion; char bannedreason[30]; eLoginMode LoginMode; PacketStruct* createRequest; diff --git a/EQ2/source/LoginServer/net.cpp b/EQ2/source/LoginServer/net.cpp index aa8fd5653..d3ba04951 100644 --- a/EQ2/source/LoginServer/net.cpp +++ b/EQ2/source/LoginServer/net.cpp @@ -73,6 +73,9 @@ int main(int argc, char** argv){ LogStart(); + LogParseConfigs(); + net.WelcomeHeader(); + srand(time(NULL)); if(!net.ReadLoginConfig()) @@ -161,20 +164,23 @@ void NetConnection::HitKey(int keyhit) world_list.ListWorldsToConsole(); break; } - case '1': - world_list.SendWorldChanged(1, true); - break; - case '2': - world_list.SendWorldChanged(1, false); + case 'v': + case 'V': + { + printf("========Version Info=========\n"); + printf("%s %s\n", EQ2EMU_MODULE, CURRENT_VERSION); + printf("Last Compiled on %s %s\n", COMPILE_DATE, COMPILE_TIME); + printf("=============================\n\n"); break; + } case 'H': case 'h': { - printf("============================\n"); + printf("===========Help=============\n"); printf("Available Commands:\n"); printf("l = Listing of World Servers\n"); printf("v = Login Version\n"); // printf("0 = Kick all connected world servers\n"); - printf("============================\n"); + printf("============================\n\n"); break; } default: @@ -283,11 +289,60 @@ void NetConnection::UpdateWindowTitle(char* iNewTitle) { #ifdef WIN32 char tmp[500]; if (iNewTitle) { - snprintf(tmp, sizeof(tmp), "%s", iNewTitle); + snprintf(tmp, sizeof(tmp), "Login: %s", iNewTitle); } else { - snprintf(tmp, sizeof(tmp), "%i Server(s), %i Client(s) Connected", net.numservers, net.numclients); + snprintf(tmp, sizeof(tmp), "%s, Version: %s: %i Server(s), %i Client(s) Connected", EQ2EMU_MODULE, CURRENT_VERSION, net.numservers, net.numclients); } SetConsoleTitle(tmp); #endif } + +void NetConnection::WelcomeHeader() +{ +#ifdef _WIN32 + HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); +#endif + printf("Module: %s, Version: %s", EQ2EMU_MODULE, CURRENT_VERSION); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_YELLOW_BOLD); +#endif + printf("\n\nCopyright (C) 2007-2020 EQ2Emulator. https://www.eq2emu.com \n\n"); + printf("EQ2Emulator is free software: you can redistribute it and/or modify\n"); + printf("it under the terms of the GNU General Public License as published by\n"); + printf("the Free Software Foundation, either version 3 of the License, or\n"); + printf("(at your option) any later version.\n\n"); + printf("EQ2Emulator is distributed in the hope that it will be useful,\n"); + printf("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); + printf("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); + printf("GNU General Public License for more details.\n\n"); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_GREEN_BOLD); +#endif + printf(" /$$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$$ \n"); + printf("| $$_____/ /$$__ $$ /$$__ $$| $$_____/ \n"); + printf("| $$ | $$ \\ $$|__/ \\ $$| $$ /$$$$$$/$$$$ /$$ /$$\n"); + printf("| $$$$$ | $$ | $$ /$$$$$$/| $$$$$ | $$_ $$_ $$| $$ | $$\n"); + printf("| $$__/ | $$ | $$ /$$____/ | $$__/ | $$ \\ $$ \\ $$| $$ | $$\n"); + printf("| $$ | $$/$$ $$| $$ | $$ | $$ | $$ | $$| $$ | $$\n"); + printf("| $$$$$$$$| $$$$$$/| $$$$$$$$| $$$$$$$$| $$ | $$ | $$| $$$$$$/\n"); + printf("|________/ \\____ $$$|________/|________/|__/ |__/ |__/ \\______/ \n"); + printf(" \\__/ \n\n"); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_MAGENTA_BOLD); +#endif + printf(" Website : https://eq2emu.com \n"); + printf(" Wiki : http://eq2emu.com:3001/ \n"); + printf(" Git : http://git.eq2emu.com \n"); + printf(" Discord : https://discord.gg/j92Ay9H \n\n"); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); +#endif + printf("For more detailed logging, modify 'Level' param the log_config.xml file.\n\n"); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE); +#endif + + fflush(stdout); +} diff --git a/EQ2/source/LoginServer/net.h b/EQ2/source/LoginServer/net.h index 5eaab9221..ee9e0638d 100644 --- a/EQ2/source/LoginServer/net.h +++ b/EQ2/source/LoginServer/net.h @@ -60,6 +60,7 @@ public: bool IsAllowingAccountCreation() { return allowAccountCreation; } + void WelcomeHeader(); protected: friend class LWorld; bool Uplink_WrongVersion; diff --git a/EQ2/source/WorldServer/net.cpp b/EQ2/source/WorldServer/net.cpp index 531a8b631..fc32a95bc 100644 --- a/EQ2/source/WorldServer/net.cpp +++ b/EQ2/source/WorldServer/net.cpp @@ -129,7 +129,7 @@ int main(int argc, char** argv) { LogStart(); LogParseConfigs(); - WelcomeHeader(); + net.WelcomeHeader(); LogWrite(INIT__INFO, 0, "Init", "Starting EQ2Emulator WorldServer..."); //int32 server_startup = time(NULL); @@ -963,17 +963,17 @@ void ZoneAuth::RemoveAuth(ZoneAuthRequest *zar) { } } -void WelcomeHeader() +void NetConnection::WelcomeHeader() { - #ifdef _WIN32 - HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); - SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); - #endif +#ifdef _WIN32 + HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); +#endif printf("Module: %s, Version: %s", EQ2EMU_MODULE, CURRENT_VERSION); - #ifdef _WIN32 - SetConsoleTextAttribute(console, FOREGROUND_YELLOW_BOLD); - #endif - printf("\n\nCopyright (C) 2007-2011 EQ2Emulator. http://eq2emulator.net/ \n\n"); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_YELLOW_BOLD); +#endif + printf("\n\nCopyright (C) 2007-2020 EQ2Emulator. https://www.eq2emu.com \n\n"); printf("EQ2Emulator is free software: you can redistribute it and/or modify\n"); printf("it under the terms of the GNU General Public License as published by\n"); printf("the Free Software Foundation, either version 3 of the License, or\n"); @@ -982,9 +982,9 @@ void WelcomeHeader() printf("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); printf("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); printf("GNU General Public License for more details.\n\n"); - #ifdef _WIN32 - SetConsoleTextAttribute(console, FOREGROUND_GREEN_BOLD); - #endif +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_GREEN_BOLD); +#endif printf(" /$$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$$ \n"); printf("| $$_____/ /$$__ $$ /$$__ $$| $$_____/ \n"); printf("| $$ | $$ \\ $$|__/ \\ $$| $$ /$$$$$$/$$$$ /$$ /$$\n"); @@ -994,20 +994,20 @@ void WelcomeHeader() printf("| $$$$$$$$| $$$$$$/| $$$$$$$$| $$$$$$$$| $$ | $$ | $$| $$$$$$/\n"); printf("|________/ \\____ $$$|________/|________/|__/ |__/ |__/ \\______/ \n"); printf(" \\__/ \n\n"); - #ifdef _WIN32 - SetConsoleTextAttribute(console, FOREGROUND_MAGENTA_BOLD); - #endif - printf(" Website : http://eq2emulator.net \n"); - printf(" Forums : http://eq2emulator.net/phpBB3/ \n"); - printf(" Contributors: http://eq2emulator.net/wiki/index.php/Developer:Contributors \n"); - printf(" SVN : http://svn.eq2emulator.net/svn/eq2server \n\n"); - #ifdef _WIN32 - SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); - #endif +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_MAGENTA_BOLD); +#endif + printf(" Website : https://eq2emu.com \n"); + printf(" Wiki : http://eq2emu.com:3001/ \n"); + printf(" Git : http://git.eq2emu.com \n"); + printf(" Discord : https://discord.gg/j92Ay9H \n\n"); +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); +#endif printf("For more detailed logging, modify 'Level' param the log_config.xml file.\n\n"); - #ifdef _WIN32 - SetConsoleTextAttribute(console, FOREGROUND_WHITE); - #endif +#ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE); +#endif fflush(stdout); } diff --git a/EQ2/source/WorldServer/net.h b/EQ2/source/WorldServer/net.h index 3feb2866a..2dbd7364d 100644 --- a/EQ2/source/WorldServer/net.h +++ b/EQ2/source/WorldServer/net.h @@ -40,7 +40,6 @@ ThreadReturnType EQ2ConsoleListener(void *tmp); void CatchSignal(int sig_num); void UpdateWindowTitle(char* iNewTitle); -void WelcomeHeader(); #define PORT 9000 #define LOGIN_PORT 9100 @@ -70,6 +69,8 @@ public: ~NetConnection() { } bool ReadLoginINI(); + void WelcomeHeader(); + bool LoginServerInfo; bool UpdateStats; char* GetLoginInfo(int16* oPort); diff --git a/EQ2/source/common/EQStreamFactory.cpp b/EQ2/source/common/EQStreamFactory.cpp index 8b34e475f..245ac05d9 100644 --- a/EQ2/source/common/EQStreamFactory.cpp +++ b/EQ2/source/common/EQStreamFactory.cpp @@ -132,8 +132,13 @@ struct sockaddr_in address; fcntl(sock, F_SETFL, O_NONBLOCK); #endif //moved these because on windows the output was delayed and causing the console window to look bad - LogWrite(WORLD__DEBUG, 0, "World", "Starting factory Reader"); - LogWrite(WORLD__DEBUG, 0, "World", "Starting factory Writer"); +#ifdef LOGIN + LogWrite(LOGIN__DEBUG, 0, "Login", "Starting factory Reader"); + LogWrite(LOGIN__DEBUG, 0, "Login", "Starting factory Writer"); +#elif WORLD + LogWrite(WORLD__DEBUG, 0, "World", "Starting factory Reader"); + LogWrite(WORLD__DEBUG, 0, "World", "Starting factory Writer"); +#endif #ifdef WIN32 _beginthread(EQStreamFactoryReaderLoop,0, this); _beginthread(EQStreamFactoryWriterLoop,0, this); @@ -297,7 +302,12 @@ void EQStreamFactory::CheckTimeout(bool remove_all) //give it a little time for everybody to finish with it } else { //everybody is done, we can delete it now + +#ifdef LOGIN + LogWrite(LOGIN__DEBUG, 0, "Login", "Removing connection..."); +#else LogWrite(WORLD__DEBUG, 0, "World", "Removing connection..."); +#endif map::iterator temp=stream_itr; stream_itr++; //let whoever has the stream outside delete it diff --git a/EQ2/source/common/version.h b/EQ2/source/common/version.h index 83c50eb99..9ff45ee78 100644 --- a/EQ2/source/common/version.h +++ b/EQ2/source/common/version.h @@ -18,6 +18,8 @@ along with EQ2Emulator. If not, see . */ +#include "LogTypes.h" + #ifndef VERSION_H #define VERSION_H @@ -36,9 +38,9 @@ #endif #if defined(LOGIN) -#define CURRENT_VERSION "0.8.1-gemini2" +#define CURRENT_VERSION "0.8.1-cancer1" #elif defined(WORLD) -#define CURRENT_VERSION "0.8.1-gemini2" +#define CURRENT_VERSION "0.8.1-cancer1" #else #define CURRENT_VERSION "0.7.3-dev" #endif @@ -51,5 +53,4 @@ #define LAST_MODIFIED __TIMESTAMP__ #endif -#endif - +#endif \ No newline at end of file