aboutsummaryrefslogtreecommitdiff
path: root/zenhttp/httpasio.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-04-20 12:09:47 +0200
committerStefan Boberg <[email protected]>2023-04-20 12:09:47 +0200
commit74ff3745511e80ad4529620858604890f222af74 (patch)
tree2b6c836442791d84bdedd5cc0e81154d9e36159d /zenhttp/httpasio.cpp
parent#pragma once added to some headers (diff)
parentoops: clang-format (diff)
downloadzen-74ff3745511e80ad4529620858604890f222af74.tar.xz
zen-74ff3745511e80ad4529620858604890f222af74.zip
Merge branch 'main' of https://github.com/EpicGames/zen
Diffstat (limited to 'zenhttp/httpasio.cpp')
-rw-r--r--zenhttp/httpasio.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/zenhttp/httpasio.cpp b/zenhttp/httpasio.cpp
index 450b5a1fc..f270c9d2b 100644
--- a/zenhttp/httpasio.cpp
+++ b/zenhttp/httpasio.cpp
@@ -7,6 +7,7 @@
#include <deque>
#include <memory>
+#include <string_view>
#include <vector>
ZEN_THIRD_PARTY_INCLUDES_START
@@ -41,6 +42,7 @@ static constinit uint32_t HashAccept = HashStringAsLowerDjb2("Accept"sv);
static constinit uint32_t HashExpect = HashStringAsLowerDjb2("Expect"sv);
static constinit uint32_t HashSession = HashStringAsLowerDjb2("UE-Session"sv);
static constinit uint32_t HashRequest = HashStringAsLowerDjb2("UE-Request"sv);
+static constinit uint32_t HashRange = HashStringAsLowerDjb2("Range"sv);
inline spdlog::logger&
InitLogger()
@@ -103,6 +105,7 @@ public:
virtual void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs) override;
virtual void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::u8string_view ResponseString) override;
virtual void WriteResponseAsync(std::function<void(HttpServerRequest&)>&& ContinuationHandler) override;
+ virtual bool TryGetRanges(HttpRanges& Ranges) override;
using HttpServerRequest::WriteResponse;
@@ -151,6 +154,8 @@ struct HttpRequest
Oid SessionId() const { return m_SessionId; }
int RequestId() const { return m_RequestId; }
+ std::string_view RangeHeader() const { return m_RangeHeaderIndex != -1 ? m_Headers[m_RangeHeaderIndex].Value : std::string_view(); }
+
private:
struct HeaderEntry
{
@@ -176,6 +181,7 @@ private:
int8_t m_ContentLengthHeaderIndex;
int8_t m_AcceptHeaderIndex;
int8_t m_ContentTypeHeaderIndex;
+ int8_t m_RangeHeaderIndex;
HttpVerb m_RequestVerb;
bool m_KeepAlive = false;
bool m_Expect100Continue = false;
@@ -740,6 +746,10 @@ HttpRequest::AppendCurrentHeader()
ZEN_INFO("Unexpected expect - Expect: {}", HeaderValue);
}
}
+ else if (HeaderHash == HashRange)
+ {
+ m_RangeHeaderIndex = (int8_t)m_Headers.size();
+ }
m_Headers.emplace_back(HeaderName, HeaderValue);
}
@@ -912,6 +922,7 @@ HttpRequest::ResetState()
m_ContentLengthHeaderIndex = -1;
m_AcceptHeaderIndex = -1;
m_ContentTypeHeaderIndex = -1;
+ m_RangeHeaderIndex = -1;
m_Expect100Continue = false;
m_BodyBuffer = {};
m_BodyPosition = 0;
@@ -1178,6 +1189,12 @@ HttpAsioServerRequest::WriteResponseAsync(std::function<void(HttpServerRequest&)
ContinuationHandler(*this);
}
+bool
+HttpAsioServerRequest::TryGetRanges(HttpRanges& Ranges)
+{
+ return TryParseHttpRangeHeader(m_Request.RangeHeader(), Ranges);
+}
+
//////////////////////////////////////////////////////////////////////////
HttpAsioServerImpl::HttpAsioServerImpl()