aboutsummaryrefslogtreecommitdiff
path: root/src/server/bnetserver/REST/LoginHttpSession.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-04-08 19:15:16 +0200
committerShauren <shauren.trinity@gmail.com>2025-04-08 19:15:16 +0200
commite8b2be3527c7683e8bfca70ed7706fc20da566fd (patch)
tree54d5099554c8628cad719e6f1a49d387c7eced4f /src/server/bnetserver/REST/LoginHttpSession.h
parent40d80f3476ade4898be24659408e82aa4234b099 (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.h64
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