diff --git a/src/net/grunt/ClientLink.cpp b/src/net/grunt/ClientLink.cpp index 56b7bc3..e1ef2e1 100644 --- a/src/net/grunt/ClientLink.cpp +++ b/src/net/grunt/ClientLink.cpp @@ -592,6 +592,30 @@ void Grunt::ClientLink::LogonNewSession(const Grunt::ClientLink::Logon& logon) { this->Send(clientChallenge); } +void Grunt::ClientLink::LogonStoredSession(const Grunt::ClientLink::Logon& logon) { + this->SetState(STATE_AUTH_CHALLENGE); + + SStrCopy(this->m_accountName, logon.accountName, sizeof(this->m_accountName)); + SStrUpper(this->m_accountName); + + // logon.password is copy of session key from original session + memcpy(this->m_reconnectSessionKey, logon.password, sizeof(this->m_reconnectSessionKey)); + + CDataStoreCache<1024> clientChallenge; + + uint8_t opcode = CMD_AUTH_RECONNECT_CHALLENGE; + clientChallenge.Put(opcode); + + uint8_t protocol = 8; + clientChallenge.Put(protocol); + + this->PackLogon(clientChallenge, logon); + + clientChallenge.Finalize(); + + this->Send(clientChallenge); +} + void Grunt::ClientLink::PackLogon(CDataStore& msg, const Logon& logon) { uint32_t startPos = msg.Size(); uint16_t tmpSize = 0; diff --git a/src/net/grunt/ClientLink.hpp b/src/net/grunt/ClientLink.hpp index 1e52485..8f0923c 100644 --- a/src/net/grunt/ClientLink.hpp +++ b/src/net/grunt/ClientLink.hpp @@ -83,6 +83,7 @@ class Grunt::ClientLink : public WowConnectionResponse, Grunt::Pending, Grunt::T void Disconnect(); void GetRealmList(); void LogonNewSession(const Logon& logon); + void LogonStoredSession(const Logon& logon); void PackLogon(CDataStore& msg, const Logon& logon); void ProveVersion(const uint8_t* versionChecksum); void Send(CDataStore& msg); diff --git a/src/net/login/GruntLogin.cpp b/src/net/login/GruntLogin.cpp index 33f4a60..32c49b9 100644 --- a/src/net/login/GruntLogin.cpp +++ b/src/net/login/GruntLogin.cpp @@ -60,7 +60,10 @@ void GruntLogin::GetLogonMethod() { // TODO if (this->IsReconnect()) { - // TODO + logon.accountName = this->m_accountName; + logon.password = reinterpret_cast(this->m_sessionKey); + + this->m_clientLink->LogonStoredSession(logon); } else if (this->m_password) { this->m_loginResponse->UpdateLoginStatus( LOGIN_STATE_AUTHENTICATING,