diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-04-08 19:15:16 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-04-08 19:15:16 +0200 |
| commit | e8b2be3527c7683e8bfca70ed7706fc20da566fd (patch) | |
| tree | 54d5099554c8628cad719e6f1a49d387c7eced4f /src/server/bnetserver/REST/LoginHttpSession.h | |
| parent | 40d80f3476ade4898be24659408e82aa4234b099 (diff) | |
Core/Network: Socket refactors
* Devirtualize calls to Read and Update by marking concrete implementations as final
* Removed derived class template argument
* Specialize boost::asio::basic_stream_socket for boost::asio::io_context instead of type-erased any_io_executor
* Make socket initialization easier composable (before entering Read loop)
* Remove use of deprecated boost::asio::null_buffers and boost::beast::ssl_stream
Diffstat (limited to 'src/server/bnetserver/REST/LoginHttpSession.h')
| -rw-r--r-- | src/server/bnetserver/REST/LoginHttpSession.h | 64 |
1 files changed, 15 insertions, 49 deletions
diff --git a/src/server/bnetserver/REST/LoginHttpSession.h b/src/server/bnetserver/REST/LoginHttpSession.h index 6bd1ec113d0..c15442f9e0c 100644 --- a/src/server/bnetserver/REST/LoginHttpSession.h +++ b/src/server/bnetserver/REST/LoginHttpSession.h @@ -18,10 +18,8 @@ #ifndef TRINITYCORE_LOGIN_HTTP_SESSION_H #define TRINITYCORE_LOGIN_HTTP_SESSION_H -#include "HttpSocket.h" -#include "HttpSslSocket.h" +#include "BaseHttpSocket.h" #include "SRP6.h" -#include <variant> namespace Battlenet { @@ -30,59 +28,27 @@ struct LoginSessionState : public Trinity::Net::Http::SessionState std::unique_ptr<Trinity::Crypto::SRP::BnetSRP6Base> Srp; }; -class LoginHttpSessionWrapper; -std::shared_ptr<Trinity::Net::Http::SessionState> ObtainSessionState(Trinity::Net::Http::RequestContext& context, boost::asio::ip::address const& remoteAddress); - -template<template<typename> typename SocketImpl> -class LoginHttpSession : public SocketImpl<LoginHttpSession<SocketImpl>> +class LoginHttpSession : public Trinity::Net::Http::AbstractSocket, public std::enable_shared_from_this<LoginHttpSession> { - using BaseSocket = SocketImpl<LoginHttpSession<SocketImpl>>; - public: - explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket, LoginHttpSessionWrapper& owner); - ~LoginHttpSession(); - - void Start() override; + static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID="; - void CheckIpCallback(PreparedQueryResult result); + explicit LoginHttpSession(Trinity::Net::IoContextTcpSocket&& socket); - Trinity::Net::Http::RequestHandlerResult RequestHandler(Trinity::Net::Http::RequestContext& context) override; - - LoginSessionState* GetSessionState() const { return static_cast<LoginSessionState*>(this->_state.get()); } - -protected: - std::shared_ptr<Trinity::Net::Http::SessionState> ObtainSessionState(Trinity::Net::Http::RequestContext& context) const override - { - return Battlenet::ObtainSessionState(context, this->GetRemoteIpAddress()); - } - - LoginHttpSessionWrapper& _owner; -}; - -class LoginHttpSessionWrapper : public Trinity::Net::Http::AbstractSocket, public std::enable_shared_from_this<LoginHttpSessionWrapper> -{ -public: - static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID"; - - explicit LoginHttpSessionWrapper(boost::asio::ip::tcp::socket&& socket); - - void Start() { return std::visit([&](auto&& socket) { return socket->Start(); }, _socket); } - bool Update() { return std::visit([&](auto&& socket) { return socket->Update(); }, _socket); } - boost::asio::ip::address GetRemoteIpAddress() const { return std::visit([&](auto&& socket) { return socket->GetRemoteIpAddress(); }, _socket); } - bool IsOpen() const { return std::visit([&](auto&& socket) { return socket->IsOpen(); }, _socket); } - void CloseSocket() { return std::visit([&](auto&& socket) { return socket->CloseSocket(); }, _socket); } + void Start() override; + bool Update() override { return _socket->Update(); } + boost::asio::ip::address const& GetRemoteIpAddress() const override { return _socket->GetRemoteIpAddress(); } + bool IsOpen() const override { return _socket->IsOpen(); } + void CloseSocket() override { return _socket->CloseSocket(); } - void SendResponse(Trinity::Net::Http::RequestContext& context) override { return std::visit([&](auto&& socket) { return socket->SendResponse(context); }, _socket); } - void QueueQuery(QueryCallback&& queryCallback) override { return std::visit([&](auto&& socket) { return socket->QueueQuery(std::move(queryCallback)); }, _socket); } - std::string GetClientInfo() const override { return std::visit([&](auto&& socket) { return socket->GetClientInfo(); }, _socket); } - Optional<boost::uuids::uuid> GetSessionId() const override { return std::visit([&](auto&& socket) { return socket->GetSessionId(); }, _socket); } - LoginSessionState* GetSessionState() const { return std::visit([&](auto&& socket) { return socket->GetSessionState(); }, _socket); } + void SendResponse(Trinity::Net::Http::RequestContext& context) override { return _socket->SendResponse(context); } + void QueueQuery(QueryCallback&& queryCallback) override { return _socket->QueueQuery(std::move(queryCallback)); } + std::string GetClientInfo() const override { return _socket->GetClientInfo(); } + LoginSessionState* GetSessionState() const override { return static_cast<LoginSessionState*>(_socket->GetSessionState()); } private: - std::variant< - std::shared_ptr<LoginHttpSession<Trinity::Net::Http::SslSocket>>, - std::shared_ptr<LoginHttpSession<Trinity::Net::Http::Socket>> - > _socket; + std::shared_ptr<Trinity::Net::Http::AbstractSocket> _socket; }; } + #endif // TRINITYCORE_LOGIN_HTTP_SESSION_H |
