diff options
Diffstat (limited to 'src/server/authserver/Server/BattlenetSocket.h')
-rw-r--r-- | src/server/authserver/Server/BattlenetSocket.h | 56 |
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; }; |