mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
Fix SMSG_AUTH_RESPONSE and addons
Signed-off-by: Yaki Khadafi <elsoldollo@gmail.com>
This commit is contained in:
parent
28d99c7f7c
commit
7899d26665
4 changed files with 68 additions and 36 deletions
|
|
@ -247,10 +247,10 @@ World::AddSession_(WorldSession* s)
|
|||
return;
|
||||
}
|
||||
|
||||
WorldPacket packet(SMSG_AUTH_RESPONSE, 16);
|
||||
WorldPacket packet(SMSG_AUTH_RESPONSE, 17);
|
||||
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(true);
|
||||
packet.WriteBit(false); // has queue
|
||||
packet.WriteBit(true); // has account info
|
||||
|
||||
packet << uint32(0); // Unknown - 4.3.2
|
||||
packet << uint8(s->Expansion()); // 0 - normal, 1 - TBC, 2 - WotLK, 3 - CT. must be set in database manually for each account
|
||||
|
|
@ -307,14 +307,14 @@ void World::AddQueuedSession(WorldSession* sess)
|
|||
// The 1st SMSG_AUTH_RESPONSE needs to contain other info too.
|
||||
WorldPacket packet (SMSG_AUTH_RESPONSE, 21);
|
||||
|
||||
packet.WriteBit(true);
|
||||
packet.WriteBit(true);
|
||||
packet.WriteBit(true); // has queue
|
||||
packet.WriteBit(false); // unk queue-related
|
||||
packet.WriteBit(true); // has account data
|
||||
|
||||
packet << uint8(0); // unk 3.3.0
|
||||
packet << uint32(0); // Unknown - 4.3.2
|
||||
packet << uint8(sess->Expansion()); // 0 - normal, 1 - TBC, 2 - WotLK, 3 - CT. must be set in database manually for each account
|
||||
packet << uint8(sess->Expansion()); // 0 - normal, 1 - TBC, 2 - WotLK, 3 - CT. must be set in database manually for each account
|
||||
packet << uint32(0); // BillingTimeRemaining
|
||||
packet << uint8(sess->Expansion()); // 0 - normal, 1 - TBC, 2 - WotLK, 3 - CT. Must be set in database manually for each account.
|
||||
packet << uint8(sess->Expansion()); // 0 - normal, 1 - TBC, 2 - WotLK, 3 - CT. Must be set in database manually for each account.
|
||||
packet << uint32(0); // BillingTimeRested
|
||||
packet << uint8(0); // BillingPlanFlags
|
||||
packet << uint8(AUTH_WAIT_QUEUE);
|
||||
|
|
|
|||
|
|
@ -613,16 +613,20 @@ void WorldSession::SendAuthWaitQue(uint32 position)
|
|||
{
|
||||
if (position == 0)
|
||||
{
|
||||
WorldPacket packet(SMSG_AUTH_RESPONSE, 1);
|
||||
packet << uint8(AUTH_OK);
|
||||
WorldPacket packet( SMSG_AUTH_RESPONSE, 2 );
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
packet << uint8( AUTH_OK );
|
||||
SendPacket(&packet);
|
||||
}
|
||||
else
|
||||
{
|
||||
WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1);
|
||||
WorldPacket packet( SMSG_AUTH_RESPONSE, 1+4+1 );
|
||||
packet.WriteBit(true); // has queue
|
||||
packet.WriteBit(false); // unk queue-related
|
||||
packet.WriteBit(false); // has account info
|
||||
packet << uint8(AUTH_WAIT_QUEUE);
|
||||
packet << uint32(position);
|
||||
packet << uint8(0); // unk 3.3.0
|
||||
SendPacket(&packet);
|
||||
}
|
||||
}
|
||||
|
|
@ -798,7 +802,7 @@ void WorldSession::SaveTutorialsData()
|
|||
m_tutorialState = TUTORIALDATA_UNCHANGED;
|
||||
}
|
||||
|
||||
void WorldSession::ReadAddonsInfo(WorldPacket& data)
|
||||
void WorldSession::ReadAddonsInfo(ByteBuffer &data)
|
||||
{
|
||||
if (data.rpos() + 4 > data.size())
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -237,7 +237,7 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
|
||||
void SizeError(WorldPacket const& packet, uint32 size) const;
|
||||
|
||||
void ReadAddonsInfo(WorldPacket& data);
|
||||
void ReadAddonsInfo(ByteBuffer &data);
|
||||
void SendAddonsInfo();
|
||||
|
||||
void SendPacket(WorldPacket const* packet);
|
||||
|
|
|
|||
|
|
@ -760,30 +760,46 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
recvPacket.read_skip<uint32>();
|
||||
recvPacket.read_skip<uint32>();
|
||||
recvPacket.read_skip<uint8>();
|
||||
recvPacket.read(digest, 4);
|
||||
recvPacket >> digest[10];
|
||||
recvPacket >> digest[18];
|
||||
recvPacket >> digest[12];
|
||||
recvPacket >> digest[5];
|
||||
recvPacket.read_skip<uint64>();
|
||||
recvPacket.read(digest, 7);
|
||||
recvPacket >> digest[15];
|
||||
recvPacket >> digest[9];
|
||||
recvPacket >> digest[19];
|
||||
recvPacket >> digest[4];
|
||||
recvPacket >> digest[7];
|
||||
recvPacket >> digest[16];
|
||||
recvPacket >> digest[3];
|
||||
recvPacket >> clientBuild;
|
||||
recvPacket.read(digest, 1);
|
||||
recvPacket >> digest[8];
|
||||
recvPacket.read_skip<uint32>();
|
||||
recvPacket.read_skip<uint8>();
|
||||
recvPacket.read(digest, 5);
|
||||
recvPacket.read_skip<uint32>();
|
||||
recvPacket.read(digest, 1);
|
||||
recvPacket >> digest[17];
|
||||
recvPacket >> digest[6];
|
||||
recvPacket >> digest[0];
|
||||
recvPacket >> digest[1];
|
||||
recvPacket >> digest[11];
|
||||
recvPacket >> clientSeed;
|
||||
recvPacket.read(digest, 2);
|
||||
recvPacket >> digest[2];
|
||||
recvPacket.read_skip<uint32>();
|
||||
recvPacket >> digest[14];
|
||||
recvPacket >> digest[13];
|
||||
|
||||
recvPacket >> m_addonSize; // addon data size
|
||||
|
||||
size_t addonInfoPos = recvPacket.rpos();
|
||||
recvPacket.rpos(recvPacket.rpos() + m_addonSize); // skip it
|
||||
ByteBuffer addonsData;
|
||||
addonsData.resize(m_addonSize);
|
||||
recvPacket.read((uint8*)addonsData.contents(), m_addonSize);
|
||||
|
||||
recvPacket.read_skip<uint8>();
|
||||
recvPacket.read_skip<uint8>();
|
||||
uint8 nameLenLow, nameLenHigh;
|
||||
recvPacket >> nameLenHigh;
|
||||
recvPacket >> nameLenLow;
|
||||
|
||||
recvPacket.FlushBits();
|
||||
uint8 accNameLen = (nameLenHigh << 5) | (nameLenLow >> 3);
|
||||
|
||||
recvPacket >> accountName;
|
||||
accountName = recvPacket.ReadString(accNameLen);
|
||||
|
||||
DEBUG_LOG("WorldSocket::HandleAuthSession: client build %u, account %s, clientseed %X",
|
||||
clientBuild,
|
||||
|
|
@ -793,7 +809,9 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
// Check the version of client trying to connect
|
||||
if(!IsAcceptableClientBuild(clientBuild))
|
||||
{
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 2);
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
packet << uint8 (AUTH_VERSION_MISMATCH);
|
||||
|
||||
SendPacket (packet);
|
||||
|
|
@ -826,7 +844,9 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
// Stop if the account is not found
|
||||
if (!result)
|
||||
{
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 2);
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
packet << uint8 (AUTH_UNKNOWN_ACCOUNT);
|
||||
|
||||
SendPacket (packet);
|
||||
|
|
@ -861,7 +881,9 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
{
|
||||
if (strcmp (fields[3].GetString (), GetRemoteAddress ().c_str ()))
|
||||
{
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 2);
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
packet << uint8 (AUTH_FAILED);
|
||||
SendPacket (packet);
|
||||
|
||||
|
|
@ -895,7 +917,9 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
|
||||
if (banresult) // if account banned
|
||||
{
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 2);
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
packet << uint8 (AUTH_BANNED);
|
||||
SendPacket (packet);
|
||||
|
||||
|
|
@ -910,7 +934,9 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
|
||||
if (allowedAccountType > SEC_PLAYER && AccountTypes(security) < allowedAccountType)
|
||||
{
|
||||
WorldPacket Packet (SMSG_AUTH_RESPONSE, 1);
|
||||
WorldPacket Packet (SMSG_AUTH_RESPONSE, 2);
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
Packet << uint8 (AUTH_UNAVAILABLE);
|
||||
|
||||
SendPacket (packet);
|
||||
|
|
@ -932,16 +958,18 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
sha.UpdateBigNumbers (&K, NULL);
|
||||
sha.Finalize ();
|
||||
|
||||
/*if (memcmp (sha.GetDigest (), digest, 20))
|
||||
if (memcmp (sha.GetDigest (), digest, 20))
|
||||
{
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 2);
|
||||
packet.WriteBit(false);
|
||||
packet.WriteBit(false);
|
||||
packet << uint8 (AUTH_FAILED);
|
||||
|
||||
SendPacket (packet);
|
||||
|
||||
sLog.outError ("WorldSocket::HandleAuthSession: Sent Auth Response (authentification failed).");
|
||||
return -1;
|
||||
}*/
|
||||
}
|
||||
|
||||
std::string address = GetRemoteAddress ();
|
||||
|
||||
|
|
@ -963,7 +991,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
|
||||
m_Session->LoadGlobalAccountData();
|
||||
m_Session->LoadTutorialsData();
|
||||
m_Session->ReadAddonsInfo(recvPacket);
|
||||
m_Session->ReadAddonsInfo(addonsData);
|
||||
|
||||
// In case needed sometime the second arg is in microseconds 1 000 000 = 1 sec
|
||||
ACE_OS::sleep (ACE_Time_Value (0, 10000));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue