Add more logging

This commit is contained in:
Akkadius 2019-07-03 16:01:44 -05:00
parent bb7cae46c5
commit cdfd473476
3 changed files with 112 additions and 38 deletions

View File

@ -180,24 +180,38 @@ void Client::Handle_SessionReady(const char *data, unsigned int size)
*/ */
void Client::Handle_Login(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) { 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; return;
} }
if ((size - 12) % 8 != 0) { if ((size - 12) % 8 != 0) {
Log(Logs::General, LogF(
Logs::General,
Logs::Error, Logs::Error,
"Login received packet of size: %u, this would cause a block corruption, discarding.", "{0} Login received packet of size: {1}, this would cause a block corruption, discarding.",
size); logging_function_prefix,
size
);
return; return;
} }
if (size < sizeof(LoginLoginRequest_Struct)) { if (size < sizeof(LoginLoginRequest_Struct)) {
Log(Logs::General, LogF(
Logs::General,
Logs::Error, Logs::Error,
"Login received packet of size: %u, this would cause a buffer overflow, discarding.", "{0} Login received packet of size: %u, this would cause a buffer overflow, discarding.",
size); logging_function_prefix,
size
);
return; return;
} }
@ -224,7 +238,12 @@ void Client::Handle_Login(const char *data, unsigned int size)
std::string user(&outbuffer[0]); std::string user(&outbuffer[0]);
if (user.length() >= outbuffer.length()) { 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; return;
} }
@ -245,7 +264,7 @@ void Client::Handle_Login(const char *data, unsigned int size)
} }
else { else {
if (server.options.IsPasswordLoginAllowed()) { if (server.options.IsPasswordLoginAllowed()) {
cred = (&outbuffer[1 + user.length()]); cred = (&outbuffer[1 + user.length()]);
auto components = SplitString(user, '.'); auto components = SplitString(user, '.');
if (components.size() == 2) { if (components.size() == 2) {
db_loginserver = components[0]; db_loginserver = components[0];
@ -255,7 +274,8 @@ void Client::Handle_Login(const char *data, unsigned int size)
LogF( LogF(
Logs::General, Logs::General,
Logs::Login_Server, 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, user,
db_loginserver, db_loginserver,
user 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)) { if (server.db->GetLoginDataFromAccountInfo(user, db_loginserver, db_account_password_hash, db_account_id)) {
result = VerifyLoginHash(user, db_loginserver, cred, db_account_password_hash); 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 { else {
status = cs_creating_account; status = cs_creating_account;
AttemptLoginAccountCreation(user, cred, db_loginserver); AttemptLoginAccountCreation(user, cred, db_loginserver);
return; return;
} }
} }
@ -278,9 +307,25 @@ void Client::Handle_Login(const char *data, unsigned int size)
* Login accepted * Login accepted
*/ */
if (result) { 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); DoSuccessfulLogin(user, db_account_id, db_loginserver);
} }
else { else {
LogF(
Logs::Detail, Logs::Login_Server, "{0} [{1}] login [{2}] user [{3}] Login failed",
logging_function_prefix,
user,
db_loginserver,
user
);
DoFailedLogin(); DoFailedLogin();
} }
} }
@ -358,6 +403,11 @@ void Client::GenerateKey()
} }
} }
/**
* @param user
* @param pass
* @param loginserver
*/
void Client::AttemptLoginAccountCreation( void Client::AttemptLoginAccountCreation(
const std::string &user, const std::string &user,
const std::string &pass, const std::string &pass,
@ -403,7 +453,8 @@ void Client::AttemptLoginAccountCreation(
&Client::LoginOnNewConnection, &Client::LoginOnNewConnection,
this, this,
std::placeholders::_1 std::placeholders::_1
)); )
);
login_connection_manager->OnConnectionStateChange( login_connection_manager->OnConnectionStateChange(
std::bind( std::bind(
&Client::LoginOnStatusChange, &Client::LoginOnStatusChange,
@ -411,14 +462,16 @@ void Client::AttemptLoginAccountCreation(
std::placeholders::_1, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_2,
std::placeholders::_3 std::placeholders::_3
)); )
);
login_connection_manager->OnPacketRecv( login_connection_manager->OnPacketRecv(
std::bind( std::bind(
&Client::LoginOnPacketRecv, &Client::LoginOnPacketRecv,
this, this,
std::placeholders::_1, std::placeholders::_1,
std::placeholders::_2 std::placeholders::_2
)); )
);
login_connection_manager->Connect(addr, port); login_connection_manager->Connect(addr, port);
} }

View File

@ -121,37 +121,45 @@ bool DatabaseMySQL::GetLoginDataFromAccountInfo(
unsigned int &id 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; 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() query << "SELECT LoginServerID, AccountPassword FROM " << server.options.GetAccountTable()
<< " WHERE AccountName = '"; if (!results.Success()) {
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());
return false; return false;
} }
res = mysql_use_result(database); auto row = results.begin();
if (res) { id = atoi(row[0]);
while ((row = mysql_fetch_row(res)) != nullptr) { password = row[1];
id = atoi(row[0]);
password = row[1]; LogF(
mysql_free_result(res); Logs::Detail,
return true; 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; return false;
} }

View File

@ -48,11 +48,15 @@ int main()
LogSys.LoadLogSettingsDefaults(); LogSys.LoadLogSettingsDefaults();
LogSys.log_settings[Logs::Error].log_to_console = Logs::General; LogSys.log_settings[Logs::Error].log_to_console = Logs::General;
LogSys.log_settings[Logs::Error].is_category_enabled = Logs::General; LogSys.log_settings[Logs::Error].is_category_enabled = 1;
LogSys.log_settings[Logs::MySQLError].is_category_enabled = Logs::General;
LogSys.log_settings[Logs::MySQLError].log_to_console = Logs::General; 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].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."); Log(Logs::General, Logs::Login_Server, "Logging System Init.");
@ -182,6 +186,15 @@ int main()
#endif #endif
Log(Logs::General, Logs::Login_Server, "Server Started."); 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) { while (run_server) {
Timer::SetCurrentTime(); Timer::SetCurrentTime();
server.client_manager->Process(); server.client_manager->Process();