diff options
Diffstat (limited to 'zenserver')
| -rw-r--r-- | zenserver/auth/authservice.cpp | 3 | ||||
| -rw-r--r-- | zenserver/diag/logging.cpp | 6 | ||||
| -rw-r--r-- | zenserver/objectstore/objectstore.cpp | 53 | ||||
| -rw-r--r-- | zenserver/xmake.lua | 4 |
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 |