Browse Source

Cleanup logging behavior

Fix #8

- the multiple 'version' handling in LS is removed, now just GetVersion() as before.
- Console commands '1' and '2' removed (would change world status to all clients).  Version command added (was missing).
- Window Title updated to note version
- Some loose log messages (printfs) were made into proper "LOGIN" messages via log_config.xml
- Previously marked "World" messages that are also used as "Login" now properly categorized as such
- Removed DumpPacket on unknown opcodes (stop unnecessary data to console)
- Welcome banners on world/login updated
Image 3 years ago
parent
commit
a9f087b40c

+ 3 - 0
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 '';

+ 16 - 25
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);

+ 0 - 2
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;

+ 64 - 9
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);
+}

+ 1 - 0
EQ2/source/LoginServer/net.h

@@ -60,6 +60,7 @@ public:
 
 	bool	IsAllowingAccountCreation() { return allowAccountCreation; }
 
+	void	WelcomeHeader();
 protected:
 	friend class LWorld;
 	bool	Uplink_WrongVersion;

+ 26 - 26
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);
 }

+ 2 - 1
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);

+ 12 - 2
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<string,EQStream *>::iterator temp=stream_itr;
 				stream_itr++;
 				//let whoever has the stream outside delete it

+ 5 - 4
EQ2/source/common/version.h

@@ -18,6 +18,8 @@
     along with EQ2Emulator.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#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