feat(net): handle successful authentication in GruntLogin

This commit is contained in:
fallenoak 2023-02-07 12:13:17 -06:00
parent 191ce79fb3
commit 9fe2e2e8ff
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
3 changed files with 66 additions and 2 deletions

View File

@ -135,8 +135,71 @@ void GruntLogin::Logon(const char* a2, const char* a3) {
this->m_clientLink->Connect(a2);
}
void GruntLogin::LogonResult(Grunt::Result result, const uint8_t* a3, uint32_t a4, uint16_t a5) {
void GruntLogin::LogonResult(Grunt::Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags) {
// Reconnect
if (this->IsReconnect()) {
// TODO
// this->m_loginResponse->HandleRealmData(1, 0);
this->m_clientLink->Disconnect();
return;
}
// Authentication success
if (result == Grunt::GRUNT_RESULT_0 || result == Grunt::GRUNT_RESULT_14) {
// TODO
// this->uint8 = 0;
// LOBYTE(this->uint105C) = 0;
if (sessionKeyLen >= 40) {
sessionKeyLen = 40;
}
memcpy(this->m_sessionKey, sessionKey, sessionKeyLen);
this->m_loginResponse->m_loginResult = LOGIN_OK;
if (this->m_clientLink->m_surveyID == 0) {
this->m_loginResponse->m_loginState = LOGIN_STATE_AUTHENTICATED;
char stateStr[64];
SStrCopy(stateStr, Grunt::g_LoginStateStringNames[LOGIN_STATE_AUTHENTICATED], sizeof(stateStr));
char resultStr[64];
SStrCopy(resultStr, Grunt::g_LoginResultStringNames[LOGIN_OK], sizeof(resultStr));
this->m_loginResponse->LoginServerStatus(
LOGIN_STATE_AUTHENTICATED,
LOGIN_OK,
nullptr,
stateStr,
resultStr,
flags
);
} else {
this->m_loginResponse->m_loginState = LOGIN_STATE_SURVEY;
char stateStr[64];
SStrCopy(stateStr, Grunt::g_LoginStateStringNames[LOGIN_STATE_SURVEY], sizeof(stateStr));
char resultStr[64];
SStrCopy(resultStr, Grunt::g_LoginResultStringNames[LOGIN_OK], sizeof(resultStr));
this->m_loginResponse->LoginServerStatus(
LOGIN_STATE_SURVEY,
LOGIN_OK,
nullptr,
stateStr,
resultStr,
flags
);
}
return;
}
// Authentication failure
// TODO
}
LOGIN_STATE GruntLogin::NextSecurityState(LOGIN_STATE state) {

View File

@ -19,7 +19,7 @@ class GruntLogin : public Login {
virtual void SetPinInfo(bool enabled, uint32_t a3, const uint8_t* a4);
virtual void SetMatrixInfo(bool enabled, uint8_t a3, uint8_t a4, uint8_t a5, uint8_t a6, bool a7, uint8_t a8, uint64_t a9, const uint8_t* a10, uint32_t a11);
virtual void SetTokenInfo(bool enabled, uint8_t tokenRequired);
virtual void LogonResult(Grunt::Result result, const uint8_t* a3, uint32_t a4, uint16_t a5);
virtual void LogonResult(Grunt::Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags);
virtual LOGIN_STATE NextSecurityState(LOGIN_STATE state);
virtual void GetRealmList();
virtual void Logon(const char* a2, const char* a3);

View File

@ -13,6 +13,7 @@ class Login : public Grunt::ClientResponse {
char m_accountName[1280] = {};
char m_rawAccountName[1280] = {};
char* m_password = nullptr;
uint8_t m_sessionKey[40] = {};
LoginResponse* m_loginResponse = nullptr;
// Virtual member functions