/* * Copyright (C) 2008-2014 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * 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 __AUTHSESSION_H__ #define __AUTHSESSION_H__ #include "Common.h" #include "Socket.h" #include "BigNumber.h" #include #include using boost::asio::ip::tcp; struct AuthHandler; class ByteBuffer; class AuthSession : public Socket { public: static std::unordered_map InitHandlers(); AuthSession(tcp::socket&& socket) : Socket(std::move(socket), 1) { N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7"); g.SetDword(7); } void Start() override { AsyncReadHeader(); } using Socket::AsyncWrite; void AsyncWrite(ByteBuffer const& packet); protected: void ReadHeaderHandler(boost::system::error_code error, size_t transferedBytes) override; void ReadDataHandler(boost::system::error_code error, size_t transferedBytes) override; private: bool HandleLogonChallenge(); bool HandleLogonProof(); bool HandleReconnectChallenge(); bool HandleReconnectProof(); bool HandleRealmList(); //data transfer handle for patch bool HandleXferResume(); bool HandleXferCancel(); bool HandleXferAccept(); void SetVSFields(const std::string& rI); BigNumber N, s, g, v; BigNumber b, B; BigNumber K; BigNumber _reconnectProof; bool _isAuthenticated; std::string _tokenKey; std::string _login; std::string _localizationName; std::string _os; uint16 _build; uint8 _expversion; AccountTypes _accountSecurityLevel; }; #pragma pack(push, 1) struct AuthHandler { uint32 status; size_t packetSize; bool (AuthSession::*handler)(); }; #pragma pack(pop) #endif