UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Api.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5namespace UE::IoStore::HTTP
6{
7
8// {{{1 request ................................................................
9
12{
13 if (Ptr == nullptr)
14 {
15 return;
16 }
17
19}
20
22FRequest::FRequest(FRequest&& Rhs)
23{
24 this->~FRequest();
25 Swap(Ptr, Rhs.Ptr);
26}
27
30{
31 switch (MimeType)
32 {
33 case EMimeType::Text: return Header("Accept", "text/html");
34 case EMimeType::Binary: return Header("Accept", "application/octet-stream");
35 case EMimeType::Json: return Header("Accept", "application/json");
36 case EMimeType::Xml: return Header("Accept", "application/xml");
37 case EMimeType::CbObject: return Header("Accept", "application/x-ue-cb");
38 case EMimeType::CbPackage: return Header("Accept", "application/x-ue-pkg");
39 case EMimeType::CompressedBuffer: return Header("Accept", "application/x-ue-comp");
40 }
41
42 return MoveTemp(*this);
43}
44
47{
48 return Header("Accept", MimeType);
49}
50
53{
54 Ptr->AddHeader(Key, Value);
55 return MoveTemp(*this);
56}
57
58
59
60// {{{1 response ...............................................................
61
64{
65 uint32 Code = GetStatusCode();
66 if (Code <= 199) return EStatusCodeClass::Informational;
67 if (Code <= 299) return EStatusCodeClass::Successful;
68 if (Code <= 399) return EStatusCodeClass::Redirection;
69 if (Code <= 499) return EStatusCodeClass::ClientError;
70 if (Code <= 599) return EStatusCodeClass::ServerError;
72}
73
76{
77 const auto* Activity = (const FActivity*)this;
78 return Activity->GetTransaction()->GetStatusCode();
79}
80
83{
84 const auto* Activity = (const FActivity*)this;
85 return Activity->GetTransaction()->GetStatusMessage();
86}
87
90{
91 const auto* Activity = (const FActivity*)this;
92 return Activity->GetTransaction()->GetContentLength();
93}
94
97{
100
101 if (Value == "text/html") return EMimeType::Text;
102 if (Value == "application/octet-stream") return EMimeType::Binary;
103 if (Value == "application/json") return EMimeType::Json;
104 if (Value == "application/xml") return EMimeType::Xml;
105 if (Value == "application/x-ue-cb") return EMimeType::CbObject;
106 if (Value == "application/x-ue-pkg") return EMimeType::CbPackage;
107 if (Value == "application/x-ue-comp") return EMimeType::CompressedBuffer;
108
109 return EMimeType::Unknown;
110}
111
114{
115 Out = GetHeader("Content-Type");
116
118 if (Out.FindChar(';', SemiColon))
119 {
120 Out = Out.Mid(SemiColon).TrimEnd();
121 }
122}
123
126{
127 FAnsiStringView Result;
128 ReadHeaders([&Result, Name] (FAnsiStringView Candidate, FAnsiStringView Value)
129 {
130 if (Candidate != Name)
131 {
132 return true;
133 }
134
135 Result = Value;
136 return false;
137 });
138 return Result;
139}
140
143{
144 const auto* Activity = (const FActivity*)this;
145 Activity->GetTransaction()->ReadHeaders(Sink);
146}
147
150{
151 auto* Activity = (FActivity*)this;
152 Activity->SetDestination(Buffer);
153}
154
155
156
157// {{{1 ticket-status ..........................................................
158
161{
162 const auto* Activity = (FActivity*)this;
163 switch (Activity->GetStage())
164 {
169 default: break;
170 }
171 return EId::Error;
172}
173
176{
177 const auto* Activity = (FActivity*)this;
178 return Activity->GetSinkParam();
179}
180
183{
184 const auto* Activity = (FActivityNode*)this;
185 return 1ull << Activity->Slot;
186}
187
190{
191 const auto* Activity = (FActivityNode*)this;
192 return Activity->Slot;
193}
194
197{
199 const auto* Activity = (FActivity*)this;
200 return *(FResponse*)Activity;
201}
202
205{
207 const auto* Activity = (FActivity*)this;
208 return uint32(Activity->GetTransaction()->GetContentLength());
209}
210
213{
215 const auto* Activity = (FActivity*)this;
216 return *(FTicketPerf*)Activity;
217}
218
221{
223 const auto* Activity = (FActivity*)this;
224 return Activity->GetContent();
225}
226
229{
230 check(GetId() == EId::Error);
231 const auto* Activity = (FActivity*)this;
232 FOutcome Error = Activity->GetError();
233 return { Error.GetMessage().GetData(), uint32(Error.GetErrorCode()) };
234}
235
236
237
238// {{{1 perf ...................................................................
239
240#if IAS_HTTP_WITH_PERF
241
244{
245 const auto& Activity = *(FActivity*)this;
246
247 static uint64 Freq;
248 if (Freq == 0)
249 {
251 }
252
253 auto Clamp = [] (auto Value) { return uint16(FMath::Min(uint32(Value), 0xffffu)); };
254 auto ToMs = [&] (uint64 Value) { return Clamp((Value * 1000ull) / Freq); };
255
256 const FStopwatch& Stopwatch = Activity.GetStopwatch();
257 FSample Sample = {
258 ToMs(Stopwatch.GetInterval(0)),
259 ToMs(Stopwatch.GetInterval(1)),
260 ToMs(Stopwatch.GetInterval(2)),
261 };
262
263 uint32 Bps = ~0u;
264 if (Sample.RecvMs)
265 {
266 Bps = uint32((Activity.GetTransaction()->GetContentLength() * 1000ull) / Sample.RecvMs);
267 }
268 Sample.RecvKiBps = Clamp(Bps >> 10);
269
270 return Sample;
271}
272
273#endif // IAS_HTTP_WITH_PERF
274
275
276
277// }}}
278
279} // namespace UE::IoStore::HTTP
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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::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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IoBuffer.h:15
Definition AndroidPlatformMisc.h:14
ViewType Mid(int32 Position, int32 CharCount=MAX_int32) const
Definition StringView.h:606
constexpr const CharType * GetData() const
Definition StringView.h:160
bool FindChar(CharType Search, int32 &OutIndex) const
Definition StringView.h:756
ViewType TrimEnd() const
Definition StringView.h:648
Definition Misc.inl:73
FAnsiStringView GetMessage() const
Definition Misc.inl:87
Definition Client.h:126
UE_API FRequest && Accept(EMimeType MimeType)
Definition Api.inl:29
UE_API ~FRequest()
Definition Api.inl:11
UE_API FRequest && Header(FAnsiStringView Key, FAnsiStringView Value)
Definition Api.inl:52
Definition Client.h:150
UE_API EStatusCodeClass GetStatus() const
Definition Api.inl:63
UE_API void SetDestination(FIoBuffer *Buffer)
Definition Api.inl:149
UE_API uint32 GetStatusCode() const
Definition Api.inl:75
UE_API FAnsiStringView GetStatusMessage() const
Definition Api.inl:82
UE_API void ReadHeaders(FHeaderSink Sink) const
Definition Api.inl:142
UE_API FAnsiStringView GetHeader(FAnsiStringView Name) const
Definition Api.inl:125
UE_API int64 GetContentLength() const
Definition Api.inl:89
UE_API EMimeType GetContentType() const
Definition Api.inl:96
Definition Client.h:174
UE_API FSample GetSample() const
UE_API UPTRINT GetParam() const
Definition Api.inl:175
UE_API FError GetError() const
Definition Api.inl:228
EId
Definition Client.h:197
UE_API FResponse & GetResponse() const
Definition Api.inl:196
UE_API const FTicketPerf & GetPerf() const
Definition Api.inl:212
UE_API uint32 GetIndex() const
Definition Api.inl:189
UE_API uint32 GetContentLength() const
Definition Api.inl:204
UE_API const FIoBuffer & GetContent() const
Definition Api.inl:220
UE_API FTicket GetTicket() const
Definition Api.inl:182
UE_API EId GetId() const
Definition Api.inl:160
void Sample(float *Dst, float X, float Y, float Z)
Definition FieldSystemNoiseAlgo.cpp:59
Definition Client.h:20
EMimeType
Definition Client.h:32
EStatusCodeClass
Definition Client.h:46
uint64 FTicket
Definition Client.h:57
static double GetSecondsPerCycle64()
Definition GenericPlatformTime.h:196
Definition Loop.inl:30
static void Destroy(FActivityNode *Activity)
Definition Loop.inl:156
Definition Activity.inl:64
void AddHeader(FAnsiStringView Key, FAnsiStringView Value)
Definition Activity.inl:204