UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
HttpIoDispatcher.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8#include "IO/IoBuffer.h"
9#include "IO/IoHash.h"
10#include "IO/IoOffsetLength.h"
11#include "IO/IoStatus.h"
12#include "Misc/EnumClassFlags.h"
13#include "Templates/Function.h"
15
16#define UE_API IOSTOREONDEMANDCORE_API
17
19
20namespace UE
21{
22
25
27enum class EIoHttpFlags
28{
30 None = 0,
32 ReadCache = (1 << 0),
34 ResponseHeaders = (1 << 1),
37};
39
42{
43 FIoHttpRange() = default;
44 explicit inline FIoHttpRange(uint32 InMin, uint32 InMax);
45
46 bool IsValid() const { return Min <= Max; }
47 uint32 GetMin() const { return Min; }
48 uint32 GetMax() const { return Max; }
49 uint32 GetSize() const { return (Max - Min); }
50 inline FIoHttpRange& Expand(const FIoHttpRange& Other);
51
53 static inline FIoHttpRange FromOffsetAndLength(const FIoOffsetAndLength& OffsetAndLength);
54
55 bool operator==(const FIoHttpRange& Other) { return Min == Other.Min && Max == Other.Max; }
56 bool operator!=(const FIoHttpRange& Other) { return Min != Other.Min || Max != Other.Max; }
59
60private:
61 uint32 Min = MAX_uint32;
62 uint32 Max = MIN_uint32;
63};
64
70
72{
73 if (IsValid())
74 {
75 Min = FMath::Min(Min, Other.Min);
76 Max = FMath::Max(Max, Other.Max);
77 }
78 else
79 {
80 Min = Other.Min;
81 Max = Other.Max;
82 }
83
84 return *this;
85}
86
91
93{
94 const uint64 End = OffsetAndLength.GetOffset() + OffsetAndLength.GetLength();
95
96 if (OffsetAndLength.GetOffset() > MAX_uint32 || End > MAX_uint32)
97 {
98 return FIoHttpRange();
99 }
100
102}
103
106{
107public:
111 inline explicit FIoHttpOptions(int32 InPriority);
112 FIoHttpOptions() = default;
113
114 const FIoHttpRange& GetRange() const { return Range; }
115 int32 GetPriority() const { return Priority; }
116 int32 GetRetryCount() const { return RetryCount; }
117 EIoHttpFlags GetFlags() const { return Flags; }
118 uint8 GetCategory() const { return Category; }
119
120 void SetRange(const FIoHttpRange InRange) { Range = InRange; }
124
126
127private:
128 FIoHttpRange Range;
129 int32 Priority = 0;
130 int32 RetryCount = 0;
132 uint8 Category = 0;
133};
134
136 : Range(InRange)
138 , RetryCount(InRetryCount)
139 , Flags(InFlags)
140{
141}
142
149
155
160
163{
164public:
165 FIoHttpHeaders() = default;
171 UE_API FAnsiStringView Get(const FAnsiString& Key) const;
173 TConstArrayView<FAnsiString> ToArrayView() const { return Headers; }
174
178
179 FIoHttpHeaders& operator=(const FIoHttpHeaders& Other) { Headers = Other.Headers; return *this; }
180 FIoHttpHeaders& operator=(FIoHttpHeaders&& Other) { Headers = MoveTemp(Other.Headers); return *this; }
181
182private:
184 : Headers(MoveTemp(InHeaders))
185 { }
186 //TODO: Make this better
187 TArray<FAnsiString> Headers;
188};
189
192{
193public:
195
196 FIoRelativeUrl() = default;
197 bool IsEmpty() const { return Url.IsEmpty(); }
198 int32 Len() const { return Url.Len(); }
199 const ANSICHAR* ToString() const { return *Url; }
200 FAnsiStringView GetView() const { return FAnsiStringView(*Url, Url.Len()); }
201
202 const ANSICHAR* operator*() const { return *Url; }
203 friend inline bool operator==(const FIoRelativeUrl& Lhs, const FIoRelativeUrl& Rhs) { return Lhs.Url == Rhs.Url; }
204 friend inline bool operator!=(const FIoRelativeUrl& Lhs, const FIoRelativeUrl& Rhs) { return Lhs.Url != Rhs.Url; }
205 friend inline bool operator<(const FIoRelativeUrl& Lhs, const FIoRelativeUrl& Rhs) { return Lhs.Url < Rhs.Url; }
206
207 friend inline uint32 GetTypeHash(const FIoRelativeUrl& RelativeUrl) { return GetTypeHash(RelativeUrl.Url); }
209
210private:
212 : Url(InUrl) { }
213
214 TSharedString<ElementType> Url;
215};
216
223{
224public:
225 FIoHttpRequest() = default;
229 : Handle(Other.Handle) { Other.Handle = 0; }
232
233 bool IsValid() const { return Handle != 0; }
234 UE_API void Cancel();
236 UE_API EIoErrorCode Status() const;
237
240
241private:
242 void Release();
243 FIoHttpRequestHandle Handle = 0;
244};
245
248{
250 None = 0,
252 Cached = (1 << 0),
253};
255
258{
259public:
260 FIoHttpResponse() = default;
266
267 const FIoHttpHeaders& GetHeaders() const { return Headers; }
268 const FIoBuffer& GetBody() const { return Body; }
269 const FIoHash& GetCacheKey() const { return CacheKey; }
270 EIoErrorCode GetErrorCode() const { return ErrorCode; }
271 uint32 GetStatusCode() const { return StatusCode; }
272 EIoHttpResponseFlags GetFlags() const { return Flags; }
273 bool IsOk() const { return ErrorCode == EIoErrorCode::Ok && StatusCode > 199 && StatusCode < 300; }
274 bool IsCancelled() const { return ErrorCode == EIoErrorCode::Cancelled; }
275 bool IsCached() const { return EnumHasAnyFlags(Flags, EIoHttpResponseFlags::Cached); }
276
277private:
278 FIoHash CacheKey;
279 FIoHttpHeaders Headers;
280 FIoBuffer Body;
281 EIoErrorCode ErrorCode;
282 uint32 StatusCode = 0;
284};
285
294
304
307
310{
311public:
312 FIoHttpBatch(const FIoHttpRequest&) = delete;
314 : First(Other.First), Last(Other.Last)
315 {
316 Other.First = 0;
317 Other.Last = 0;
318 }
319
321
322 UE_API FIoHttpRequest Get(const FName& HostGroup,
323 const FIoRelativeUrl& RelativeUrl,
324 FIoHttpHeaders&& Headers,
325 const FIoHttpOptions& Options,
326 const FIoHash& ChunkHash,
327 FIoHttpRequestCompleted&& OnCompleted);
328 UE_API FIoHttpRequest Get(const FName& HostGroup,
329 const FIoRelativeUrl& RelativeUrl,
330 FIoHttpHeaders&& Headers,
331 const FIoHttpOptions& Options,
332 FIoHttpRequestCompleted&& OnCompleted);
333 UE_API FIoHttpRequest Get(const FName& HostGroup,
334 const FIoRelativeUrl& RelativeUrl,
335 FIoHttpHeaders&& Headers,
336 FIoHttpRequestCompleted&& OnCompleted);
337 UE_API FIoHttpRequest Get(const FName& HostGroup,
338 const FIoRelativeUrl& RelativeUrl,
339 FIoHttpRequestCompleted&& OnCompleted);
340 UE_API void Issue();
341
344
345private:
346 friend class FHttpIoDispatcher;
347 FIoHttpBatch() = default;
350};
351
354{
355public:
356 UE_API static bool IsInitialized();
358 UE_API static FIoStatus Shutdown();
359
360 UE_API static FIoStatus RegisterHostGroup(const FName& HostGroup, TConstArrayView<FAnsiString> HostNames, FAnsiStringView TestUrl);
361 UE_API static FIoStatus RegisterHostGroup(const FName& HostGroup, FAnsiStringView HostName, FAnsiStringView TestUrl);
362 UE_API static bool IsHostGroupRegistered(const FName& HostGroup);
363 UE_API static bool IsHostGroupOk(const FName& HostGroup);
364
366 UE_API static FIoHttpRequest Get(const FName& HostGroup,
367 const FIoRelativeUrl& RelativeUrl,
368 FIoHttpHeaders&& Headers,
369 const FIoHttpOptions& Options,
370 FIoHttpRequestCompleted&& OnCompleted);
371 UE_API static FIoHttpRequest Get(const FName& HostGroup,
372 const FIoRelativeUrl& RelativeUrl,
373 FIoHttpHeaders&& Headers,
374 FIoHttpRequestCompleted&& OnCompleted);
375 UE_API static FIoHttpRequest Get(const FName& HostGroup,
376 const FIoRelativeUrl& RelativeUrl,
377 FIoHttpRequestCompleted&& OnCompleted);
378
382
383 DECLARE_MULTICAST_DELEGATE_OneParam(FHostGroupRegistered, const FName&);
384 UE_API static FHostGroupRegistered& OnHostGroupRegistered();
385};
386
389{
390public:
391 using FHostGroupRegistered = FHttpIoDispatcher::FHostGroupRegistered;
392
393 virtual ~IHttpIoDispatcher() = default;
394 virtual void Shutdown() = 0;
395
396 virtual FIoStatus RegisterHostGroup(const FName& HostGroup, TConstArrayView<FAnsiString> HostNames, FAnsiStringView TestUrl) = 0;
397 virtual bool IsHostGroupRegistered(const FName& HostGroup) = 0;
398 virtual bool IsHostGroupOk(const FName& HostGroup) = 0;
400
404 const FName& HostGroup,
405 const FIoRelativeUrl& RelativeUrl,
406 const FIoHttpOptions& Options,
407 FIoHttpHeaders&& Headers,
408 FIoHttpRequestCompleted&& OnCompleted,
409 const FIoHash* ChunkHash = nullptr) = 0;
410 virtual void IssueRequest(FIoHttpRequestHandle RequestHandle) = 0;
415
418};
419
420} // namespace UE
421
422#undef UE_API
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UPTRINT UPTRINT
An unsigned integer the same size as a pointer.
Definition Platform.h:1146
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
auto Response
Definition ExternalRpcRegistry.cpp:598
#define UE_API
Definition HttpIoDispatcher.h:16
EIoErrorCode
Definition IoStatus.h:19
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
#define MAX_uint32
Definition NumericLimits.h:21
#define MIN_uint32
Definition NumericLimits.h:12
#define UE_API
Definition SColorGradingComponentViewer.h:12
TStringView< ANSICHAR > FAnsiStringView
Definition StringFwd.h:46
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IoBuffer.h:15
Definition IoStatus.h:60
Definition NameTypes.h:617
Definition Array.h:670
Definition SharedPointer.h:692
Definition HttpIoDispatcher.h:354
static UE_API FIoHttpRequest Get(const FName &HostGroup, const FIoRelativeUrl &RelativeUrl, FIoHttpHeaders &&Headers, const FIoHttpOptions &Options, FIoHttpRequestCompleted &&OnCompleted)
Definition HttpIoDispatcher.cpp:287
static UE_API bool IsHostGroupOk(const FName &HostGroup)
Definition HttpIoDispatcher.cpp:276
static UE_API FIoStatus EvictFromCache(const FIoHttpResponse &Response)
Definition HttpIoDispatcher.cpp:334
static UE_API FIoStatus Shutdown()
Definition HttpIoDispatcher.cpp:240
static UE_API bool IsHostGroupRegistered(const FName &HostGroup)
Definition HttpIoDispatcher.cpp:271
static UE_API FIoStatus CacheResponse(const FIoHttpResponse &Response)
Definition HttpIoDispatcher.cpp:328
DECLARE_MULTICAST_DELEGATE_OneParam(FHostGroupRegistered, const FName &)
static UE_API FIoStatus RegisterHostGroup(const FName &HostGroup, TConstArrayView< FAnsiString > HostNames, FAnsiStringView TestUrl)
Definition HttpIoDispatcher.cpp:254
static UE_API FHostGroupRegistered & OnHostGroupRegistered()
Definition HttpIoDispatcher.cpp:340
static UE_API bool IsInitialized()
Definition HttpIoDispatcher.cpp:222
static UE_API FIoHttpBatch NewBatch()
Definition HttpIoDispatcher.cpp:281
Definition HttpIoDispatcher.h:310
FIoHttpBatch & operator=(FIoHttpBatch &&Other)=delete
UE_API ~FIoHttpBatch()
Definition HttpIoDispatcher.cpp:144
FIoHttpBatch & operator=(const FIoHttpBatch &)=delete
FIoHttpBatch(const FIoHttpRequest &)=delete
UE_API FIoHttpRequest Get(const FName &HostGroup, const FIoRelativeUrl &RelativeUrl, FIoHttpHeaders &&Headers, const FIoHttpOptions &Options, const FIoHash &ChunkHash, FIoHttpRequestCompleted &&OnCompleted)
Definition HttpIoDispatcher.cpp:154
UE_API void Issue()
Definition HttpIoDispatcher.cpp:211
FIoHttpBatch(FIoHttpBatch &&Other)
Definition HttpIoDispatcher.h:313
Definition HttpIoDispatcher.h:163
FIoHttpHeaders(const FIoHttpHeaders &)=default
FIoHttpHeaders & operator=(FIoHttpHeaders &&Other)
Definition HttpIoDispatcher.h:180
TConstArrayView< FAnsiString > ToArrayView() const
Definition HttpIoDispatcher.h:173
UE_API FAnsiStringView Get(FAnsiStringView Key) const
Definition HttpIoDispatcher.cpp:31
UE_API TArray< FAnsiString > ToArray() &&
Definition HttpIoDispatcher.cpp:51
FIoHttpHeaders & operator=(const FIoHttpHeaders &Other)
Definition HttpIoDispatcher.h:179
FIoHttpHeaders(FIoHttpHeaders &&)=default
FIoHttpHeaders()=default
Definition HttpIoDispatcher.h:223
FIoHttpRequest(FIoHttpRequest &&Other)
Definition HttpIoDispatcher.h:228
FIoHttpRequest()=default
FIoHttpRequest(const FIoHttpRequest &)=delete
UE_API ~FIoHttpRequest()
Definition HttpIoDispatcher.cpp:95
FIoHttpRequest(FIoHttpRequestHandle InHandle)
Definition HttpIoDispatcher.h:226
bool IsValid() const
Definition HttpIoDispatcher.h:233
FIoHttpRequest & operator=(const FIoHttpRequest &)=delete
UE_API void UpdatePriorty(int32 NewPriority)
Definition HttpIoDispatcher.cpp:108
UE_API void Cancel()
Definition HttpIoDispatcher.cpp:100
UE_API EIoErrorCode Status() const
Definition HttpIoDispatcher.cpp:116
Definition HttpIoDispatcher.h:258
bool IsCached() const
Definition HttpIoDispatcher.h:275
EIoHttpResponseFlags GetFlags() const
Definition HttpIoDispatcher.h:272
const FIoBuffer & GetBody() const
Definition HttpIoDispatcher.h:268
FIoHttpResponse(EIoErrorCode InErrorCode, uint32 InStatusCode)
Definition HttpIoDispatcher.h:263
bool IsOk() const
Definition HttpIoDispatcher.h:273
FIoHttpResponse()=default
EIoErrorCode GetErrorCode() const
Definition HttpIoDispatcher.h:270
bool IsCancelled() const
Definition HttpIoDispatcher.h:274
const FIoHash & GetCacheKey() const
Definition HttpIoDispatcher.h:269
const FIoHttpHeaders & GetHeaders() const
Definition HttpIoDispatcher.h:267
uint32 GetStatusCode() const
Definition HttpIoDispatcher.h:271
Definition HttpIoDispatcher.h:192
friend bool operator<(const FIoRelativeUrl &Lhs, const FIoRelativeUrl &Rhs)
Definition HttpIoDispatcher.h:205
friend bool operator==(const FIoRelativeUrl &Lhs, const FIoRelativeUrl &Rhs)
Definition HttpIoDispatcher.h:203
friend bool operator!=(const FIoRelativeUrl &Lhs, const FIoRelativeUrl &Rhs)
Definition HttpIoDispatcher.h:204
static UE_API FIoRelativeUrl From(FAnsiStringView Url)
Definition HttpIoDispatcher.cpp:77
FAnsiStringView GetView() const
Definition HttpIoDispatcher.h:200
const ANSICHAR * ToString() const
Definition HttpIoDispatcher.h:199
int32 Len() const
Definition HttpIoDispatcher.h:198
const ANSICHAR * operator*() const
Definition HttpIoDispatcher.h:202
bool IsEmpty() const
Definition HttpIoDispatcher.h:197
friend uint32 GetTypeHash(const FIoRelativeUrl &RelativeUrl)
Definition HttpIoDispatcher.h:207
ANSICHAR ElementType
Definition HttpIoDispatcher.h:194
FIoRelativeUrl()=default
Definition HttpIoDispatcher.h:389
virtual void IssueRequest(FIoHttpRequestHandle RequestHandle)=0
virtual FHostGroupRegistered & OnHostGroupRegistered()=0
virtual void UpdateRequestPriority(FIoHttpRequestHandle Handle, int32 NewPriority)=0
virtual bool IsHostGroupOk(const FName &HostGroup)=0
virtual FIoStatus CacheResponse(const FIoHttpResponse &Response)=0
FHttpIoDispatcher::FHostGroupRegistered FHostGroupRegistered
Definition HttpIoDispatcher.h:391
virtual void Shutdown()=0
virtual void ReleaseRequest(FIoHttpRequestHandle Handle)=0
virtual bool IsHostGroupRegistered(const FName &HostGroup)=0
virtual FIoHttpRequestHandle CreateRequest(FIoHttpRequestHandle &First, FIoHttpRequestHandle &Last, const FName &HostGroup, const FIoRelativeUrl &RelativeUrl, const FIoHttpOptions &Options, FIoHttpHeaders &&Headers, FIoHttpRequestCompleted &&OnCompleted, const FIoHash *ChunkHash=nullptr)=0
virtual FIoStatus EvictFromCache(const FIoHttpResponse &Response)=0
virtual ~IHttpIoDispatcher()=default
virtual FIoStatus RegisterHostGroup(const FName &HostGroup, TConstArrayView< FAnsiString > HostNames, FAnsiStringView TestUrl)=0
virtual EIoErrorCode GetRequestStatus(FIoHttpRequestHandle Handle)=0
virtual void CancelRequest(FIoHttpRequestHandle Handle)=0
int32 Len() const
Definition SharedString.h:64
bool IsEmpty() const
Definition SharedString.h:58
Definition AdvancedWidgetsModule.cpp:13
EIoHttpFlags
Definition HttpIoDispatcher.h:28
EIoHttpResponseFlags
Definition HttpIoDispatcher.h:248
UPTRINT FIoHttpRequestHandle
Definition HttpIoDispatcher.h:24
Definition IoHash.h:33
Definition IoOffsetLength.h:12
uint64 GetOffset() const
Definition IoOffsetLength.h:21
uint64 GetLength() const
Definition IoOffsetLength.h:31
Definition HttpIoDispatcher.h:106
int32 GetRetryCount() const
Definition HttpIoDispatcher.h:116
uint8 GetCategory() const
Definition HttpIoDispatcher.h:118
void SetCategory(uint8 InCategory)
Definition HttpIoDispatcher.h:123
void SetRange(const FIoHttpRange InRange)
Definition HttpIoDispatcher.h:120
void SetRetryCount(int32 InRetryCount)
Definition HttpIoDispatcher.h:122
static UE_API const FIoHttpOptions Default
Definition HttpIoDispatcher.h:125
int32 GetPriority() const
Definition HttpIoDispatcher.h:115
void SetPriority(int32 InPriority)
Definition HttpIoDispatcher.h:121
EIoHttpFlags GetFlags() const
Definition HttpIoDispatcher.h:117
const FIoHttpRange & GetRange() const
Definition HttpIoDispatcher.h:114
FIoHttpOptions()=default
Definition HttpIoDispatcher.h:42
bool operator==(const FIoHttpRange &Other)
Definition HttpIoDispatcher.h:55
bool IsValid() const
Definition HttpIoDispatcher.h:46
FIoHttpRange & operator+(const FIoHttpRange &Other)
Definition HttpIoDispatcher.h:57
bool operator!=(const FIoHttpRange &Other)
Definition HttpIoDispatcher.h:56
FIoHttpRange & operator+=(const FIoHttpRange &Other)
Definition HttpIoDispatcher.h:58
FIoHttpRange()=default
uint32 GetSize() const
Definition HttpIoDispatcher.h:49
FIoOffsetAndLength ToOffsetAndLength() const
Definition HttpIoDispatcher.h:87
static FIoHttpRange FromOffsetAndLength(const FIoOffsetAndLength &OffsetAndLength)
Definition HttpIoDispatcher.h:92
FIoHttpRange & Expand(const FIoHttpRange &Other)
Definition HttpIoDispatcher.h:71
uint32 GetMin() const
Definition HttpIoDispatcher.h:47
uint32 GetMax() const
Definition HttpIoDispatcher.h:48