feat(net): implement CmdAuthReconnectProof

This commit is contained in:
fallenoak 2025-09-25 19:16:01 -07:00
parent cb48aca869
commit d0f138a656
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
5 changed files with 51 additions and 2 deletions

View File

@ -369,8 +369,50 @@ int32_t Grunt::ClientLink::CmdAuthReconnectChallenge(CDataStore& msg) {
}
int32_t Grunt::ClientLink::CmdAuthReconnectProof(CDataStore& msg) {
// TODO
return 0;
if (!msg.IsValid()) {
return 0;
}
if (msg.IsRead()) {
return 0;
}
uint8_t result;
msg.Get(result);
if (!msg.IsValid()) {
return 1;
}
// Reconnect proof failure (result != 0)
if (result != 0) {
this->SetState(STATE_CONNECTED);
if (result >= 33) {
result = -1;
}
this->m_clientResponse->ReconnectResult(static_cast<Grunt::Result>(result), nullptr, 0, 0x0);
return 2;
}
// Reconnect proof success (result == 0)
uint16_t reconnectFlags = 0x0;
if (!CanRead(msg, sizeof(reconnectFlags))) {
return 0;
}
msg.Get(reconnectFlags);
this->SetState(STATE_AUTHENTICATED);
this->m_clientResponse->ReconnectResult(Grunt::GRUNT_RESULT_0, this->m_reconnectSessionKey, 40, reconnectFlags);
return 2;
}
int32_t Grunt::ClientLink::CmdRealmList(CDataStore& msg) {

View File

@ -61,6 +61,7 @@ class Grunt::ClientLink : public WowConnectionResponse, Grunt::Pending, Grunt::T
ClientResponse* m_clientResponse;
char m_accountName[1280];
char m_serverPublicKey[32];
uint8_t m_reconnectSessionKey[40];
// Virtual member functions
virtual void WCMessageReady(WowConnection *conn, uint32_t timeStamp, CDataStore* msg) {};

View File

@ -17,6 +17,7 @@ class Grunt::ClientResponse {
virtual void SetMatrixInfo(bool enabled, uint8_t width, uint8_t height, uint8_t a5, uint8_t a6, bool a7, uint8_t challengeCount, uint64_t seed, const uint8_t* sessionKey, uint32_t a11) = 0;
virtual void SetTokenInfo(bool enabled, uint8_t required) = 0;
virtual void LogonResult(Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags) = 0;
virtual void ReconnectResult(Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags) = 0;
virtual void RealmListResult(CDataStore* msg) = 0;
virtual LOGIN_STATE NextSecurityState(LOGIN_STATE state) = 0;
virtual int32_t GetServerId() = 0;

View File

@ -282,6 +282,10 @@ void GruntLogin::ProveVersion(const uint8_t* versionChecksum) {
);
}
void GruntLogin::ReconnectResult(Grunt::Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags) {
// TODO
}
void GruntLogin::SetMatrixInfo(bool enabled, uint8_t width, uint8_t height, uint8_t a5, uint8_t a6, bool a7, uint8_t challengeCount, uint64_t seed, const uint8_t* sessionKey, uint32_t a11) {
// TODO
}

View File

@ -20,6 +20,7 @@ class GruntLogin : public Login {
virtual void SetMatrixInfo(bool enabled, uint8_t width, uint8_t height, uint8_t a5, uint8_t a6, bool a7, uint8_t challengeCount, uint64_t seed, const uint8_t* sessionKey, uint32_t a11);
virtual void SetTokenInfo(bool enabled, uint8_t required);
virtual void LogonResult(Grunt::Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags);
virtual void ReconnectResult(Grunt::Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags);
virtual LOGIN_STATE NextSecurityState(LOGIN_STATE state);
virtual int32_t GetServerId();
virtual void GetRealmList();