From 0bcc92d90020d0c4f7d3086189cc94e4990517b1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 19 Jul 2014 17:03:32 +0200 Subject: Part 3: Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4 --- src/server/authserver/Server/BattlenetSession.h | 130 ++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/server/authserver/Server/BattlenetSession.h (limited to 'src/server/authserver/Server/BattlenetSession.h') diff --git a/src/server/authserver/Server/BattlenetSession.h b/src/server/authserver/Server/BattlenetSession.h new file mode 100644 index 00000000000..ef3e8ae9214 --- /dev/null +++ b/src/server/authserver/Server/BattlenetSession.h @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2008-2014 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _BATTLENETSOCKET_H +#define _BATTLENETSOCKET_H + +#include "BattlenetPackets.h" +#include "BattlenetPacketCrypt.h" +#include "BigNumber.h" +#include +#include + +using boost::asio::ip::tcp; + +namespace Battlenet +{ + struct PacketHeader; + class BitStream; + + enum ModuleType + { + MODULE_PASSWORD, + MODULE_TOKEN, + MODULE_THUMBPRINT, + MODULE_SELECT_GAME_ACCOUNT, + MODULE_RISK_FINGERPRINT, + MODULE_RESUME, + + MODULE_COUNT + }; + + enum class BufferSizes : uint32 + { + SRP_6_V = 0x80, + SRP_6_S = 0x20, + Read = 0x4000 + }; + + class Session : public std::enable_shared_from_this + { + public: + + explicit Session(tcp::socket&& socket); + ~Session(); + + typedef bool(Session::*PacketHandler)(PacketHeader& socket, BitStream& packet); + + // Auth + bool HandleAuthChallenge(PacketHeader& header, BitStream& packet); + bool HandleAuthReconnect(PacketHeader& header, BitStream& packet); + bool HandleAuthProofResponse(PacketHeader& header, BitStream& packet); + + // Creep + bool HandlePing(PacketHeader& header, BitStream& packet); + bool HandleEnableEncryption(PacketHeader& header, BitStream& packet); + bool HandleDisconnect(PacketHeader& header, BitStream& packet); + + // WoW + bool HandleRealmUpdateSubscribe(PacketHeader& header, BitStream& packet); + bool HandleRealmJoinRequest(PacketHeader& header, BitStream& packet); + + void Start(); + void AsyncRead(); + + void AsyncWrite(ServerPacket* packet); + + private: + void _SetVSFields(std::string const& rI); + + typedef bool(Session::*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 HandleResumeModule(BitStream* dataStream, ServerPacket** response); + bool UnhandledModule(BitStream* dataStream, ServerPacket** response); + + std::string GetRemoteAddress() const { return _socket.remote_endpoint().address().to_string(); } + uint16 GetRemotePort() const { return _socket.remote_endpoint().port(); } + + tcp::socket _socket; + uint8 _readBuffer[BufferSizes::Read]; + + uint32 _accountId; + std::string _accountName; + std::string _locale; + std::string _os; + uint32 _build; + uint32 _gameAccountId; + uint8 _gameAccountIndex; + AccountTypes _accountSecurityLevel; + + BigNumber N; + BigNumber g; + BigNumber k; + + BigNumber I; + BigNumber s; + BigNumber v; + + BigNumber b; + BigNumber B; + BigNumber K; // session key + + BigNumber _reconnectProof; + + std::queue _modulesWaitingForData; + + PacketCrypt _crypt; + bool _authed; + }; + +} + +#endif // _BATTLENETSOCKET_H -- cgit v1.2.3