aboutsummaryrefslogtreecommitdiff
path: root/src/server/bnetserver/REST/LoginHttpSession.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-03-21 21:07:23 +0100
committerShauren <shauren.trinity@gmail.com>2024-03-21 21:07:23 +0100
commitac5aee6a98be6434e1f93bf5c973701e41a4540a (patch)
tree0cb621804e753e0afd81b5230b04a41f04220a5f /src/server/bnetserver/REST/LoginHttpSession.h
parente99482ce9bb7918e23a104fe28305c60d28ed598 (diff)
Core: Updated to 10.2.6.53840
Diffstat (limited to 'src/server/bnetserver/REST/LoginHttpSession.h')
-rw-r--r--src/server/bnetserver/REST/LoginHttpSession.h49
1 files changed, 43 insertions, 6 deletions
diff --git a/src/server/bnetserver/REST/LoginHttpSession.h b/src/server/bnetserver/REST/LoginHttpSession.h
index 2ee70d5afa5..6bd1ec113d0 100644
--- a/src/server/bnetserver/REST/LoginHttpSession.h
+++ b/src/server/bnetserver/REST/LoginHttpSession.h
@@ -18,8 +18,10 @@
#ifndef TRINITYCORE_LOGIN_HTTP_SESSION_H
#define TRINITYCORE_LOGIN_HTTP_SESSION_H
+#include "HttpSocket.h"
#include "HttpSslSocket.h"
#include "SRP6.h"
+#include <variant>
namespace Battlenet
{
@@ -28,12 +30,16 @@ struct LoginSessionState : public Trinity::Net::Http::SessionState
std::unique_ptr<Trinity::Crypto::SRP::BnetSRP6Base> Srp;
};
-class LoginHttpSession : public Trinity::Net::Http::SslSocket<LoginHttpSession>
+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>>
{
-public:
- static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID";
+ using BaseSocket = SocketImpl<LoginHttpSession<SocketImpl>>;
- explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket);
+public:
+ explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket, LoginHttpSessionWrapper& owner);
~LoginHttpSession();
void Start() override;
@@ -42,10 +48,41 @@ public:
Trinity::Net::Http::RequestHandlerResult RequestHandler(Trinity::Net::Http::RequestContext& context) override;
- LoginSessionState* GetSessionState() const { return static_cast<LoginSessionState*>(_state.get()); }
+ 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;
+ 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 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); }
+
+private:
+ std::variant<
+ std::shared_ptr<LoginHttpSession<Trinity::Net::Http::SslSocket>>,
+ std::shared_ptr<LoginHttpSession<Trinity::Net::Http::Socket>>
+ > _socket;
};
}
#endif // TRINITYCORE_LOGIN_HTTP_SESSION_H