mirror of
https://github.com/mangosfour/server.git
synced 2025-12-22 13:37:08 +00:00
Fix AuthChallenge, AuthSession, AuthResponse.
New opcode handler definition method. Thanks: Lightguard, Netcho, Fabi Signed-off-by: Salja <salja2012@hotmail.de>
This commit is contained in:
parent
5424aed420
commit
67c609457f
4 changed files with 71 additions and 18 deletions
|
|
@ -133,6 +133,9 @@ void WorldSession::SendPacket(WorldPacket const* packet)
|
||||||
if (!m_Socket)
|
if (!m_Socket)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (packet->GetOpcode() >= NUM_MSG_TYPES && packet->GetOpcode() != MSG_WOW_CONNECTION)
|
||||||
|
return;
|
||||||
|
|
||||||
#ifdef MANGOS_DEBUG
|
#ifdef MANGOS_DEBUG
|
||||||
|
|
||||||
// Code for network use statistic
|
// Code for network use statistic
|
||||||
|
|
|
||||||
|
|
@ -242,19 +242,22 @@ int WorldSocket::open(void* a)
|
||||||
|
|
||||||
m_Address = remote_addr.get_host_addr();
|
m_Address = remote_addr.get_host_addr();
|
||||||
|
|
||||||
|
WorldPacket wowConnection(MSG_WOW_CONNECTION,46);
|
||||||
|
|
||||||
|
wowConnection << std::string("RLD OF WARCRAFT CONNECTION - SERVER TO CLIENT");
|
||||||
|
|
||||||
|
SendPacket(wowConnection);
|
||||||
|
|
||||||
// Send startup packet.
|
// Send startup packet.
|
||||||
WorldPacket packet (SMSG_AUTH_CHALLENGE, 37);
|
WorldPacket packet (SMSG_AUTH_CHALLENGE, 37);
|
||||||
|
|
||||||
BigNumber seed1;
|
for(uint8 i = 0; i < 8; ++i)
|
||||||
seed1.SetRand(16 * 8);
|
{
|
||||||
packet.append(seed1.AsByteArray(16), 16); // new encryption seeds
|
packet << uint32(0);
|
||||||
|
}
|
||||||
|
|
||||||
BigNumber seed2;
|
|
||||||
seed2.SetRand(16 * 8);
|
|
||||||
packet.append(seed2.AsByteArray(16), 16); // new encryption seeds
|
|
||||||
|
|
||||||
packet << uint8(1); // 1...31
|
|
||||||
packet << uint32(m_Seed);
|
packet << uint32(m_Seed);
|
||||||
|
packet << uint8(1); // 1...31
|
||||||
|
|
||||||
if (SendPacket (packet) == -1)
|
if (SendPacket (packet) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -680,6 +683,8 @@ int WorldSocket::ProcessIncoming(WorldPacket* new_pct)
|
||||||
{
|
{
|
||||||
switch (opcode)
|
switch (opcode)
|
||||||
{
|
{
|
||||||
|
case MSG_WOW_CONNECTION:
|
||||||
|
return HandleWowConnection(*new_pct);
|
||||||
case CMSG_PING:
|
case CMSG_PING:
|
||||||
return HandlePing(*new_pct);
|
return HandlePing(*new_pct);
|
||||||
case CMSG_AUTH_SESSION:
|
case CMSG_AUTH_SESSION:
|
||||||
|
|
@ -743,9 +748,8 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
|
||||||
{
|
{
|
||||||
// NOTE: ATM the socket is singlethread, have this in mind ...
|
// NOTE: ATM the socket is singlethread, have this in mind ...
|
||||||
uint8 digest[20];
|
uint8 digest[20];
|
||||||
uint32 clientSeed, id, security;
|
uint16 ClientBuild, security;
|
||||||
uint16 ClientBuild;
|
uint32 clientSeed, id, expansion, addonsSize;
|
||||||
uint8 expansion = 0;
|
|
||||||
LocaleConstant locale;
|
LocaleConstant locale;
|
||||||
std::string account;
|
std::string account;
|
||||||
Sha1Hash sha1;
|
Sha1Hash sha1;
|
||||||
|
|
@ -753,14 +757,47 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
|
||||||
WorldPacket packet;
|
WorldPacket packet;
|
||||||
|
|
||||||
// Read the content of the packet
|
// Read the content of the packet
|
||||||
recvPacket.read(digest, 20);
|
uint32 unkInt32[6];
|
||||||
recvPacket.read_skip<uint64>();
|
int8 curr = 0;
|
||||||
recvPacket.read_skip<uint32>();
|
recvPacket >> unkInt32[curr++];
|
||||||
recvPacket >> clientSeed;
|
recvPacket >> unkInt32[curr++];
|
||||||
recvPacket >> ClientBuild;
|
|
||||||
recvPacket.read_skip<uint8>();
|
recvPacket.read_skip<uint8>();
|
||||||
recvPacket >> account;
|
recvPacket >> digest[10];
|
||||||
recvPacket.read_skip<uint32>(); // addon data size
|
recvPacket >> digest[18];
|
||||||
|
recvPacket >> digest[12];
|
||||||
|
recvPacket >> digest[5];
|
||||||
|
recvPacket.read_skip<uint64>();
|
||||||
|
recvPacket >> digest[15];
|
||||||
|
recvPacket >> digest[9];
|
||||||
|
recvPacket >> digest[19];
|
||||||
|
recvPacket >> digest[4];
|
||||||
|
recvPacket >> digest[7];
|
||||||
|
recvPacket >> digest[16];
|
||||||
|
recvPacket >> digest[3];
|
||||||
|
recvPacket >> ClientBuild;
|
||||||
|
recvPacket >> digest[8];
|
||||||
|
recvPacket >> unkInt32[curr++];
|
||||||
|
recvPacket.read_skip<uint8>();
|
||||||
|
recvPacket >> digest[17];
|
||||||
|
recvPacket >> digest[6];
|
||||||
|
recvPacket >> digest[0];
|
||||||
|
recvPacket >> digest[1];
|
||||||
|
recvPacket >> digest[11];
|
||||||
|
recvPacket >> clientSeed;
|
||||||
|
recvPacket >> digest[2];
|
||||||
|
recvPacket >> unkInt32[curr++];
|
||||||
|
recvPacket >> digest[14];
|
||||||
|
recvPacket >> digest[13];
|
||||||
|
size_t _beforeAddonSize = recvPacket.rpos();
|
||||||
|
recvPacket >> addonsSize;
|
||||||
|
recvPacket.read_skip(addonsSize);
|
||||||
|
|
||||||
|
uint8 _size[2];
|
||||||
|
recvPacket >> _size[0];
|
||||||
|
recvPacket >> _size[1];
|
||||||
|
uint8 size = (_size[0] << 4) | _size[1] >> 3;
|
||||||
|
account.resize(size);
|
||||||
|
recvPacket.read((uint8*)account.data(), size);
|
||||||
|
|
||||||
DEBUG_LOG("WorldSocket::HandleAuthSession: client build %u, account %s, clientseed %X",
|
DEBUG_LOG("WorldSocket::HandleAuthSession: client build %u, account %s, clientseed %X",
|
||||||
ClientBuild,
|
ClientBuild,
|
||||||
|
|
@ -1012,3 +1049,11 @@ int WorldSocket::HandlePing(WorldPacket& recvPacket)
|
||||||
packet << ping;
|
packet << ping;
|
||||||
return SendPacket(packet);
|
return SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WorldSocket::HandleWowConnection(WorldPacket& recv_packet)
|
||||||
|
{
|
||||||
|
std::string msgFromClient;
|
||||||
|
recv_packet >> msgFromClient;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,9 @@ class WorldSocket : protected WorldHandler
|
||||||
/// Called by ProcessIncoming() on CMSG_PING.
|
/// Called by ProcessIncoming() on CMSG_PING.
|
||||||
int HandlePing(WorldPacket& recvPacket);
|
int HandlePing(WorldPacket& recvPacket);
|
||||||
|
|
||||||
|
/// Called by ProcessIncoming() on MSG_WOW_CONNECTION
|
||||||
|
int HandleWowConnection(WorldPacket& recvPacket);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Time in which the last ping was received
|
/// Time in which the last ping was received
|
||||||
ACE_Time_Value m_LastPingTime;
|
ACE_Time_Value m_LastPingTime;
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@
|
||||||
#include "Config/Config.h"
|
#include "Config/Config.h"
|
||||||
#include "Database/DatabaseEnv.h"
|
#include "Database/DatabaseEnv.h"
|
||||||
#include "WorldSocket.h"
|
#include "WorldSocket.h"
|
||||||
|
#include "Opcodes.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a helper class to WorldSocketMgr ,that manages
|
* This is a helper class to WorldSocketMgr ,that manages
|
||||||
|
|
@ -211,6 +212,7 @@ WorldSocketMgr::WorldSocketMgr():
|
||||||
m_UseNoDelay(true),
|
m_UseNoDelay(true),
|
||||||
m_Acceptor(0)
|
m_Acceptor(0)
|
||||||
{
|
{
|
||||||
|
InitializeOpcodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldSocketMgr::~WorldSocketMgr()
|
WorldSocketMgr::~WorldSocketMgr()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue