UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
OnDemandHttpClient.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
9#include "IO/Http/Client.h"
10#include "IO/IoBuffer.h"
11#include "IO/IoOffsetLength.h"
12#include "IO/IoStatus.h"
14#include "Misc/EnumClassFlags.h"
15#include "Templates/Function.h"
16#include "Templates/UniquePtr.h"
17
18// When NO_LOGGING is enabled, then log categories will change type to 'FNoLoggingCategory' which does
19// not inherit from 'FLogCategoryBase' so in order to keep code compiling we need to be able to switch
20// types as well.
21#if !NO_LOGGING
22 #define UE_LOG_CATEGORY_TYPE FLogCategoryBase
23#else
24 #define UE_LOG_CATEGORY_TYPE FNoLoggingCategory
25#endif
26
27namespace UE::IoStore
28{
29
30namespace HTTP { class FTicketStatus; }
31
34
36
38inline bool IsHttpStatusOk(uint32 StatusCode)
39{
40 return StatusCode >= 200 && StatusCode < 300;
41}
42
44inline bool IsHttpServerError(uint32 StatusCode)
45{
46 return StatusCode >= 500 && StatusCode < 600;
47}
48
50{
54 Follow
55};
56
58{
62 int32 MaxRetryCount = -1; // Positive: The number of times to retry a failed request
63 // Zero: Failed requests will not be retried
64 // Negative: A failed request will retry once per provided host url
74};
75
82
106
118{
119public:
121
124
126
128
131
132 [[nodiscard]] FHttpTicketId Get(const FOnDemandHostGroup& HostGroup, FAnsiStringView RelativeUrl, FOnHttpResponse&& OnResponse);
133 [[nodiscard]] FHttpTicketId Get(const FOnDemandHostGroup& HostGroup, FAnsiStringView RelativeUrl, const FIoOffsetAndLength& ChunkRange, FOnHttpResponse&& OnResponse);
134 [[nodiscard]] FHttpTicketId Get(const FOnDemandHostGroup& HostGroup, FAnsiStringView RelativeUrl, const FIoOffsetAndLength& ChunkRange, TArray<FAnsiString>&& Headers, EMultiEndpointRequestFlags Flags, FOnHttpResponse&& OnResponse);
135
146 bool Tick()
147 {
148 return Tick(-1, 0);
149 }
150
151 void CancelRequest(FHttpTicketId TicketId);
152
153 void UpdateConnections();
154
155private:
157
158 struct FConnection
159 {
160 FOnDemandHostGroup HostGroup;
161 FHttpConnectionPools Pools;
162 int32 CurrentHost = INDEX_NONE;
163 };
164
165 struct FRequest
166 {
167 FOnHttpResponse OnResponse;
168 TArray<FAnsiString> RequestHeaders;
169 TArray<FAnsiString> ResponseHeaders;
170 FAnsiString RelativeUrl;
171 FIoOffsetAndLength Range;
172 FHttpTicketId TicketId = 0;
173 FConnection& Connection;
175 FIoBuffer Body;
180 FIoBuffer Chunk;
182 FString ResponseMessage;
183 uint64 StartTime = 0;
184 uint32 RetryCount = 0;
185 uint32 StatusCode = 0;
186 int32 Host = INDEX_NONE;
188 bool bIsChunkedTransfer = false;
189 int8 CDNCacheStatus = -1;
190
191#if DO_CHECK
193 int32 SinkCounter = 0;
194#endif // DO_CHECK
195 };
196
197 FMultiEndpointHttpClient(const FMultiEndpointHttpClientConfig& Config);
198
199 FHttpTicketId IssueRequest(FRequest&& Request);
200 void CompleteRequest(FRequest&& Request, const UE::IoStore::HTTP::FTicketStatus& TicketStatus);
201 void RetryRequest(FRequest&& Request);
202
203 void ProcessRetryAttempts(uint32 TicketCount);
204
206 FConnection& GetConnection(const FOnDemandHostGroup& HostGroup);
207 FConnection* FindConnection(const FOnDemandHostGroup& HostGroup);
208
209 uint32 GetRetryLimitForRequest(const FRequest& Request) const;
210
211 void Log(const FRequest& Request, const HTTP::FTicketStatus& TicketStatus) const;
212
213 FMultiEndpointHttpClientConfig Config;
215 HTTP::FEventLoop EventLoop;
216 TArray<FRequest> Retries;
217 struct FTicketInfo
218 {
219 HTTP::FTicket HttpTicket;
220 bool bCancelRequested = false;
221 };
222
223 UE::FRecursiveMutex TicketLookupMutex;
224 TMap<FHttpTicketId, FTicketInfo> TicketLookupMap;
225
226};
227
228} // namespace UE::IoStore
229
230#undef UE_LOG_CATEGORY_TYPE
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define UE_LOG_CATEGORY_TYPE
Definition OnDemandHttpClient.h:22
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition EventLoop.Build.cs:6
Definition IoBuffer.h:15
Definition IoStatus.h:60
Definition HTTP.Build.cs:6
Definition Array.h:670
Definition IoStatus.h:101
Definition UnrealString.h.inl:34
Definition ContainerAllocationPolicies.h:894
Definition UniquePtr.h:107
Definition RecursiveMutex.h:19
Definition OnDemandHttpClient.h:118
UE_NONCOPYABLE(FMultiEndpointHttpClient)
bool Tick()
Definition OnDemandHttpClient.h:146
TFunction< void(FMultiEndpointHttpClientResponse &&)> FOnHttpResponse
Definition OnDemandHttpClient.h:123
static TIoStatusOr< FMultiEndpointHttpClientResponse > Get(FAnsiStringView Url, const FMultiEndpointHttpClientConfig &Config)
Definition OnDemandHttpClient.cpp:182
~FMultiEndpointHttpClient()
Definition OnDemandHttpClient.cpp:171
void CancelRequest(FHttpTicketId TicketId)
Definition OnDemandHttpClient.cpp:313
uint32 FHttpTicketId
Definition OnDemandHttpClient.h:122
void UpdateConnections()
Definition OnDemandHttpClient.cpp:340
Definition OnDemandHostGroup.h:18
Definition Client.h:195
Type
Definition LogVerbosity.h:17
@ Log
Definition LogVerbosity.h:40
uint64 FTicket
Definition Client.h:57
NO_LOGGING.
Definition Client.h:20
FIoStatus LoadDefaultHttpCertificates(bool &bWasLoaded)
Definition OnDemandHttpClient.cpp:83
bool IsHttpServerError(uint32 StatusCode)
Definition OnDemandHttpClient.h:44
EHttpRedirects
Definition OnDemandHttpClient.h:50
FIoBuffer JoinIoBuffers(const FIoBuffer &LHS, const FIoBuffer &RHS)
Definition OnDemandHttpClient.cpp:44
bool IsHttpStatusOk(uint32 StatusCode)
Definition OnDemandHttpClient.h:38
EMultiEndpointRequestFlags
Definition OnDemandHttpClient.h:77
Definition IoOffsetLength.h:12
Definition OnDemandHttpClient.h:58
bool bAllowChunkedTransfer
Definition OnDemandHttpClient.h:68
int32 TimeoutMs
Definition OnDemandHttpClient.h:65
EHttpRedirects Redirects
Definition OnDemandHttpClient.h:66
bool bEnableThreadSafetyChecks
Definition OnDemandHttpClient.h:67
ELogVerbosity::Type LogVerbosity
Definition OnDemandHttpClient.h:73
int32 MaxRetryCount
Definition OnDemandHttpClient.h:62
int32 SendBufferSize
Definition OnDemandHttpClient.h:61
int32 ReceiveBufferSize
Definition OnDemandHttpClient.h:60
int32 MaxConnectionCount
Definition OnDemandHttpClient.h:59
bool bResponseBodyOnError
Definition OnDemandHttpClient.h:70
const UE_LOG_CATEGORY_TYPE * LogCategory
Definition OnDemandHttpClient.h:72
Definition OnDemandHttpClient.h:84
int32 HostIndex
Definition OnDemandHttpClient.h:102
HTTP::FTicketPerf::FSample Sample
Definition OnDemandHttpClient.h:98
bool bCanceled
Definition OnDemandHttpClient.h:103
uint32 RetryCount
Definition OnDemandHttpClient.h:101
bool IsOk() const
Definition OnDemandHttpClient.h:85
TArray< FAnsiString > Headers
Definition OnDemandHttpClient.h:96
FIoBuffer Body
Definition OnDemandHttpClient.h:95
bool IsCanceled() const
Definition OnDemandHttpClient.h:90
int8 CDNCacheStatus
Definition OnDemandHttpClient.h:104
FString Reason
Definition OnDemandHttpClient.h:97
uint32 StatusCode
Definition OnDemandHttpClient.h:100
uint64 DurationMilliseconds
Definition OnDemandHttpClient.h:99