From 5fe1fe899bfe55b1c27fb03a7d7e76b0b67b9cc7 Mon Sep 17 00:00:00 2001 From: Rorkh <78957156+Rorkh@users.noreply.github.com> Date: Thu, 27 Jan 2022 05:56:45 +0500 Subject: Custom 25565 port page (#5369) + Add a custom response when an HTTP request comes in to port 25565... Co-authored-by: Alexander Harkness --- src/Protocol/ProtocolRecognizer.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/Protocol/ProtocolRecognizer.cpp') diff --git a/src/Protocol/ProtocolRecognizer.cpp b/src/Protocol/ProtocolRecognizer.cpp index ba179c1bf..9062eb9b5 100644 --- a/src/Protocol/ProtocolRecognizer.cpp +++ b/src/Protocol/ProtocolRecognizer.cpp @@ -90,6 +90,11 @@ void cMultiVersionProtocol::HandleIncomingDataInRecognitionStage(cClientHandle & return; } + if (TryHandleHTTPRequest(a_Client, a_Data)) + { + return; + } + // TODO: recover from git history // Unlengthed protocol, ... @@ -238,6 +243,37 @@ void cMultiVersionProtocol::SendDisconnect(cClientHandle & a_Client, const AStri +bool cMultiVersionProtocol::TryHandleHTTPRequest(cClientHandle & a_Client, ContiguousByteBuffer & a_Data) +{ + const auto RedirectUrl = cRoot::Get()->GetServer()->GetCustomRedirectUrl(); + + if (RedirectUrl.empty()) + { + return false; + } + + ContiguousByteBuffer Buffer; + m_Buffer.ReadSome(Buffer, 10U); + m_Buffer.ResetRead(); + + // The request line, hastily decoded with the hope that it's encoded in US-ASCII. + const std::string_view Value(reinterpret_cast(Buffer.data()), Buffer.size()); + + if (Value == u8"GET / HTTP") + { + const auto Response = fmt::format(u8"HTTP/1.0 303 See Other\r\nLocation: {}\r\n\r\n", cRoot::Get()->GetServer()->GetCustomRedirectUrl()); + a_Client.SendData({ reinterpret_cast(Response.data()), Response.size() }); + a_Client.Destroy(); + return true; + } + + return false; +} + + + + + std::unique_ptr cMultiVersionProtocol::TryRecognizeLengthedProtocol(cClientHandle & a_Client) { UInt32 PacketType; -- cgit v1.2.3