aboutsummaryrefslogtreecommitdiff
path: root/src/server/authserver/Server/BattlenetSocket.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/authserver/Server/BattlenetSocket.h')
-rw-r--r--src/server/authserver/Server/BattlenetSocket.h56
1 files changed, 55 insertions, 1 deletions
diff --git a/src/server/authserver/Server/BattlenetSocket.h b/src/server/authserver/Server/BattlenetSocket.h
index b4db6c46251..e8014e790a8 100644
--- a/src/server/authserver/Server/BattlenetSocket.h
+++ b/src/server/authserver/Server/BattlenetSocket.h
@@ -21,22 +21,48 @@
#include "RealmSocket.h"
#include "BattlenetPackets.h"
#include "BattlenetPacketCrypt.h"
+#include "BigNumber.h"
+
+class ACE_INET_Addr;
namespace Battlenet
{
struct PacketHeader;
class BitStream;
+ enum ModuleType
+ {
+ MODULE_PASSWORD,
+ MODULE_TOKEN,
+ MODULE_THUMBPRINT,
+ MODULE_SELECT_GAME_ACCOUNT,
+ MODULE_RISK_FINGERPRINT,
+
+ MODULE_COUNT
+ };
+
class Socket : public RealmSocket::Session
{
public:
+ static uint32 const SRP6_V_Size;
+ static uint32 const SRP6_S_Size;
+
Socket(RealmSocket& socket);
typedef bool(Socket::*PacketHandler)(PacketHeader& socket, BitStream& packet);
+ // Auth
bool HandleAuthChallenge(PacketHeader& header, BitStream& packet);
bool HandleAuthProofResponse(PacketHeader& header, BitStream& packet);
+ // Creep
+ bool HandlePing(PacketHeader& header, BitStream& packet);
+ bool HandleEnableEncryption(PacketHeader& header, BitStream& packet);
+
+ // WoW
+ bool HandleRealmUpdate(PacketHeader& header, BitStream& packet);
+ bool HandleRealmJoinRequest(PacketHeader& header, BitStream& packet);
+
void OnRead() override;
void OnAccept() override;
void OnClose() override;
@@ -44,12 +70,40 @@ namespace Battlenet
void Send(ServerPacket& packet);
private:
+ void _SetVSFields(std::string const& rI);
+ static ACE_INET_Addr const& GetAddressForClient(Realm const& realm, ACE_INET_Addr const& clientAddr);
+
+ typedef bool(Socket::*ModuleHandler)(BitStream* dataStream, ServerPacket** response);
+ static ModuleHandler const ModuleHandlers[MODULE_COUNT];
+
+ bool HandlePasswordModule(BitStream* dataStream, ServerPacket** response);
+ bool HandleSelectGameAccountModule(BitStream* dataStream, ServerPacket** response);
+ bool HandleRiskFingerprintModule(BitStream* dataStream, ServerPacket** response);
+ bool UnhandledModule(BitStream* dataStream, ServerPacket** response);
+
RealmSocket& _socket;
- uint32 _currentChannel;
+ uint32 _accountId;
std::string _accountName;
std::string _locale;
std::string _os;
+ uint32 _build;
+ uint32 _gameAccountId;
+ AccountTypes _accountSecurityLevel;
+
+ BigNumber N;
+ BigNumber g;
+ BigNumber k;
+
+ BigNumber I;
+ BigNumber s;
+ BigNumber v;
+
+ BigNumber b;
+ BigNumber B;
+ BigNumber K; // session key
+
+ std::queue<ModuleType> _modulesWaitingForData;
PacketCrypt _crypt;
};