aboutsummaryrefslogtreecommitdiff
path: root/zenserver/cache/structuredcache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zenserver/cache/structuredcache.cpp')
-rw-r--r--zenserver/cache/structuredcache.cpp34
1 files changed, 26 insertions, 8 deletions
diff --git a/zenserver/cache/structuredcache.cpp b/zenserver/cache/structuredcache.cpp
index 0e2462a4a..c5beef4b3 100644
--- a/zenserver/cache/structuredcache.cpp
+++ b/zenserver/cache/structuredcache.cpp
@@ -1214,7 +1214,7 @@ HttpStructuredCacheService::HandleRpcPutCacheRecords(zen::HttpServerRequest& Req
if (AcceptMagic == kCbPkgMagic)
{
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse, FormatFlags::kDefault);
Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
}
else
@@ -1316,7 +1316,9 @@ HttpStructuredCacheService::HandleRpcGetCacheRecords(zen::HttpServerRequest& Htt
ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheRecords"sv);
- uint32_t AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+ uint32_t AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+ RpcAcceptOptions AcceptFlags = static_cast<RpcAcceptOptions>(RpcRequest["AcceptFlags"sv].AsUInt16(0u));
+ bool AllowFileReferences = EnumHasAllFlags(AcceptFlags, RpcAcceptOptions::kAllowLocalReferences);
CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
@@ -1649,7 +1651,9 @@ HttpStructuredCacheService::HandleRpcGetCacheRecords(zen::HttpServerRequest& Htt
if (AcceptMagic == kCbPkgMagic)
{
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(ResponsePackage);
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(
+ ResponsePackage,
+ AllowFileReferences ? FormatFlags::kAllowLocalReferences | FormatFlags::kDenyPartialLocalReferences : FormatFlags::kDefault);
HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
}
else
@@ -1771,7 +1775,7 @@ HttpStructuredCacheService::HandleRpcPutCacheValues(zen::HttpServerRequest& Requ
if (AcceptMagic == kCbPkgMagic)
{
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse, FormatFlags::kDefault);
Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
}
else
@@ -1792,7 +1796,9 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(zen::HttpServerRequest& Http
ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheValues"sv);
- uint32_t AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+ uint32_t AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+ RpcAcceptOptions AcceptFlags = static_cast<RpcAcceptOptions>(RpcRequest["AcceptFlags"sv].AsUInt16(0u));
+ bool AllowFileReferences = EnumHasAllFlags(AcceptFlags, RpcAcceptOptions::kAllowLocalReferences);
CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
std::string_view PolicyText = Params["DefaultPolicy"sv].AsString();
@@ -1977,7 +1983,9 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(zen::HttpServerRequest& Http
if (AcceptMagic == kCbPkgMagic)
{
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(
+ RpcResponse,
+ AllowFileReferences ? FormatFlags::kAllowLocalReferences | FormatFlags::kDenyPartialLocalReferences : FormatFlags::kDefault);
HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
}
else
@@ -2043,9 +2051,11 @@ HttpStructuredCacheService::HandleRpcGetCacheChunks(zen::HttpServerRequest& Http
std::vector<ChunkRequest*> ValueRequests; // The ChunkRequests that are requesting a Value Key
std::vector<CacheChunkRequest*> UpstreamChunks; // ChunkRequests that we need to send to the upstream
uint32_t AcceptMagic = 0;
+ uint16_t AcceptFlags = 0;
// Parse requests from the CompactBinary body of the RpcRequest and divide it into RecordRequests and ValueRequests
if (!ParseGetCacheChunksRequest(AcceptMagic,
+ AcceptFlags,
Namespace,
RecordKeys,
Records,
@@ -2069,11 +2079,12 @@ HttpStructuredCacheService::HandleRpcGetCacheChunks(zen::HttpServerRequest& Http
GetUpstreamCacheChunks(Namespace, UpstreamChunks, RequestKeys, Requests);
// Send the payload and descriptive data about each chunk to the client
- WriteGetCacheChunksResponse(AcceptMagic, Namespace, Requests, HttpRequest);
+ WriteGetCacheChunksResponse(AcceptMagic, AcceptFlags, Namespace, Requests, HttpRequest);
}
bool
HttpStructuredCacheService::ParseGetCacheChunksRequest(uint32_t& AcceptMagic,
+ uint16_t& AcceptFlags,
std::string& Namespace,
std::vector<CacheKeyRequest>& RecordKeys,
std::vector<cache::detail::RecordBody>& Records,
@@ -2088,6 +2099,7 @@ HttpStructuredCacheService::ParseGetCacheChunksRequest(uint32_t& Accept
ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheChunks"sv);
AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+ AcceptFlags = RpcRequest["AcceptFlags"sv].AsUInt16(0u);
CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
std::string_view DefaultPolicyText = Params["DefaultPolicy"sv].AsString();
@@ -2440,12 +2452,16 @@ HttpStructuredCacheService::GetUpstreamCacheChunks(std::string_view Names
void
HttpStructuredCacheService::WriteGetCacheChunksResponse(uint32_t AcceptMagic,
+ uint16_t AcceptFlags,
std::string_view Namespace,
std::vector<cache::detail::ChunkRequest>& Requests,
zen::HttpServerRequest& HttpRequest)
{
using namespace cache::detail;
+ RpcAcceptOptions AcceptOptions = static_cast<RpcAcceptOptions>(AcceptFlags);
+ bool AllowFileReferences = EnumHasAllFlags(AcceptOptions, RpcAcceptOptions::kAllowLocalReferences);
+
CbPackage RpcResponse;
CbObjectWriter Writer;
@@ -2505,7 +2521,9 @@ HttpStructuredCacheService::WriteGetCacheChunksResponse(uint32_t Accept
if (AcceptMagic == kCbPkgMagic)
{
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(
+ RpcResponse,
+ AllowFileReferences ? FormatFlags::kAllowLocalReferences | FormatFlags::kDenyPartialLocalReferences : FormatFlags::kDefault);
HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
}
else