UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CurlHttp.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
12
14
15#if WITH_CURL
16#if PLATFORM_MICROSOFT
18#endif
19
20#ifdef PLATFORM_CURL_INCLUDE
21 #include PLATFORM_CURL_INCLUDE
22#else
23 #include "curl/curl.h"
24#endif
25
26#if PLATFORM_MICROSOFT
28#endif
29
30#if !defined(CURL_ENABLE_DEBUG_CALLBACK)
31 #define CURL_ENABLE_DEBUG_CALLBACK 0
32#endif
33
34#if !defined(CURL_ENABLE_NO_TIMEOUTS_OPTION)
35 #define CURL_ENABLE_NO_TIMEOUTS_OPTION 0
36#endif
37
38namespace
39{
46 void* CurlMalloc(size_t Size)
47 {
48 LLM_SCOPE_BYNAME(TEXT("Networking/Curl"));
49 return FMemory::Malloc(Size);
50 }
51
57 void CurlFree(void* Ptr)
58 {
59 LLM_SCOPE_BYNAME(TEXT("Networking/Curl"));
60 FMemory::Free(Ptr);
61 }
62
70 void* CurlRealloc(void* Ptr, size_t Size)
71 {
72 void* Return = NULL;
73
74 if (Size)
75 {
76 LLM_SCOPE_BYNAME(TEXT("Networking/Curl"));
77 Return = FMemory::Realloc(Ptr, Size);
78 }
79
80 return Return;
81 }
82
89 char * CurlStrdup(const char * ZeroTerminatedString)
90 {
91 char * Copy = NULL;
94 {
95 LLM_SCOPE_BYNAME(TEXT("Networking/Curl"));
96
98 Copy = reinterpret_cast<char*>(FMemory::Malloc(StrLen + 1));
99 if (Copy)
100 {
103 }
104 }
105 return Copy;
106 }
107
115 void* CurlCalloc(size_t NumElems, size_t ElemSize)
116 {
117 void* Return = NULL;
118 const size_t Size = NumElems * ElemSize;
119 if (Size)
120 {
121 LLM_SCOPE_BYNAME(TEXT("Networking/Curl"));
122
123 Return = FMemory::Malloc(Size);
124
125 if (Return)
126 {
127 FMemory::Memzero(Return, Size);
128 }
129 }
130
131 return Return;
132 }
133}
134
139{
140public:
141
142 // implementation friends
143 friend class FCurlHttpResponse;
144
145 //~ Begin IHttpBase Interface
146 virtual FString GetHeader(const FString& HeaderName) const override;
147 virtual TArray<FString> GetAllHeaders() const override;
148 virtual FString GetContentType() const override;
149 virtual uint64 GetContentLength() const override;
150 virtual const TArray<uint8>& GetContent() const override;
151 //~ End IHttpBase Interface
152
153 //~ Begin IHttpRequest Interface
154 virtual FString GetVerb() const override;
155 virtual void SetVerb(const FString& InVerb) override;
156 virtual void SetOption(const FName Option, const FString& OptionValue) override;
157 virtual void SetContent(const TArray<uint8>& ContentPayload) override;
158 virtual void SetContent(TArray<uint8>&& ContentPayload) override;
159 virtual void SetContentAsString(const FString& ContentString) override;
160 virtual bool SetContentAsStreamedFile(const FString& Filename) override;
162 virtual void SetHeader(const FString& HeaderName, const FString& HeaderValue) override;
163 virtual void AppendToHeader(const FString& HeaderName, const FString& AdditionalHeaderValue) override;
164 virtual bool ProcessRequest() override;
165 virtual void Tick(float DeltaSeconds) override;
166 //~ End IHttpRequest Interface
167
168 //~ Begin IHttpRequestThreaded Interface
169 virtual bool StartThreadedRequest() override;
170 virtual void FinishRequest() override;
171 virtual bool IsThreadedRequestComplete() override;
172 virtual void TickThreadedRequest(float DeltaSeconds) override;
173 //~ End IHttpRequestThreaded Interface
174
181
186
192 inline CURL * GetEasyHandle() const
193 {
194 return EasyHandle;
195 }
196
206
211 {
213 }
214
219
223 virtual ~FCurlHttpRequest();
224
225protected:
231 virtual bool SetupRequest() override;
232
233private:
234
244 static size_t StaticUploadCallback(void* Ptr, size_t SizeInBlocks, size_t BlockSizeInBytes, void* UserData);
245
254 size_t UploadCallback(void* Ptr, size_t SizeInBlocks, size_t BlockSizeInBytes);
255
264 static int StaticSeekCallback(void* UserData, curl_off_t Offset, int Origin);
265
273 int SeekCallback(curl_off_t Offset, int Origin);
274
284 static size_t StaticReceiveResponseHeaderCallback(void* Ptr, size_t SizeInBlocks, size_t BlockSizeInBytes, void* UserData);
285
296 size_t ReceiveResponseHeaderCallback(void* Ptr, size_t SizeInBlocks, size_t BlockSizeInBytes);
297
307 static size_t StaticReceiveResponseBodyCallback(void* Ptr, size_t SizeInBlocks, size_t BlockSizeInBytes, void* UserData);
308
317 size_t ReceiveResponseBodyCallback(void* Ptr, size_t SizeInBlocks, size_t BlockSizeInBytes);
318
329 static size_t StaticDebugCallback(CURL * Handle, curl_infotype DebugInfoType, char * DebugInfo, size_t DebugInfoSize, void* UserData);
330
340 size_t DebugCallback(CURL * Handle, curl_infotype DebugInfoType, char * DebugInfo, size_t DebugInfoSize);
341
342 virtual void AbortRequest() override;
343
347 void CheckProgressDelegate();
348
351
353 static FString CombineHeaderKeyValue(const FString& HeaderKey, const FString& HeaderValue);
354
355 virtual void CleanupRequest() override;
356
357 void OnAnyActivityOccur(FStringView Reason);
358
359 virtual void ClearInCaseOfRetry() override;
360
361 virtual FHttpResponsePtr CreateResponse() override;
362 virtual void MockResponseData() override;
363
366
367private:
368
370 CURL * EasyHandle;
374 FString Verb;
376 std::atomic<bool> bCurlRequestCompleted;
378 bool bRedirected;
384 bool bIsRequestPayloadSeekable = false;
388 bool bAnyHttpActivity;
392 std::atomic<int64> BytesSent;
394 std::atomic<int64> TotalBytesSent;
396 std::atomic<int64> TotalBytesRead;
398 uint64 LastReportedBytesRead;
402 static const constexpr int32 NumberOfInfoMessagesToCache = 50;
409};
410
415{
416public:
417 // implementation friends
418 friend class FCurlHttpRequest;
419
420 //~ Begin IHttpBase Interface
421 virtual TArray<FString> GetAllHeaders() const override;
422 virtual FString GetContentType() const override;
423 virtual uint64 GetContentLength() const override;
424 //~ End IHttpBase Interface
425
432
433private:
435 uint64 ContentLength;
437 int32 volatile bSucceeded;
438};
439
440#endif //WITH_CURL
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define LLM_SCOPE_BYNAME(...)
Definition LowLevelMemTracker.h:1098
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition HttpRequestCommon.h:15
virtual HTTP_API void ClearInCaseOfRetry()
Definition HttpRequestCommon.cpp:195
virtual void CleanupRequest()=0
virtual bool StartThreadedRequest()=0
virtual FHttpResponsePtr CreateResponse()=0
virtual void TickThreadedRequest(float DeltaSeconds)=0
virtual bool SetupRequest()=0
virtual void MockResponseData()=0
virtual void FinishRequest()=0
virtual HTTP_API void SetOption(const FName Option, const FString &OptionValue) override
Definition HttpRequestCommon.cpp:256
virtual void AbortRequest()=0
virtual bool IsThreadedRequestComplete()=0
Definition HttpResponseCommon.h:13
Definition NameTypes.h:617
virtual FString GetContentType() const =0
virtual uint64 GetContentLength() const =0
virtual TArray< FString > GetAllHeaders() const =0
virtual const TArray< uint8 > & GetContent() const =0
virtual FString GetHeader(const FString &HeaderName) const =0
virtual void SetVerb(const FString &Verb)=0
virtual void SetContentAsString(const FString &ContentString)=0
virtual bool ProcessRequest()=0
virtual void AppendToHeader(const FString &HeaderName, const FString &AdditionalHeaderValue)=0
virtual bool SetContentFromStream(TSharedRef< FArchive, ESPMode::ThreadSafe > Stream)=0
virtual bool SetContentAsStreamedFile(const FString &Filename)=0
virtual void SetHeader(const FString &HeaderName, const FString &HeaderValue)=0
virtual void SetContent(const TArray< uint8 > &ContentPayload)=0
virtual FString GetVerb() const =0
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:153
Definition SpscQueue.h:18
@ Return
Definition KismetSystemLibrary.h:68
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT int32 Strcmp(const CharType *String1, const CharType *String2)
Definition CString.h:1018
static int32 Strlen(const CharType *String)
Definition CString.h:1047
static CharType * Strncpy(CharType *Dest, const CharType *Src, SIZE_T MaxLen)
Definition CString.h:991