mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 10:31:29 +00:00
Add more logging
This commit is contained in:
parent
bb7cae46c5
commit
cdfd473476
@ -180,24 +180,38 @@ void Client::Handle_SessionReady(const char *data, unsigned int size)
|
||||
*/
|
||||
void Client::Handle_Login(const char *data, unsigned int size)
|
||||
{
|
||||
std::string logging_function_prefix = "[Client::Handle_Login]";
|
||||
|
||||
if (status != cs_waiting_for_login) {
|
||||
Log(Logs::General, Logs::Error, "Login received after already having logged in.");
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::Error,
|
||||
"{0} Login received after already having logged in",
|
||||
logging_function_prefix
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((size - 12) % 8 != 0) {
|
||||
Log(Logs::General,
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::Error,
|
||||
"Login received packet of size: %u, this would cause a block corruption, discarding.",
|
||||
size);
|
||||
"{0} Login received packet of size: {1}, this would cause a block corruption, discarding.",
|
||||
logging_function_prefix,
|
||||
size
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (size < sizeof(LoginLoginRequest_Struct)) {
|
||||
Log(Logs::General,
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::Error,
|
||||
"Login received packet of size: %u, this would cause a buffer overflow, discarding.",
|
||||
size);
|
||||
"{0} Login received packet of size: %u, this would cause a buffer overflow, discarding.",
|
||||
logging_function_prefix,
|
||||
size
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -224,7 +238,12 @@ void Client::Handle_Login(const char *data, unsigned int size)
|
||||
|
||||
std::string user(&outbuffer[0]);
|
||||
if (user.length() >= outbuffer.length()) {
|
||||
LogF(Logs::General, Logs::Debug, "Corrupt buffer sent to server, preventing buffer overflow.");
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::Debug,
|
||||
"{0} Corrupt buffer sent to server, preventing buffer overflow.",
|
||||
logging_function_prefix
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -245,7 +264,7 @@ void Client::Handle_Login(const char *data, unsigned int size)
|
||||
}
|
||||
else {
|
||||
if (server.options.IsPasswordLoginAllowed()) {
|
||||
cred = (&outbuffer[1 + user.length()]);
|
||||
cred = (&outbuffer[1 + user.length()]);
|
||||
auto components = SplitString(user, '.');
|
||||
if (components.size() == 2) {
|
||||
db_loginserver = components[0];
|
||||
@ -255,7 +274,8 @@ void Client::Handle_Login(const char *data, unsigned int size)
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::Login_Server,
|
||||
"Attempting password based login [{0}] login [{1}] user [{2}]",
|
||||
"{0} Attempting password based login [{1}] login [{2}] user [{3}]",
|
||||
logging_function_prefix,
|
||||
user,
|
||||
db_loginserver,
|
||||
user
|
||||
@ -265,10 +285,19 @@ void Client::Handle_Login(const char *data, unsigned int size)
|
||||
|
||||
if (server.db->GetLoginDataFromAccountInfo(user, db_loginserver, db_account_password_hash, db_account_id)) {
|
||||
result = VerifyLoginHash(user, db_loginserver, cred, db_account_password_hash);
|
||||
|
||||
LogF(
|
||||
Logs::Detail,
|
||||
Logs::Login_Server,
|
||||
"{0} [VerifyLoginHash] Success [{1}]",
|
||||
logging_function_prefix,
|
||||
(result ? "true" : "false")
|
||||
);
|
||||
}
|
||||
else {
|
||||
status = cs_creating_account;
|
||||
AttemptLoginAccountCreation(user, cred, db_loginserver);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -278,9 +307,25 @@ void Client::Handle_Login(const char *data, unsigned int size)
|
||||
* Login accepted
|
||||
*/
|
||||
if (result) {
|
||||
LogF(
|
||||
Logs::Detail, Logs::Login_Server, "{0} [{1}] login [{2}] user [{3}] Login succeeded",
|
||||
logging_function_prefix,
|
||||
user,
|
||||
db_loginserver,
|
||||
user
|
||||
);
|
||||
|
||||
DoSuccessfulLogin(user, db_account_id, db_loginserver);
|
||||
}
|
||||
else {
|
||||
LogF(
|
||||
Logs::Detail, Logs::Login_Server, "{0} [{1}] login [{2}] user [{3}] Login failed",
|
||||
logging_function_prefix,
|
||||
user,
|
||||
db_loginserver,
|
||||
user
|
||||
);
|
||||
|
||||
DoFailedLogin();
|
||||
}
|
||||
}
|
||||
@ -358,6 +403,11 @@ void Client::GenerateKey()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param user
|
||||
* @param pass
|
||||
* @param loginserver
|
||||
*/
|
||||
void Client::AttemptLoginAccountCreation(
|
||||
const std::string &user,
|
||||
const std::string &pass,
|
||||
@ -403,7 +453,8 @@ void Client::AttemptLoginAccountCreation(
|
||||
&Client::LoginOnNewConnection,
|
||||
this,
|
||||
std::placeholders::_1
|
||||
));
|
||||
)
|
||||
);
|
||||
login_connection_manager->OnConnectionStateChange(
|
||||
std::bind(
|
||||
&Client::LoginOnStatusChange,
|
||||
@ -411,14 +462,16 @@ void Client::AttemptLoginAccountCreation(
|
||||
std::placeholders::_1,
|
||||
std::placeholders::_2,
|
||||
std::placeholders::_3
|
||||
));
|
||||
)
|
||||
);
|
||||
login_connection_manager->OnPacketRecv(
|
||||
std::bind(
|
||||
&Client::LoginOnPacketRecv,
|
||||
this,
|
||||
std::placeholders::_1,
|
||||
std::placeholders::_2
|
||||
));
|
||||
)
|
||||
);
|
||||
|
||||
login_connection_manager->Connect(addr, port);
|
||||
}
|
||||
|
||||
@ -121,37 +121,45 @@ bool DatabaseMySQL::GetLoginDataFromAccountInfo(
|
||||
unsigned int &id
|
||||
)
|
||||
{
|
||||
if (!database) {
|
||||
auto query = fmt::format(
|
||||
"SELECT LoginServerID, AccountPassword FROM {0} WHERE AccountName = '{1}' AND AccountLoginserver = '{2}' LIMIT 1",
|
||||
server.options.GetAccountTable(),
|
||||
EscapeString(name),
|
||||
EscapeString(loginserver)
|
||||
);
|
||||
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (results.RowCount() != 1) {
|
||||
LogF(
|
||||
Logs::Detail,
|
||||
Logs::Login_Server,
|
||||
"Database::GetLoginDataFromAccountInfo could not find account for name [{0}] login [{1}]",
|
||||
name,
|
||||
loginserver
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
MYSQL_RES *res;
|
||||
MYSQL_ROW row;
|
||||
std::stringstream query(std::stringstream::in | std::stringstream::out);
|
||||
query << "SELECT LoginServerID, AccountPassword FROM " << server.options.GetAccountTable()
|
||||
<< " WHERE AccountName = '";
|
||||
query << EscapeString(name);
|
||||
query << "' AND AccountLoginserver='";
|
||||
query << EscapeString(loginserver);
|
||||
query << "'";
|
||||
|
||||
if (mysql_query(database, query.str().c_str()) != 0) {
|
||||
LogF(Logs::General, Logs::Error, "Mysql query failed: {0}", query.str());
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
res = mysql_use_result(database);
|
||||
auto row = results.begin();
|
||||
|
||||
if (res) {
|
||||
while ((row = mysql_fetch_row(res)) != nullptr) {
|
||||
id = atoi(row[0]);
|
||||
password = row[1];
|
||||
mysql_free_result(res);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
id = atoi(row[0]);
|
||||
password = row[1];
|
||||
|
||||
LogF(
|
||||
Logs::Detail,
|
||||
Logs::Login_Server,
|
||||
"Database::GetLoginDataFromAccountInfo found account for name [{0}] login [{1}]",
|
||||
name,
|
||||
loginserver
|
||||
);
|
||||
|
||||
Log(Logs::General, Logs::Error, "Mysql query returned no result: %s", query.str().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -48,11 +48,15 @@ int main()
|
||||
LogSys.LoadLogSettingsDefaults();
|
||||
|
||||
LogSys.log_settings[Logs::Error].log_to_console = Logs::General;
|
||||
LogSys.log_settings[Logs::Error].is_category_enabled = Logs::General;
|
||||
LogSys.log_settings[Logs::MySQLError].is_category_enabled = Logs::General;
|
||||
LogSys.log_settings[Logs::Error].is_category_enabled = 1;
|
||||
LogSys.log_settings[Logs::MySQLError].log_to_console = Logs::General;
|
||||
LogSys.log_settings[Logs::Netcode].is_category_enabled = Logs::General;
|
||||
LogSys.log_settings[Logs::MySQLError].is_category_enabled = 1;
|
||||
LogSys.log_settings[Logs::MySQLQuery].log_to_console = Logs::General;
|
||||
LogSys.log_settings[Logs::MySQLQuery].is_category_enabled = 1;
|
||||
LogSys.log_settings[Logs::Netcode].log_to_console = Logs::General;
|
||||
LogSys.log_settings[Logs::Netcode].is_category_enabled = Logs::General;
|
||||
|
||||
LogSys.log_settings[Logs::Login_Server].log_to_console = Logs::Detail;
|
||||
|
||||
Log(Logs::General, Logs::Login_Server, "Logging System Init.");
|
||||
|
||||
@ -182,6 +186,15 @@ int main()
|
||||
#endif
|
||||
|
||||
Log(Logs::General, Logs::Login_Server, "Server Started.");
|
||||
|
||||
if (LogSys.log_settings[Logs::Login_Server].log_to_console == 1) {
|
||||
Log(
|
||||
Logs::General,
|
||||
Logs::Login_Server,
|
||||
"Loginserver logging set to level [1] for more debugging, enable detail [3]"
|
||||
);
|
||||
}
|
||||
|
||||
while (run_server) {
|
||||
Timer::SetCurrentTime();
|
||||
server.client_manager->Process();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user