aboutsummaryrefslogtreecommitdiff
path: root/zenserver
diff options
context:
space:
mode:
Diffstat (limited to 'zenserver')
-rw-r--r--zenserver/auth/authservice.cpp3
-rw-r--r--zenserver/diag/logging.cpp6
-rw-r--r--zenserver/objectstore/objectstore.cpp53
-rw-r--r--zenserver/xmake.lua4
4 files changed, 53 insertions, 13 deletions
diff --git a/zenserver/auth/authservice.cpp b/zenserver/auth/authservice.cpp
index 761c087f4..1cc679540 100644
--- a/zenserver/auth/authservice.cpp
+++ b/zenserver/auth/authservice.cpp
@@ -1,8 +1,9 @@
// Copyright Epic Games, Inc. All Rights Reserved.
-#include <auth/authmgr.h>
#include <auth/authservice.h>
+#include <auth/authmgr.h>
+
#include <zencore/compactbinarybuilder.h>
#include <zencore/string.h>
diff --git a/zenserver/diag/logging.cpp b/zenserver/diag/logging.cpp
index 1a8b427ca..ca569c467 100644
--- a/zenserver/diag/logging.cpp
+++ b/zenserver/diag/logging.cpp
@@ -326,7 +326,6 @@ private:
memory_buf_t m_CachedDatetime;
std::string m_LogId;
};
-} // namespace logging
bool
EnableVTMode()
@@ -355,6 +354,8 @@ EnableVTMode()
return true;
}
+} // namespace logging
+
#if ZEN_USE_SENTRY
class sentry_sink final : public spdlog::sinks::base_sink<spdlog::details::null_mutex>
@@ -391,8 +392,7 @@ void
InitializeLogging(const ZenServerOptions& GlobalOptions)
{
zen::logging::InitializeLogging();
-
- EnableVTMode();
+ logging::EnableVTMode();
bool IsAsync = true;
spdlog::level::level_enum LogLevel = spdlog::level::info;
diff --git a/zenserver/objectstore/objectstore.cpp b/zenserver/objectstore/objectstore.cpp
index 950505bcb..e5739418e 100644
--- a/zenserver/objectstore/objectstore.cpp
+++ b/zenserver/objectstore/objectstore.cpp
@@ -8,6 +8,7 @@
#include <zencore/string.h>
#include "zencore/compactbinarybuilder.h"
#include "zenhttp/httpcommon.h"
+#include "zenhttp/httpserver.h"
#include <thread>
@@ -130,6 +131,13 @@ HttpObjectStoreService::GetBlob(zen::HttpRouterRequest& Request)
return Request.ServerRequest().WriteResponse(HttpResponseCode::NotFound);
}
+ zen::HttpRanges Ranges;
+ if (Request.ServerRequest().TryGetRanges(Ranges); Ranges.size() > 1)
+ {
+ // Only a single range is supported
+ return Request.ServerRequest().WriteResponse(HttpResponseCode::BadRequest);
+ }
+
FileContents File = ReadFile(FilePath);
if (File.ErrorCode)
{
@@ -144,16 +152,45 @@ HttpObjectStoreService::GetBlob(zen::HttpRouterRequest& Request)
}
const IoBuffer& FileBuf = File.Data[0];
- const uint64_t Total = TotalBytesServed.fetch_add(FileBuf.Size()) + FileBuf.Size();
- ZEN_LOG_DEBUG(LogObj,
- "GET - '{}/{}' ({}) [OK] (Total: {})",
- BucketName,
- RelativeBucketPath,
- NiceBytes(FileBuf.Size()),
- NiceBytes(Total));
+ if (Ranges.empty())
+ {
+ const uint64_t TotalServed = TotalBytesServed.fetch_add(FileBuf.Size()) + FileBuf.Size();
- Request.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kUnknownContentType, FileBuf);
+ ZEN_LOG_DEBUG(LogObj,
+ "GET - '{}/{}' ({}) [OK] (Served: {})",
+ BucketName,
+ RelativeBucketPath,
+ NiceBytes(FileBuf.Size()),
+ NiceBytes(TotalServed));
+
+ Request.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, FileBuf);
+ }
+ else
+ {
+ const auto Range = Ranges[0];
+ const uint64_t RangeSize = Range.End - Range.Start;
+ const uint64_t TotalServed = TotalBytesServed.fetch_add(RangeSize) + RangeSize;
+
+ ZEN_LOG_DEBUG(LogObj,
+ "GET - '{}/{}' (Range: {}-{}) ({}/{}) [OK] (Served: {})",
+ BucketName,
+ RelativeBucketPath,
+ Range.Start,
+ Range.End,
+ NiceBytes(RangeSize),
+ NiceBytes(FileBuf.Size()),
+ NiceBytes(TotalServed));
+
+ MemoryView RangeView = FileBuf.GetView().Mid(Range.Start, RangeSize);
+ if (RangeView.GetSize() != RangeSize)
+ {
+ return Request.ServerRequest().WriteResponse(HttpResponseCode::BadRequest);
+ }
+
+ IoBuffer RangeBuf = IoBuffer(IoBuffer::Wrap, RangeView.GetData(), RangeView.GetSize());
+ Request.ServerRequest().WriteResponse(HttpResponseCode::PartialContent, HttpContentType::kBinary, RangeBuf);
+ }
}
void
diff --git a/zenserver/xmake.lua b/zenserver/xmake.lua
index 992923d48..23bfb9535 100644
--- a/zenserver/xmake.lua
+++ b/zenserver/xmake.lua
@@ -2,9 +2,10 @@
target("zenserver")
set_kind("binary")
+ add_deps("zencore", "zenhttp", "zenstore", "zenutil")
add_headerfiles("**.h")
add_files("**.cpp")
- add_deps("zencore", "zenhttp", "zenstore", "zenutil")
+ add_files("zenserver.cpp", {unity_ignored = true })
add_includedirs(".")
set_symbols("debug")
@@ -17,6 +18,7 @@ target("zenserver")
add_ldflags("/MANIFEST:EMBED")
add_ldflags("/LTCG")
add_files("zenserver.rc")
+ add_cxxflags("/bigobj")
else
remove_files("windows/**")
end